summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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/organizers-notebook/index.org4
-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.md12
-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.vtt533
-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--main--chapters.vtt47
-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--main.vtt2395
-rw-r--r--2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt966
-rw-r--r--2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt56
-rw-r--r--2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt757
-rw-r--r--2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt748
-rw-r--r--2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt20
-rw-r--r--2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt541
-rw-r--r--2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt957
-rw-r--r--2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt35
-rw-r--r--2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt1361
-rw-r--r--2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt720
-rw-r--r--2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt808
-rw-r--r--2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt725
-rw-r--r--2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt1108
-rw-r--r--2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt690
-rw-r--r--2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt23
-rw-r--r--2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt459
-rw-r--r--2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt630
-rw-r--r--2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt841
-rw-r--r--2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt346
-rw-r--r--2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt616
-rw-r--r--2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt961
-rw-r--r--2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt53
-rw-r--r--2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt1349
-rw-r--r--2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt19
-rw-r--r--2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt841
-rw-r--r--2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt996
-rw-r--r--2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt47
-rw-r--r--2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt724
-rw-r--r--2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt1887
-rw-r--r--2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt574
-rw-r--r--2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt14
-rw-r--r--2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt1413
-rw-r--r--2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt26
-rw-r--r--2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt1751
-rw-r--r--2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt1294
-rw-r--r--2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt86
-rw-r--r--2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt2046
-rw-r--r--2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt2017
-rw-r--r--2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt38
-rw-r--r--2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt970
-rw-r--r--2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt842
-rw-r--r--2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt38
-rw-r--r--2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt490
-rw-r--r--2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt873
-rw-r--r--2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt35
-rw-r--r--2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt1151
-rw-r--r--2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt2423
-rw-r--r--2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt59
-rw-r--r--2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt894
-rw-r--r--2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt1198
-rw-r--r--2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt926
-rw-r--r--2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt92
-rw-r--r--2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt1351
-rw-r--r--2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt35
-rw-r--r--2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt367
-rw-r--r--2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt26
-rw-r--r--2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt725
-rw-r--r--2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt59
-rw-r--r--2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt1653
-rw-r--r--2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt44
-rw-r--r--2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt1142
-rw-r--r--2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt846
-rw-r--r--2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt472
-rw-r--r--2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt118
-rw-r--r--2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt361
-rw-r--r--2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt405
-rw-r--r--2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt29
-rw-r--r--2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt619
-rw-r--r--2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt1032
-rw-r--r--2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt38
-rw-r--r--2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt1141
-rw-r--r--2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt26
-rw-r--r--2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt662
-rw-r--r--2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt35
-rw-r--r--2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt677
-rw-r--r--2024/draft-schedule.md72
-rw-r--r--2024/info/blee-after.md989
-rw-r--r--2024/info/blee-before.md40
-rw-r--r--2024/info/blee-nav.md6
-rw-r--r--2024/info/casual-after.md594
-rw-r--r--2024/info/casual-before.md45
-rw-r--r--2024/info/casual-nav.md6
-rw-r--r--2024/info/color-after.md444
-rw-r--r--2024/info/color-before.md30
-rw-r--r--2024/info/color-nav.md6
-rw-r--r--2024/info/emacs30-after.md790
-rw-r--r--2024/info/emacs30-before.md38
-rw-r--r--2024/info/emacs30-nav.md6
-rw-r--r--2024/info/flp-before.md11
-rw-r--r--2024/info/flp-nav.md5
-rw-r--r--2024/info/guile-after.md523
-rw-r--r--2024/info/guile-before.md25
-rw-r--r--2024/info/guile-nav.md6
-rw-r--r--2024/info/gypsum-after.md625
-rw-r--r--2024/info/gypsum-before.md26
-rw-r--r--2024/info/gypsum-nav.md6
-rw-r--r--2024/info/hyperbole-after.md398
-rw-r--r--2024/info/hyperbole-before.md31
-rw-r--r--2024/info/hyperbole-nav.md6
-rw-r--r--2024/info/hyperdrive-after.md503
-rw-r--r--2024/info/hyperdrive-before.md22
-rw-r--r--2024/info/hyperdrive-nav.md6
-rw-r--r--2024/info/hywiki-before.md13
-rw-r--r--2024/info/hywiki-nav.md5
-rw-r--r--2024/info/julia-after.md330
-rw-r--r--2024/info/julia-before.md24
-rw-r--r--2024/info/julia-nav.md6
-rw-r--r--2024/info/language-before.md11
-rw-r--r--2024/info/learning-after.md789
-rw-r--r--2024/info/learning-before.md38
-rw-r--r--2024/info/learning-nav.md6
-rw-r--r--2024/info/links-after.md287
-rw-r--r--2024/info/links-before.md20
-rw-r--r--2024/info/links-nav.md6
-rw-r--r--2024/info/literate-after.md595
-rw-r--r--2024/info/literate-before.md51
-rw-r--r--2024/info/literate-nav.md6
-rw-r--r--2024/info/maxima-after.md642
-rw-r--r--2024/info/maxima-before.md18
-rw-r--r--2024/info/maxima-nav.md7
-rw-r--r--2024/info/mcclim-after.md677
-rw-r--r--2024/info/mcclim-before.md30
-rw-r--r--2024/info/mcclim-nav.md6
-rw-r--r--2024/info/open-mic-after.md596
-rw-r--r--2024/info/open-mic-before.md22
-rw-r--r--2024/info/open-mic-nav.md7
-rw-r--r--2024/info/org-teach-before.md11
-rw-r--r--2024/info/org-teach-nav.md5
-rw-r--r--2024/info/org-update-after.md1133
-rw-r--r--2024/info/org-update-before.md57
-rw-r--r--2024/info/org-update-nav.md6
-rw-r--r--2024/info/p-search-after.md1019
-rw-r--r--2024/info/p-search-before.md56
-rw-r--r--2024/info/p-search-nav.md6
-rw-r--r--2024/info/papers-after.md462
-rw-r--r--2024/info/papers-before.md40
-rw-r--r--2024/info/papers-nav.md5
-rw-r--r--2024/info/pgmacs-after.md598
-rw-r--r--2024/info/pgmacs-before.md38
-rw-r--r--2024/info/pgmacs-nav.md6
-rw-r--r--2024/info/project-after.md1127
-rw-r--r--2024/info/project-before.md50
-rw-r--r--2024/info/project-nav.md6
-rw-r--r--2024/info/regex-after.md406
-rw-r--r--2024/info/regex-before.md12
-rw-r--r--2024/info/regex-nav.md6
-rw-r--r--2024/info/repro-before.md11
-rw-r--r--2024/info/repro-nav.md5
-rw-r--r--2024/info/rust-after.md785
-rw-r--r--2024/info/rust-before.md64
-rw-r--r--2024/info/rust-nav.md6
-rw-r--r--2024/info/sat-close-before.md10
-rw-r--r--2024/info/sat-close-nav.md6
-rw-r--r--2024/info/sat-open-after.md127
-rw-r--r--2024/info/sat-open-before.md25
-rw-r--r--2024/info/sat-open-nav.md5
-rw-r--r--2024/info/secrets-after.md249
-rw-r--r--2024/info/secrets-before.md22
-rw-r--r--2024/info/secrets-nav.md6
-rw-r--r--2024/info/sharing-after.md564
-rw-r--r--2024/info/sharing-before.md33
-rw-r--r--2024/info/sharing-nav.md6
-rw-r--r--2024/info/shell-after.md392
-rw-r--r--2024/info/shell-before.md28
-rw-r--r--2024/info/shell-nav.md6
-rw-r--r--2024/info/students-after.md450
-rw-r--r--2024/info/students-before.md28
-rw-r--r--2024/info/students-nav.md6
-rw-r--r--2024/info/sun-close-after.md44
-rw-r--r--2024/info/sun-close-before.md16
-rw-r--r--2024/info/sun-close-nav.md4
-rw-r--r--2024/info/sun-open-after.md125
-rw-r--r--2024/info/sun-open-before.md12
-rw-r--r--2024/info/sun-open-nav.md6
-rw-r--r--2024/info/theme-after.md353
-rw-r--r--2024/info/theme-before.md33
-rw-r--r--2024/info/theme-nav.md6
-rw-r--r--2024/info/transducers-after.md744
-rw-r--r--2024/info/transducers-before.md45
-rw-r--r--2024/info/transducers-nav.md6
-rw-r--r--2024/info/water-after.md228
-rw-r--r--2024/info/water-before.md22
-rw-r--r--2024/info/water-nav.md6
-rw-r--r--2024/info/writing-after.md236
-rw-r--r--2024/info/writing-before.md25
-rw-r--r--2024/info/writing-nav.md6
-rw-r--r--2024/organizers-notebook.md1062
-rw-r--r--2024/organizers-notebook/index.org1030
-rw-r--r--2024/organizers-notebook/schedule-1.5-tracks.svg2
-rw-r--r--2024/prepare.md20
-rw-r--r--2024/report.md199
-rw-r--r--2024/report.org237
-rw-r--r--2024/schedule-details.md91
-rw-r--r--2024/schedule-image.md2
-rw-r--r--2024/speakers.md131
-rw-r--r--2024/talks.md8
-rw-r--r--2024/talks/blee.md165
-rw-r--r--2024/talks/casual.md126
-rw-r--r--2024/talks/color.md66
-rw-r--r--2024/talks/emacs30.md71
-rw-r--r--2024/talks/guile.md177
-rw-r--r--2024/talks/gypsum.md102
-rw-r--r--2024/talks/hyperbole.md82
-rw-r--r--2024/talks/hyperdrive.md125
-rw-r--r--2024/talks/julia.md97
-rw-r--r--2024/talks/learning.md117
-rw-r--r--2024/talks/links.md80
-rw-r--r--2024/talks/literate.md192
-rw-r--r--2024/talks/maxima.md102
-rw-r--r--2024/talks/mcclim.md74
-rw-r--r--2024/talks/open-mic.md90
-rw-r--r--2024/talks/org-update.md172
-rw-r--r--2024/talks/p-search.md180
-rw-r--r--2024/talks/papers.md87
-rw-r--r--2024/talks/pgmacs.md117
-rw-r--r--2024/talks/project.md194
-rw-r--r--2024/talks/regex.md88
-rw-r--r--2024/talks/rust.md126
-rw-r--r--2024/talks/sat-close.md94
-rw-r--r--2024/talks/sat-open.md55
-rw-r--r--2024/talks/secrets.md28
-rw-r--r--2024/talks/sharing.md305
-rw-r--r--2024/talks/shell.md85
-rw-r--r--2024/talks/students.md138
-rw-r--r--2024/talks/sun-close.md200
-rw-r--r--2024/talks/sun-open.md21
-rw-r--r--2024/talks/theme.md36
-rw-r--r--2024/talks/transducers.md237
-rw-r--r--2024/talks/water.md6
-rw-r--r--2024/talks/writing.md52
-rw-r--r--2024/watch.md99
-rw-r--r--2024/watch/dev.md12
-rw-r--r--2024/watch/gen.md90
-rw-r--r--2024/watch/info.md8
-rw-r--r--2025.md39
-rw-r--r--2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.vtt1024
-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--answers.vtt2109
-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--answers.vtt1068
-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-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt56
-rw-r--r--2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt1507
-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--answers.vtt463
-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--answers.vtt995
-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.vtt75
-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-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main--chapters.vtt62
-rw-r--r--2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt2309
-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-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main--chapters.vtt41
-rw-r--r--2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt1437
-rw-r--r--2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt1619
-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--chapters.vtt29
-rw-r--r--2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt1410
-rw-r--r--2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt3058
-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-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main--chapters.vtt98
-rw-r--r--2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt2675
-rw-r--r--2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt887
-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--answers.vtt1131
-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--answers.vtt1034
-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--answers.vtt1586
-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-close--sunday-closing-remarks--main.vtt676
-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-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main--chapters.vtt68
-rw-r--r--2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt1725
-rw-r--r--2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt4019
-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.md82
-rw-r--r--2025/cfp.org151
-rw-r--r--2025/draft-schedule.md49
-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.md1055
-rw-r--r--2025/info/blee-lcnt-before.md57
-rw-r--r--2025/info/blee-lcnt-nav.md7
-rw-r--r--2025/info/bookclub-tapas-after.md1530
-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.md28
-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.md798
-rw-r--r--2025/info/commonlisp-before.md28
-rw-r--r--2025/info/commonlisp-nav.md7
-rw-r--r--2025/info/completion-after.md518
-rw-r--r--2025/info/completion-before.md33
-rw-r--r--2025/info/completion-nav.md7
-rw-r--r--2025/info/gardening-after.md387
-rw-r--r--2025/info/gardening-before.md25
-rw-r--r--2025/info/gardening-nav.md7
-rw-r--r--2025/info/gmail-after.md765
-rw-r--r--2025/info/gmail-before.md54
-rw-r--r--2025/info/gmail-nav.md7
-rw-r--r--2025/info/gnus-after.md801
-rw-r--r--2025/info/gnus-before.md50
-rw-r--r--2025/info/gnus-nav.md7
-rw-r--r--2025/info/graphics-after.md43
-rw-r--r--2025/info/graphics-before.md29
-rw-r--r--2025/info/graphics-nav.md7
-rw-r--r--2025/info/greader-after.md90
-rw-r--r--2025/info/greader-before.md13
-rw-r--r--2025/info/greader-nav.md7
-rw-r--r--2025/info/hyperboleqa-after.md786
-rw-r--r--2025/info/hyperboleqa-before.md35
-rw-r--r--2025/info/hyperboleqa-nav.md7
-rw-r--r--2025/info/juicemacs-after.md422
-rw-r--r--2025/info/juicemacs-before.md13
-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.md493
-rw-r--r--2025/info/latex-before.md28
-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.md919
-rw-r--r--2025/info/llm-before.md32
-rw-r--r--2025/info/llm-nav.md7
-rw-r--r--2025/info/modern-after.md482
-rw-r--r--2025/info/modern-before.md24
-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.md1029
-rw-r--r--2025/info/open-mic-before.md13
-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.md23
-rw-r--r--2025/info/org-babel-nav.md7
-rw-r--r--2025/info/private-ai-after.md912
-rw-r--r--2025/info/private-ai-before.md47
-rw-r--r--2025/info/private-ai-nav.md7
-rw-r--r--2025/info/python-after.md561
-rw-r--r--2025/info/python-before.md32
-rw-r--r--2025/info/python-nav.md7
-rw-r--r--2025/info/reader-after.md1214
-rw-r--r--2025/info/reader-before.md54
-rw-r--r--2025/info/reader-nav.md7
-rw-r--r--2025/info/reference-after.md358
-rw-r--r--2025/info/reference-before.md25
-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.md13
-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.md28
-rw-r--r--2025/info/sat-open-nav.md6
-rw-r--r--2025/info/schemacs-after.md948
-rw-r--r--2025/info/schemacs-before.md49
-rw-r--r--2025/info/schemacs-nav.md7
-rw-r--r--2025/info/sun-close-after.md235
-rw-r--r--2025/info/sun-close-before.md13
-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.md28
-rw-r--r--2025/info/sun-open-nav.md7
-rw-r--r--2025/info/swanky-after.md387
-rw-r--r--2025/info/swanky-before.md13
-rw-r--r--2025/info/swanky-nav.md7
-rw-r--r--2025/info/weights-after.md592
-rw-r--r--2025/info/weights-before.md37
-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.md1863
-rw-r--r--2025/info/zettelkasten-before.md52
-rw-r--r--2025/info/zettelkasten-nav.md7
-rw-r--r--2025/organizers-notebook.md1270
-rw-r--r--2025/organizers-notebook/index.org1072
-rw-r--r--2025/organizers-notebook/schedule.svg1
-rw-r--r--2025/prepare.md313
-rw-r--r--2025/report.md285
-rw-r--r--2025/report.org227
-rw-r--r--2025/schedule-2025-12-06.md1
-rw-r--r--2025/schedule-2025-12-07.md1
-rw-r--r--2025/schedule-details.md36
-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.md119
-rw-r--r--2025/talks/bookclub-tapas.md425
-rw-r--r--2025/talks/calc.md60
-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.md84
-rw-r--r--2025/talks/gmail.md64
-rw-r--r--2025/talks/gnus.md94
-rw-r--r--2025/talks/graphics.md43
-rw-r--r--2025/talks/greader.md41
-rw-r--r--2025/talks/hyperboleqa.md433
-rw-r--r--2025/talks/juicemacs.md171
-rw-r--r--2025/talks/languages.md57
-rw-r--r--2025/talks/latex.md50
-rw-r--r--2025/talks/life.md92
-rw-r--r--2025/talks/llm.md112
-rw-r--r--2025/talks/modern.md117
-rw-r--r--2025/talks/n-angulator.md28
-rw-r--r--2025/talks/open-mic.md28
-rw-r--r--2025/talks/org-babel.md108
-rw-r--r--2025/talks/private-ai.md119
-rw-r--r--2025/talks/python.md26
-rw-r--r--2025/talks/reader.md222
-rw-r--r--2025/talks/reference.md192
-rw-r--r--2025/talks/sat-close.md33
-rw-r--r--2025/talks/sat-open.md21
-rw-r--r--2025/talks/schemacs.md303
-rw-r--r--2025/talks/sun-close.md80
-rw-r--r--2025/talks/sun-open.md21
-rw-r--r--2025/talks/swanky.md158
-rw-r--r--2025/talks/weights.md88
-rw-r--r--2025/talks/writing.md40
-rw-r--r--2025/talks/zettelkasten.md453
-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.md177
-rw-r--r--donors.md6
-rw-r--r--ideas.md6
-rw-r--r--index.md12
-rw-r--r--local.css14
-rw-r--r--mpv.md13
-rw-r--r--organizers-notebook.md1511
-rw-r--r--organizers-notebook/index.org1568
-rw-r--r--script.js227
-rw-r--r--talks.md2
-rw-r--r--templates/page.tmpl135
-rw-r--r--templates/sched.md2
-rw-r--r--templates/script.js227
-rw-r--r--volunteer.md16
-rw-r--r--volunteer/checkin.md33
-rw-r--r--volunteer/host.md85
-rw-r--r--volunteer/irc.md5
622 files changed, 165558 insertions, 3457 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/organizers-notebook/index.org b/2023/organizers-notebook/index.org
index 321e6eea..dba27d56 100644
--- a/2023/organizers-notebook/index.org
+++ b/2023/organizers-notebook/index.org
@@ -1291,7 +1291,7 @@ elisp:emacsconf-publish-media-files-on-change should remove it.
SCHEDULED: <2023-11-25 Sat>
1. Clear public media directory.
-2. Set =media_protect_root= to false in Ansible =group_vars/all.yml=.
+2. Set =media_protect_root= to false in Ansible =prod-vars.yml=.
3. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media=
You can generate the index with =emacsconf-publish-update-media=.
@@ -1910,7 +1910,7 @@ Saturday Dec 2 2023
| | [[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 | zaeph | sachac | FlowyCoder | | | sachac |
-| Gen PM | zaph | sachac | FlowyCoder | | | sachac |
+| Gen PM | zaeph | sachac | FlowyCoder | | | sachac |
| Dev AM | bandali | sachac | FlowyCoder | | | sachac |
| Dev PM | bandali | sachac | FlowyCoder | | | sachac |
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 377a508b..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>
@@ -12,11 +13,14 @@ alt="EmacsConf logo"]]</p>
<a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> and
Emacs Lisp.</p>
-We are busy putting things together for EmacsConf 2024, and we would
-love to have *your* help to make EmacsConf 2024 amazing, much like the
-previous EmacsConfs. Missed the proposal deadline but got a great idea anyway? [[Let us know|/2024/cfp]] just in case we can still squeeze you in somehow.
+Thanks for participating in EmacsConf 2024! We
+will update the emacsconf-discuss mailing list
+when the live talks and the Q&A sessions have been
+processed. In the meantime, please feel free to
+enjoy the videos and resources on the various talk
+pages.
-We are holding EmacsConf 2024 as an online conference again this year.
+We held EmacsConf 2024 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.
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
new file mode 100644
index 00000000..7e634529
--- /dev/null
+++ 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
@@ -0,0 +1,533 @@
+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
+
+00:00:04.200 --> 00:00:07.999
+had two very distinct parts, one which dealt with a
+
+00:00:08.000 --> 00:00:12.079
+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
+
+00:00:14.280 --> 00:00:17.839
+presentation. Before we get started with the question, and
+
+00:00:17.840 --> 00:00:21.799
+for the record, we have about 14 minutes of question time, is
+
+00:00:21.800 --> 00:00:25.079
+there anything that you'd like to add on top of your
+
+00:00:25.080 --> 00:00:27.759
+presentation, something that perhaps would not have fit in
+
+00:00:27.760 --> 00:00:33.399
+the actual presentation format? Sure, but prior to that,
+
+00:00:33.400 --> 00:00:37.839
+félicitations à tous les Français pour le rouvrir de
+
+00:00:37.840 --> 00:00:42.719
+Notre-Dame. Thank you. I'll say thank you because I'm a
+
+00:00:42.720 --> 00:00:48.039
+Francophone and I'm also French, but OK.
+
+00:00:48.040 --> 00:00:58.159
+Yeah, so a few things have come up in various other talks,
+
+00:00:58.160 --> 00:01:04.359
+that kind of EmacsConf 2024 talks, that kind of dovetail
+
+00:01:04.360 --> 00:01:10.599
+with what I was saying. One idea was Peter Prevos's
+
+00:01:10.600 --> 00:01:20.639
+observation of working with Emacs versus working on Emacs.
+
+00:01:20.640 --> 00:01:28.279
+And I'm all for that. So the idea of BLEE is that
+
+00:01:28.280 --> 00:01:32.599
+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 Spacemacs, and
+
+00:01:38.120 --> 00:01:44.079
+we are seeing the evolution of Emacs into layers. So there is
+
+00:01:44.080 --> 00:01:50.119
+the core Emacs, and there are layers on top of it. And Peter
+
+00:01:50.120 --> 00:01:59.799
+also mentioned about too much choice, this notion of
+
+00:01:59.800 --> 00:02:08.919
+Not always too much choice is the right thing to have. And
+
+00:02:08.920 --> 00:02:18.279
+packaging Emacs with a layer on top of Debian gives you a
+
+00:02:18.280 --> 00:02:24.159
+platform and an environment where the choices are a lot
+
+00:02:24.160 --> 00:02:31.159
+less. And that is not necessarily a bad thing.
+
+00:02:31.160 --> 00:02:36.719
+So that was one idea. The other idea or the other theme
+
+00:02:36.720 --> 00:02:42.919
+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
+
+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
+
+00:03:06.800 --> 00:03:13.039
+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
+
+00:03:16.840 --> 00:03:22.399
+21st century, mixing org mode with program languages. And
+
+00:03:22.400 --> 00:03:27.359
+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, consider a traditional
+
+00:03:33.840 --> 00:03:40.159
+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
+
+00:03:49.240 --> 00:03:55.799
+resonance with as the conference went forward. Yeah, and I
+
+00:03:55.800 --> 00:03:59.959
+think, if my memory serves me right, we have another talk
+
+00:03:59.960 --> 00:04:04.199
+about hyperbole this year, right after this Q&A session.
+
+00:04:04.200 --> 00:04:07.919
+And hyperbole, it's not Org Mode, but I'm not sure if you're
+
+00:04:07.920 --> 00:04:10.359
+familiar with it, Mohsen, you might have seen it from
+
+00:04:10.360 --> 00:04:14.639
+various talks last year, but it also tends to have a similar
+
+00:04:14.640 --> 00:04:18.919
+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
+
+00:04:21.920 --> 00:04:25.439
+implement, I mean, integrate other languages. And I found
+
+00:04:25.440 --> 00:04:28.359
+it funny that we have your talk and this talk which are about
+
+00:04:28.360 --> 00:04:32.999
+the other direction, which I find very resonating as well.
+
+00:04:33.000 --> 00:04:40.439
+Right, right, right. So in terms of other things that did not
+
+00:04:40.440 --> 00:04:46.999
+fit into my talk is that the several concepts that I
+
+00:04:47.000 --> 00:04:49.599
+introduced, namely
+
+00:04:49.600 --> 00:04:57.879
+Dynamic Blocks everywhere and COMEEGA.
+
+00:04:57.880 --> 00:05:07.719
+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
+
+00:05:12.520 --> 00:05:16.119
+time that we have, we only have about 8 minutes 30 and we
+
+00:05:16.120 --> 00:05:18.999
+already have about four, five questions actually. I
+
+00:05:19.000 --> 00:05:22.599
+suggest we perhaps leave the screen sharing until later if
+
+00:05:22.600 --> 00:05:25.399
+people are interested. I mean this Q&A can last as long as you
+
+00:05:25.400 --> 00:05:30.079
+want. That makes perfect sense. OK, cool. So how about we
+
+00:05:30.080 --> 00:05:33.279
+focus on the question now and starting with the first one.
+
+NOTE Q: I'm from Brazil, which edition would you recommend?
+
+00:05:33.280 --> 00:05:36.279
+You mentioned that there are two editions, one named at
+
+00:05:36.280 --> 00:05:40.159
+Westerners and one for worldwide readers. I'm from Brazil.
+
+00:05:40.160 --> 00:05:42.599
+Which edition would you recommend? It's a Western country,
+
+00:05:42.600 --> 00:05:45.479
+but you didn't make the distinction exclusive for the
+
+00:05:45.480 --> 00:05:48.199
+second edition. So I thought it would be better to ask.
+
+00:05:48.200 --> 00:05:56.119
+Right. So definitely, I would say for everybody who is on
+
+00:05:56.120 --> 00:06:01.959
+this conference, the international edition is the right
+
+00:06:01.960 --> 00:06:11.639
+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
+
+00:06:19.280 --> 00:06:27.439
+American culture. So there are pieces in the book where the
+
+00:06:27.440 --> 00:06:36.399
+typical American audience may be offended. And if your skin
+
+00:06:36.400 --> 00:06:43.279
+is thick enough to deal with what I consider reasonable
+
+00:06:43.280 --> 00:06:48.319
+criticism, then the International Edition is definitely
+
+00:06:48.320 --> 00:06:54.439
+the better choice. Right. So yeah, I believe you also
+
+00:06:54.440 --> 00:06:56.959
+mentioned it. Pretty much exactly the same thing in your
+
+00:06:56.960 --> 00:07:00.239
+talk. So if you need to review, just watch the talk. And I
+
+00:07:00.240 --> 00:07:03.439
+think Mohsen also provides extra information about this.
+
+00:07:03.440 --> 00:07:07.079
+Moving on to the second question. Thank you for this talk.
+
+NOTE Q: Thank you for this talk! How does your perspective interface with works such as Yanis Varoufakis' Technofeudalism?
+
+00:07:07.080 --> 00:07:10.319
+How does your perspective interface with work such as Yanis
+
+00:07:10.320 --> 00:07:14.639
+Varoufakis' Technofeudalism?
+
+00:07:14.640 --> 00:07:24.919
+I haven't read much of that. I think there is a whole lot of
+
+00:07:24.920 --> 00:07:34.199
+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
+
+00:07:42.480 --> 00:07:46.879
+American digital ecosystems
+
+00:07:46.880 --> 00:07:53.159
+are dangerous and that we should revisit
+
+00:07:53.160 --> 00:08:03.239
+the entirety of the model and strategy.
+
+00:08:03.240 --> 00:08:10.119
+If the person who asked the question has any additional
+
+00:08:10.120 --> 00:08:16.119
+information, I'll be happy to hear it. Sure. We'll see if the
+
+00:08:16.120 --> 00:08:19.559
+person actually comes back to this. All right. In the
+
+00:08:19.560 --> 00:08:21.979
+meantime, moving on to the next question.
+
+NOTE 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?
+
+00:08:21.980 --> 00:08:22.959
+To what extent do
+
+00:08:22.960 --> 00:08:25.519
+you agree that the introduction of proprietary systems in
+
+00:08:25.520 --> 00:08:29.279
+education creates an environment for exploitation whilst
+
+00:08:29.280 --> 00:08:31.679
+at the same time diluting the learning value of the
+
+00:08:31.680 --> 00:08:34.879
+curriculum? My computing education at school amounted to
+
+00:08:34.880 --> 00:08:38.399
+learning how to use the Microsoft Office suite, i.e. the
+
+00:08:38.400 --> 00:08:44.679
+opposite of lasting open knowledge. Yeah, that's right on
+
+00:08:44.680 --> 00:08:49.719
+the mark. That's right on the mark. So the idea is that
+
+00:08:49.720 --> 00:08:55.919
+teaching and learning should be unrestricted. In the
+
+00:08:55.920 --> 00:09:02.479
+Muslim tradition and in Iranian tradition, we say that
+
+00:09:02.480 --> 00:09:12.919
+passing along the learning is the tax on having learned. So
+
+00:09:12.920 --> 00:09:20.359
+absolutely. I think it makes very little sense for the
+
+00:09:20.360 --> 00:09:27.039
+proprietary Microsoft software to be used as part of
+
+00:09:27.040 --> 00:09:33.519
+education. So the question is right on the mark. Okay,
+
+00:09:33.520 --> 00:09:38.519
+great. Let me just take a note of this. All right, moving on to
+
+00:09:38.520 --> 00:09:40.052
+the next question.
+
+NOTE Q: As a specific example of how "ownership is not clean" ...
+
+00:09:40.053 --> 00:09:43.359
+As a specific example of how ownership is
+
+00:09:43.360 --> 00:09:46.239
+not something clean, look at the Star Trek Picard series.
+
+00:09:46.240 --> 00:09:48.839
+They continuously asked Patrick Stewart to come to do
+
+00:09:48.840 --> 00:09:52.159
+another Star Trek series, but he couldn't because Star Trek
+
+00:09:52.160 --> 00:09:54.959
+changed from what it used to be, at least until they came up
+
+00:09:54.960 --> 00:09:57.999
+with a series that honored what Star Trek used to be. Does
+
+00:09:58.000 --> 00:10:21.839
+this intersect? Let me read this for a moment.
+
+00:10:21.840 --> 00:10:30.599
+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 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 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
+
+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 FOSS movement does not
+
+00:11:14.960 --> 00:11:21.279
+recognize clearly and explicitly that the entirety of the
+
+00:11:21.280 --> 00:11:30.399
+intellectual property rights regime is flawed. The second
+
+00:11:30.400 --> 00:11:37.239
+piece is that it's only now that we are seeing the FOSS
+
+00:11:37.240 --> 00:11:45.479
+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
+
+00:11:54.920 --> 00:12:01.159
+are not necessarily correct. The fourth problem is that we
+
+00:12:01.160 --> 00:12:07.239
+are not paying enough attention to establishing a
+
+00:12:07.240 --> 00:12:09.999
+relationship with society.
+
+00:12:10.000 --> 00:12:16.439
+So there's a whole chapter in the book dedicated to this
+
+00:12:16.440 --> 00:12:23.959
+topic. What I'm not sure about is if I got the point of the
+
+00:12:23.960 --> 00:12:30.279
+question correctly. So again, if the person who asked the
+
+00:12:30.280 --> 00:12:35.679
+question could clarify, I'll be happy to further expand.
+
+00:12:35.680 --> 00:12:40.279
+Okay, considering the time, we only have about one minute to
+
+00:12:40.280 --> 00:12:42.959
+ten seconds until we go. So what we're going to do, as we
+
+00:12:42.960 --> 00:12:45.439
+usually do, Mohsen, is that we're going to move the stream
+
+00:12:45.440 --> 00:12:47.839
+onto the next talk. And if you want to take a little bit of time
+
+00:12:47.840 --> 00:12:51.799
+in this room to answer the question, I'm putting a link to the
+
+00:12:51.800 --> 00:12:56.519
+pad in the BBB chat so you can open it on your end. But as we are
+
+00:12:56.520 --> 00:12:59.319
+still live for 15 more seconds, do you have any last words?
+
+00:12:59.320 --> 00:13:09.039
+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
+
+00:13:14.240 --> 00:13:24.479
+strategy for inside of IPR resistance. And thank you, Leo
+
+00:13:24.480 --> 00:13:29.719
+and Sacha and the rest of the folks for this wonderful yearly
+
+00:13:29.720 --> 00:13:33.559
+event. Well, thank you so much. And it's always a pleasure to
+
+00:13:33.560 --> 00:13:36.119
+have you. And thank you for your thankings. So we'll be
+
+00:13:36.120 --> 00:13:38.439
+moving to the next talk in 10 seconds. Mohsen, thank you so
+
+00:13:38.440 --> 00:13:47.559
+much. And I'll see you later. Thank you. Bye-bye. Bye.
+
+00:13:47.560 --> 00:13:50.159
+All right. We are off air. So thank you so much, Mohsen. I'll
+
+00:13:50.160 --> 00:13:52.559
+need to get moving to get ready for the next talk. So again,
+
+00:13:52.560 --> 00:13:54.519
+feel free to take the time you need to answer the questions.
+
+00:13:54.520 --> 00:13:56.719
+I'm going to stop sharing my screen because I need to leave.
+
+00:13:56.720 --> 00:13:59.319
+But take all the time you need. And when you're finished, you
+
+00:13:59.320 --> 00:14:04.039
+can just leave the room. OK. All right, bye-bye. Thank you.
+
+00:14:04.040 --> 00:14:23.439
+Great. I see one more person in the room.
+
+00:14:23.440 --> 00:14:35.679
+Hi, John.
+
+00:14:35.680 --> 00:14:38.079
+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,
+
+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 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
+FOSS ideas and I have public...
+
+NOTE Q: Do you have any recommended reading materials designed for such an audience?
+
+00:15:05.278 --> 00:15:08.039
+Do you have any recommendation
+
+00:15:08.040 --> 00:15:12.359
+to reading materials designed for such an audience? Um,
+
+00:15:12.360 --> 00:15:17.999
+yeah, this is with regard to the last question
+
+00:15:18.000 --> 00:15:24.439
+that's on the etherpad at this moment. The idea is
+
+00:15:24.440 --> 00:15:32.199
+that my own book would be an excellent resource. I'd
+
+00:15:32.200 --> 00:15:39.279
+say the bibliography in the book contains various
+
+00:15:39.280 --> 00:15:43.039
+other pointers that could be quite useful.
+
+00:15:43.040 --> 00:15:55.399
+I'm reading again.
+
+00:15:55.400 --> 00:15:57.799
+Yeah.
+
+00:15:57.800 --> 00:16:20.159
+Very good. If there are no other questions,
+
+00:16:20.160 --> 00:16:31.839
+I think I'm going to consider this a day and move on.
+
+00:16:31.840 --> 00:16:43.760
+Thank you.
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--main--chapters.vtt b/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
new file mode 100644
index 00000000..54741ebf
--- /dev/null
+++ b/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
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:05:17.450
+Introduction
+
+00:05:17.550 --> 00:08:02.717
+Blee: A Bigger and Different Vision for Emacs
+
+00:08:02.817 --> 00:15:49.750
+The ``Nature of Polyexistentials'' Book
+
+00:15:49.850 --> 00:20:04.500
+Governance of Polyexistentials
+
+00:20:04.600 --> 00:25:59.983
+Proper Governance of Manner-of-Existence of Software
+
+00:26:00.083 --> 00:26:24.983
+Blee Overview
+
+00:26:25.083 --> 00:33:27.567
+Bootstrapping: From Fresh Debian to Raw-BISOS and Raw-Blee
+
+00:33:27.667 --> 00:35:13.950
+Some Blee Concepts
+
+00:35:14.050 --> 00:35:59.050
+Blee Org Dynamic Blocks --- Everywhere
+
+00:35:59.150 --> 00:37:51.750
+COMEEGA -- Collaborative Org-Mode Enhanced Emacs Generalized Authorship
+
+00:37:51.850 --> 00:38:12.133
+Blee Panels: Active Org-Mode Universal Self-Documentation
+
+00:38:12.233 --> 00:41:04.850
+Some BISOS and Blee Capability Bundles
+
+00:41:04.950 --> 00:42:54.167
+Next Steps (2024)
+
+00:42:54.267 --> 00:43:38.333
+Economics and Business Dimmensions of ByStar Digital Ecosystem
+
+00:43:38.433 --> 00:45:25.632
+Pointers for Digging Deeper
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--main.vtt b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt
new file mode 100644
index 00000000..3da4b409
--- /dev/null
+++ b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt
@@ -0,0 +1,2395 @@
+WEBVTT captioned by mohsen
+
+00:00:03.659 --> 00:00:08.399
+Greetings. Salaam. This is Mohsen Banan.
+
+00:00:08.400 --> 00:00:11.479
+I am a software and internet engineer.
+
+00:00:11.480 --> 00:00:16.359
+The title of this presentation is "About Blee".
+
+00:00:16.360 --> 00:00:17.259
+Blee stands for
+
+00:00:17.260 --> 00:00:22.439
+ByStar Libre-Halaal Emacs Environment.
+
+00:00:22.440 --> 00:00:24.319
+In this presentation I want to look
+
+00:00:24.320 --> 00:00:28.319
+at Emacs as a primary ingredient for the usage
+
+00:00:28.320 --> 00:00:32.599
+environment of an autonomy and morality
+
+00:00:32.600 --> 00:00:35.799
+directed digital ecosystem.
+
+00:00:35.800 --> 00:00:38.279
+My focus here is not just Emacs.
+
+00:00:38.280 --> 00:00:42.319
+This is about augmenting Emacs in the context of
+
+00:00:42.320 --> 00:00:46.679
+our own specific digital ecosystem.
+
+00:00:46.716 --> 00:00:48.919
+This presentation is part theoretical
+
+00:00:48.920 --> 00:00:50.719
+and part practical.
+
+00:00:50.720 --> 00:00:52.999
+I spend about half of my time on the
+
+00:00:53.000 --> 00:00:54.999
+theory and the bigger picture.
+
+00:00:55.000 --> 00:01:01.439
+The second half is hands on and Emacs centric.
+
+00:01:01.440 --> 00:01:04.959
+Emacs has long been recognized as the ultimate
+
+00:01:04.960 --> 00:01:09.039
+integration platform, enabling the creation of an
+
+00:01:09.040 --> 00:01:12.819
+unparalleled user environment.
+
+00:01:12.820 --> 00:01:16.239
+Tomohiro is right on the mark when he says:
+
+00:01:16.240 --> 00:01:19.239
+"The reason why Emacs platform is good
+
+00:01:19.240 --> 00:01:21.919
+is that it cooperates with OS,
+
+00:01:21.920 --> 00:01:24.999
+not because it is good by itself."
+
+00:01:25.000 --> 00:01:27.519
+But this recognition has often been in the
+
+00:01:27.520 --> 00:01:31.679
+context of a generic and abstract "OS"
+
+00:01:31.680 --> 00:01:36.459
+So, I am updating MATSUYAMA's observation as:
+
+00:01:36.460 --> 00:01:39.759
+"The reason why Emacs platform is good is that
+
+00:01:39.760 --> 00:01:43.799
+it facilitates creation of specific integrated
+
+00:01:43.800 --> 00:01:48.279
+usage environments like Blee, which cooperate
+
+00:01:48.280 --> 00:01:51.359
+with Debian and BISOS as part of
+
+00:01:51.360 --> 00:01:57.319
+the Libre-Halaal ByStar Digital Ecosystem."
+
+00:01:57.320 --> 00:02:01.959
+Emacs is an especially good choice as the universal core of
+
+00:02:01.960 --> 00:02:07.839
+user environments of a digital ecosystem, because it has an
+
+00:02:07.840 --> 00:02:12.159
+incredibly powerful display engine, and an incredibly
+
+00:02:12.160 --> 00:02:16.559
+powerful Elisp engine, and an incredibly powerful input
+
+00:02:16.560 --> 00:02:20.959
+methods engine, and an incredibly powerful common agents
+
+00:02:20.960 --> 00:02:26.639
+paradigm, and a very rich set of mature and convivial idioms
+
+00:02:26.640 --> 00:02:31.159
+and means for absorption and integration of external
+
+00:02:31.160 --> 00:02:35.879
+software services continuum capabilities.
+
+00:02:35.880 --> 00:02:39.999
+In our model, we first augment Emacs with a set
+
+00:02:40.000 --> 00:02:45.079
+of cohesive elisp capabilities and create Blee --
+
+00:02:45.080 --> 00:02:48.959
+ByStar Libre-Halaal Emacs Environment.
+
+00:02:48.960 --> 00:02:52.439
+We then further enhance Blee with an integrated
+
+00:02:52.440 --> 00:02:57.759
+framework on top of Debian called BISOS ---
+
+00:02:57.760 --> 00:03:02.079
+ByStar Internet Services Operating System.
+
+00:03:02.080 --> 00:03:04.959
+Blee is inherently intertwined
+
+00:03:04.960 --> 00:03:07.559
+and integrated with BISOS.
+
+00:03:07.560 --> 00:03:12.159
+This combination of the universal BISOS and Blee
+
+00:03:12.160 --> 00:03:15.719
+then forms a foundation for creation of an
+
+00:03:15.720 --> 00:03:19.879
+autonomy directed digital ecosystem that we call
+
+00:03:19.880 --> 00:03:23.639
+ByStar.
+
+00:03:23.640 --> 00:03:26.879
+Over the past two decades, I have been working on
+
+00:03:26.880 --> 00:03:30.799
+creating a comprehensive, interdisciplinary, and
+
+00:03:30.800 --> 00:03:34.239
+non-proprietary digital ecosystem.
+
+00:03:34.240 --> 00:03:36.359
+We call it ByStar (By*).
+
+00:03:36.360 --> 00:03:38.439
+ByStar challenges the existing
+
+00:03:38.440 --> 00:03:41.239
+proprietary American digital ecosystem
+
+00:03:41.240 --> 00:03:46.119
+while operating concurrently alongside it.
+
+00:03:46.120 --> 00:03:50.079
+ByStar's primary offerings are tangible autonomy
+
+00:03:50.472 --> 00:03:54.959
+and genuine privacy on a very large scale.
+
+00:03:54.960 --> 00:03:59.119
+By* is about redecentralization of internet
+
+00:03:59.120 --> 00:04:01.759
+application services.
+
+00:04:01.760 --> 00:04:06.839
+The * in ByStar stands for Unix's globing symbol.
+
+00:04:06.840 --> 00:04:11.919
+Signifying that our scope is everything.
+
+00:04:11.920 --> 00:04:16.279
+Blee is a bigger and different vision for Emacs.
+
+00:04:16.280 --> 00:04:17.799
+Let's compare and contrast
+
+00:04:17.800 --> 00:04:19.839
+what I am proposing against
+
+00:04:19.840 --> 00:04:24.499
+common current practices of the Emacs culture.
+
+00:04:24.500 --> 00:04:28.079
+Please permit me to be slightly cynical.
+
+00:04:28.080 --> 00:04:30.119
+Much of what we have been seeing in the
+
+00:04:30.120 --> 00:04:33.879
+Emacs culture and in emacsConf
+
+00:04:33.880 --> 00:04:35.759
+can be characterized as
+
+00:04:35.760 --> 00:04:38.719
+stories of tunnel vision engineers
+
+00:04:38.720 --> 00:04:40.559
+scratching various itches
+
+00:04:40.560 --> 00:04:43.879
+by integrating various capabilities
+
+00:04:43.880 --> 00:04:47.719
+and providing DIY recipes.
+
+00:04:47.720 --> 00:04:50.039
+Emacs and Lisp are so powerful that
+
+00:04:50.040 --> 00:04:51.839
+people have come up
+
+00:04:51.840 --> 00:04:53.759
+with catch phrases like the
+
+00:04:53.760 --> 00:04:56.439
+"Curse of Lisp".
+
+00:04:56.440 --> 00:04:57.559
+The curse is that
+
+00:04:57.560 --> 00:05:01.579
+the power of Lisp breeds individualism.
+
+00:05:01.580 --> 00:05:04.599
+Because you can be so powerful alone,
+
+00:05:04.600 --> 00:05:06.719
+you work longer alone.
+
+00:05:06.720 --> 00:05:08.359
+Because it is easy to spin
+
+00:05:08.360 --> 00:05:10.959
+your own whatever library,
+
+00:05:10.973 --> 00:05:13.219
+many people do.
+
+00:05:13.220 --> 00:05:15.679
+I am suggesting that we should raise the bar.
+
+00:05:15.680 --> 00:05:19.359
+Let's cultivate Emacs in the context
+
+00:05:19.360 --> 00:05:22.859
+of our own digital ecosystem instead.
+
+00:05:22.860 --> 00:05:26.839
+Do more and do more outside of Emacs and
+
+00:05:26.840 --> 00:05:29.599
+recognize that a well integrated
+
+00:05:29.600 --> 00:05:35.599
+smaller Emacs leads to a better usage environment.
+
+00:05:35.600 --> 00:05:38.999
+Broadly speaking, digital ecosystems are viewed
+
+00:05:39.000 --> 00:05:41.799
+as consisting of 4 parts.
+
+00:05:41.800 --> 00:05:45.559
+Ideology, Software, Services and Content.
+
+00:05:45.560 --> 00:05:49.519
+Software, Services and Content are polyexistentials
+
+00:05:49.520 --> 00:05:53.119
+and can be analyzed from 3 different aspects:
+
+00:05:53.120 --> 00:05:57.279
+Functionality, Usage and Manner-of-Existence.
+
+00:05:57.280 --> 00:06:00.559
+By "manner-of-existence" of polyexistentials
+
+00:06:00.560 --> 00:06:03.119
+we mean everything relating to how the
+
+00:06:03.120 --> 00:06:06.479
+polyexistential exists within society.
+
+00:06:06.480 --> 00:06:08.879
+This includes for example,
+
+00:06:08.880 --> 00:06:12.899
+are polyexistentials internally transparent?
+
+00:06:12.900 --> 00:06:16.679
+Societal ideology determines manner-of-existence
+
+00:06:16.680 --> 00:06:19.399
+of Software, Services and Content.
+
+00:06:19.400 --> 00:06:22.799
+And in turn, manner-of-existence of Software,
+
+00:06:22.800 --> 00:06:26.039
+Services and Content impacts society.
+
+00:06:26.574 --> 00:06:28.199
+In the American model,
+
+00:06:28.200 --> 00:06:31.719
+loss of privacy and autonomy are direct
+
+00:06:31.720 --> 00:06:36.319
+consequences of the IPR regime.
+
+00:06:36.320 --> 00:06:39.679
+Based on this characterization, let's consider
+
+00:06:39.680 --> 00:06:42.499
+these three Digital Ecosystems:
+
+00:06:42.500 --> 00:06:45.879
+the Proprietary American Digital Ecosystem,
+
+00:06:45.880 --> 00:06:48.479
+FOSS and ByStar.
+
+00:06:48.480 --> 00:06:51.719
+The 5 big American proprietary tech companies,
+
+00:06:51.720 --> 00:06:54.639
+Google, Microsoft, Apple, Facebook and Amazon
+
+00:06:54.640 --> 00:06:59.119
+have created 5 competing enclaves as mostly
+
+00:06:59.120 --> 00:07:02.239
+separate and isolated digital ecosystem.
+
+00:07:03.395 --> 00:07:06.159
+In this slide, I am focusing on the first 3
+
+00:07:06.160 --> 00:07:08.399
+and each of their OSs,
+
+00:07:08.400 --> 00:07:09.999
+their usage environments
+
+00:07:10.000 --> 00:07:12.639
+and their clouds.
+
+00:07:12.640 --> 00:07:15.759
+Let's clearly recognize that the economic model
+
+00:07:15.760 --> 00:07:18.599
+of these proprietary digital ecosystems is
+
+00:07:19.075 --> 00:07:20.919
+"Surveillance Capitalism".
+
+00:07:21.695 --> 00:07:23.279
+Now, let's focus on
+
+00:07:23.280 --> 00:07:24.919
+the right side of this picture.
+
+00:07:24.920 --> 00:07:27.559
+On the non-proprietary side,
+
+00:07:27.560 --> 00:07:29.119
+based on the FOSS model,
+
+00:07:29.120 --> 00:07:32.079
+we have ended up with lots of components.
+
+00:07:32.080 --> 00:07:34.839
+We have Debian as a platform,
+
+00:07:34.840 --> 00:07:35.759
+we have Emacs as
+
+00:07:35.760 --> 00:07:38.799
+an editor-centered usage environment.
+
+00:07:38.890 --> 00:07:42.039
+But on the non-proprietary side we don't have
+
+00:07:42.040 --> 00:07:43.079
+anything that can
+
+00:07:43.080 --> 00:07:46.759
+reasonably be considered a digital ecosystem.
+
+00:07:46.760 --> 00:07:52.139
+I mean, the services aspect is missing.
+
+00:07:52.140 --> 00:07:54.519
+ByStar aspires to be
+
+00:07:54.520 --> 00:07:58.679
+a complete non-proprietary digital ecosystem.
+
+00:07:58.680 --> 00:08:01.639
+We were all born into the belief system of
+
+00:08:01.640 --> 00:08:03.679
+intellectual property rights,
+
+00:08:03.680 --> 00:08:07.319
+making it exceedingly difficult for us
+
+00:08:07.320 --> 00:08:08.719
+to even imagine that this
+
+00:08:08.720 --> 00:08:12.199
+foundational ownership framework
+
+00:08:12.200 --> 00:08:14.599
+could be fundamentally flawed.
+
+00:08:15.759 --> 00:08:19.479
+I am delighted to announce the availability of my
+
+00:08:19.480 --> 00:08:20.919
+recent book,
+
+00:08:20.920 --> 00:08:24.099
+"Nature of Polyexistentials".
+
+00:08:24.100 --> 00:08:26.239
+The full title of my book is:
+
+00:08:26.743 --> 00:08:28.759
+Nature of Polyexistentials
+
+00:08:28.760 --> 00:08:31.039
+Basis for Abolishment of the
+
+00:08:31.040 --> 00:08:35.459
+Western Intellectual Property Rights Regime
+
+00:08:35.460 --> 00:08:36.999
+And Introduction of
+
+00:08:37.000 --> 00:08:42.479
+the Libre-Halaal ByStar Digital Ecosystem.
+
+00:08:42.480 --> 00:08:45.239
+Knowledge, know-how, uses of know-how, ideas,
+
+00:08:45.240 --> 00:08:48.999
+formulas, software and information are inherently
+
+00:08:49.000 --> 00:08:50.839
+non-scarce.
+
+00:08:50.840 --> 00:08:53.679
+They are polyexistentials.
+
+00:08:53.680 --> 00:08:58.599
+Unlike monoexistentials which exist in singular,
+
+00:08:58.600 --> 00:09:03.499
+polyexistentials naturally exist in multiples.
+
+00:09:03.500 --> 00:09:06.839
+What is abundant in nature is being made
+
+00:09:06.840 --> 00:09:10.639
+artificially scarce through man-made ownership
+
+00:09:10.640 --> 00:09:14.039
+rules called copyright and patents.
+
+00:09:15.282 --> 00:09:18.299
+Let me provide a brief overview.
+
+00:09:18.300 --> 00:09:20.959
+This book is divided into five parts,
+
+00:09:20.960 --> 00:09:24.399
+each representing a layer of interest to you
+
+00:09:24.400 --> 00:09:27.559
+and to our societal policymakers.
+
+00:09:28.351 --> 00:09:31.039
+Part I, the philosophical layer
+
+00:09:31.040 --> 00:09:34.479
+delves into the concept of polyexistence.
+
+00:09:34.480 --> 00:09:37.479
+In this part, I introduce,
+
+00:09:37.480 --> 00:09:39.039
+for the very first time,
+
+00:09:39.040 --> 00:09:43.839
+the concepts and terminology of "polyexistentials".
+
+00:09:43.840 --> 00:09:47.479
+The topic of restriction of polyexistentals
+
+00:09:47.480 --> 00:09:50.799
+and the Western IPR is one and the same.
+
+00:09:50.800 --> 00:09:55.359
+Comprehending polyexistence invalidates
+
+00:09:55.360 --> 00:09:56.999
+the Western IPR model.
+
+00:09:57.633 --> 00:10:00.839
+We are living inside of an ownership fallacy.
+
+00:10:00.840 --> 00:10:05.319
+The Western IPR regime is a sin of our times.
+
+00:10:06.147 --> 00:10:09.559
+Part II is the pathology layer.
+
+00:10:09.560 --> 00:10:12.959
+Over the course of the past two centuries,
+
+00:10:12.960 --> 00:10:16.599
+numerous theories have been proposed to justify
+
+00:10:16.600 --> 00:10:18.679
+intellectual property.
+
+00:10:18.680 --> 00:10:20.759
+In this Part, I offer
+
+00:10:20.760 --> 00:10:23.839
+my perspective on the weaknesses inherent
+
+00:10:23.840 --> 00:10:26.699
+in each of these theories.
+
+00:10:26.700 --> 00:10:29.119
+Part III, the ethics layer,
+
+00:10:29.120 --> 00:10:31.919
+focuses on contours of cures.
+
+00:10:32.500 --> 00:10:35.220
+Having dismissed the Western intellectual
+
+00:10:35.221 --> 00:10:38.640
+property rights regime as an erroneous
+
+00:10:38.641 --> 00:10:41.999
+governance model for polyexistentials,
+
+00:10:42.000 --> 00:10:43.439
+I propose the
+
+00:10:43.440 --> 00:10:48.279
+Libre-Halaal model of governance of polyexistentials
+
+00:10:48.280 --> 00:10:53.479
+towards facilitating conviviality of tools.
+
+00:10:53.480 --> 00:10:57.199
+Part IV, the engineering layer, introduces the
+
+00:10:57.200 --> 00:11:00.199
+Libre-Halaal ByStar Digital Ecosystem.
+
+00:11:00.200 --> 00:11:04.319
+as an ethical alternative to the prevailing
+
+00:11:04.320 --> 00:11:07.519
+proprietary American digital ecosystem.
+
+00:11:08.071 --> 00:11:11.159
+Part V, the sociology layer,
+
+00:11:11.160 --> 00:11:13.799
+delves into formulation of
+
+00:11:13.800 --> 00:11:17.559
+Libre-Halaal oriented societal policies.
+
+00:11:17.560 --> 00:11:21.679
+It is evident that the abolition of intellectual
+
+00:11:21.680 --> 00:11:25.279
+property carries significant consequences.
+
+00:11:25.280 --> 00:11:29.119
+In this Part, I present my thoughts on this
+
+00:11:29.120 --> 00:11:33.079
+particular dimension for Eastern societies.
+
+00:11:33.080 --> 00:11:37.439
+For Western societies I confine myself to
+
+00:11:37.440 --> 00:11:41.499
+inside of IPR strategies.
+
+00:11:41.500 --> 00:11:44.879
+You can think of this book as being in two volumes.
+
+00:11:44.880 --> 00:11:48.979
+Our focus is Blee in Volume II.
+
+00:11:48.980 --> 00:11:52.879
+But as our blueprint needs to be interdisciplinary,
+
+00:11:52.880 --> 00:11:56.839
+there are some key concepts of Volume I that I'll
+
+00:11:56.840 --> 00:11:59.199
+briefly discuss here.
+
+00:12:00.359 --> 00:12:03.599
+Volume I deals with the general concept of
+
+00:12:03.600 --> 00:12:07.599
+polyexistence and invalidity of IPR.
+
+00:12:07.600 --> 00:12:13.439
+In Chapter 11, I introduce the very sensitive and potent
+
+00:12:13.440 --> 00:12:17.779
+vocabulary of Halaal and Libre-Halaal.
+
+00:12:17.780 --> 00:12:20.919
+Volume II is backed by software and internet
+
+00:12:20.920 --> 00:12:21.839
+services.
+
+00:12:22.602 --> 00:12:23.799
+The contents of this book
+
+00:12:23.800 --> 00:12:26.319
+belong to all of humanity
+
+00:12:26.320 --> 00:12:29.839
+and verbatim copying of it is unrestricted.
+
+00:12:29.840 --> 00:12:33.199
+If you want to read it, this book is yours.
+
+00:12:33.681 --> 00:12:36.919
+The "Nature of Polyexistentials" book is
+
+00:12:36.920 --> 00:12:41.499
+available both online and in print.
+
+00:12:41.500 --> 00:12:44.159
+This book is available as two editions.
+
+00:12:44.160 --> 00:12:47.519
+The US Edition and the International edition.
+
+00:12:48.082 --> 00:12:50.679
+The US Edition is written with
+
+00:12:50.680 --> 00:12:54.279
+a slightly milder Western unfriendly tone,
+
+00:12:54.280 --> 00:12:57.159
+while the International Edition
+
+00:12:57.160 --> 00:13:01.399
+includes additional original content in Farsi.
+
+00:13:02.324 --> 00:13:05.839
+I consider the International Edition to be the
+
+00:13:05.840 --> 00:13:07.159
+authoritative version.
+
+00:13:07.160 --> 00:13:09.959
+However, many readers in
+
+00:13:09.960 --> 00:13:12.239
+the US and Western countries
+
+00:13:12.240 --> 00:13:14.319
+may prefer the US Edition.
+
+00:13:15.614 --> 00:13:18.719
+I maintain separate Git repositories
+
+00:13:18.720 --> 00:13:21.559
+for each edition on GitHub.
+
+00:13:21.560 --> 00:13:28.639
+US Edition is at bxplpc/120033 and
+
+00:13:28.640 --> 00:13:36.139
+International Edition is at bxplpc/120074
+
+00:13:36.140 --> 00:13:40.399
+Cloning these repositories will give you access
+
+00:13:40.400 --> 00:13:45.559
+to the book in PDF format (suitable for both A4
+
+00:13:45.560 --> 00:13:50.639
+and US Letter printing) and in EPUB format.
+
+00:13:50.640 --> 00:13:54.399
+Alternatively, the content can be downloaded
+
+00:13:54.400 --> 00:13:58.639
+directly from your browser without needing to
+
+00:13:58.640 --> 00:14:00.159
+clone the repositories.
+
+00:14:01.948 --> 00:14:05.199
+To ensure broader online availability and
+
+00:14:05.200 --> 00:14:09.279
+stability, I have also published the book on
+
+00:14:09.280 --> 00:14:11.879
+Zenodo, complete with a
+
+00:14:11.880 --> 00:14:16.399
+DOI (Digital Object Identifier).
+
+00:14:16.400 --> 00:14:20.399
+You can download both the A4 and
+
+00:14:20.400 --> 00:14:24.359
+8.5 x 11 PDFs from there as well.
+
+00:14:25.290 --> 00:14:28.919
+The book is also available in print on Amazon and
+
+00:14:28.920 --> 00:14:30.959
+at most major bookstores in
+
+00:14:30.960 --> 00:14:34.139
+the US and Western regions.
+
+00:14:34.140 --> 00:14:36.319
+The ISBNs for both editions
+
+00:14:36.320 --> 00:14:38.899
+are included in this slide.
+
+00:14:38.900 --> 00:14:41.079
+Additionally, I have published
+
+00:14:41.080 --> 00:14:45.519
+this book in Iran through Jangal Publishers.
+
+00:14:45.520 --> 00:14:47.799
+I did not write this book for profit.
+
+00:14:47.800 --> 00:14:50.079
+My aim is to share my thoughts
+
+00:14:50.080 --> 00:14:52.479
+and encourage readers to
+
+00:14:52.480 --> 00:14:54.799
+engage with my views and ideas.
+
+00:14:54.800 --> 00:14:57.239
+Your feedback is welcome, and
+
+00:14:57.240 --> 00:14:59.279
+I am genuinely interested in
+
+00:14:59.280 --> 00:15:02.039
+hearing your perspectives.
+
+00:15:02.040 --> 00:15:04.999
+In Western markets, I have priced the print
+
+00:15:05.000 --> 00:15:09.219
+edition somewhat above production costs.
+
+00:15:09.220 --> 00:15:10.919
+If you find value in the
+
+00:15:10.920 --> 00:15:13.399
+book and the ByStar project,
+
+00:15:13.400 --> 00:15:16.839
+purchasing a copy will help support my work.
+
+00:15:16.840 --> 00:15:19.759
+Thanks in advance for your support.
+
+00:15:22.315 --> 00:15:24.199
+And here are the same links
+
+00:15:24.200 --> 00:15:26.899
+as a native Reveal slide.
+
+00:15:26.900 --> 00:15:29.519
+If instead of a video, you are viewing this
+
+00:15:29.520 --> 00:15:32.479
+presentation as a Reveal web page,
+
+00:15:32.480 --> 00:15:37.679
+you can just click on the pointers and URLs.
+
+00:15:37.680 --> 00:15:41.519
+The concept of polyexistentials has not appeared
+
+00:15:41.520 --> 00:15:46.339
+in prior discussions of validity of IPR.
+
+00:15:46.340 --> 00:15:49.919
+Once you start thinking in terms of monoexistence
+
+00:15:49.920 --> 00:15:53.759
+and polyexistence, the recognition of
+
+00:15:53.760 --> 00:15:58.079
+illegitimacy of Western IPR becomes very simple.
+
+00:15:58.949 --> 00:16:03.059
+I want to very quickly give you a taste of that.
+
+00:16:03.060 --> 00:16:05.559
+You can of course dig deeper in the book.
+
+00:16:06.495 --> 00:16:10.619
+Existence and possession are aspects of nature.
+
+00:16:10.620 --> 00:16:13.779
+Ownership are man-made rules.
+
+00:16:13.780 --> 00:16:16.759
+All material objects exist in singular
+
+00:16:16.760 --> 00:16:18.879
+and are monoexistentials.
+
+00:16:19.481 --> 00:16:22.439
+For monoexistentials, things are simple.
+
+00:16:22.971 --> 00:16:25.519
+Monoexsitentials, say paper,
+
+00:16:25.520 --> 00:16:27.599
+exists in singular.
+
+00:16:27.600 --> 00:16:31.319
+It naturally has a single possessor.
+
+00:16:31.776 --> 00:16:35.079
+A single owner can be assigned to it
+
+00:16:35.080 --> 00:16:40.579
+which then makes that single possession lawful.
+
+00:16:40.580 --> 00:16:45.199
+Polyexistentials naturally exist in multiples.
+
+00:16:45.200 --> 00:16:48.279
+Much of our world is actually a mixture of
+
+00:16:48.280 --> 00:16:51.239
+monoexistentials and polyexistentials,
+
+00:16:51.240 --> 00:16:57.039
+which we call mixed-existentials.
+
+00:16:57.040 --> 00:17:00.999
+Possession of polyexistentials is naturally
+
+00:17:01.000 --> 00:17:04.159
+many-to-many. Without any conflict,
+
+00:17:04.160 --> 00:17:07.879
+polyexistentials can have many possessors.
+
+00:17:07.880 --> 00:17:13.639
+Polyexistentials are inherently Non-Rivalry.
+
+00:17:13.640 --> 00:17:17.519
+The requirement for ownership to be in harmony
+
+00:17:17.520 --> 00:17:20.839
+with the nature of possession and existence is
+
+00:17:20.840 --> 00:17:26.079
+violated by the Western IPR regime which assigns
+
+00:17:26.080 --> 00:17:28.639
+a single owner to what exists
+
+00:17:28.640 --> 00:17:32.339
+and is possessed in multiples.
+
+00:17:32.340 --> 00:17:33.719
+The end result is
+
+00:17:33.720 --> 00:17:37.139
+creation of Artificial Scarcity.
+
+00:17:37.140 --> 00:17:39.599
+Ramification of ownership mistakes
+
+00:17:39.600 --> 00:17:41.679
+are usually catastrophic.
+
+00:17:41.680 --> 00:17:45.759
+Consider the previous Western and American
+
+00:17:45.760 --> 00:17:50.079
+ownership mistake -- that of American Slavery --
+
+00:17:50.080 --> 00:17:54.399
+ownership of Africans by Americans and Europeans.
+
+00:17:55.000 --> 00:17:56.639
+See Chapter 7 -
+
+00:17:56.640 --> 00:18:00.319
+"Western Slavery and the Western IPR Regime"
+
+00:18:00.320 --> 00:18:02.959
+of the book for some parallels
+
+00:18:02.960 --> 00:18:04.479
+between these mistakes.
+
+00:18:04.480 --> 00:18:09.399
+This time with the Western IPR ownership mistake
+
+00:18:09.400 --> 00:18:13.779
+all of humanity is in danger.
+
+00:18:13.780 --> 00:18:15.559
+So, how are we to
+
+00:18:15.560 --> 00:18:18.739
+correct this catastrophic mistake?
+
+00:18:18.740 --> 00:18:21.679
+The strategies of Public Licenses and
+
+00:18:21.680 --> 00:18:24.679
+FOSS are not sufficient.
+
+00:18:24.680 --> 00:18:26.679
+hese are minor band-aids.
+
+00:18:26.680 --> 00:18:28.639
+We need to do a lot more.
+
+00:18:28.640 --> 00:18:31.719
+We need to understand what are we going to
+
+00:18:31.720 --> 00:18:36.279
+replace the mistaken Western IPR regime with.
+
+00:18:36.280 --> 00:18:37.559
+My answer is:
+
+00:18:37.560 --> 00:18:41.359
+"Libre-Halaal Governance of Polyexistentials".
+
+00:18:41.360 --> 00:18:44.479
+Much of my book revolves around that.
+
+00:18:44.480 --> 00:18:47.879
+We need to fully reject ownership of
+
+00:18:47.880 --> 00:18:52.119
+polyexistentals and replace it with attribution
+
+00:18:52.120 --> 00:18:55.359
+machinaries towards just rewards.
+
+00:18:56.090 --> 00:19:00.879
+We need to abolish the "Artificial Scarcity" of
+
+00:19:00.880 --> 00:19:04.039
+polyexistentials that the Western IPR regime
+
+00:19:04.040 --> 00:19:06.799
+has created and restore
+
+00:19:06.800 --> 00:19:10.079
+polyexistentals back to their natural state,
+
+00:19:10.080 --> 00:19:16.199
+that of "Non-Rivalrous Public Goods".
+
+00:19:16.940 --> 00:19:20.119
+By now many Westerners and many West-Toxicated
+
+00:19:20.120 --> 00:19:24.039
+are thinking: these are empty slogans that are
+
+00:19:24.040 --> 00:19:24.999
+going no where.
+
+00:19:25.000 --> 00:19:26.279
+And they are right.
+
+00:19:26.280 --> 00:19:28.519
+Copyright and Patents are
+
+00:19:28.520 --> 00:19:30.679
+fully entrenched in the West.
+
+00:19:30.680 --> 00:19:33.319
+But what about the rest of the world,
+
+00:19:33.320 --> 00:19:34.519
+what about the
+
+00:19:34.520 --> 00:19:37.559
+Chinese, the Iranians, Brazilians, Cubans
+
+00:19:37.560 --> 00:19:39.239
+and the rest.
+
+00:19:39.240 --> 00:19:41.239
+The Intellectual Property Rights
+
+00:19:41.240 --> 00:19:43.879
+regime is not universal.
+
+00:19:43.880 --> 00:19:47.319
+There is more to the World than the West.
+
+00:19:47.320 --> 00:19:50.759
+What if the WTO was to be recognized
+
+00:19:50.760 --> 00:19:51.879
+for what it is:
+
+00:19:52.320 --> 00:19:56.119
+the Western Trade Organization?
+
+00:19:56.120 --> 00:19:58.879
+Thus far, I have been discussing the nature of
+
+00:19:58.880 --> 00:20:04.519
+all polyexistentials -- any formula in any form.
+
+00:20:04.520 --> 00:20:07.439
+Next, I want to turn our attention to
+
+00:20:07.440 --> 00:20:11.279
+digitals in general and Software in particular.
+
+00:20:12.480 --> 00:20:13.359
+Software is a
+
+00:20:13.360 --> 00:20:16.159
+very special form of polyexistentials.
+
+00:20:16.160 --> 00:20:18.719
+Software is immediately useful.
+
+00:20:18.720 --> 00:20:21.119
+Software produces tools.
+
+00:20:21.120 --> 00:20:25.399
+Digitals as text, music, video, etc.
+
+00:20:25.400 --> 00:20:28.719
+are pure forms of polyexistentials
+
+00:20:28.720 --> 00:20:30.799
+that are controlled by software.
+
+00:20:31.320 --> 00:20:35.679
+As developers we know well that we can best
+
+00:20:35.680 --> 00:20:38.759
+produce good software through collaboration.
+
+00:20:38.760 --> 00:20:41.559
+In that collaborative model,
+
+00:20:41.560 --> 00:20:45.879
+the software itself performs a collaborative role.
+
+00:20:45.880 --> 00:20:50.359
+Software functions as a vessel for accumulation
+
+00:20:50.360 --> 00:20:53.759
+of our expert component contributions.
+
+00:20:54.560 --> 00:20:57.679
+The Western IPR model cultivates
+
+00:20:57.680 --> 00:21:00.919
+"Artificial Scarcities" and "competition",
+
+00:21:00.920 --> 00:21:04.279
+but software developers instinctly
+
+00:21:04.280 --> 00:21:07.039
+recognized the superiority of
+
+00:21:07.040 --> 00:21:10.439
+the natural collaborative model.
+
+00:21:10.440 --> 00:21:14.119
+Through Public Licenses, us software developers,
+
+00:21:14.120 --> 00:21:18.679
+have done a jujitsu on the IPR model and have
+
+00:21:19.230 --> 00:21:22.719
+created a collaborative framework inside of the
+
+00:21:22.720 --> 00:21:25.919
+copyright model. Based on that,
+
+00:21:25.920 --> 00:21:27.719
+Natural Public Goods
+
+00:21:27.720 --> 00:21:31.679
+have defeated Artificial Scarcity.
+
+00:21:31.680 --> 00:21:34.479
+Our success with software is proof that the
+
+00:21:34.480 --> 00:21:38.559
+entirety of the Western IPR regime is flawed.
+
+00:21:40.240 --> 00:21:44.279
+As a profession, us Software Engineers, need to
+
+00:21:44.280 --> 00:21:47.379
+create a relationship with society.
+
+00:21:47.380 --> 00:21:50.519
+We need to demand for societal rules
+
+00:21:50.520 --> 00:21:53.599
+which establish proper manner-of-existence
+
+00:21:53.600 --> 00:21:56.999
+of software and internet application services.
+
+00:21:57.000 --> 00:21:59.359
+In return, based on that,
+
+00:21:59.360 --> 00:22:03.199
+we should fulfill our guardianship role and make
+
+00:22:03.200 --> 00:22:07.799
+sure that autonomy and privacy are preserved and
+
+00:22:07.800 --> 00:22:11.759
+that practiced digital ecosystems are healthy.
+
+00:22:11.760 --> 00:22:15.239
+To get there we need to come up with the right
+
+00:22:15.240 --> 00:22:18.079
+label that represents the proper
+
+00:22:18.080 --> 00:22:20.939
+manner-of-existence of software.
+
+00:22:20.940 --> 00:22:22.999
+Thus far, two labels
+
+00:22:23.000 --> 00:22:24.399
+have appeared on the scene:
+
+00:22:24.400 --> 00:22:28.159
+Free Software and Open Source.
+
+00:22:28.160 --> 00:22:32.199
+I am saying that both are problematic.
+
+00:22:32.200 --> 00:22:34.479
+Free Software is ill directed.
+
+00:22:34.480 --> 00:22:38.199
+It is based on the model of granting users,
+
+00:22:38.200 --> 00:22:42.839
+freedoms that are irrelevant to most software users.
+
+00:22:43.610 --> 00:22:46.679
+Perhaps Copyleft or Ethical Software
+
+00:22:46.680 --> 00:22:49.699
+could have been better labels.
+
+00:22:49.700 --> 00:22:52.359
+Open Source is a moral compromise.
+
+00:22:52.360 --> 00:22:58.439
+It rejects the requirement for perpetuity of Copyleft.
+
+00:22:58.440 --> 00:23:01.999
+It facilitates convergence of corporate interest
+
+00:23:02.000 --> 00:23:06.599
+and surrogate activities of software developers.
+
+00:23:06.600 --> 00:23:09.839
+Over time, proprietary corporations too
+
+00:23:09.840 --> 00:23:11.959
+have come to recognize the
+
+00:23:11.960 --> 00:23:15.819
+superiority of the collaborative model.
+
+00:23:15.820 --> 00:23:18.959
+These proprietary corporations then derailed
+
+00:23:18.960 --> 00:23:21.919
+the original intent that all software
+
+00:23:21.920 --> 00:23:24.159
+should always remain open-source.
+
+00:23:24.160 --> 00:23:27.319
+With permissive public licenses which
+
+00:23:27.320 --> 00:23:31.719
+permit open-source becoming proprietary,
+
+00:23:31.720 --> 00:23:34.079
+the intent of Free Software has been
+
+00:23:34.080 --> 00:23:37.679
+marginalized and permissive open-source
+
+00:23:37.680 --> 00:23:40.119
+has become the norm.
+
+00:23:40.120 --> 00:23:42.679
+I expand on all of this in Chapter 12,
+
+00:23:42.680 --> 00:23:46.899
+"Digital Non-Proprietary Movements".
+
+00:23:46.900 --> 00:23:49.599
+Instead of Free Software and Open Source,
+
+00:23:49.600 --> 00:23:53.679
+the label that I introduce is: "Libre-Halaal".
+
+00:23:55.320 --> 00:23:58.319
+The Libre-Halaal label is distinct and
+
+00:23:58.320 --> 00:24:00.239
+different from FOSS labels.
+
+00:24:00.240 --> 00:24:03.479
+As an inside-of-IPR strategy,
+
+00:24:03.480 --> 00:24:06.239
+the Libre-Halaal label maps
+
+00:24:06.240 --> 00:24:08.439
+to a single public license ---
+
+00:24:08.440 --> 00:24:11.779
+the Affero GPL (AGPL).
+
+00:24:11.780 --> 00:24:13.439
+In the Libre-Halaal model,
+
+00:24:13.440 --> 00:24:15.599
+it is not up to developers to
+
+00:24:15.600 --> 00:24:17.679
+choose their own licenses.
+
+00:24:18.230 --> 00:24:21.799
+There is only one correct license that conveys the
+
+00:24:21.800 --> 00:24:25.319
+Libre-Halaal manner-of-existence of software.
+
+00:24:25.830 --> 00:24:29.759
+Also, unlike the FOSS labels that dance around
+
+00:24:29.760 --> 00:24:33.439
+the validity of the Western IPR regime,
+
+00:24:33.440 --> 00:24:37.039
+the Libre-Halaal label recognizes
+
+00:24:37.040 --> 00:24:40.199
+the invalidity of the Western IPR regime,
+
+00:24:40.200 --> 00:24:43.959
+calls for abolishment of Western IPR
+
+00:24:43.960 --> 00:24:49.779
+and suggests various outside-of-IPR strategies.
+
+00:24:49.780 --> 00:24:54.199
+See Part V, "Formulation of Societal Policies"
+
+00:24:54.200 --> 00:24:55.119
+for details.
+
+00:24:55.860 --> 00:24:59.359
+Furthermore, unlike FOSS which is
+
+00:24:59.360 --> 00:25:03.519
+just software oriented, the Libre-Halaal label goes
+
+00:25:03.520 --> 00:25:05.799
+beyond software and also
+
+00:25:05.800 --> 00:25:11.059
+applies to internet application services.
+
+00:25:11.060 --> 00:25:14.559
+In many ways, software is yesterday's news.
+
+00:25:15.010 --> 00:25:17.519
+Much of what we are experiencing
+
+00:25:17.520 --> 00:25:18.639
+today is in the form of
+
+00:25:18.640 --> 00:25:20.839
+internet application services.
+
+00:25:21.610 --> 00:25:24.159
+Internet application services provide
+
+00:25:24.160 --> 00:25:27.479
+remote access to execution of software.
+
+00:25:28.140 --> 00:25:31.719
+As such, much of FOSS has become proprietary
+
+00:25:31.720 --> 00:25:33.679
+internet application services
+
+00:25:33.680 --> 00:25:37.879
+as AGPL is rarely used.
+
+00:25:38.900 --> 00:25:42.359
+This is why the Libre-Halaal definitions and labels
+
+00:25:42.360 --> 00:25:48.559
+span software and Internet Application Services.
+
+00:25:48.560 --> 00:25:52.319
+Based on the interdisciplinary stage setting that
+
+00:25:52.320 --> 00:25:55.959
+the "Nature of Polyexistentials" book provided
+
+00:25:55.960 --> 00:25:59.479
+and the ByStar blueprint that we reviewed, we can
+
+00:25:59.480 --> 00:26:01.679
+now focus on Blee.
+
+00:26:01.680 --> 00:26:04.839
+Think of Blee as a layer on top of Emacs and
+
+00:26:04.840 --> 00:26:07.919
+think of BISOS as a layer on top of Debian.
+
+00:26:09.590 --> 00:26:13.959
+Let's bootstrap Raw-BISOS and Raw-Blee.
+
+00:26:13.960 --> 00:26:15.439
+Starting from scratch,
+
+00:26:15.440 --> 00:26:19.459
+get yourself a fresh copy of Debian 12.
+
+00:26:19.460 --> 00:26:25.159
+Then go to https://github.com/bxGenesis/start
+
+00:26:26.220 --> 00:26:29.439
+The README.org file of that github repo is same
+
+00:26:29.440 --> 00:26:30.479
+as Chapter 18,
+
+00:26:30.480 --> 00:26:32.879
+"Engineering Adoption of BISOS and ByStar"
+
+00:26:32.880 --> 00:26:33.999
+of the book.
+
+00:26:35.160 --> 00:26:41.559
+We will next run "raw-bisos.sh", but prior to
+
+00:26:41.560 --> 00:26:44.679
+that let's take a quick look.
+
+00:26:44.680 --> 00:26:46.999
+This bootstrap scripts will
+
+00:26:47.000 --> 00:26:50.199
+do a lot as root on your Fresh-Debian.
+
+00:26:50.200 --> 00:26:54.279
+It is best to first try it on a disposable VM.
+
+00:26:54.950 --> 00:26:58.319
+raw-bisos.sh adds
+
+00:26:58.320 --> 00:27:00.879
+the current debian user to sudoers.
+
+00:27:00.880 --> 00:27:04.119
+Then it installs pipx.
+
+00:27:04.120 --> 00:27:06.679
+And then with pipx
+
+00:27:06.680 --> 00:27:11.719
+it installs from PyPI bisos.provision.
+
+00:27:12.710 --> 00:27:15.919
+bisos.provision includes additional
+
+00:27:15.920 --> 00:27:19.819
+bash scripts that are then executed.
+
+00:27:19.820 --> 00:27:23.279
+Full installation involves setting up various
+
+00:27:23.280 --> 00:27:26.959
+accounts, groups, various directory hierarchies,
+
+00:27:26.960 --> 00:27:31.239
+lots of apt packages and lots of python packages
+
+00:27:31.240 --> 00:27:35.239
+from the bisos namespace.
+
+00:27:35.240 --> 00:27:38.719
+If you are ready, copy and paste this line and
+
+00:27:38.720 --> 00:27:40.459
+run it.
+
+00:27:40.460 --> 00:27:43.419
+You will be prompted for the root password.
+
+00:27:43.420 --> 00:27:44.679
+Then be patient.
+
+00:27:45.170 --> 00:27:48.999
+Full installation can take 15 minutes or so.
+
+00:27:49.000 --> 00:27:52.599
+The logs of this script are also captured in
+
+00:27:52.600 --> 00:27:59.839
+~/raw-bisos-${dateTag}-log.org
+
+00:27:59.840 --> 00:28:02.319
+What has been installed on your system are
+
+00:28:02.320 --> 00:28:04.799
+Raw-BISOS and Raw-Blee.
+
+00:28:05.250 --> 00:28:09.079
+The universality of Debian let's us build on
+
+00:28:09.080 --> 00:28:13.599
+BISOS and Blee both in the usage environment and
+
+00:28:13.600 --> 00:28:14.959
+the service environment.
+
+00:28:16.570 --> 00:28:20.759
+With Emacs 30 now available on Android and with
+
+00:28:20.760 --> 00:28:25.559
+Termux apt packages infrastructure in place, it
+
+00:28:25.560 --> 00:28:27.039
+will be very viable to
+
+00:28:27.040 --> 00:28:30.379
+port BISOS and Blee to Android.
+
+00:28:30.380 --> 00:28:32.579
+We have not done so yet.
+
+00:28:32.580 --> 00:28:36.239
+We are waiting for Emacs-30 to mature up.
+
+00:28:36.240 --> 00:28:40.479
+This is ByStar's "Mobile Second" strategy.
+
+00:28:40.480 --> 00:28:44.039
+Upon completion of the bootstrapping process, you
+
+00:28:44.040 --> 00:28:47.959
+end up with Raw-BISOS and Raw-Blee.
+
+00:28:47.960 --> 00:28:49.639
+You then need to relogin.
+
+00:28:49.640 --> 00:28:52.559
+At which point you notice that a new account
+
+00:28:52.560 --> 00:28:56.279
+called bystar has been created.
+
+00:28:56.280 --> 00:28:59.679
+"bystar" is the default usage account.
+
+00:28:59.680 --> 00:29:01.799
+Let's login into it.
+
+00:29:01.800 --> 00:29:06.099
+You will see a customized ByStar Gnome Desktop.
+
+00:29:06.100 --> 00:29:10.319
+You will also notice a "Blee Startup" icon.
+
+00:29:10.320 --> 00:29:13.619
+Let's use it and start Blee.
+
+00:29:13.620 --> 00:29:17.039
+Notice that the Emacs splash-screen has been
+
+00:29:17.040 --> 00:29:20.919
+replaced and also note that the splash-screen is
+
+00:29:20.920 --> 00:29:23.299
+in org-mode.
+
+00:29:23.300 --> 00:29:26.639
+All the original Emacs splash-screen
+
+00:29:26.640 --> 00:29:31.999
+info is kept under "About Emacs".
+
+00:29:32.000 --> 00:29:34.639
+Let me enlarge the screen.
+
+00:29:34.640 --> 00:29:37.619
+Now we can live inside of Blee.
+
+00:29:37.620 --> 00:29:38.959
+Notice that the top
+
+00:29:38.960 --> 00:29:43.719
+drop down Emacs menus have been augmented.
+
+00:29:43.720 --> 00:29:48.659
+Everything to the left of the "File" menu, is new.
+
+00:29:48.660 --> 00:29:51.319
+Notice the "Panels" menus.
+
+00:29:51.320 --> 00:29:54.019
+More on these later.
+
+00:29:54.020 --> 00:29:56.559
+Now let me get myself a shell.
+
+00:29:56.560 --> 00:30:02.659
+And run tail /etc/passwd.
+
+00:30:02.660 --> 00:30:04.159
+Notice that a number of
+
+00:30:04.160 --> 00:30:06.839
+new accounts have been created.
+
+00:30:06.840 --> 00:30:14.879
+Notably: bisos, bystar and bpos-delimiter.
+
+00:30:14.880 --> 00:30:18.639
+Let's next cd to /bisos.
+
+00:30:18.640 --> 00:30:21.879
+Everything related to bisos is in here.
+
+00:30:21.880 --> 00:30:26.319
+The rest is as Debian was.
+
+00:30:26.320 --> 00:30:33.359
+Let's take a look at /bisos/blee/env3.
+
+00:30:33.360 --> 00:30:37.139
+All the elisp code for Blee is in here.
+
+00:30:37.140 --> 00:30:41.299
+For now, Blee is layered on top of Doom.
+
+00:30:41.300 --> 00:30:45.199
+Raw-BISOS and Raw-Blee are starting points.
+
+00:30:45.200 --> 00:30:47.959
+They are meant to be customized.
+
+00:30:47.960 --> 00:30:53.739
+Let's next see how that is done.
+
+00:30:53.740 --> 00:30:58.359
+Raw-BISOS and Raw-Blee are foundational layers.
+
+00:30:58.850 --> 00:31:01.719
+They can be augmented in a variety of ways.
+
+00:31:01.720 --> 00:31:05.599
+The basic unit in the ByStar model is the
+
+00:31:05.600 --> 00:31:07.959
+"Autonomous Site".
+
+00:31:07.960 --> 00:31:10.559
+Think of the "Autonomous Site" as the
+
+00:31:10.560 --> 00:31:13.439
+totality of computing and communication
+
+00:31:13.440 --> 00:31:16.239
+capabilities in a modern family
+
+00:31:16.240 --> 00:31:20.399
+home plus the ability of that family to host
+
+00:31:20.400 --> 00:31:23.559
+their own internet application services.
+
+00:31:24.280 --> 00:31:28.639
+Let's walk through how Raw-BISOS and Raw-Blee are
+
+00:31:28.640 --> 00:31:32.879
+used to construct an Autonomous Site.
+
+00:31:32.880 --> 00:31:36.039
+BISOS augmentation model is based on
+
+00:31:36.040 --> 00:31:40.299
+"BISOS Capability Bundles" BCBs.
+
+00:31:40.300 --> 00:31:43.479
+Raw-BISOS can be augmented to
+
+00:31:43.480 --> 00:31:46.659
+become a Virtual Machines Hosting service.
+
+00:31:46.660 --> 00:31:50.599
+From there on we can use reproducible images to
+
+00:31:50.600 --> 00:31:54.199
+implement the infrastructure of sites.
+
+00:31:54.200 --> 00:31:56.799
+Two key site services are the
+
+00:31:56.800 --> 00:32:01.219
+"Site BPOs Gitlab Server"
+
+00:32:01.220 --> 00:32:04.079
+and "Site Registrars".
+
+00:32:04.080 --> 00:32:06.799
+With these in place we can facilitate
+
+00:32:06.800 --> 00:32:10.879
+self-hosting, which in the BISOS model is called
+
+00:32:10.880 --> 00:32:15.439
+Possession Assertable Libre Services (PALS).
+
+00:32:15.440 --> 00:32:18.639
+These topics and these concepts are described in
+
+00:32:18.640 --> 00:32:25.219
+Chapter 17, "Technology of ByStar: BISOS".
+
+00:32:25.220 --> 00:32:28.839
+The concepts of Service Portability, Service
+
+00:32:28.840 --> 00:32:32.599
+Possession Assertion, Autonomous Site and Inner,
+
+00:32:32.600 --> 00:32:36.999
+Outer and Exposed Rims of Autonomous Site are
+
+00:32:37.000 --> 00:32:39.899
+fundamental to ByStar.
+
+00:32:39.900 --> 00:32:42.279
+These are shown in this figure as
+
+00:32:42.280 --> 00:32:43.519
+"Network Abodes".
+
+00:32:43.520 --> 00:32:47.839
+Chapter 17 of the book provides more details.
+
+00:32:49.490 --> 00:32:52.919
+Blee introduces a number of new concepts that
+
+00:32:52.920 --> 00:32:57.359
+augment Emacs. Some of these are intertwined with
+
+00:32:57.360 --> 00:33:01.039
+BISOS and ByStar. But some are not.
+
+00:33:01.040 --> 00:33:04.199
+Here, I provide some examples of these new
+
+00:33:04.200 --> 00:33:07.019
+general concepts.
+
+00:33:07.020 --> 00:33:10.599
+We love Emacs and we love Unix because their
+
+00:33:10.600 --> 00:33:14.599
+design is convivial. By convivial, I am referring
+
+00:33:14.600 --> 00:33:17.799
+to Ivan Illich's concept and terminology of
+
+00:33:17.800 --> 00:33:21.159
+"Tools for Conviviality". It was first
+
+00:33:21.160 --> 00:33:25.219
+published in 1973. It's a must read.
+
+00:33:25.220 --> 00:33:28.519
+A goal of the design of the ByStar Digital
+
+00:33:28.520 --> 00:33:32.639
+Ecosystem is to enlarge aggregated conviviality.
+
+00:33:32.640 --> 00:33:37.239
+Here, let's start by reviewing the idioms and
+
+00:33:37.240 --> 00:33:40.559
+means that have made Emacs and Unix so very
+
+00:33:40.560 --> 00:33:44.639
+convivial and some of the key idioms that have
+
+00:33:44.640 --> 00:33:48.079
+augmented them over the years -- I am showing
+
+00:33:48.080 --> 00:33:50.279
+them as "Linux PlusPlus"
+
+00:33:50.280 --> 00:33:52.919
+and "Emacs PlusPlus".
+
+00:33:52.920 --> 00:33:54.759
+For the most part these
+
+00:33:54.760 --> 00:33:57.959
+two philosophies have not been combined.
+
+00:33:57.960 --> 00:33:59.759
+They were developed and have
+
+00:33:59.760 --> 00:34:01.719
+evolved mostly separately.
+
+00:34:01.720 --> 00:34:06.479
+Think of BISOS idioms as an extension of Linux
+
+00:34:06.480 --> 00:34:10.519
+PlusPlus idioms and think of Blee idioms as an
+
+00:34:10.520 --> 00:34:14.179
+extension of Emacs PlusPlus.
+
+00:34:14.180 --> 00:34:16.799
+Then intertwine BISOS and Blee.
+
+00:34:16.800 --> 00:34:21.519
+This aggregated convivial tools powers ByStar.
+
+00:34:22.179 --> 00:34:25.479
+Let me first explain what I mean by aggregated
+
+00:34:25.480 --> 00:34:28.279
+convivial tools, and then
+
+00:34:28.280 --> 00:34:32.139
+let me give some examples.
+
+00:34:32.140 --> 00:34:34.759
+Here is a key sentence from Illich's,
+
+00:34:34.760 --> 00:34:39.719
+"Tools for Conviviality" 1973 essay:
+
+00:34:39.720 --> 00:34:43.599
+Convivial tools are those which give each person
+
+00:34:43.600 --> 00:34:47.199
+who uses them the greatest opportunity to enrich
+
+00:34:47.200 --> 00:34:48.839
+the environment with the
+
+00:34:48.840 --> 00:34:52.739
+fruits of his or her vision.
+
+00:34:52.740 --> 00:34:55.559
+Proprietary manner-of-existence of software
+
+00:34:55.560 --> 00:34:57.999
+makes them industrial.
+
+00:34:58.000 --> 00:35:00.399
+Libre-Halaal manner-of-existence
+
+00:35:00.400 --> 00:35:03.319
+of software is a prerequisite for conviviality.
+
+00:35:03.320 --> 00:35:07.439
+The concept of
+
+00:35:07.440 --> 00:35:10.639
+"Org Dynamic Blocks" is very powerful.
+
+00:35:10.640 --> 00:35:14.399
+But, why should they be primarily used
+
+00:35:14.400 --> 00:35:16.279
+in Org-Mode.
+
+00:35:16.280 --> 00:35:18.599
+I say let's generalize them to
+
+00:35:18.600 --> 00:35:20.239
+"Emacs Dynamic Blocks".
+
+00:35:20.240 --> 00:35:24.279
+Have defaults for org-dblock-start-re in
+
+00:35:24.280 --> 00:35:29.759
+every relevant mode and use them everywhere.
+
+00:35:29.760 --> 00:35:30.679
+Blee does that.
+
+00:35:30.680 --> 00:35:33.239
+In programming languages, Dynamic
+
+00:35:33.240 --> 00:35:34.879
+Blocks can be used as visible macros.
+
+00:35:34.880 --> 00:35:38.939
+Let me give you an example of how I use them.
+
+00:35:38.940 --> 00:35:41.759
+For those of us who live inside of Emacs,
+
+00:35:41.760 --> 00:35:46.359
+enhancing programming with org-mode capabilities
+
+00:35:46.360 --> 00:35:47.859
+is awesome.
+
+00:35:47.860 --> 00:35:50.379
+Incredibly awesome!
+
+00:35:50.380 --> 00:35:52.819
+This can be done in two ways.
+
+00:35:52.820 --> 00:35:57.159
+(1) With Literate Programming and org-babel.
+
+00:35:57.160 --> 00:35:58.799
+and (2) with
+
+00:35:58.800 --> 00:36:03.459
+Traditional/Surrounded Programming and COMEEGA.
+
+00:36:03.460 --> 00:36:04.959
+COMEEGA stands for
+
+00:36:04.960 --> 00:36:08.679
+Collaborative Org-Mode Enhanced Emacs
+
+00:36:08.680 --> 00:36:10.559
+Generalized Authorship.
+
+00:36:10.560 --> 00:36:15.259
+It is just an acronym that I have come up with.
+
+00:36:15.260 --> 00:36:18.319
+Literate Programming and org-babel
+
+00:36:18.320 --> 00:36:20.059
+are well established.
+
+00:36:20.060 --> 00:36:25.599
+There is a related talk in EmacsConf-2024 titled:
+
+00:36:25.600 --> 00:36:30.839
+"Literate Programming for the 21st Century".
+
+00:36:30.840 --> 00:36:33.559
+COMEEGA is the inverse of org-babel.
+
+00:36:34.080 --> 00:36:38.479
+I prefer COMEEGA over org-babel,
+
+00:36:38.480 --> 00:36:39.599
+because I prefer
+
+00:36:39.600 --> 00:36:41.799
+Traditional/Surrounded Programming
+
+00:36:41.800 --> 00:36:44.899
+over Literate Programming.
+
+00:36:44.900 --> 00:36:46.359
+To each his own.
+
+00:36:46.360 --> 00:36:49.079
+This is not about that debate.
+
+00:36:49.080 --> 00:36:51.039
+This is about mixing your
+
+00:36:51.040 --> 00:36:55.019
+programming-mode with org-mode.
+
+00:36:55.020 --> 00:36:56.799
+Much of Blee and BISOS
+
+00:36:56.800 --> 00:36:58.719
+are implemented in COMEEGA.
+
+00:36:58.720 --> 00:37:02.407
+Almost all of our Elisp, Python, Bash
+
+00:37:02.408 --> 00:37:06.199
+and LaTeX work uses COMEEGA.
+
+00:37:06.200 --> 00:37:08.174
+Full and proper use of COMEEGA,
+
+00:37:08.175 --> 00:37:13.279
+requires Polymode. Let's call that Poly-COMEEGA.
+
+00:37:13.280 --> 00:37:16.739
+But Emacs's Polymode is work-in-progress,
+
+00:37:16.740 --> 00:37:20.559
+particularly now with the new tree-sitter.
+
+00:37:20.560 --> 00:37:23.479
+So, in the interim, my usage of
+
+00:37:23.480 --> 00:37:28.779
+COMEEGA has been in the form of Toggle-COMEEGA.
+
+00:37:28.780 --> 00:37:30.839
+Where I manually switch between the
+
+00:37:30.840 --> 00:37:33.799
+programming-mode and org-mode.
+
+00:37:33.800 --> 00:37:34.839
+For me this has
+
+00:37:34.840 --> 00:37:41.699
+proved to be a fine interim solution.
+
+00:37:41.700 --> 00:37:43.639
+In Emacs, the way that we have been
+
+00:37:43.640 --> 00:37:45.359
+dealing with documentation and
+
+00:37:45.360 --> 00:37:49.559
+information retrieval is archaic.
+
+00:37:49.560 --> 00:37:52.239
+Man-pages, TeXInfo, Helpful-Mode and
+
+00:37:52.730 --> 00:37:56.440
+convention based Doc-Strings are old and
+
+00:37:56.441 --> 00:37:57.699
+limited.
+
+00:37:57.700 --> 00:38:01.759
+In BISOS and Blee, we use Blee-Panels for all
+
+00:38:01.760 --> 00:38:03.779
+kinds of documentation.
+
+00:38:03.780 --> 00:38:09.359
+Let me show you some examples.
+
+00:38:09.360 --> 00:38:12.959
+Two fundamental autonomy oriented capabilities
+
+00:38:12.960 --> 00:38:16.799
+that ByStar offers to individuals are:
+
+00:38:16.800 --> 00:38:20.739
+Email and Content Generation and Publication.
+
+00:38:20.740 --> 00:38:22.399
+I'll give a quick overview of
+
+00:38:22.400 --> 00:38:26.299
+these two important capabilities.
+
+00:38:26.300 --> 00:38:30.679
+At the EmacsConf-2022, the title of my
+
+00:38:30.680 --> 00:38:32.439
+presentation was:
+
+00:38:32.440 --> 00:38:37.679
+"Revisiting the anatomy of Emacs mail user agents".
+
+00:38:37.680 --> 00:38:39.359
+In that presentation I
+
+00:38:39.360 --> 00:38:43.119
+gave a brief overview of BISOS-MARMEE
+
+00:38:43.120 --> 00:38:47.739
+(Multi-Account Resident Mail Exchange Environment)
+
+00:38:47.740 --> 00:38:49.079
+and Blee-Gnus.
+
+00:38:49.080 --> 00:38:53.079
+In ByStar, these are typically paired with
+
+00:38:53.080 --> 00:38:58.039
+byname.net autonomous email services.
+
+00:38:58.040 --> 00:39:00.879
+Content Production and Self-Publication is a
+
+00:39:00.880 --> 00:39:06.059
+foundational Blee and BISOS Capability Bundle.
+
+00:39:06.060 --> 00:39:08.079
+Both this presentation and
+
+00:39:08.080 --> 00:39:11.739
+the Nature of Polyexistentials book
+
+00:39:11.740 --> 00:39:15.039
+were developed with Blee LCNT.
+
+00:39:15.040 --> 00:39:18.919
+The original text is always in COMEEGA-LaTeX --
+
+00:39:18.920 --> 00:39:22.299
+LaTeX augmented by Org-Mode.
+
+00:39:22.300 --> 00:39:23.439
+This is the inverse
+
+00:39:23.440 --> 00:39:27.159
+direction of exporting LaTeX from Org-Mode.
+
+00:39:27.160 --> 00:39:28.759
+For typesetting,
+
+00:39:28.760 --> 00:39:31.279
+the LaTeX syntax is far more
+
+00:39:31.280 --> 00:39:33.539
+powerful than org-mode.
+
+00:39:33.540 --> 00:39:35.399
+And with COMEEGA-LaTeX,
+
+00:39:35.400 --> 00:39:36.999
+you can also benefit from
+
+00:39:37.000 --> 00:39:41.339
+all that org-mode offers.
+
+00:39:41.340 --> 00:39:44.319
+For presentation/screen-casting,
+
+00:39:44.320 --> 00:39:48.679
+the original text is then augmented in layers
+
+00:39:48.680 --> 00:39:53.839
+by images, audio voice-overs, screen captures,
+
+00:39:53.840 --> 00:39:56.919
+videos and captions.
+
+00:39:56.920 --> 00:39:59.799
+The Beamer LaTeX file is then processed
+
+00:39:59.800 --> 00:40:02.559
+by both LaTeX and HeVeA.
+
+00:40:02.560 --> 00:40:05.959
+LaTeX produced slides are then
+
+00:40:05.960 --> 00:40:10.519
+absorbed in html by HeVeA as images.
+
+00:40:10.520 --> 00:40:13.759
+HeVeA is a LaTeX to html translator.
+
+00:40:13.760 --> 00:40:19.879
+HeVeA output is destined to be dispensed by Reveal.js.
+
+00:40:19.880 --> 00:40:25.119
+This video is just a screen capture of the autoplay of
+
+00:40:25.120 --> 00:40:27.339
+reveal file.
+
+00:40:27.340 --> 00:40:30.959
+Viewing this presentation in its
+
+00:40:30.960 --> 00:40:35.479
+original Reveal form is a richer experience.
+
+00:40:36.010 --> 00:40:39.679
+All of this involves a whole lot of integration
+
+00:40:39.680 --> 00:40:44.159
+scripting. In Raw-BISOS these scripts are in
+
+00:40:44.160 --> 00:40:53.319
+file:/bisos/core/lcnt/bin
+
+00:40:53.320 --> 00:40:57.399
+To say that ByStar, BISOS and Blee are big and
+
+00:40:57.400 --> 00:41:00.359
+ambitious is an understatement.
+
+00:41:00.360 --> 00:41:04.039
+And clearly, a small team won't be able to
+
+00:41:04.040 --> 00:41:07.959
+deliver the outlandish blueprint that is outlined
+
+00:41:07.960 --> 00:41:12.379
+in the Nature of Polyexistentials book.
+
+00:41:12.380 --> 00:41:15.959
+We have been at this for over two decades and we
+
+00:41:15.960 --> 00:41:18.519
+feel that now in 2024,
+
+00:41:18.520 --> 00:41:23.059
+it makes sense to involve you.
+
+00:41:23.060 --> 00:41:26.719
+The pointers and instructions for installation
+
+00:41:26.720 --> 00:41:31.199
+and usage of BISOS and Blee that I have provided,
+
+00:41:31.200 --> 00:41:34.679
+produce systems that are minimally functional,
+
+00:41:34.680 --> 00:41:37.399
+but are not clean.
+
+00:41:37.400 --> 00:41:40.079
+At this time don't expect software and services
+
+00:41:40.080 --> 00:41:42.759
+stability and support.
+
+00:41:42.760 --> 00:41:45.319
+Throughout this presentation, I have been
+
+00:41:45.320 --> 00:41:49.399
+emphasizing Service Portability and Possession
+
+00:41:49.400 --> 00:41:52.679
+Assertable Libre Services (PALS).
+
+00:41:52.680 --> 00:41:58.359
+But, a complete digital ecosystem includes various other types of
+
+00:41:58.360 --> 00:42:01.759
+internet application services as well.
+
+00:42:01.760 --> 00:42:05.799
+In this slide PALS are the center and are then
+
+00:42:05.800 --> 00:42:09.119
+augmented by different other type of services.
+
+00:42:09.120 --> 00:42:13.639
+In the ByStar model, equivalent of Facebook style
+
+00:42:13.640 --> 00:42:16.359
+application services are called:
+
+00:42:16.360 --> 00:42:19.619
+"Inter-Autonomous Interactions".
+
+00:42:19.620 --> 00:42:23.679
+With individual oriented PALS in place, using
+
+00:42:23.680 --> 00:42:28.279
+OAuth of PALS, resources can be shared.
+
+00:42:28.280 --> 00:42:32.479
+Based on that we can then structure Inter-Autonomous
+
+00:42:32.480 --> 00:42:37.319
+Interactions while preserving much privacy.
+
+00:42:37.320 --> 00:42:41.719
+Any blueprint for a digital ecosystem must also
+
+00:42:41.720 --> 00:42:46.039
+consider the economic and business dimensions.
+
+00:42:46.040 --> 00:42:50.379
+Chapter 13, "Polyexistential Capitalism",
+
+00:42:50.380 --> 00:42:52.959
+delves into proper economic models for
+
+00:42:52.960 --> 00:42:55.579
+polyexsitentials.
+
+00:42:55.580 --> 00:42:57.879
+The concept of Attribution
+
+00:42:57.880 --> 00:43:02.399
+Based Economics (ABE) which has been discussed in
+
+00:43:02.400 --> 00:43:05.719
+this forum before is included.
+
+00:43:05.720 --> 00:43:06.839
+Chapter 21,
+
+00:43:06.840 --> 00:43:09.159
+"Private Sector Strategies:
+
+00:43:09.160 --> 00:43:12.899
+ByStar Open Business Plan"
+
+00:43:12.900 --> 00:43:17.079
+deals with the business dimension of ByStar.
+
+00:43:17.080 --> 00:43:20.659
+What if in addition to being ethics oriented,
+
+00:43:20.660 --> 00:43:24.079
+the entirety of this book could also be
+
+00:43:24.080 --> 00:43:28.739
+considered a sophisticated business plan?
+
+00:43:28.740 --> 00:43:34.139
+Are there any Venture Capitalists that use Emacs?
+
+00:43:34.140 --> 00:43:37.639
+Here is a set of relatively complete domains and
+
+00:43:37.640 --> 00:43:41.919
+links for digging deeper. These pointers are
+
+00:43:41.920 --> 00:43:46.119
+structured in 4 layers. Ideology, Software,
+
+00:43:46.120 --> 00:43:50.159
+Services and Guardianship.
+
+00:43:50.160 --> 00:43:53.679
+If Blee, BISOS, ByStar, Libre-Halaal and
+
+00:43:53.680 --> 00:43:57.879
+Polyexistentials have piqued your interest and if
+
+00:43:57.880 --> 00:44:00.599
+you wish to participate in making these ideas
+
+00:44:00.600 --> 00:44:04.199
+more widespread and want to further cultivate
+
+00:44:04.200 --> 00:44:06.919
+them, here are some suggestions.
+
+00:44:06.920 --> 00:44:11.719
+The examples of the Blee concepts that I chose
+
+00:44:11.720 --> 00:44:15.179
+were purposeful and targeted.
+
+00:44:15.180 --> 00:44:18.599
+I am hopeful that org-mode developers and emacs
+
+00:44:18.600 --> 00:44:22.319
+developers would recognize that it makes good
+
+00:44:22.320 --> 00:44:25.599
+sense to expand the scope of org dynamic blocks
+
+00:44:25.600 --> 00:44:28.779
+to the entirety of emacs.
+
+00:44:28.780 --> 00:44:31.399
+I am hopeful that the concept of polymode -- a
+
+00:44:31.400 --> 00:44:35.279
+single buffer with regions in different modes and
+
+00:44:35.280 --> 00:44:39.759
+org-mode in particular -- would receive a high
+
+00:44:39.760 --> 00:44:44.559
+priority in our tree-sitter transition. I am
+
+00:44:44.560 --> 00:44:47.799
+hopeful that Blee-COMEEGA can become a
+
+00:44:47.800 --> 00:44:52.259
+generalized form of polymode.
+
+00:44:52.260 --> 00:44:55.559
+I am hopeful that we can build on Blee-Panels and
+
+00:44:55.560 --> 00:44:59.439
+move towards having a richer base for a universal
+
+00:44:59.440 --> 00:45:03.879
+Emacs documentation framework.
+
+00:45:03.880 --> 00:45:07.079
+If participation in any of these is of interest
+
+00:45:07.080 --> 00:45:10.659
+to you, please feel welcome to contact me.
+
+00:45:10.660 --> 00:45:13.519
+Emacs Conferences have proven to be
+
+00:45:13.520 --> 00:45:16.659
+very useful and productive.
+
+00:45:16.660 --> 00:45:21.539
+I look forward to your thoughts, feedback and questions.
+
+00:45:21.540 --> 00:45:24.799
+I want to thank all the EmacsConf Organizers for
+
+00:45:24.800 --> 00:45:26.139
+their great work.
+
+00:45:26.140 --> 00:45:29.960
+And Sacha, Leo and Amin in particular.
diff --git a/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt
new file mode 100644
index 00000000..7c6db8c8
--- /dev/null
+++ b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt
@@ -0,0 +1,966 @@
+WEBVTT
+
+NOTE Opening
+
+00:00:00.000 --> 00:00:05.239
+Leo? I'm doing well as well and I'm so happy to have seen your
+
+00:00:05.240 --> 00:00:10.719
+talk because the interaction with Emacs is always
+
+00:00:10.720 --> 00:00:13.719
+something that I find very interesting, and stuff like
+
+00:00:13.720 --> 00:00:18.839
+Transient, stuff like Hydra before, I think they really
+
+00:00:18.840 --> 00:00:22.119
+improve the user experience of users, and I'm really glad
+
+00:00:22.120 --> 00:00:24.479
+that I've seen you talk. Perhaps just starting with the
+
+00:00:24.480 --> 00:00:27.639
+first question, do you have anything else that you'd like to
+
+00:00:27.640 --> 00:00:30.719
+add on your talk? Because we are pretty stringent with the
+
+00:00:30.720 --> 00:00:33.199
+amount of time that we give for talks, but is there anything
+
+00:00:33.200 --> 00:00:35.639
+that you would have liked to mention to people that you
+
+00:00:35.640 --> 00:00:42.719
+weren't able to fit into the talk? I think probably one of the
+
+00:00:42.720 --> 00:00:46.599
+design considerations I've done is that many of the
+
+00:00:46.600 --> 00:00:49.359
+commands that I've exposed through my casual interfaces
+
+00:00:49.360 --> 00:00:56.399
+have been in Emacs. They've been in there forever, but very
+
+00:00:56.400 --> 00:01:00.439
+few people uh, myself included really know that they're
+
+00:01:00.440 --> 00:01:05.999
+there, uh, because they're just not discoverable through,
+
+00:01:06.000 --> 00:01:09.559
+uh, basically the existing mechanisms, you know, prior to
+
+00:01:09.560 --> 00:01:13.479
+transient and which key to, to even know that those, those
+
+00:01:13.480 --> 00:01:19.399
+functions are there. Yeah. So I think I'm going to start
+
+00:01:19.400 --> 00:01:21.519
+asking you questions whilst people start writing them in a
+
+00:01:21.520 --> 00:01:25.759
+pad. But yeah, I also think that discoverability is a very
+
+00:01:25.760 --> 00:01:29.559
+huge point that having stuff like the stuff that you've
+
+00:01:29.560 --> 00:01:32.679
+showed today actually allows. One example that I'd like to
+
+00:01:32.680 --> 00:01:35.759
+give that many people tend to forget, and you've already
+
+00:01:35.760 --> 00:01:39.559
+mentioned it in your presentation, is that I've learned so
+
+00:01:39.560 --> 00:01:43.479
+much about using git in general thanks to Magit, for the
+
+00:01:43.480 --> 00:01:46.719
+reason that it shows you so many options that you might not be
+
+00:01:46.720 --> 00:01:50.799
+aware of. For instance, I like to really think about when
+
+00:01:50.800 --> 00:01:54.519
+you think about logging in git, Magit allows you to
+
+00:01:54.520 --> 00:01:58.119
+discover so many of the finer options, like I only want to
+
+00:01:58.120 --> 00:02:01.519
+see the first commit since the merge, or I only want to
+
+00:02:01.520 --> 00:02:05.999
+consider this subsection of commits going from master or
+
+00:02:06.000 --> 00:02:08.999
+main to the point of your branch. So many things like this
+
+00:02:09.000 --> 00:02:11.759
+that you get to discover thanks to Transient. So do you have
+
+00:02:11.760 --> 00:02:16.879
+any similar experience on your end? Oh yeah, far too
+
+00:02:16.880 --> 00:02:22.359
+many, particularly with EditKit,
+
+00:02:22.360 --> 00:02:28.279
+having access to these commands,
+
+00:02:28.280 --> 00:02:31.771
+particularly with different granularity on
+
+00:02:31.772 --> 00:02:34.773
+S-expressions, sentences, words...
+
+00:02:34.774 --> 00:02:37.395
+Probably the most surprising thing I found
+
+00:02:37.396 --> 00:02:43.021
+was just how how compelling the
+
+00:02:43.022 --> 00:02:49.054
+S-expression would be as a unit of text for working with.
+
+00:02:49.055 --> 00:02:53.988
+I found that in most contexts, or in many places,
+
+00:02:53.989 --> 00:03:02.719
+it did what I wanted. I found that to be very surprising.
+
+00:03:02.720 --> 00:03:06.159
+So unless you've got anything else to add, I think we can just
+
+00:03:06.160 --> 00:03:10.639
+jump into questions. Okay, certainly. I'll be reading them
+
+00:03:10.640 --> 00:03:13.599
+for you so that it's easier for you. So the first question is,
+
+NOTE Q: I wonder whether casual can only be used with the packages you
+
+00:03:13.600 --> 00:03:17.599
+I wonder whether casual can only be used with the packages
+
+00:03:17.600 --> 00:03:19.599
+you mentioned or whether it can be used with whatever
+
+00:03:19.600 --> 00:03:25.399
+packages you like. I think it's really the latter. I'm not
+
+00:03:25.400 --> 00:03:29.879
+quite sure what the... What the question was really
+
+00:03:29.880 --> 00:03:35.039
+pointing at, you know, is the question asking for why I chose
+
+00:03:35.040 --> 00:03:41.679
+the packages or the different modes that I did? Or is it, are
+
+00:03:41.680 --> 00:03:45.519
+they looking at it from a developer perspective of, can we
+
+00:03:45.520 --> 00:03:50.399
+integrate casual with other packages? I mean, since we've
+
+00:03:50.400 --> 00:03:52.839
+got a little bit of time ahead of us, feel free to answer both
+
+00:03:52.840 --> 00:03:59.279
+questions. Um, I think the answer is, uh. Well, for the 1st,
+
+00:03:59.280 --> 00:04:05.599
+1, I've, I've generally tried to stick with using. The modes
+
+00:04:05.600 --> 00:04:11.039
+that are already packaged in, um, and so there was a. A big
+
+00:04:11.040 --> 00:04:16.759
+refactoring of it where. Initially, I made separate repos
+
+00:04:16.760 --> 00:04:20.879
+for the different modes that I supported. And then through a
+
+00:04:20.880 --> 00:04:24.959
+discussion, which I won't go into here, that got changed
+
+00:04:24.960 --> 00:04:30.239
+where I consolidated all of the different transient menus
+
+00:04:30.240 --> 00:04:35.039
+for modes that are built in for behavior that's built into
+
+00:04:35.040 --> 00:04:39.199
+the Emacs. I put that into a single package called casual.
+
+00:04:39.200 --> 00:04:44.799
+And then integrations with other third party packages that
+
+00:04:44.800 --> 00:04:49.879
+are not built in were given the same standalone repo here. In
+
+00:04:49.880 --> 00:04:55.719
+terms of folks wanting to integrate that, it's the beauty of
+
+00:04:55.720 --> 00:05:01.159
+open source. They can get the repo and uh, and basically
+
+00:05:01.160 --> 00:05:05.199
+study that the code base, uh, actually, if they even install
+
+00:05:05.200 --> 00:05:08.599
+it through, uh, you know, the package manager in this case,
+
+00:05:08.600 --> 00:05:12.679
+uh, coming from the Melbourne distribution, um, they can
+
+00:05:12.680 --> 00:05:17.919
+inspect that code and, and, um, make modifications or even.
+
+00:05:17.920 --> 00:05:21.519
+uh, you know, integrate that with their other packages and,
+
+00:05:21.520 --> 00:05:25.279
+uh, do that to their heart's content. Um, I think one of the
+
+00:05:25.280 --> 00:05:29.639
+things that I need to, or at least, uh, you know, that I, I, I
+
+00:05:29.640 --> 00:05:32.519
+planned on sort of elaborating further on in the
+
+00:05:32.520 --> 00:05:36.399
+documentation is, is that transient already has built in
+
+00:05:36.400 --> 00:05:41.279
+mechanisms for modifying an existing transient. So you can
+
+00:05:41.280 --> 00:05:47.279
+add commands or, uh, re redefine the bindings. And so. That
+
+00:05:47.280 --> 00:05:51.959
+mechanism is available for users if they're not happy with
+
+00:05:51.960 --> 00:05:57.159
+those bindings or they want to add their own commands to a
+
+00:05:57.160 --> 00:06:01.959
+menu. Yeah, and people are... I'm personally familiar with
+
+00:06:01.960 --> 00:06:05.119
+this, again, with Magit, because sometimes, even though
+
+00:06:05.120 --> 00:06:07.479
+you have a lot of discoverability for functions that you may
+
+00:06:07.480 --> 00:06:10.359
+not know, sometimes you also happen to realize that
+
+00:06:10.360 --> 00:06:13.999
+something is missing in the list of available options. I'm
+
+00:06:14.000 --> 00:06:16.919
+not sure if Casual actually supports something similar to
+
+00:06:16.920 --> 00:06:21.559
+Magit, which is levels of options being displayed.
+
+00:06:21.560 --> 00:06:24.039
+Actually, I'm not sure if it's transient native or if it's
+
+00:06:24.040 --> 00:06:27.439
+just something that Magit adds over this. No, transient
+
+00:06:27.440 --> 00:06:30.599
+supports levels. I've decided
+
+00:06:30.600 --> 00:06:36.799
+in large part, I've tried to avoid that just to avoid the
+
+00:06:36.800 --> 00:06:43.119
+added complexity of trying to define those levels. Yeah, I
+
+00:06:43.120 --> 00:06:47.479
+was going to say that perhaps it doesn't gel very well with
+
+00:06:47.480 --> 00:06:49.839
+the notion of casualness that you seem to be introducing the
+
+00:06:49.840 --> 00:06:52.439
+package. On one end, you've got something that is supposed
+
+00:06:52.440 --> 00:06:56.639
+to be very casual, very easy to use, and on the other end, you
+
+00:06:56.640 --> 00:06:59.599
+add levels for stuff that is fairly advanced. So advanced
+
+00:06:59.600 --> 00:07:05.759
+versus casual, kind of makes sense that you check this over.
+
+00:07:05.760 --> 00:07:09.359
+Alright, moving to the second question which is related to
+
+00:07:09.360 --> 00:07:10.853
+the previous one.
+
+NOTE 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?
+
+00:07:10.854 --> 00:07:13.159
+Are there any patterns emerging such that
+
+00:07:13.160 --> 00:07:15.639
+it would be impossible, sorry, such that it would be
+
+00:07:15.640 --> 00:07:19.719
+possible to once systematize and to automate the mapping of
+
+00:07:19.720 --> 00:07:23.519
+mode commands to keyboard-driven menus, possibly even
+
+00:07:23.520 --> 00:07:26.559
+have an auto-casual wrapper for an uncovered mode? Does it
+
+00:07:26.560 --> 00:07:35.519
+make sense to you? Yes, and I've gotten these comments from a
+
+00:07:35.520 --> 00:07:42.799
+number of different folks who really want to see some sort
+
+00:07:42.800 --> 00:07:49.639
+of design rule to, or basically, what is it? Some sort of
+
+00:07:49.640 --> 00:07:54.679
+design system to be able to generate the UI.
+
+00:07:54.680 --> 00:08:01.399
+Conceptually, I think it's doable, but on the flip side, it
+
+00:08:01.400 --> 00:08:05.319
+just requires so much coordination that it makes it really
+
+00:08:05.320 --> 00:08:11.199
+untenable. In this case, I have very strong opinions. I
+
+00:08:11.200 --> 00:08:15.719
+think we're better off trying to handcraft the user
+
+00:08:15.720 --> 00:08:20.759
+interface to get basically the best user experience. To try
+
+00:08:20.760 --> 00:08:26.399
+to emulate that with a design system, good luck, but I'm not
+
+00:08:26.400 --> 00:08:31.519
+I'm not interested in working on that. Right, yeah. I think
+
+00:08:31.520 --> 00:08:34.119
+if I try to think a little more about this, it feels like
+
+00:08:34.120 --> 00:08:36.559
+there's a notion of intention that is very important when
+
+00:08:36.560 --> 00:08:41.479
+you are designing UI and UX. And to have this intention, it
+
+00:08:41.480 --> 00:08:45.319
+feels like you cannot just base yourself of a design idea to
+
+00:08:45.320 --> 00:08:48.799
+organize the options. You cannot just work off a pattern. I
+
+00:08:48.800 --> 00:08:53.599
+think you need to have the trace of human understanding in
+
+00:08:53.600 --> 00:08:56.679
+order to have a UX that really works. And judging by the
+
+00:08:56.680 --> 00:08:58.999
+option that you've picked in the demos that you've showed
+
+00:08:59.000 --> 00:09:04.039
+today, I don't think it'd be particularly easy to organize
+
+00:09:04.040 --> 00:09:07.959
+them in a UX just casually for any mode. I think you need some
+
+00:09:07.960 --> 00:09:14.159
+human introspection to understand this, if that makes
+
+00:09:14.160 --> 00:09:14.679
+sense.
+
+00:09:14.680 --> 00:09:17.279
+Moving to the next question, which is related to something
+
+00:09:17.280 --> 00:09:19.605
+we discussed about with Magit.
+
+NOTE Q: Does Casual have a log where you can see what commands were invoked?
+
+00:09:19.606 --> 00:09:21.079
+Does Casual have a log where
+
+00:09:21.080 --> 00:09:23.759
+you can see what commands were invoked? This is always
+
+00:09:23.760 --> 00:09:27.479
+available via M-x view-lossage or via the command-log-mode,
+
+00:09:27.480 --> 00:09:30.993
+but I'm wondering if it can do for Emacs command what
+
+00:09:30.994 --> 00:09:34.479
+magit-process-buffer does for learning Git commands. And for
+
+00:09:34.480 --> 00:09:37.439
+everyone who's currently in Emacs, whenever you're
+
+00:09:37.440 --> 00:09:40.639
+running a command in Magit, it's always printing the exact
+
+00:09:40.640 --> 00:09:44.799
+command that was run in a shell, inside this $
+
+00:09:44.800 --> 00:09:47.399
+menu. So does Casual actually provide something similar,
+
+00:09:47.400 --> 00:09:52.599
+Charles? I don't know. In general, because I'm building off
+
+00:09:52.600 --> 00:09:55.199
+of transient, it would have to be a mechanism that's
+
+00:09:55.200 --> 00:10:01.519
+available through transient. And You know, I would let
+
+00:10:01.520 --> 00:10:06.799
+Jonas speak more on that capability, because to be honest, I
+
+00:10:06.800 --> 00:10:14.879
+mean, even to my knowledge of transient is not that deep,
+
+00:10:14.880 --> 00:10:16.839
+actually.
+
+00:10:16.840 --> 00:10:21.399
+Well, it's funny that you say this because even though you
+
+00:10:21.400 --> 00:10:23.759
+say your knowledge might not be that big, you still managed
+
+00:10:23.760 --> 00:10:27.239
+to develop a whole suite of tools on top of it. So as far as
+
+00:10:27.240 --> 00:10:29.599
+people who do not know transient a whole lot, you're doing a
+
+00:10:29.600 --> 00:10:33.159
+pretty damn good job. Let me tell you that much. Thank you.
+
+00:10:33.160 --> 00:10:37.719
+Yeah, I think sort of what I bring to the table is, you know,
+
+00:10:37.720 --> 00:10:41.919
+quite a considerable career in software development on
+
+00:10:41.920 --> 00:10:47.879
+other software ecosystems. And as of late, I've spent
+
+00:10:47.880 --> 00:10:52.439
+basically the past decade working on iOS apps. Right. I
+
+00:10:52.440 --> 00:10:55.199
+think it's refreshing to be able to go back to something that
+
+00:10:55.200 --> 00:10:56.839
+looks like Emacs after iOS.
+
+00:10:56.840 --> 00:11:03.879
+Well, that's perhaps another longer conversation there.
+
+00:11:03.880 --> 00:11:08.599
+Speaking of longer conversation, we have only about 10
+
+00:11:08.600 --> 00:11:11.599
+minutes left until we need to move on to the next talk. But
+
+00:11:11.600 --> 00:11:13.759
+thank you everyone for all the questions you're asking. I'm
+
+00:11:13.760 --> 00:11:17.239
+not saying this because we finished, but it's good to see so
+
+00:11:17.240 --> 00:11:19.919
+many people writing in the chat and asking questions. It
+
+00:11:19.920 --> 00:11:23.079
+always shows that you're interested and that's always
+
+00:11:23.080 --> 00:11:26.079
+lovely to us. And you've mentioned Jonas. Obviously, we're
+
+00:11:26.080 --> 00:11:29.359
+talking about Jonas Bernoulli, i.e. Tarsius, the
+
+00:11:29.360 --> 00:11:33.439
+maintainer of transient. And what Charles just mentioned
+
+00:11:33.440 --> 00:11:37.559
+about having a transient tooling to print the lossage,
+
+00:11:37.560 --> 00:11:43.039
+basically, of which sex were run by which command, feels
+
+00:11:43.040 --> 00:11:44.839
+like this is something that would be interesting. So,
+
+00:11:44.840 --> 00:11:50.239
+perhaps, I'm not sure if Tarsius is still on the chat
+
+00:11:50.240 --> 00:11:52.639
+currently, but he was definitely around earlier today, so
+
+00:11:52.640 --> 00:11:55.839
+we'll make sure that the ID lands on his lap later on. All
+
+00:11:55.840 --> 00:12:00.203
+right, moving to the next question.
+
+NOTE Q: Is there a setting to close menu after executing command?
+
+00:12:00.204 --> 00:12:00.919
+Is there a setting to
+
+00:12:00.920 --> 00:12:07.479
+close menu after executing a command? By default, it will.
+
+00:12:07.480 --> 00:12:10.879
+There's a slot that you can define in a transient
+
+00:12:10.880 --> 00:12:17.199
+prefix called :transient. And if you set that to true,
+
+00:12:17.200 --> 00:12:20.639
+then it will persist the menu after executing the command.
+
+00:12:20.640 --> 00:12:26.159
+But by default, it will actually dismiss the menu. This
+
+00:12:26.160 --> 00:12:29.359
+feels... Did you actually get to play with Hydra before
+
+00:12:29.360 --> 00:12:36.279
+playing with transients? To be honest, no. Yeah, I kind of
+
+00:12:36.280 --> 00:12:41.719
+slept on Hydra or at least, you know, I really wasn't all that
+
+00:12:41.720 --> 00:12:44.639
+ambitious with working with different packages until
+
+00:12:44.640 --> 00:12:48.639
+about like, a little less than 2 years ago or so.
+
+00:12:48.640 --> 00:12:57.639
+And then the other part was also, um. You know, not not really
+
+00:12:57.640 --> 00:13:01.999
+a technical. Start a comparison because I really don't want
+
+00:13:02.000 --> 00:13:05.759
+to upset folks here, but, uh. But more along the lines of just
+
+00:13:05.760 --> 00:13:09.559
+going with the notion that transient was being built in or
+
+00:13:09.560 --> 00:13:15.279
+packaged as a built in package for Emacs. I went with using
+
+00:13:15.280 --> 00:13:20.679
+that for my implementation. Cool. And I don't think there's
+
+00:13:20.680 --> 00:13:23.199
+anything controversial with what you're saying right now
+
+00:13:23.200 --> 00:13:28.839
+because, you know, we had earlier today, Euro Rechenko, the
+
+00:13:28.840 --> 00:13:32.439
+new maintainer of Augment, mentioning that he'd like to
+
+00:13:32.440 --> 00:13:34.319
+have a better integration with Transient because
+
+00:13:34.320 --> 00:13:39.159
+Transient is, it looks like it's here to stay for a long time
+
+00:13:39.160 --> 00:13:42.879
+and might even land in core at some point. So, it definitely
+
+00:13:42.880 --> 00:13:49.519
+feels comparing Hydra because for me, most of my UI needs in
+
+00:13:49.520 --> 00:13:54.439
+Emacs prior to Transient were done via Hydra because it was a
+
+00:13:54.440 --> 00:13:57.799
+very convenient tooling. For people who do not know, Hydra
+
+00:13:57.800 --> 00:14:02.919
+is written by AboAbo. who's also authored packages like
+
+00:14:02.920 --> 00:14:08.639
+Lispy, an interactive Lisp mode, also for Ivy, which you
+
+00:14:08.640 --> 00:14:14.239
+might know as the counterpart of Helm, maybe five years ago.
+
+00:14:14.240 --> 00:14:17.959
+So all those packages, they were very innovative for the
+
+00:14:17.960 --> 00:14:21.199
+time and it's cool to see that some of the ideas which were
+
+00:14:21.200 --> 00:14:28.039
+introduced by IV and Helm and all this are then taken by tools
+
+00:14:28.040 --> 00:14:30.279
+like Transient and done perhaps with a little more
+
+00:14:30.280 --> 00:14:33.639
+hindsight now that people have experienced a little more of
+
+00:14:33.640 --> 00:14:38.359
+it. Okay, we have still a little bit of time. Moving on to the
+
+00:14:38.360 --> 00:14:40.281
+next question.
+
+NOTE Q: What modes are you working on at the moment for casual / are excited to explore?
+
+00:14:40.282 --> 00:14:41.919
+What modes are you working on at the moment
+
+00:14:41.920 --> 00:14:44.159
+for Casual or are you excited to explore?
+
+00:14:44.160 --> 00:14:53.999
+Well, so I just recently published one for calendar. And so I
+
+00:14:54.000 --> 00:14:56.839
+think the calendar interface has a lot of really
+
+00:14:56.840 --> 00:15:00.479
+interesting behavior, particularly its support for
+
+00:15:00.480 --> 00:15:07.479
+non-Gregorian events, which is, you know, for folks who'd
+
+00:15:07.480 --> 00:15:13.079
+like, in my case, looking at the lunar calendar, it's great
+
+00:15:13.080 --> 00:15:17.799
+to have tooling to be able to not have to leave Emacs to figure
+
+00:15:17.800 --> 00:15:19.759
+out when a lunar date is.
+
+00:15:19.760 --> 00:15:29.599
+Then, I think, you know, for the most part, My work on casual
+
+00:15:29.600 --> 00:15:34.959
+was really kind of my summer of code for Emacs here. And so in
+
+00:15:34.960 --> 00:15:41.519
+many ways, the velocity of casual development is going to
+
+00:15:41.520 --> 00:15:48.919
+slow down where I've got a big bulk of the modes that I really
+
+00:15:48.920 --> 00:15:57.519
+wanted to take care of. Um, I think one experimental thing
+
+00:15:57.520 --> 00:16:00.999
+that I think is very unbaked, but I would, you know, if folks
+
+00:16:01.000 --> 00:16:06.879
+are interested, uh, maybe looking at it is, uh, taking a look
+
+00:16:06.880 --> 00:16:13.079
+at edebug and trying to make that an easier thing to do. Um,
+
+00:16:13.080 --> 00:16:18.359
+that is ambitious. Uh, yeah, so maybe too ambitious.
+
+00:16:18.360 --> 00:16:23.713
+Uh, other things are like really scary projects.
+
+00:16:23.714 --> 00:16:25.195
+And so, not to say that
+
+00:16:25.196 --> 00:16:28.319
+I really have a desire to do it, but another
+
+00:16:28.320 --> 00:16:33.239
+one would be ediff. Right. Okay. Relitigating it's
+
+00:16:33.240 --> 00:16:43.639
+interface, um, to have a transient menu. I say
+
+00:16:43.640 --> 00:16:47.919
+these things, but I'm also scared of those things. Yeah, I
+
+00:16:47.920 --> 00:16:50.719
+mean, I think it's a lovely way to tackle the project,
+
+00:16:50.720 --> 00:16:55.479
+really, because you are fully aware that edebug and ediffs
+
+00:16:55.480 --> 00:16:59.399
+are mastodons when it comes to Emacs. They work very well. If
+
+00:16:59.400 --> 00:17:02.639
+you've ever tried to do a conflict resolution in Magit and
+
+00:17:02.640 --> 00:17:07.199
+you've pressed e, that usually opens ediff for you. If you
+
+00:17:07.200 --> 00:17:09.959
+happen to know how it works, it's amazing, but if you do not know
+
+00:17:09.960 --> 00:17:13.719
+it works, the interface is a little... It's a lot to take in
+
+00:17:13.720 --> 00:17:20.879
+at the moment. You have to know a, b, w... I can, and I
+
+00:17:20.880 --> 00:17:24.439
+can never remember which one is the lower and which one is the
+
+00:17:24.440 --> 00:17:27.359
+upper. Like, it constantly goes in different directions. I
+
+00:17:27.360 --> 00:17:29.719
+can never remember which is the commit I'm trying to merge,
+
+00:17:29.720 --> 00:17:32.759
+which is the commit I'm currently being on. It has nothing to
+
+00:17:32.760 --> 00:17:36.839
+do with Magit. It's merely Git and the way they conceive
+
+00:17:36.840 --> 00:17:39.719
+this. And probably, there might be a very nice way to
+
+00:17:39.720 --> 00:17:42.079
+remember it, but I still haven't found it after 10 years as a
+
+00:17:42.080 --> 00:17:44.919
+software developer. So, I guess I need to dig a little
+
+00:17:44.920 --> 00:17:48.519
+deeper. But what I find lovely about the approach is that for
+
+00:17:48.520 --> 00:17:52.599
+you, working on the interface to those tools is actually
+
+00:17:52.600 --> 00:17:55.159
+something that allows you to discover how they work, but
+
+00:17:55.160 --> 00:17:59.119
+also how to make it more easy for people to understand how
+
+00:17:59.120 --> 00:18:02.039
+those tools work. So you're doing the work of
+
+00:18:02.040 --> 00:18:05.399
+understanding, of digesting a lot of the commands, so that
+
+00:18:05.400 --> 00:18:08.599
+people do not have to go through the same pain as you have. So I
+
+00:18:08.600 --> 00:18:14.279
+find this a very noble endeavor in a way.
+
+NOTE Getting older
+
+00:18:14.280 --> 00:18:18.559
+In so many ways, as perhaps I've mentioned
+
+00:18:18.560 --> 00:18:23.639
+in my talk, I'm getting older. I can't remember all
+
+00:18:23.640 --> 00:18:28.759
+these damn commands and my hand dexterity is failing. I
+
+00:18:28.760 --> 00:18:33.199
+mean, there's so many. Like multiple keystroke
+
+00:18:33.200 --> 00:18:37.479
+bindings, which I absolutely loathe. At most,
+
+00:18:37.480 --> 00:18:40.799
+like I can, I can only physically handle like, two
+
+00:18:40.800 --> 00:18:47.799
+characters, three maybe, at a time. So maybe
+
+00:18:47.800 --> 00:18:51.239
+that's just me, and others may
+
+00:18:51.240 --> 00:18:55.999
+feel differently, but at the same time,
+
+00:18:56.000 --> 00:19:01.519
+the work that I've invested here is has been very personal
+
+00:19:01.520 --> 00:19:06.239
+for me because I just don't want to work that hard, and I want to
+
+00:19:06.240 --> 00:19:11.159
+keep using Emacs. Yeah, and that's again a very good
+
+00:19:11.160 --> 00:19:13.719
+endeavor, I think, to have. And there's one last thing that
+
+00:19:13.720 --> 00:19:16.039
+I'd like to mention, because you've mentioned this project
+
+00:19:16.040 --> 00:19:19.879
+of yours, Casual, being some kind of summer of code, with the
+
+00:19:19.880 --> 00:19:22.399
+implication that you've worked a whole lot of it during the
+
+00:19:22.400 --> 00:19:26.919
+summer or during this period. and perhaps investment will
+
+00:19:26.920 --> 00:19:31.119
+die down a little bit now. But I think it's completely fine to
+
+00:19:31.120 --> 00:19:33.879
+have moments when you feel particularly excited and you do a
+
+00:19:33.880 --> 00:19:36.959
+lot of work, and sometimes it dies down a little bit.
+
+00:19:36.960 --> 00:19:41.439
+Personally, I've been... Four years ago, I was working a lot
+
+00:19:41.440 --> 00:19:44.679
+on Org Roam and I had my Summer of Code on Org Roam. And that was
+
+00:19:44.680 --> 00:19:47.159
+great. I was able to do a lot of things, to get a lot of things
+
+00:19:47.160 --> 00:19:50.559
+out of my head. But eventually, you know, you have to go make
+
+00:19:50.560 --> 00:19:53.279
+some money to survive or you have to take care of family and
+
+00:19:53.280 --> 00:19:56.399
+stuff like this. So, life tends to get in the way of your
+
+00:19:56.400 --> 00:20:00.519
+hobbies, especially when, you know, it's so... It's
+
+00:20:00.520 --> 00:20:03.239
+hobbies that involve so much of your time to get things
+
+00:20:03.240 --> 00:20:07.879
+right, like programming does. But, you know, we appreciate
+
+00:20:07.880 --> 00:20:09.799
+all the work you've done, Charles, and the fact that you've
+
+00:20:09.800 --> 00:20:12.679
+put it out there for people to enjoy. It's already a victory.
+
+00:20:12.680 --> 00:20:14.999
+You don't need to feel compelled to keep working on it
+
+00:20:15.000 --> 00:20:18.159
+because ultimately, as you said, the beauty of open source
+
+00:20:18.160 --> 00:20:21.759
+is that people can just send PRs and get the project going
+
+00:20:21.760 --> 00:20:28.519
+again. Yeah. I mean, and if anything, you know, folks have
+
+00:20:28.520 --> 00:20:33.319
+expressed to me that, you know, in many ways, a lot of this
+
+00:20:33.320 --> 00:20:37.959
+stuff should be, you know, sort of folded in the core. And,
+
+00:20:37.960 --> 00:20:45.159
+you know, I would love to see at least the ideals of, or at
+
+00:20:45.160 --> 00:20:49.319
+least an openness into thinking, rethinking the interface
+
+00:20:49.320 --> 00:20:54.119
+for Emacs. So, you know, it doesn't have to be, basically
+
+00:20:54.120 --> 00:20:59.119
+work the way it worked for basically the last half of the 20th
+
+00:20:59.120 --> 00:21:03.519
+century here. Yeah, Emacs is flexible enough to have
+
+00:21:03.520 --> 00:21:10.279
+different approaches and, you know, transient is one
+
+00:21:10.280 --> 00:21:17.759
+approach, but at the same time, you know, the ability to
+
+00:21:17.760 --> 00:21:22.559
+reimagine the user interface for, you know, the computing
+
+00:21:22.560 --> 00:21:28.159
+needs, you know, for basically users needs today, whether
+
+00:21:28.160 --> 00:21:33.119
+you write or code or anything of that nature, I think is an
+
+00:21:33.120 --> 00:21:39.039
+exciting and great thing. Yeah, well, thank you so much for
+
+00:21:39.040 --> 00:21:41.639
+this conclusion. So I'm a little sorry, because sadly, we
+
+00:21:41.640 --> 00:21:45.919
+needed to move the stream to the next talk. So we've lost
+
+00:21:45.920 --> 00:21:49.639
+about 20 seconds of what you said. But don't worry, whatever
+
+00:21:49.640 --> 00:21:51.999
+you've said will be available on the website. I didn't want
+
+00:21:52.000 --> 00:21:55.759
+to interrupt, sadly, because I didn't want to be rude. But I
+
+00:21:55.760 --> 00:21:58.679
+think we did a great job answering the questions. So thank
+
+00:21:58.680 --> 00:22:01.199
+you so much for taking the time. I'll need to get going,
+
+00:22:01.200 --> 00:22:02.759
+because we might have a problem with the next talk. So thank
+
+00:22:02.760 --> 00:22:05.919
+you so much, Charles. Certainly. Take care. Thank you.
+
+00:22:05.920 --> 00:22:12.120
+Appreciate it. Bye.
diff --git a/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt
new file mode 100644
index 00000000..307d693b
--- /dev/null
+++ b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:43.799
+introduction
+
+00:00:43.800 --> 00:02:34.799
+Recall vs recognition
+
+00:02:34.800 --> 00:03:43.399
+Emacs with keyboard-driven menus
+
+00:03:43.400 --> 00:04:08.199
+Transient
+
+00:04:08.200 --> 00:04:29.302
+A Transient menu can be pinned
+
+00:04:29.303 --> 00:04:59.526
+Modes are apps, really
+
+00:04:59.527 --> 00:05:28.039
+Transient all the modes!
+
+00:05:28.040 --> 00:06:17.959
+Casual design principles
+
+00:06:17.960 --> 00:07:04.365
+Casual design conventions
+
+00:07:04.366 --> 00:09:06.639
+Casual Dired
+
+00:09:06.640 --> 00:10:36.199
+Casual EditKit
+
+00:10:36.200 --> 00:11:31.996
+EditKit demo
+
+00:11:31.997 --> 00:12:53.139
+Marking and moving
+
+00:12:53.140 --> 00:14:04.975
+Rectangles
+
+00:14:04.976 --> 00:14:36.599
+Numbering
+
+00:14:36.600 --> 00:17:02.639
+Sorting
+
+00:17:02.640 --> 00:17:34.450
+Casual has transformed my user experience with Emacs
+
+00:17:34.451 --> 00:18:23.720
+Thanks and acknowledgements
diff --git a/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt
new file mode 100644
index 00000000..26187e17
--- /dev/null
+++ b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt
@@ -0,0 +1,757 @@
+WEBVTT captioned by sachac, checked by bhavin
+
+NOTE introduction
+
+00:00:00.000 --> 00:00:05.079
+Hello, my name is Charles Choi and welcome to my talk:
+
+00:00:05.080 --> 00:00:11.359
+"Reimagining the Emacs user experience with Casual Suite."
+
+00:00:11.360 --> 00:00:14.919
+Casual Suite is a set of opinionated user interfaces to
+
+00:00:14.920 --> 00:00:18.399
+different modes offered in Emacs. Before I get into
+
+00:00:18.400 --> 00:00:22.199
+describing Casual in detail, let's first talk about the
+
+00:00:22.200 --> 00:00:27.039
+existing Emacs user experience. To make Emacs go, people
+
+00:00:27.040 --> 00:00:31.079
+can either invoke commands by name with
+
+00:00:31.080 --> 00:00:34.081
+execute-extended-command,
+
+00:00:34.082 --> 00:00:36.403
+run a command directly with a pre-assigned
+
+00:00:36.404 --> 00:00:43.799
+key binding, finally, use a mouse menu if it's available.
+
+NOTE Recall vs recognition
+
+00:00:43.800 --> 00:00:46.719
+From human-computer interface research, there is a
+
+00:00:46.720 --> 00:00:50.799
+concept of recall versus recognition in user interface
+
+00:00:50.800 --> 00:00:56.599
+design. Let's show their distinction by example. A common
+
+00:00:56.600 --> 00:01:00.839
+recall interface is password entry. Absent any historical
+
+00:01:00.840 --> 00:01:04.639
+affordances, a user must directly remember information to
+
+00:01:04.640 --> 00:01:09.839
+succeed with this interface. In contrast, menus offer
+
+00:01:09.840 --> 00:01:13.439
+immediate visual cues on what commands are available. This
+
+00:01:13.440 --> 00:01:16.839
+allows a user to recognize familiar behavior to support
+
+00:01:16.840 --> 00:01:21.879
+successful selection of it. From user interface research,
+
+00:01:21.880 --> 00:01:26.119
+the key finding is this. Interfaces emphasizing
+
+00:01:26.120 --> 00:01:29.999
+recognition are much easier to use than those relying on
+
+00:01:30.000 --> 00:01:35.799
+recall. In this light, we see that the Emacs user experience
+
+00:01:35.800 --> 00:01:41.279
+leans too much towards recall. Completion in history can
+
+00:01:41.280 --> 00:01:44.479
+help tip the scales towards recognition, but only by a
+
+00:01:44.480 --> 00:01:47.959
+little bit.
+
+00:01:47.960 --> 00:01:52.399
+This reliance on recall is discouraging to users both new
+
+00:01:52.400 --> 00:01:56.839
+and old, and that's a shame because Emacs has so many useful
+
+00:01:56.840 --> 00:02:00.759
+commands. But the kicker is that most of them are
+
+00:02:00.760 --> 00:02:05.239
+infrequently used. You can't recall them all. At least I
+
+00:02:05.240 --> 00:02:11.239
+can't. So, a conundrum. While I've been using Emacs since
+
+00:02:11.240 --> 00:02:15.159
+the early 90s, truthfully, it's been only in this past
+
+00:02:15.160 --> 00:02:19.679
+decade that I've leveled up in using it. Org Mode, Magit,
+
+00:02:19.680 --> 00:02:23.199
+Eglot, Avy, and many other packages have transformed how I
+
+00:02:23.200 --> 00:02:28.639
+use it. I can only deal with so much cognitive load and
+
+00:02:28.640 --> 00:02:34.799
+physically straining key bindings. So, what to do about it?
+
+NOTE Emacs with keyboard-driven menus
+
+00:02:34.800 --> 00:02:36.159
+Let's bring back an old ideal.
+
+00:02:36.160 --> 00:02:42.359
+Keyboard-driven menus have been around since TTY video
+
+00:02:42.360 --> 00:02:47.359
+terminals with mainframes. If you're old enough to recall
+
+00:02:47.360 --> 00:02:50.079
+working with such interfaces, these terms will seem
+
+00:02:50.080 --> 00:02:53.239
+familiar. They all worked with the limitations of
+
+00:02:53.240 --> 00:02:57.639
+text-based video displays.
+
+00:02:57.640 --> 00:03:01.599
+With keyboard-driven menus, if a command exists but nobody
+
+00:03:01.600 --> 00:03:05.519
+can find it, it's not really useful. A well-designed menu
+
+00:03:05.520 --> 00:03:09.719
+can make a command discoverable. If the command is
+
+00:03:09.720 --> 00:03:15.199
+infrequently used, making it recognizable helps a lot. And
+
+00:03:15.200 --> 00:03:18.679
+for working primarily with text, having keyboard-only
+
+00:03:18.680 --> 00:03:24.119
+interactions encourages flow. Given the above, the next
+
+00:03:24.120 --> 00:03:28.479
+steps seem natural:
+
+00:03:28.480 --> 00:03:32.759
+augment Emacs with keyboard-driven menus. This is not
+
+00:03:32.760 --> 00:03:36.639
+saying that I want to obsolete name commands, keybindings,
+
+00:03:36.640 --> 00:03:41.079
+and mouse menus. They all can happily coexist. Emacs is
+
+00:03:41.080 --> 00:03:43.399
+large. It can contain multitudes.
+
+NOTE Transient
+
+00:03:43.400 --> 00:03:49.879
+Conveniently, Emacs has a built-in library for building
+
+00:03:49.880 --> 00:03:53.839
+such menus. It's called Transient, and it's been around
+
+00:03:53.840 --> 00:03:59.319
+since Emacs 28. Developed primarily by Jonas Bernoulli as a
+
+00:03:59.320 --> 00:04:03.199
+UI toolkit for Magit, Transient has an essential feature
+
+00:04:03.200 --> 00:04:08.199
+for building great keyboard-driven interfaces.
+
+NOTE A Transient menu can be pinned
+
+00:04:08.200 --> 00:04:11.919
+A transient menu can be pinned and their state updated as
+
+00:04:11.920 --> 00:04:15.239
+commands are issued from them. This lets us build
+
+00:04:15.240 --> 00:04:18.399
+interfaces that reflect internal state changes made by
+
+00:04:18.400 --> 00:04:21.919
+commands issued from the user. This is great because many
+
+00:04:21.920 --> 00:04:26.599
+modes have stateful behavior, and guess what? Emacs has a lot
+
+00:04:26.600 --> 00:04:29.302
+of modes.
+
+NOTE Modes are apps, really
+
+00:04:29.303 --> 00:04:31.999
+If you think about it, Emacs modes are akin to the
+
+00:04:32.000 --> 00:04:35.079
+ecosystem of apps that we see today, but with far less
+
+00:04:35.080 --> 00:04:39.319
+structure and packaging. A mode, like an app, focuses on
+
+00:04:39.320 --> 00:04:42.959
+delivering specific behavior to the user. There are many
+
+00:04:42.960 --> 00:04:45.999
+built-in modes in Emacs, and these modes are complex with
+
+00:04:46.000 --> 00:04:50.679
+dozens, if not hundreds, of commands. Calc itself has over
+
+00:04:50.680 --> 00:04:54.879
+1,000 of them. It's frustrating to know that these commands
+
+00:04:54.880 --> 00:04:59.526
+are there, but I really can't access them via recall.
+
+NOTE Transient all the modes!
+
+00:04:59.527 --> 00:05:05.079
+So I decided to do something about it, and that was to transient
+
+00:05:05.080 --> 00:05:09.999
+all the modes, or at least the most major ones. This past
+
+00:05:10.000 --> 00:05:12.679
+summer, I had the time and resources to start building
+
+00:05:12.680 --> 00:05:15.799
+Transient interfaces for modes that I wanted to more
+
+00:05:15.800 --> 00:05:22.319
+elegantly use. I decided to call this work Casual. Given its
+
+00:05:22.320 --> 00:05:25.519
+definition, it seemed like a good fit for the vibe that I
+
+00:05:25.520 --> 00:05:28.039
+wanted these interfaces to embody.
+
+NOTE Casual design principles
+
+00:05:28.040 --> 00:05:34.999
+Design principles that I embraced up front were
+
+00:05:35.000 --> 00:05:38.239
+handcrafted information architecture and layout. This is
+
+00:05:38.240 --> 00:05:41.799
+largely an exercise in mapping a mode's command set to a
+
+00:05:41.800 --> 00:05:47.119
+hierarchical menu structure. I wanted these menus to make
+
+00:05:47.120 --> 00:05:50.719
+sense to most people. Ideally, users would not have to read
+
+00:05:50.720 --> 00:05:55.839
+documentation to get at the command that they wanted. Early
+
+00:05:55.840 --> 00:05:59.359
+on, I quickly learned that it was impossible to maintain the
+
+00:05:59.360 --> 00:06:02.479
+existing default key bindings when mapping them over to a
+
+00:06:02.480 --> 00:06:06.759
+hierarchical menu. Also, some bindings I just flat out
+
+00:06:06.760 --> 00:06:10.199
+disagreed with. I resolved to be friendly, but not
+
+00:06:10.200 --> 00:06:14.919
+beholden to them. In all of the above, I've gone out of my way
+
+00:06:14.920 --> 00:06:17.959
+to make clear that my design decisions are opinionated.
+
+NOTE Casual design conventions
+
+00:06:17.960 --> 00:06:21.719
+Using casual.
+
+00:06:21.720 --> 00:06:30.039
+To reinforce habit, a common key binding is used per mode to
+
+00:06:30.040 --> 00:06:33.799
+raise a main menu. This key binding is left to user
+
+00:06:33.800 --> 00:06:36.719
+preference. For me, that binding is C-o.
+
+00:06:36.720 --> 00:06:44.639
+Command bindings are mnemonic when possible.
+
+00:06:44.640 --> 00:06:49.559
+Mode-specific settings are given their own menu. Since
+
+00:06:49.560 --> 00:06:53.319
+transient menus can be pinned, we can support repeat or
+
+00:06:53.320 --> 00:06:58.479
+stateful behavior in a mode.
+
+00:06:58.480 --> 00:07:02.319
+As of this writing, there are 11 modes supported by Casual,
+
+00:07:02.320 --> 00:07:04.365
+with several more on the way.
+
+NOTE Casual Dired
+
+00:07:04.366 --> 00:07:05.719
+Let's look at the Casual menu
+
+00:07:05.720 --> 00:07:12.479
+for Dired to highlight the design conventions previously
+
+00:07:12.480 --> 00:07:13.559
+mentioned.
+
+00:07:13.560 --> 00:07:17.719
+In a Dired Emacs window, the user can invoke their preferred
+
+00:07:17.720 --> 00:07:22.279
+key binding to call a top-level Casual main menu. This main
+
+00:07:22.280 --> 00:07:27.919
+menu is displayed at the bottom of the Emacs frame. Zooming
+
+00:07:27.920 --> 00:07:30.839
+into this menu, we see the commands offered in it
+
+00:07:30.840 --> 00:07:34.559
+categorized into different sections. Each command has a
+
+00:07:34.560 --> 00:07:38.039
+key binding, usually a single character shown before its
+
+00:07:38.040 --> 00:07:42.599
+label. The File section holds commands that act upon the
+
+00:07:42.600 --> 00:07:47.559
+currently selected item or marked items. The Directory
+
+00:07:47.560 --> 00:07:50.319
+section holds commands that affect the current directory
+
+00:07:50.320 --> 00:07:55.599
+or its subdirs within it. The Mark section has marking
+
+00:07:55.600 --> 00:08:00.279
+commands that allow for aggregate operations. The
+
+00:08:00.280 --> 00:08:03.399
+Navigation section shows commands that move the point in a
+
+00:08:03.400 --> 00:08:09.559
+direct buffer. The quick section provides access to
+
+00:08:09.560 --> 00:08:14.519
+bookmark and buffer list commands. Search and replace
+
+00:08:14.520 --> 00:08:19.119
+commands are grouped in the search section. New directory
+
+00:08:19.120 --> 00:08:24.079
+and file creation are given their own section. Finally, at
+
+00:08:24.080 --> 00:08:27.599
+the bottom of the menu are commands dedicated to Casual menu
+
+00:08:27.600 --> 00:08:28.439
+navigation.
+
+00:08:28.440 --> 00:08:34.079
+Casual is conformant to Transient conventions where the
+
+00:08:34.080 --> 00:08:39.479
+key binding C-g for dismiss one and C-q to dismiss all
+
+00:08:39.480 --> 00:08:43.639
+menus are honored. Another transient convention is to
+
+00:08:43.640 --> 00:08:49.519
+reserve the key binding q to quit the current mode. For most
+
+00:08:49.520 --> 00:08:53.959
+main menus, casual uses the , key binding to invoke a
+
+00:08:53.960 --> 00:08:58.999
+mode-specific settings menu. Casual also adopts the
+
+00:08:59.000 --> 00:09:02.039
+common UI convention of using ... >
+
+00:09:02.040 --> 00:09:05.879
+symbols to denote required input and submenus
+
+00:09:05.880 --> 00:09:06.639
+respectively.
+
+NOTE Casual EditKit
+
+00:09:06.640 --> 00:09:13.919
+Some commands are more global or non-mode specific in
+
+00:09:13.920 --> 00:09:18.039
+nature. A great deal of these commands relate to editing,
+
+00:09:18.040 --> 00:09:23.239
+which I find to be a prime motivation for using Emacs. Let's
+
+00:09:23.240 --> 00:09:25.559
+examine one such menu that supports this.
+
+00:09:25.560 --> 00:09:31.599
+The main menu for Casual EditKit is designed to provide easy
+
+00:09:31.600 --> 00:09:36.279
+access to editing and editing-related commands. Like the
+
+00:09:36.280 --> 00:09:39.959
+previous Dired menu, it organizes commands into different
+
+00:09:39.960 --> 00:09:40.679
+sections.
+
+00:09:40.680 --> 00:09:45.999
+Commands related to file and buffer operations are in the
+
+00:09:46.000 --> 00:09:50.519
+File section. Commands for editing text are in the Edit
+
+00:09:50.520 --> 00:09:55.599
+section. S- or balanced expression commands are given a
+
+00:09:55.600 --> 00:09:59.439
+dedicated section for their own. More often than not, in
+
+00:09:59.440 --> 00:10:02.159
+many modes, I find them to do what I want.
+
+00:10:02.160 --> 00:10:08.879
+The tools section provides access to common tools.
+
+00:10:08.880 --> 00:10:13.719
+Bookmarks I consider to be an essential feature. If you
+
+00:10:13.720 --> 00:10:18.439
+haven't used them, it's never too late to start. Emacs
+
+00:10:18.440 --> 00:10:20.799
+window management commands are given this section.
+
+00:10:20.800 --> 00:10:25.799
+Commands for search and replace, macros, and projects can
+
+00:10:25.800 --> 00:10:32.199
+be accessed from here. Finally, the menu navigation
+
+00:10:32.200 --> 00:10:35.719
+section. Note that register commands can be accessed from
+
+00:10:35.720 --> 00:10:36.199
+here.
+
+NOTE EditKit demo
+
+00:10:36.200 --> 00:10:42.439
+Okay, enough screenshots. Let's look at Casual in action
+
+00:10:42.440 --> 00:10:48.439
+with a demo of the EditKit menus. Let's start our demo of
+
+00:10:48.440 --> 00:10:54.439
+casual-editkit with raising the menu, which is bound to
+
+00:10:54.440 --> 00:10:58.919
+C-o. You'll see the menu pop up here. In
+
+00:10:58.920 --> 00:11:02.519
+particular, we want to look at the edit operation. We'll
+
+00:11:02.520 --> 00:11:08.679
+press e and we'll see a number of menu items that allow you to
+
+00:11:08.680 --> 00:11:16.239
+make editing transformations to the text, be it marking,
+
+00:11:16.240 --> 00:11:20.239
+copying, killing, transposing, transforming, moving, or
+
+00:11:20.240 --> 00:11:24.279
+deleting the text. You'll see also that there is a submenu
+
+00:11:24.280 --> 00:11:31.996
+for rectangle operations. Let's first...
+
+NOTE Marking and moving
+
+00:11:31.997 --> 00:11:37.406
+Let's actually dig through and look at what's in the Mark submenu.
+
+00:11:37.407 --> 00:11:42.039
+You'll see that there are increments of text in which you can
+
+00:11:42.040 --> 00:11:45.239
+mark. You can mark a word, a sentence, a paragraph, and
+
+00:11:45.240 --> 00:11:49.559
+balanced expression. If we go back, you'll see a similar
+
+00:11:49.560 --> 00:11:57.339
+pattern for copying as well as killing. Transposing.
+
+00:11:57.340 --> 00:12:02.879
+Let's go and try to move a sentence. We have the point there at
+
+00:12:02.880 --> 00:12:07.119
+hello there. We'll move that sentence around. If we
+
+00:12:07.120 --> 00:12:12.119
+press s, we can move it backward or forward. In this case,
+
+00:12:12.120 --> 00:12:16.279
+let's move it forward. We'll press f. You'll see hello
+
+00:12:16.280 --> 00:12:21.639
+there move up a sentence. Then we can also press b to move
+
+00:12:21.640 --> 00:12:29.879
+it back. Then press RET to dismiss. Also, if we wanted
+
+00:12:29.880 --> 00:12:35.199
+to, we can... In this menu particularly, you'll see that we
+
+00:12:35.200 --> 00:12:38.839
+also have cursor navigation, so we can move the point there.
+
+00:12:38.840 --> 00:12:43.039
+That's not in all the menus, but in a good part number of the
+
+00:12:43.040 --> 00:12:47.919
+menus in Casual Edit Kit, you'll see that here. Let's press
+
+00:12:47.920 --> 00:12:53.139
+RET to dismiss that.
+
+NOTE Rectangles
+
+00:12:53.140 --> 00:12:58.643
+Let's actually look at some rectangle operations here.
+
+00:12:58.644 --> 00:13:01.759
+In this case, we have a list with
+
+00:13:01.760 --> 00:13:08.519
+items x, y, and z. Let's say we wanted to prefix each item
+
+00:13:08.520 --> 00:13:14.239
+here with a string. We'll say we want to put in there
+
+00:13:14.240 --> 00:13:21.159
+hello. One way of doing that is to make a rectangle. So
+
+00:13:21.160 --> 00:13:25.719
+if we go into our rectangle menu, first off, what we need to do
+
+00:13:25.720 --> 00:13:31.199
+is define that rectangle region. We'll press m to mark
+
+00:13:31.200 --> 00:13:35.439
+where the point is right there. Then we can use our cursor
+
+00:13:35.440 --> 00:13:39.559
+operation to move the point to define the rectangle. In this
+
+00:13:39.560 --> 00:13:43.839
+case, it's right at the start there. We can use the string
+
+00:13:43.840 --> 00:13:49.679
+insert command, i, to insert hello, colon, and then we'll
+
+00:13:49.680 --> 00:13:54.799
+put a space there to make it look a little nicer. Sure
+
+00:13:54.800 --> 00:13:58.119
+enough, that's in there.
+
+00:13:58.120 --> 00:14:04.975
+We can have access to a number of rectangle commands here.
+
+NOTE Numbering
+
+00:14:04.976 --> 00:14:11.599
+If we wanted to, let's say, number, we can go through that same
+
+00:14:11.600 --> 00:14:16.719
+operation here, define a region, a rectangle region that
+
+00:14:16.720 --> 00:14:22.679
+is, and press n. You'll see that it has incremented a
+
+00:14:22.680 --> 00:14:28.639
+number for each item in that rectangle region. We can also
+
+00:14:28.640 --> 00:14:32.468
+tap u to undo these operations
+
+00:14:32.469 --> 00:14:36.599
+and leave that at that.
+
+NOTE Sorting
+
+00:14:36.600 --> 00:14:47.239
+Sorting. If we select a region here, And we go back. You'll
+
+00:14:47.240 --> 00:14:52.399
+see that the sort submenu is now enabled. Sorting won't work
+
+00:14:52.400 --> 00:14:56.239
+unless you have a region started. That's one of the nice
+
+00:14:56.240 --> 00:15:01.679
+things about transient is that it allows you to visually
+
+00:15:01.680 --> 00:15:09.079
+enable or disable command items with regards to whatever
+
+00:15:09.080 --> 00:15:12.559
+the current state or context is here. In this case is
+
+00:15:12.560 --> 00:15:17.359
+whether or not you have a region highlighted. Let's say we
+
+00:15:17.360 --> 00:15:22.879
+want to sort these two columns of numbers and so there's a
+
+00:15:22.880 --> 00:15:29.759
+command called n here which is numeric fields. Let's choose that
+
+00:15:29.760 --> 00:15:35.919
+here. Sure enough we get that. But there's a nice twist
+
+00:15:35.920 --> 00:15:39.679
+there. Let's say we wanted to sort on the second column.
+
+00:15:39.680 --> 00:15:48.919
+Let's move our point back up to here and we'll mark that.
+
+00:15:48.920 --> 00:15:52.799
+Since everything is in a continuous line, we can sort of
+
+00:15:52.800 --> 00:15:55.948
+pretend that this region is actually a paragraph
+
+00:15:55.949 --> 00:15:59.359
+and mark that.
+
+00:15:59.360 --> 00:16:06.999
+We'll go and select our sorting routine. But now we need to
+
+00:16:07.000 --> 00:16:11.319
+figure out how to make numeric fields sort on the second
+
+00:16:11.320 --> 00:16:16.359
+column. In transient, if we press a ?, that
+
+00:16:16.360 --> 00:16:21.439
+gives us basically a intermediate help section where, if we
+
+00:16:21.440 --> 00:16:27.279
+press a key binding, it will tell us or load the docstring for
+
+00:16:27.280 --> 00:16:33.039
+the command that's there. That command in this case is
+
+00:16:33.040 --> 00:16:40.039
+sort-numeric-fields. It requires an argument. That
+
+00:16:40.040 --> 00:16:44.079
+argument can be passed using the prefix argument,
+
+00:16:44.080 --> 00:16:52.119
+C-u. Press q. Let's do that. In this case, we
+
+00:16:52.120 --> 00:16:58.679
+want to check or use the value 2 and press n. Sure enough,
+
+00:16:58.680 --> 00:17:04.339
+that region is sorted with respect to the second column.
+
+NOTE Casual has transformed my user experience with Emacs
+
+00:17:04.340 --> 00:17:12.159
+Before Casual, so many powerful Emacs commands were not
+
+00:17:12.160 --> 00:17:15.559
+available to me because they were too hard to recall or I
+
+00:17:15.560 --> 00:17:19.879
+could not discover them. Making Casual has changed that,
+
+00:17:19.880 --> 00:17:24.359
+letting me reimagine more positively my user experience
+
+00:17:24.360 --> 00:17:29.199
+with Emacs. If you're interested in any of what I've shown
+
+00:17:29.200 --> 00:17:34.450
+today, I invite you to try out Casual.
+
+NOTE Thanks and acknowledgements
+
+00:17:34.451 --> 00:17:37.032
+Before I leave, my thanks and acknowledgments
+
+00:17:37.033 --> 00:17:38.679
+go out to the following people.
+
+00:17:38.680 --> 00:17:43.399
+First, to Jonas Bernoulli for making Transient and Magit.
+
+00:17:43.400 --> 00:17:49.319
+Casual would not be possible without your work. Next, to
+
+00:17:49.320 --> 00:17:54.399
+Psionic-k for writing Transient Showcase. It showed me how I
+
+00:17:54.400 --> 00:17:59.439
+could build casual. To all the casual users and their
+
+00:17:59.440 --> 00:18:05.319
+support, I am genuinely appreciative. Finally, to Jon
+
+00:18:05.320 --> 00:18:08.759
+Snader for writing the kind posts on Casual on the Irreal
+
+00:18:08.760 --> 00:18:10.519
+website. Thank you.
+
+00:18:10.520 --> 00:18:15.797
+Casual can be found on MELPA,
+
+00:18:15.798 --> 00:18:23.720
+and its repository is hosted on GitHub.
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
new file mode 100644
index 00000000..3266d254
--- /dev/null
+++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt
@@ -0,0 +1,748 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:06.039
+... Org mode and kind of note taking. And that meant that it wasn't
+
+00:00:06.040 --> 00:00:10.679
+too difficult to get started with. But when I started more on
+
+00:00:10.680 --> 00:00:14.959
+the coding side, because I'm a software engineer, you know,
+
+00:00:14.960 --> 00:00:20.679
+on the day job. That kind of got me to think that the colors and
+
+00:00:20.680 --> 00:00:26.479
+how themes look, how Emacs looks, was affecting. And that's
+
+00:00:26.480 --> 00:00:30.719
+how it kind of came to picture. So I could have kind of gone
+
+00:00:30.720 --> 00:00:34.919
+into a little bit more coding side of things, but I didn't
+
+00:00:34.920 --> 00:00:38.319
+want to stress too much on the talk. So that's why I kind of
+
+00:00:38.320 --> 00:00:43.439
+stuck to a very small bits of Org Mode and Elisp. And yeah, I
+
+00:00:43.440 --> 00:00:48.159
+think that's how it came about. Yeah, but that's perfectly
+
+00:00:48.160 --> 00:00:52.119
+fine. That's one of the chief reasons why we have two tracks
+
+00:00:52.120 --> 00:00:54.799
+for Emacs content. We've had those for the last four years, I
+
+00:00:54.800 --> 00:00:57.279
+think. It's because we have a general track, which is more
+
+00:00:57.280 --> 00:00:59.239
+geared towards people who want a general... well,
+
+00:00:59.240 --> 00:01:01.799
+generally people who are highly interested into org mode
+
+00:01:01.800 --> 00:01:03.999
+and not necessarily into coding, but just to whet their
+
+00:01:04.000 --> 00:01:08.399
+appetite to what can be done. And on the DevTrack, we have,
+
+00:01:08.400 --> 00:01:11.519
+well, this year we have talked about Rust and about other
+
+00:01:11.520 --> 00:01:13.559
+fancy things that people can do with Emacs. But, you know,
+
+00:01:13.560 --> 00:01:15.559
+I'm also a software engineer, you know, we do this all the
+
+00:01:15.560 --> 00:01:18.079
+time. Sometimes it's just fine to just chat about colors and
+
+00:01:18.080 --> 00:01:20.959
+just the results of what we develop rather than how the
+
+00:01:20.960 --> 00:01:24.839
+sausage is made. So that's completely fine too. I'm not sure
+
+NOTE Why colour?
+
+00:01:24.840 --> 00:01:28.879
+if you mentioned it in your presentation, but why color, out
+
+00:01:28.880 --> 00:01:31.479
+of all the things you could be ricing on your setup, why were
+
+00:01:31.480 --> 00:01:37.559
+you so interested about colors? I think it was just that
+
+00:01:37.560 --> 00:01:40.239
+mainly that I had to do a lot of context switch between
+
+00:01:40.240 --> 00:01:44.119
+different languages. Elisp is not the one because Elisp is
+
+00:01:44.120 --> 00:01:48.079
+something that I would do for Emacs editing. But for day job,
+
+00:01:48.080 --> 00:01:52.999
+I had to use mainly Go as I work with Kubernetes quite a bit. So
+
+00:01:53.000 --> 00:01:58.119
+Go and also web languages like TypeScript, JavaScript, you
+
+00:01:58.120 --> 00:02:01.519
+know, those languages, where I felt that whenever I was
+
+00:02:01.520 --> 00:02:05.359
+switching context to a different language, I felt that it's
+
+00:02:05.360 --> 00:02:08.839
+kind of annoying to see all the different colors in
+
+00:02:08.840 --> 00:02:11.999
+languages like TypeScript, where, you know, VS Code way
+
+00:02:12.000 --> 00:02:15.799
+would be very full of colors. which I felt that, okay, like,
+
+00:02:15.800 --> 00:02:18.759
+why do I have to have that many different colors on let and
+
+00:02:18.760 --> 00:02:23.759
+constant or the keywords where it could be just a white text?
+
+00:02:23.760 --> 00:02:27.679
+It didn't have to be that colorful. So that was the bit, the
+
+00:02:27.680 --> 00:02:31.399
+most annoying bit when it came to context switching. And I
+
+00:02:31.400 --> 00:02:34.759
+felt that that just didn't happen in the Org Mode or writing
+
+00:02:34.760 --> 00:02:40.799
+in general. So I had to find a way to make it work, make more
+
+00:02:40.800 --> 00:02:46.199
+coding make my coding more kind of friendly to me and that's
+
+00:02:46.200 --> 00:02:50.039
+when I thought maybe just the colors are something that's
+
+00:02:50.040 --> 00:02:54.039
+bothering me and it actually was the case and that's how I got
+
+00:02:54.040 --> 00:02:59.359
+to more into the color kind of journey and got too much into it
+
+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?
+
+00:03:04.040 --> 00:03:06.999
+learn Elisp and to get into the Emacs core? Because it's
+
+00:03:07.000 --> 00:03:09.399
+funny how you find plenty of people using Emacs in Org Mode
+
+00:03:09.400 --> 00:03:11.399
+and then they find something that they take particular
+
+00:03:11.400 --> 00:03:15.039
+issue with, for you it's the color, and then they just go all
+
+00:03:15.040 --> 00:03:18.039
+in trying to pull the rope as far as they can to try to
+
+00:03:18.040 --> 00:03:21.359
+understand as much as possible about what code is managing
+
+00:03:21.360 --> 00:03:23.879
+this part of the application. Like for you it was color, for
+
+00:03:23.880 --> 00:03:27.999
+me it was the org agenda, I desperately wanted to make Org
+
+00:03:28.000 --> 00:03:32.439
+Agenda do something that it wasn't able to do. And five
+
+00:03:32.440 --> 00:03:35.199
+years, well, actually, no, 10 years later, I find myself
+
+00:03:35.200 --> 00:03:38.199
+hosting Emacs Cons. So, you never know just how far you're
+
+00:03:38.200 --> 00:03:40.399
+going to be pulling this rope. So, it's really interesting
+
+00:03:40.400 --> 00:03:44.679
+for me that my call was this. But back to the question, is this
+
+00:03:44.680 --> 00:03:47.759
+what eventually motivated you to get into Elisp and the core
+
+00:03:47.760 --> 00:03:53.439
+of Emacs? I think that the original journey to move to Emacs
+
+00:03:53.440 --> 00:03:56.959
+was around keybindings that I got annoyed with with other
+
+00:03:56.960 --> 00:03:59.839
+solutions, not just, you know, not speaking of Emacs
+
+00:03:59.840 --> 00:04:02.879
+keybinding or anything, like anything in general. The main
+
+00:04:02.880 --> 00:04:07.519
+reason was that I used Dovrak keyboard layout, and that
+
+00:04:07.520 --> 00:04:10.799
+meant that all the C-c, C-v, C-p, whatever, It just is
+
+00:04:10.800 --> 00:04:13.919
+all over the place. So I had to find something that could work
+
+00:04:13.920 --> 00:04:17.039
+for me. And Emacs was a solution that allowed me to do
+
+00:04:17.040 --> 00:04:20.479
+anything. And that's the kind of the journey that it
+
+00:04:20.480 --> 00:04:24.039
+originally started. And from there, started tweaking org
+
+00:04:24.040 --> 00:04:28.439
+mode and writing experience to be tuned to my liking. Color
+
+00:04:28.440 --> 00:04:32.559
+was another thing that I thought, OK, maybe I could do it
+
+00:04:32.560 --> 00:04:36.239
+easily with org mode. And when I started to use more of the
+
+00:04:36.240 --> 00:04:40.799
+coding side of things on Emacs, I felt that, okay, that was
+
+00:04:40.800 --> 00:04:45.159
+something I needed to solve. So Elisp was always kind of
+
+00:04:45.160 --> 00:04:48.439
+just a toolkit that, you know, I knew that it was available. I
+
+00:04:48.440 --> 00:04:52.199
+knew that it would be something that I want to be able to use.
+
+00:04:52.200 --> 00:04:57.159
+So I think in a way color was a good segue to understand how I
+
+00:04:57.160 --> 00:05:03.359
+can kind of work out more of a complex logic with the editor
+
+00:05:03.360 --> 00:05:06.359
+without having to write JavaScript or things that I don't
+
+00:05:06.360 --> 00:05:09.399
+particularly like. So yeah, I think the journey around the
+
+00:05:09.400 --> 00:05:11.879
+functional languages, functional kind of programming was
+
+00:05:11.880 --> 00:05:15.439
+always something that I was keen about. And yeah, the whole
+
+00:05:15.440 --> 00:05:18.479
+journey kind of made sense for me. And then moving on to the
+
+00:05:18.480 --> 00:05:21.999
+color was just one way to get more involved in. So I can
+
+00:05:22.000 --> 00:05:26.279
+totally see that this journey kind of making to a little bit
+
+00:05:26.280 --> 00:05:30.759
+different angle But yeah, we shall see how that really turns
+
+00:05:30.760 --> 00:05:33.799
+out. But for now, I think I'm happy with the color setup. Now I
+
+00:05:33.800 --> 00:05:37.599
+can really focus on the coding. Well, that's all good. And
+
+00:05:37.600 --> 00:05:40.839
+I'm sure plenty of people listening to you now, you know,
+
+00:05:40.840 --> 00:05:43.639
+find this relatable, how they eventually got into
+
+00:05:43.640 --> 00:05:46.879
+programming. Like for you, you did say that you were a
+
+00:05:46.880 --> 00:05:50.519
+software engineer now. But I found plenty of people,
+
+00:05:50.520 --> 00:05:54.679
+especially doing workshops, that just started you know,
+
+00:05:54.680 --> 00:05:57.639
+their software engineering journey just with Emacs and
+
+00:05:57.640 --> 00:05:59.239
+they just realized they were doing something completely
+
+00:05:59.240 --> 00:06:01.999
+different, like I was studying humanities. But then you
+
+00:06:02.000 --> 00:06:05.079
+touch Emacs and you realize, yeah, this whole programming
+
+00:06:05.080 --> 00:06:06.679
+shtick is actually pretty damn cool.
+
+00:06:06.680 --> 00:06:09.079
+And then you find yourself again,
+
+00:06:09.080 --> 00:06:10.999
+five to 10 years later, becoming a software
+
+00:06:11.000 --> 00:06:12.999
+engineer. So yeah, that's all good.
+
+00:06:13.000 --> 00:06:13.919
+So we do have a couple of
+
+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.399
+people have questions and for me it's okay for me to chat with
+
+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.639
+themselves. And again, if you want to ask questions to Ryota
+
+00:06:27.640 --> 00:06:31.039
+directly, feel free to join us on BBB and whenever we're done
+
+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: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?
+
+00:06:35.320 --> 00:06:37.799
+All right, so starting with the first question,
+
+00:06:37.800 --> 00:06:39.999
+is there any intention to create a library
+
+00:06:40.000 --> 00:06:42.559
+for working with more experimental color spaces, pulling
+
+00:06:42.560 --> 00:06:45.679
+code out of Hasliberg for this purpose, perhaps? Although I
+
+00:06:45.680 --> 00:06:50.479
+do not know. Hasliberg, you might? Yeah, Hasliberg. And to
+
+00:06:50.480 --> 00:06:55.119
+answer the question, started the journey just for myself
+
+00:06:55.120 --> 00:06:58.479
+and I didn't think that it would be actually useful for other
+
+00:06:58.480 --> 00:07:03.319
+use cases and this conference talk just came about kind of
+
+00:07:03.320 --> 00:07:08.079
+out of sheer luck really. So the idea I think I can definitely
+
+00:07:08.080 --> 00:07:12.199
+work it out and I don't think there will be too, the original
+
+00:07:12.200 --> 00:07:17.639
+code that I started with was I had to use some color space and I
+
+00:07:17.640 --> 00:07:22.479
+started with sRGB and then went to HSL and then went to LCH. So
+
+00:07:22.480 --> 00:07:25.479
+I think there has been quite a bit that I learned from it. At
+
+00:07:25.480 --> 00:07:29.999
+the same time, I may be tempted to actually maybe perhaps
+
+00:07:30.000 --> 00:07:34.159
+contribute back to ct.el rather than creating my own. I
+
+00:07:34.160 --> 00:07:36.279
+think that would make more sense perhaps.
+
+00:07:36.280 --> 00:07:39.479
+But for my own kind of taste that I thought
+
+00:07:39.480 --> 00:07:42.839
+that it would be something I can work out in my theme,
+
+00:07:42.840 --> 00:07:46.879
+but I don't have any I think, you know, making a
+
+00:07:46.880 --> 00:07:49.999
+library is definitely something that I can think about, but
+
+00:07:50.000 --> 00:07:53.679
+perhaps maybe making it too many packages isn't exactly
+
+00:07:53.680 --> 00:07:57.319
+what I want. But for my own use case, I think I just wanted to
+
+00:07:57.320 --> 00:07:59.919
+have something that just didn't have any external
+
+00:07:59.920 --> 00:08:04.119
+dependency so that I can use the vanilla Emacs with my
+
+00:08:04.120 --> 00:08:09.639
+colors. I think that's how it started, but I'm definitely up
+
+00:08:09.640 --> 00:08:13.719
+for it if there is interest about it. Yeah, well, thank you
+
+00:08:13.720 --> 00:08:15.279
+for this. It's always good to contribute.
+
+00:08:15.280 --> 00:08:16.399
+I'm tempted to say
+
+00:08:16.400 --> 00:08:18.279
+that's how they get you. You know, you do something really
+
+00:08:18.280 --> 00:08:23.639
+cool and you share it with people and they have the, you know,
+
+00:08:23.640 --> 00:08:27.239
+they just ask you, oh, do you have your code online? And you
+
+00:08:27.240 --> 00:08:29.399
+realize, no, I haven't pushed it. And then they start
+
+00:08:29.400 --> 00:08:32.359
+pressing you on. well, you need to do this, this is amazing
+
+00:08:32.360 --> 00:08:35.879
+and you need to share it. You know, I had plenty of people ask
+
+00:08:35.880 --> 00:08:40.519
+me to share my dot files when I was tackling the org agenda
+
+00:08:40.520 --> 00:08:44.039
+issue that I mentioned earlier. And yeah, eventually when
+
+00:08:44.040 --> 00:08:47.479
+you get to publishing your stuff, you also feel great
+
+00:08:47.480 --> 00:08:50.279
+because you're putting a little bit of your intelligence
+
+00:08:50.280 --> 00:08:53.679
+into the world and it can be the start of the journey for
+
+00:08:53.680 --> 00:08:56.239
+someone else. You know, maybe someone will find your
+
+00:08:56.240 --> 00:08:58.679
+library at some point and realize, yeah, I wanted to do
+
+00:08:58.680 --> 00:09:01.239
+something slightly differently. and then they either
+
+00:09:01.240 --> 00:09:04.439
+contribute to a library or they make their own but it's a
+
+00:09:04.440 --> 00:09:07.359
+complete journey that starts with just people taking the
+
+00:09:07.360 --> 00:09:12.039
+time to publish the content of the brain basically. Yeah,
+
+00:09:12.040 --> 00:09:15.519
+that's the power of open source now. It's just how we really
+
+00:09:15.520 --> 00:09:19.119
+appreciate the open source culture being cultivated
+
+00:09:19.120 --> 00:09:23.159
+throughout so many years. And yeah, this is something that
+
+00:09:23.160 --> 00:09:26.999
+I'm definitely keen about. So yeah, open for suggestions.
+
+00:09:27.000 --> 00:09:30.079
+And exactly, that's how I started with the journey. And
+
+00:09:30.080 --> 00:09:33.519
+yeah, while this is very experimental and very personal,
+
+00:09:33.520 --> 00:09:38.199
+yeah, I'm not, you know, tied down to one particular way
+
+00:09:38.200 --> 00:09:41.399
+only. So yeah we'll be open to suggestions like this one
+
+00:09:41.400 --> 00:09:44.719
+which I would definitely think about. Yeah that's amazing
+
+00:09:44.720 --> 00:09:46.999
+and just to be clear you know this is not a there's no
+
+00:09:47.000 --> 00:09:50.639
+incentive one. I'm not pushing you to publish your library.
+
+00:09:50.640 --> 00:09:53.799
+You know it was very personal for you and at the end if you
+
+00:09:53.800 --> 00:09:56.199
+believe it might be useful for others it's a nice thing to
+
+00:09:56.200 --> 00:09:58.799
+eventually think about publishing it. But just the fact
+
+00:09:58.800 --> 00:10:01.439
+that you showed up at EmacsConf... Sorry, I'm
+
+00:10:01.440 --> 00:10:02.639
+starting to lose my voice on the morning
+
+00:10:02.640 --> 00:10:03.839
+of the first day. That's
+
+00:10:03.840 --> 00:10:07.639
+not boding well for the two next days. I mean, just one day.
+
+00:10:07.640 --> 00:10:09.159
+But just the
+
+00:10:09.160 --> 00:10:13.199
+fact that you're showing up at EmacsConf and sharing about
+
+00:10:13.200 --> 00:10:17.039
+all of this, the process, how you got to it eventually, it's
+
+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.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.639
+question and then try to cough a little bit. So can we have...
+
+00:10:31.640 --> 00:10:36.759
+Oh, sorry, Bala. Sorry. I was the one who asked the question.
+
+00:10:36.760 --> 00:10:40.279
+I thought I could ask it live here rather than... Thank you.
+
+00:10:40.280 --> 00:10:46.039
+I'll go cough a little bit. So here I am. Thanks, Ryota, for
+
+00:10:46.040 --> 00:10:50.519
+the nice talk. This is great. I loved it. Your attention to
+
+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.520 --> 00:10:54.959
+So I was just looking at the code and I was
+
+00:10:54.960 --> 00:10:58.759
+wondering, do you have a dark and a light theme variation
+
+00:10:58.760 --> 00:11:02.599
+which can be made from your theme? Or do you have to customize
+
+00:11:02.600 --> 00:11:06.199
+it every time? That was my question. And thanks for that.
+
+00:11:06.200 --> 00:11:09.679
+Thank you very much. I appreciate your feedback and
+
+00:11:09.680 --> 00:11:15.039
+questions. So to answer the question, the short answer is
+
+00:11:15.040 --> 00:11:18.439
+that I do have both dark and light themes with some sorts of
+
+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.679
+few things that I showed in the demo. where I showed, I think,
+
+00:11:26.680 --> 00:11:29.999
+three different dark theme colors. So light theme is
+
+00:11:30.000 --> 00:11:31.559
+definitely something that I can do.
+
+00:11:31.560 --> 00:11:33.759
+And the idea around Hasliberg theme
+
+00:11:33.760 --> 00:11:36.279
+and just my theming in general was that
+
+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.600 --> 00:11:42.159
+work in the standard way, I would just use the standard color.
+
+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.920 --> 00:11:48.519
+to have a bit of a warm colors near me, I would use the orange
+
+00:11:48.520 --> 00:11:52.279
+theme, without changing too much of the kind of general
+
+00:11:52.280 --> 00:11:55.639
+feeling and experience. So that can be said for the light
+
+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.839
+customization isn't that difficult to extend. So I do have
+
+00:12:04.840 --> 00:12:09.359
+both dark and light, but primarily I'm just looking at the
+
+00:12:09.360 --> 00:12:12.839
+dark theme as my main driver. But yeah, they are both
+
+00:12:12.840 --> 00:12:18.239
+available. Great. Thank you so much. I will definitely try
+
+00:12:18.240 --> 00:12:21.719
+your theme out. I'm definitely on the lookout for a nice,
+
+00:12:21.720 --> 00:12:26.119
+friendly theme. Thank you very much. As I said, this is a
+
+00:12:26.120 --> 00:12:31.279
+personal theme. I'm not sure if it really fits everyone's
+
+00:12:31.280 --> 00:12:37.159
+need, but it is one inspiration that I hope that can lead to
+
+00:12:37.160 --> 00:12:40.639
+another nice theming that could work for someone
+
+00:12:40.640 --> 00:12:44.199
+specifically for some use cases. I don't have to solve
+
+00:12:44.200 --> 00:12:48.719
+everyone's problem. Yeah, and I mean, it was sufficient to
+
+00:12:48.720 --> 00:12:50.719
+be inspirational to people. I mean, just Bala just
+
+00:12:50.720 --> 00:12:53.759
+mentioned it right now, but I'm sure plenty of people who
+
+00:12:53.760 --> 00:12:55.999
+watched live, but also people will be watching in the
+
+00:12:56.000 --> 00:12:58.599
+future, will have the interest to speak by what you've done.
+
+00:12:58.600 --> 00:13:05.079
+So thank you again so much for this. Yep. All right, well, I
+
+00:13:05.080 --> 00:13:09.719
+don't see any further questions. So I suggest we move
+
+00:13:09.720 --> 00:13:14.279
+towards closure. Ryota, do you have any last words? No, I
+
+00:13:14.280 --> 00:13:17.079
+don't. So yeah, thank you very much for attending. And it was
+
+00:13:17.080 --> 00:13:20.519
+great fun putting this together. And I really didn't think
+
+00:13:20.520 --> 00:13:24.759
+that I would be talking about my personal colors and
+
+00:13:24.760 --> 00:13:27.759
+personal favorites, like orange being my favorite color.
+
+00:13:27.760 --> 00:13:30.119
+This wouldn't be something that I would say out in any
+
+00:13:30.120 --> 00:13:34.159
+conference, to be honest. But it just came out to be. And
+
+00:13:34.160 --> 00:13:37.479
+happy that I had a chance. So thank you very much for giving me
+
+00:13:37.480 --> 00:13:41.439
+the opportunity to talk. in this amazing conference and
+
+00:13:41.440 --> 00:13:44.319
+yeah I can't just wait to check out other talks which you know
+
+00:13:44.320 --> 00:13:46.919
+I know that there isn't you know other talks that are
+
+00:13:46.920 --> 00:13:50.199
+happening right now I was actually wanted to to join them and
+
+00:13:50.200 --> 00:13:52.759
+check check that out so I will probably do that right now.
+
+00:13:52.760 --> 00:13:56.839
+Well, sure. Well, I won't hold you any longer then. Thank
+
+00:13:56.840 --> 00:13:59.759
+you. For me, it was just amazing to, you know, generally when
+
+00:13:59.760 --> 00:14:01.639
+you ask someone what their favorite color, you know, they
+
+00:14:01.640 --> 00:14:04.399
+just tell you orange or blue or whatever. They don't go then
+
+00:14:04.400 --> 00:14:07.039
+to chat about 20 minutes about their favorite color and how
+
+00:14:07.040 --> 00:14:10.079
+they tuned their entire editor to work exactly around their
+
+00:14:10.080 --> 00:14:14.759
+favorite colors. So it was inspiring. And I also want to try
+
+00:14:14.760 --> 00:14:17.999
+it out, frankly, because my theme has been utterly bad for
+
+00:14:18.000 --> 00:14:20.639
+the last five years and I need some change into my life. All
+
+00:14:20.640 --> 00:14:24.319
+right. Thank you so much for your time. Thank you very much,
+
+00:14:24.320 --> 00:14:30.640
+everyone. Cheers. Bye-bye.
+
diff --git a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt
new file mode 100644
index 00000000..8ea4ab36
--- /dev/null
+++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt
@@ -0,0 +1,20 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:58.667
+Introduction
+
+00:00:58.668 --> 00:03:42.119
+What colour do you like?
+
+00:03:42.120 --> 00:06:25.884
+Colour spaces: HSL, LCH , and more
+
+00:06:25.885 --> 00:08:08.399
+color.el and ct.el
+
+00:08:08.400 --> 00:11:06.239
+Hasliberg theme
+
+00:11:06.240 --> 00:11:48.400
+Wrap up
diff --git a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt
new file mode 100644
index 00000000..e9bbd7ca
--- /dev/null
+++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt
@@ -0,0 +1,541 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:11.327
+Hi, EmacsConf. This is "Colour your Emacs with ease".
+
+00:00:11.328 --> 00:00:14.848
+I'm Ryota Sawada, and today's agenda is:
+
+00:00:14.849 --> 00:00:16.649
+start with a brief introduction.
+
+00:00:16.650 --> 00:00:19.719
+I will be talking about colours quite a bit.
+
+00:00:19.720 --> 00:00:21.452
+What colours do you like?
+
+00:00:21.453 --> 00:00:23.599
+Colour spaces and some packages such
+
+00:00:23.600 --> 00:00:27.879
+as color.el, ct.el. I'll be touching on a theme called
+
+00:00:27.880 --> 00:00:31.056
+Hasliberg theme, which I created,
+
+00:00:31.057 --> 00:00:34.139
+before wrapping up the talk.
+
+00:00:34.140 --> 00:00:36.959
+A quick introduction about the talk. The slide is
+
+00:00:36.960 --> 00:00:40.559
+available as an Org mode file at Codeberg. If you're
+
+00:00:40.560 --> 00:00:43.519
+looking at it from Org mode, you probably want to have
+
+00:00:43.520 --> 00:00:47.639
+rainbow mode turned on for the best viewing. This is the
+
+00:00:47.640 --> 00:00:52.559
+case with the presentation today. I'm Ryota Sawada and I'm
+
+00:00:52.560 --> 00:00:58.667
+available at rytswd at usual places.
+
+NOTE What colour do you like?
+
+00:00:58.668 --> 00:01:01.290
+What colour do you like?
+
+00:01:01.291 --> 00:01:04.999
+You might be able to tell I like orange. That's
+
+00:01:05.000 --> 00:01:07.856
+the colour that I use often.
+
+00:01:07.857 --> 00:01:09.958
+Emacs gives me all the control I want,
+
+00:01:09.959 --> 00:01:13.119
+so naturally I wanted to make it aesthetically
+
+00:01:13.120 --> 00:01:16.023
+pleasing to my taste, which meant that
+
+00:01:16.024 --> 00:01:19.725
+I would like to have a dark theme, subtle theme
+
+00:01:19.726 --> 00:01:23.767
+with orange as a main accent colour, but not
+
+00:01:23.768 --> 00:01:26.803
+too orange, so not everything very orange.
+
+00:01:26.804 --> 00:01:29.673
+Maybe use another blue-ish colour
+
+00:01:29.674 --> 00:01:32.929
+as another accent. Note that this presentation is
+
+00:01:32.930 --> 00:01:36.199
+based on the Hasliberg theme, more on that
+
+00:01:36.200 --> 00:01:40.599
+later. But when I started my Emacs journey, I didn't start
+
+00:01:40.600 --> 00:01:45.199
+with creating a new theme from get-go. I started with a theme
+
+00:01:45.200 --> 00:01:49.479
+called Nova Theme. I really liked it. I made a few tweaks
+
+00:01:49.480 --> 00:01:55.039
+around Org Mode and headings, so that they were a bit more was
+
+00:01:55.040 --> 00:02:00.759
+my liking, which was around orange being sprinkled across.
+
+00:02:00.760 --> 00:02:07.959
+I got to it very nice looking and I really liked it, but when
+
+00:02:07.960 --> 00:02:13.839
+I started a lot of coding tasks with it, I realized one
+
+00:02:13.840 --> 00:02:19.799
+thing: that it was very colourful, and in a way, distracting.
+
+00:02:19.800 --> 00:02:24.039
+it actually wasn't about Nova Theme's fault. It was just
+
+00:02:24.040 --> 00:02:27.479
+many editors, including Emacs and VS Code and other editors
+
+00:02:27.480 --> 00:02:31.679
+and modern themes, are filled with colours. Let's have a
+
+00:02:31.680 --> 00:02:38.039
+look. At the top left, you can see Nova theme with a bit of a
+
+00:02:38.040 --> 00:02:42.239
+pale greenish background with a few colours. Purple,
+
+00:02:42.240 --> 00:02:47.399
+pink, blue, green. You can see some colours like that with
+
+00:02:47.400 --> 00:02:51.519
+Nova theme. Nice looking colours, but still colourful. Modus
+
+00:02:51.520 --> 00:02:56.079
+Vivendi Tinted, bottom left, is also very nice looking
+
+00:02:56.080 --> 00:02:59.360
+modern theme, but quite colourful. The same can be said
+
+00:02:59.361 --> 00:03:03.134
+for ef-themes, owl edition at top right,
+
+00:03:03.135 --> 00:03:07.979
+and Doom Noe as another, bottom right.
+
+00:03:07.980 --> 00:03:13.759
+That led me to think: how can I make my code editing
+
+00:03:13.760 --> 00:03:18.599
+and coding tasks not too distracting, and I can focus on
+
+00:03:18.600 --> 00:03:22.759
+writing code. That was something I could manage with Org
+
+00:03:22.760 --> 00:03:26.399
+Mode, where I just specifically, basically used orange
+
+00:03:26.400 --> 00:03:29.399
+shades and not too much more. That's what you're seeing at
+
+00:03:29.400 --> 00:03:33.519
+the moment. I wanted to do something similar with coding
+
+00:03:33.520 --> 00:03:37.959
+and any general code. That led me to the journey of
+
+00:03:37.960 --> 00:03:42.119
+creating my own theme.
+
+NOTE Colour spaces: HSL, LCH , and more
+
+00:03:42.120 --> 00:03:44.679
+But before going to the theme, I need to talk about colour
+
+00:03:44.680 --> 00:03:49.079
+spaces. sRGB, standard RGB, is probably something that
+
+00:03:49.080 --> 00:03:53.439
+many people are familiar with. HSL is for hue, saturation,
+
+00:03:53.440 --> 00:03:58.359
+lightness. LCH is for luminance or lightness, chroma, and
+
+00:03:58.360 --> 00:04:03.319
+hue. Those are the colour spaces probably common used in
+
+00:04:03.320 --> 00:04:07.999
+various spaces, but when it comes to perceptual uniformity,
+
+00:04:08.000 --> 00:04:11.599
+there is an important difference between the colour
+
+00:04:11.600 --> 00:04:14.799
+spaces. Human perception of colour is not very
+
+00:04:14.800 --> 00:04:17.879
+straightforward. We can see in the reference here...
+
+00:04:17.880 --> 00:04:19.506
+Let's have a look.
+
+00:04:19.507 --> 00:04:23.159
+At the top you can see the shade coming from left
+
+00:04:23.160 --> 00:04:26.370
+green to the right blue,
+
+00:04:26.371 --> 00:04:30.959
+and in the top image, you can see half of
+
+00:04:30.960 --> 00:04:34.520
+it, perhaps, is very similar green colour
+
+00:04:34.521 --> 00:04:36.141
+and then when it comes to blue,
+
+00:04:36.142 --> 00:04:40.239
+you can see more of the different colour gradients
+
+00:04:40.240 --> 00:04:45.559
+coming into play. The bottom colour space is based on a
+
+00:04:45.560 --> 00:04:50.479
+perceptually uniform colour space, which gives us a bit more
+
+00:04:50.480 --> 00:04:55.039
+evenly distributed colour gradient, which will be
+
+00:04:55.040 --> 00:04:59.039
+something more suitable for deciding on the theme setup and
+
+00:04:59.040 --> 00:05:03.999
+the colour setup, where you can have various themes that are
+
+00:05:04.000 --> 00:05:10.439
+defined for human perceptions.
+
+00:05:10.440 --> 00:05:14.319
+Perceptual uniformity is important. For that, it is
+
+00:05:14.320 --> 00:05:17.879
+important to mention about CIE, or "International
+
+00:05:17.880 --> 00:05:23.479
+Commission of Illumination" in English. They created
+
+00:05:23.480 --> 00:05:29.479
+important colour spaces called CIE XYZ which was from 1931,
+
+00:05:29.480 --> 00:05:33.319
+CIELAB, and LUV, 1976,
+
+00:05:33.320 --> 00:05:37.519
+respectively. Those are the colour spaces used in various
+
+00:05:37.520 --> 00:05:41.839
+fields and industries and still relevant. There is a
+
+00:05:41.840 --> 00:05:44.898
+quite a bit that you can read up on.
+
+00:05:44.899 --> 00:05:48.960
+I'm not a colour expert so have some references here,
+
+00:05:48.961 --> 00:05:52.519
+but the TLDR of all of that is
+
+00:05:52.520 --> 00:05:57.525
+consider using LCH variants over RGB or HSL
+
+00:05:57.526 --> 00:06:00.606
+for better perceptual uniformity.
+
+00:06:00.607 --> 00:06:03.959
+Specifically CIE Lab-based LCH,
+
+00:06:03.960 --> 00:06:06.709
+which is often called Lab LCH
+
+00:06:06.710 --> 00:06:10.359
+or just LCH. CIELUV-based LCH
+
+00:06:10.360 --> 00:06:16.519
+is called LUV LCH. There is a new rather modern LCH setup
+
+00:06:16.520 --> 00:06:19.996
+called OK LCH which is based on OK Lab.
+
+00:06:19.997 --> 00:06:22.099
+So those are the colour spaces
+
+00:06:22.100 --> 00:06:24.279
+that are worth looking at when it comes to creating
+
+00:06:24.280 --> 00:06:25.884
+shades.
+
+NOTE color.el and ct.el
+
+00:06:25.885 --> 00:06:29.759
+How do you create shades? Color.el and ct.el are
+
+00:06:29.760 --> 00:06:33.199
+great solutions. You can create shades and different
+
+00:06:33.200 --> 00:06:37.799
+colours based on RGB and hex. You can see in the red example
+
+00:06:37.800 --> 00:06:43.839
+here, FF0000 is a bright red. You can darken it by providing
+
+00:06:43.840 --> 00:06:48.639
+less red values like CC or 88. You can see that the colours
+
+00:06:48.640 --> 00:06:52.839
+are slightly darker than the FF0000. But what if you are
+
+00:06:52.840 --> 00:06:57.439
+working with the complex colours such as FBB151, this
+
+00:06:57.440 --> 00:07:01.879
+particular orange? That's where color.el, ct.el come
+
+00:07:01.880 --> 00:07:05.743
+into play. Color.el is a built-in package in Emacs,
+
+00:07:05.744 --> 00:07:08.340
+so you can use it by just requiring it.
+
+00:07:08.341 --> 00:07:10.399
+color-darken-name and
+
+00:07:10.400 --> 00:07:13.905
+providing the colour with the hex value with 40%
+
+00:07:13.906 --> 00:07:16.886
+gives you a darker orange
+
+00:07:16.887 --> 00:07:20.039
+without doing too much of a colour computation
+
+00:07:20.040 --> 00:07:23.839
+by hand. This hex value is something that Emacs
+
+00:07:23.840 --> 00:07:27.319
+understands and rainbow mode does as well. When it comes
+
+00:07:27.320 --> 00:07:30.839
+to ct.el, it's not a built-in solution, but it's more
+
+00:07:30.840 --> 00:07:34.839
+versatile. It works with various colour spaces so you can
+
+00:07:34.840 --> 00:07:41.239
+see that ct-edit-hsl-l-dec by 40% would give
+
+00:07:41.240 --> 00:07:47.759
+us a darker colour by 40%. We can also use LCH variant which
+
+00:07:47.760 --> 00:07:53.479
+can use the LCH colour spaces for darkening the colour. This
+
+00:07:53.480 --> 00:07:56.919
+results in slightly different colours for this particular
+
+00:07:56.920 --> 00:08:00.199
+orange, but if you're working with the green or blue or some
+
+00:08:00.200 --> 00:08:04.177
+other colours, it might be worth looking at LCH variant
+
+00:08:04.178 --> 00:08:08.399
+rather than other colour spaces.
+
+NOTE Hasliberg theme
+
+00:08:08.400 --> 00:08:11.203
+With that, let's have a look at Hasliberg theme.
+
+00:08:11.204 --> 00:08:13.707
+This is a theme that I created personally
+
+00:08:13.708 --> 00:08:16.409
+and the name is based on the Swiss Alps
+
+00:08:16.410 --> 00:08:20.479
+and with the following ideas in mind. It focuses
+
+00:08:20.480 --> 00:08:25.031
+on setting up shades. Shades, by that...
+
+00:08:25.032 --> 00:08:26.999
+You can see how the top
+
+00:08:27.000 --> 00:08:31.839
+of the heading here is a bright orange colour, and
+
+00:08:31.840 --> 00:08:35.758
+other orange colours, this heading and this heading
+
+00:08:35.759 --> 00:08:37.719
+are based on the top
+
+00:08:37.720 --> 00:08:40.839
+orange colour and then giving some shade and the luminance
+
+00:08:40.840 --> 00:08:44.639
+adjustment essentially. It follows a pattern from web
+
+00:08:44.640 --> 00:08:49.039
+design and tailwind colour shades are a great example that
+
+00:08:49.040 --> 00:08:50.815
+you can have a look.
+
+00:08:50.816 --> 00:08:54.439
+It does not use ct.el as it aims to be fully
+
+00:08:54.440 --> 00:08:57.999
+dependency free and does not consider colour contrast for
+
+00:08:58.000 --> 00:09:02.119
+accessibility. This is because it's personal and I
+
+00:09:02.120 --> 00:09:04.746
+don't have that particular need.
+
+00:09:04.747 --> 00:09:06.839
+This is based on LuvLCh rather
+
+00:09:06.840 --> 00:09:08.788
+than LAB LCH, and that's another reason
+
+00:09:08.789 --> 00:09:11.049
+why I didn't use ct.el,
+
+00:09:11.050 --> 00:09:14.119
+and it is highly experimental. But the code is
+
+00:09:14.120 --> 00:09:18.279
+available at Codeberg and GitHub just for your reference.
+
+00:09:18.280 --> 00:09:23.719
+Let's see Hasliberg theme in action. This is the theme
+
+00:09:23.720 --> 00:09:27.159
+that we were looking at for org-mode as well, but for the
+
+00:09:27.160 --> 00:09:32.199
+code, in this case Elisp. You can see that the colour is
+
+00:09:32.200 --> 00:09:37.559
+mostly white and blue with orange sprinkled across for
+
+00:09:37.560 --> 00:09:41.559
+string input. You can see some pink showing up as well.
+
+00:09:41.560 --> 00:09:46.399
+Essentially, all the colour setup is done by shades, so most of
+
+00:09:46.400 --> 00:09:51.319
+it is based on white or neutral, and there will be lighter and
+
+00:09:51.320 --> 00:09:56.159
+darker variants that can be set for the primary colour of blue.
+
+00:09:56.160 --> 00:09:59.959
+You can see the darker and brighter and lighter colours
+
+00:09:59.960 --> 00:10:05.279
+being used. With that shade setup, I only have to provide a
+
+00:10:05.280 --> 00:10:09.599
+few colours as the base colours. From there, I can define the
+
+00:10:09.600 --> 00:10:15.959
+shades for the theme setup, which leads to creating a more
+
+00:10:15.960 --> 00:10:20.359
+monotonic colour setup, where this one is a very monotonic,
+
+00:10:20.360 --> 00:10:25.059
+very subtle difference of white colours used for the base
+
+00:10:25.060 --> 00:10:29.039
+colours. I don't have to make too many changes to the colour
+
+00:10:29.040 --> 00:10:32.079
+setup. I just have to provide the base colours that are
+
+00:10:32.080 --> 00:10:36.399
+different. The same can be said for this orange, very orange
+
+00:10:36.400 --> 00:10:39.359
+colour theme, which is based on the base colours of
+
+00:10:39.360 --> 00:10:43.639
+orange-like colours and gives the shade of various
+
+00:10:43.640 --> 00:10:50.719
+different setup. This means that I can use Hasliberg
+
+00:10:50.720 --> 00:10:56.159
+Theme Nature colour palette, and that gives me more of a green
+
+00:10:56.160 --> 00:11:00.839
+based colour where all the base colours are set up with a
+
+00:11:00.840 --> 00:11:06.239
+greenish colour setup.
+
+NOTE Wrap up
+
+00:11:06.240 --> 00:11:10.399
+With that, I would like to wrap up with a few ideas when
+
+00:11:10.400 --> 00:11:13.759
+adjusting themes and working with colours. Maybe consider
+
+00:11:13.760 --> 00:11:19.359
+using CIELAB, CIELUV, or OKLab-based colour spaces that
+
+00:11:19.360 --> 00:11:24.719
+would give you different shades which are easier to work
+
+00:11:24.720 --> 00:11:29.199
+with for human perceptions. color.el and ct.el can be a
+
+00:11:29.200 --> 00:11:32.559
+great tool for making shades and working with colour spaces.
+
+00:11:32.560 --> 00:11:36.239
+Hasliberg theme is yet another theme, highly personal
+
+00:11:36.240 --> 00:11:38.999
+and experimental, but could be an inspiration for your
+
+00:11:39.000 --> 00:11:44.119
+theme journey. With that, why not sprinkle your Emacs with
+
+00:11:44.120 --> 00:11:48.400
+your favourite colours? Thank you.
diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt
new file mode 100644
index 00000000..74b1254c
--- /dev/null
+++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt
@@ -0,0 +1,957 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:05.079
+You sound great. And on the stream, my eyeball says it looks
+
+00:00:05.080 --> 00:00:08.239
+great with Leo doing the streaming. So I say let's dive right
+
+00:00:08.240 --> 00:00:12.639
+in. You got a long, huge line. And in order to be a little more
+
+00:00:12.640 --> 00:00:16.279
+dialectical, I'll be reading the questions. So first
+
+NOTE 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)
+
+00:00:16.280 --> 00:00:18.559
+question, which key was a third party package for a long
+
+00:00:18.560 --> 00:00:21.879
+time? Is there work to bring any other popular packages into
+
+00:00:21.880 --> 00:00:25.399
+the core of Emacs for Emacs 31 plus, like Magit or Counsel?
+
+00:00:25.400 --> 00:00:30.279
+Uh, right. I already answered that one on the, as you can see,
+
+00:00:30.280 --> 00:00:33.999
+uh, right. Yeah. Do you want to quickly read the answer so
+
+00:00:34.000 --> 00:00:38.439
+that everyone, I just can read it out again. Um, as far as I
+
+00:00:38.440 --> 00:00:41.159
+remember, the one package that was being discussed just
+
+00:00:41.160 --> 00:00:43.999
+around the time that the Emacs 30 branch was cut was macro
+
+00:00:44.000 --> 00:00:47.599
+step. That's the package that was like, does an overlay, uh,
+
+00:00:47.600 --> 00:00:51.479
+replaces a macro with the macro expansion using overlays.
+
+00:00:51.480 --> 00:00:53.799
+So you don't have to pop up another buffer, modified,
+
+00:00:53.800 --> 00:00:57.599
+modified current buffer. But we didn't manage to address
+
+00:00:57.600 --> 00:01:00.759
+all the concerns in time for the Emacs 30 cuts and I believe
+
+00:01:00.760 --> 00:01:03.799
+it's sort of stagnated around that but it might be picked up
+
+00:01:03.800 --> 00:01:07.399
+anytime someone mentions it on Emacs Devil again. Another
+
+00:01:07.400 --> 00:01:11.519
+package question mentioned was Magit. That's a constant
+
+00:01:11.520 --> 00:01:14.959
+discussion regarding Magit. And actually, from the top of
+
+00:01:14.960 --> 00:01:19.039
+my head, I can't recall if Magit is on NonGNU ELPA or GNU ELPA
+
+00:01:19.040 --> 00:01:22.999
+right now. It's still on NonGNU ELPA.
+
+00:01:23.000 --> 00:01:29.039
+For those who don't know, only packages which are in ELPA are
+
+00:01:29.040 --> 00:01:33.039
+considered for addition, considered to be added to the
+
+00:01:33.040 --> 00:01:36.119
+Emacs core, to be bundled along with Emacs. And then there's
+
+00:01:36.120 --> 00:01:40.519
+another totally parallel discussion about having a sort of
+
+00:01:40.520 --> 00:01:43.519
+fat Emacs distribution, I call it fat Emacs distribution,
+
+00:01:43.520 --> 00:01:48.119
+where Emacs comes with a lot of ELPA packages or the
+
+00:01:48.120 --> 00:01:55.039
+pre-installed by default. Part of Emacs itself. Yeah.
+
+00:01:55.040 --> 00:01:59.159
+Maybe I could jump in with an active listening style,
+
+00:01:59.160 --> 00:02:03.359
+you know, kind of follow up question almost. You know, I
+
+00:02:03.360 --> 00:02:07.159
+understand the kind of different repositories. We have
+
+00:02:07.160 --> 00:02:13.799
+things that aren't maintained by GNU at all, you know, most
+
+00:02:13.800 --> 00:02:17.919
+notably MELPA. And then we have kind of NonGNU ELPA, which
+
+00:02:17.920 --> 00:02:21.639
+is sort of an entryway project where it's not necessarily
+
+00:02:21.640 --> 00:02:24.759
+curated, but there'll be some advice given, which you can
+
+00:02:24.760 --> 00:02:28.159
+take or leave. And that's the repository where anything
+
+00:02:28.160 --> 00:02:32.519
+that was the newer repository that represents, you know,
+
+00:02:32.520 --> 00:02:36.319
+help, you know, help, help supplied from GNU. And then
+
+00:02:36.320 --> 00:02:41.319
+there's the, actually the GNU, the GNU ELPA, what most of us
+
+00:02:41.320 --> 00:02:46.479
+are used to calling just ELPA. And that's what you're
+
+00:02:46.480 --> 00:02:50.839
+talking about there when you say,
+
+00:02:50.840 --> 00:02:53.959
+I mean, all packages on ELPA are officially considered to be
+
+00:02:53.960 --> 00:02:56.959
+part of Emacs, they're licensed under the same conditions
+
+00:02:56.960 --> 00:03:00.359
+as Emacs itself, same license, same everything. And
+
+00:03:00.360 --> 00:03:03.719
+they're more likely to be, to drop, to kind of be dropping
+
+00:03:03.720 --> 00:03:07.839
+patched. Oh yeah, it's time for this to move to core. Is that
+
+00:03:07.840 --> 00:03:12.559
+right? They have the legal conditions for that to be done.
+
+00:03:12.560 --> 00:03:15.039
+Everything's necessary from a paperwork standpoint. I
+
+00:03:15.040 --> 00:03:17.959
+mean, but other than that, there's not really a big
+
+00:03:17.960 --> 00:03:21.159
+difference between GNU ELPA and NonGNU ELPA. It's
+
+00:03:21.160 --> 00:03:23.839
+really just the main thing is this copyrights notice. So if
+
+00:03:23.840 --> 00:03:28.519
+you want to add a package to ELPA, to GNU ELPA, then all
+
+00:03:28.520 --> 00:03:32.359
+significance contributors have to have signed the FSF
+
+00:03:32.360 --> 00:03:36.399
+copyright assignment and the package script, actually the
+
+00:03:36.400 --> 00:03:41.519
+ELPA build script, checks if the copyright lines are all
+
+00:03:41.520 --> 00:03:43.879
+attributed to the Free Software Foundation.
+
+00:03:43.880 --> 00:03:52.119
+But that's not going to attach, right? So because that's not
+
+00:03:52.120 --> 00:03:57.799
+in place, it'd be a lot more work to merge it to core. I didn't
+
+00:03:57.800 --> 00:04:01.039
+hear the beginning. Nevermind. I think I understood. You
+
+00:04:01.040 --> 00:04:05.559
+made your point well. Okay. All right, moving on to the
+
+00:04:05.560 --> 00:04:06.466
+second question.
+
+NOTE Q: Any way to get the goodness of Emacs for android with this other stuff?
+
+00:04:06.467 --> 00:04:08.279
+When thinking about using Emacs on
+
+00:04:08.280 --> 00:04:11.279
+Android, I started realizing all the other software I also
+
+00:04:11.280 --> 00:04:15.279
+want on it. For example, PDF Tools wants a small additional
+
+00:04:15.280 --> 00:04:18.519
+Emacs-specific program to be installed on, and notmuch
+
+00:04:18.520 --> 00:04:21.359
+obviously wants notmuch. Any way to get the goodness of
+
+00:04:21.360 --> 00:04:25.639
+Emacs for Android with this other stuff, using either Nix OS
+
+00:04:25.640 --> 00:04:29.279
+or Guix or nix-on-droid to make an APK with extra stuff? Are you
+
+00:04:29.280 --> 00:04:34.439
+familiar with this topic? Absolutely not. The extent to
+
+00:04:34.440 --> 00:04:39.319
+which I have used Emacs on Android was entirely
+
+00:04:39.320 --> 00:04:43.719
+demonstrated in this video, I think. In my previous video. I
+
+00:04:43.720 --> 00:04:48.719
+mean, I know it does a few scrolling stuff, but I have no idea
+
+00:04:48.720 --> 00:04:52.719
+how external stuff, because I mean, Android is, it's a Unix
+
+00:04:52.720 --> 00:04:55.439
+or it's a Linux based system, but it's really heavily
+
+00:04:55.440 --> 00:05:01.439
+modified to the preferences of Google, which includes not
+
+00:05:01.440 --> 00:05:04.719
+being able to have your own software on it. Yeah,
+
+00:05:04.720 --> 00:05:08.799
+definitely. All right, moving on to the next question. Does
+
+00:05:08.800 --> 00:05:12.239
+package-vc... Oh, no, that's fine. I mean, you can't answer
+
+00:05:12.240 --> 00:05:15.199
+all the questions. I mean, it wouldn't be fun for me
+
+00:05:15.200 --> 00:05:15.753
+otherwise.
+
+NOTE Q: Does package-vc download a tarball from the specified git repository or clone the repository itself?
+
+00:05:15.754 --> 00:05:17.919
+Does package-vc download a tarball from the
+
+00:05:17.920 --> 00:05:21.759
+specified Git repository or clone the repository itself?
+
+00:05:21.760 --> 00:05:25.439
+It clones the repository. That's the VC part in the name.
+
+00:05:25.440 --> 00:05:33.719
+package-vc uses VC, the C-x v stuff. In Emacs 29, there's a
+
+00:05:33.720 --> 00:05:37.679
+new command called vc-clone, which in Emacs 31, it was
+
+00:05:37.680 --> 00:05:42.479
+actually exposed as an interactive command. And when you
+
+00:05:42.480 --> 00:05:47.319
+clone the repository, or when you, you can give it any URL of a
+
+00:05:47.320 --> 00:05:50.559
+Git repository or a CVS repository or subversion
+
+00:05:50.560 --> 00:05:53.519
+repository. Interestingly enough, most people only use
+
+00:05:53.520 --> 00:05:57.559
+Git, but anything that's, that implements this clone
+
+00:05:57.560 --> 00:06:01.519
+command for VC, and it could download it. So there's no
+
+00:06:01.520 --> 00:06:05.119
+tarballs involved. Which is also, one should emphasize,
+
+00:06:05.120 --> 00:06:07.879
+part of the difficulty of VC packages because when you have
+
+00:06:07.880 --> 00:06:10.759
+version control and you want to upgrade it, it might be that
+
+00:06:10.760 --> 00:06:14.399
+the upstream did a force push. For that, you make local
+
+00:06:14.400 --> 00:06:17.519
+changes and then you have to merge them upstream with the
+
+00:06:17.520 --> 00:06:21.239
+upstream changes when fetching stuff. It's one of the big
+
+00:06:21.240 --> 00:06:23.559
+downsides of version-controlled stuff, and I'm saying
+
+00:06:23.560 --> 00:06:26.999
+this as the guy who actually wrote package-vc. There's
+
+00:06:27.000 --> 00:06:29.719
+times to use it, there's advantages to it, but that's
+
+00:06:29.720 --> 00:06:32.959
+something you should keep in mind, why tarballs are
+
+00:06:32.960 --> 00:06:37.969
+interesting to have, in my opinion. Okay.
+
+NOTE How is the new behavior of M-q in prog-mode (prog-fill-reindent-defun or something like that) different from the behavior of C-M-q (indent-pp-sexp) in older Emacs versions?
+
+00:06:37.970 --> 00:06:39.639
+How is the new
+
+00:06:39.640 --> 00:06:42.439
+behavior of M-q in prog mode, prog-fill-reindent-defun
+
+00:06:42.440 --> 00:06:45.159
+or something like that, different from the behavior
+
+00:06:45.160 --> 00:06:48.799
+of C-M-q, i.e. indent-pp-sexp in older Emacs
+
+00:06:48.800 --> 00:06:52.199
+version? My apologies if indent-pp-sexp, it's really tough to
+
+00:06:52.200 --> 00:06:55.959
+read M-x commands out loud. It's not bound to
+
+00:06:55.960 --> 00:07:01.519
+C-M-q by default, I can't tell. Let me try that command
+
+00:07:01.520 --> 00:07:05.599
+out because I've never tried it, never used it before.
+
+00:07:05.600 --> 00:07:09.079
+You know, that isn't bound by default. I bind that up myself
+
+00:07:09.080 --> 00:07:11.759
+and I have that binding. I think that's, that's not right. It
+
+00:07:11.760 --> 00:07:15.119
+says so. I mean, I'm currently executing it here in Emacs and
+
+00:07:15.120 --> 00:07:20.839
+it says you can also run the commands indent-pp-sexp with
+
+00:07:20.840 --> 00:07:26.359
+M-q, C-M-q. Apparently it is. I mean, I
+
+00:07:26.360 --> 00:07:31.359
+didn't set it myself. I don't know what's up with that. to try
+
+00:07:31.360 --> 00:07:35.439
+and move it. And then each line started with points or pretty
+
+00:07:35.440 --> 00:07:37.239
+printed. I mean, the difference, the main difference
+
+00:07:37.240 --> 00:07:41.279
+between that and the command highlighted, what's the name
+
+00:07:41.280 --> 00:07:47.479
+again? I forget it all the time. The prog-mode command.
+
+00:07:47.480 --> 00:07:50.359
+prog-fill-reindent-defun is that
+
+00:07:50.360 --> 00:07:56.319
+it checks if it's in a string or not. If it's in a string or if
+
+00:07:56.320 --> 00:07:58.959
+it's in a comma, then it will refill. Otherwise, it's going
+
+00:07:58.960 --> 00:07:59.799
+to re-indent.
+
+00:07:59.800 --> 00:08:05.679
+That's, I think, as far as I see, that's going to be the main
+
+00:08:05.680 --> 00:08:09.599
+difference. If we have some long comments somewhere. Let's
+
+00:08:09.600 --> 00:08:15.439
+try that out. Yeah, that's the difference. I just, you can't
+
+00:08:15.440 --> 00:08:19.679
+see it, but I did try it. Okay, good. Thank you. You did a
+
+00:08:19.680 --> 00:08:22.119
+wonderful job describing visually what you're doing. All
+
+00:08:22.120 --> 00:08:26.759
+right, moving on to the next question, and we have about, we
+
+00:08:26.760 --> 00:08:28.759
+have just enough time to cover the last three questions,
+
+00:08:28.760 --> 00:08:32.239
+especially because the next one, I can pretty much surmise
+
+00:08:32.240 --> 00:08:33.143
+the answer.
+
+NOTE Q: Any plans for Emacs running in iOS?
+
+00:08:33.144 --> 00:08:36.759
+Any plans for Emacs running on iOS? Probably not
+
+00:08:36.760 --> 00:08:40.319
+because it's not, I mean, as I emphasized in the video, the
+
+00:08:40.320 --> 00:08:43.639
+Emacs port in Android is completely free. And to my
+
+00:08:43.640 --> 00:08:45.319
+knowledge, that's not something that's currently
+
+00:08:45.320 --> 00:08:49.799
+possible with iOS. You need Xcode or something like that to
+
+00:08:49.800 --> 00:08:56.639
+build iOS stuff. So that's a big no-no. I mean, maybe Apple's
+
+00:08:56.640 --> 00:09:00.919
+going to change their mind on that one. Well, I won't be the
+
+00:09:00.920 --> 00:09:04.039
+one liaising with Apple to make sure that they do, but PR
+
+00:09:04.040 --> 00:09:07.599
+welcomes, I guess, or motivated folks welcome. Second to
+
+00:09:07.600 --> 00:09:08.647
+last question.
+
+NOTE 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?
+
+00:09:08.648 --> 00:09:11.719
+I am worried about the situation on non-free
+
+00:09:11.720 --> 00:09:14.519
+systems. There was talk about the Windows and the macOS
+
+00:09:14.520 --> 00:09:17.039
+versions being as good as unmaintained. Where do we go from
+
+00:09:17.040 --> 00:09:20.399
+here? I gather that most users of Emacs are still on non-free
+
+00:09:20.400 --> 00:09:24.799
+platforms and will remain to be there. I don't know about the
+
+00:09:24.800 --> 00:09:28.279
+last point, if that's true, because there's no statistics
+
+00:09:28.280 --> 00:09:35.039
+on that matter. But the main, I mean, someone has to, I know
+
+00:09:35.040 --> 00:09:37.959
+that Corwin is involved with the Mac, with the Windows
+
+00:09:37.960 --> 00:09:43.199
+stuff. Modestly. Sure, I'd love to jump in, but I'm far more
+
+00:09:43.200 --> 00:09:45.839
+interested in your thoughts than mine. Please, please
+
+00:09:45.840 --> 00:09:51.039
+continue. Someone has to do the work. Eli uses, as far as I
+
+00:09:51.040 --> 00:09:58.719
+know, Eli's on the Windows XP system. So as long as he's doing
+
+00:09:58.720 --> 00:10:02.519
+that, there's going to be Windows support for one form or
+
+00:10:02.520 --> 00:10:07.959
+another, or at least DOS. All right. And now you put a quarter
+
+00:10:07.960 --> 00:10:12.439
+in me, so I'll jump right back in. That's perfect for where I
+
+00:10:12.440 --> 00:10:14.519
+guess I would take the question. To me, it's an
+
+00:10:14.520 --> 00:10:17.439
+accessibility issue. Think about it this way. Maybe that
+
+00:10:17.440 --> 00:10:23.319
+Windows XP system is what someone can afford. Likewise,
+
+00:10:23.320 --> 00:10:27.679
+from a freedom versus I have to do my job and I have to use
+
+00:10:27.680 --> 00:10:31.679
+certain technology to do my job. Maybe Emacs is what
+
+00:10:31.680 --> 00:10:35.559
+somebody can afford right? It might be the only free tool
+
+00:10:35.560 --> 00:10:37.439
+that they use and they don't have a lot of choice about the
+
+00:10:37.440 --> 00:10:40.039
+operating system that they're in most of the day. In fact,
+
+00:10:40.040 --> 00:10:42.279
+somebody could be in the situation where their computing
+
+00:10:42.280 --> 00:10:45.839
+device at work is really their internet access, right? All
+
+00:10:45.840 --> 00:10:48.279
+of those situations are possible. Therefore, I tend to
+
+00:10:48.280 --> 00:10:53.479
+assume they all exist and when I ask, you know, how much It
+
+00:10:53.480 --> 00:10:58.039
+definitely is concerning when we hear about kind of black
+
+00:10:58.040 --> 00:11:02.079
+holes in the brain trust of something like support for the
+
+00:11:02.080 --> 00:11:06.359
+Windows port. I feel like I've heard a lot of people
+
+00:11:06.360 --> 00:11:10.959
+answering that call, but the importance of that is that it
+
+00:11:10.960 --> 00:11:14.119
+doesn't stop echoing, right? Free software goes as long as
+
+00:11:14.120 --> 00:11:16.399
+there are people that are irritated enough about something
+
+00:11:16.400 --> 00:11:20.839
+to sort of come hack on it. Yeah. And the same applies to Mac
+
+00:11:20.840 --> 00:11:25.199
+OS. But I don't know any concrete details about who's
+
+00:11:25.200 --> 00:11:28.079
+currently working on it. I can't recollect any details on
+
+00:11:28.080 --> 00:11:29.439
+who's currently working on what.
+
+00:11:29.440 --> 00:11:35.279
+Okay. And that leaves us with the last question of the day.
+
+NOTE Q: Is there a best practice on what Org to use when following emacs-latest?
+
+00:11:35.280 --> 00:11:38.159
+I'm a bit confused about what version of Org that I should
+
+00:11:38.160 --> 00:11:40.919
+write towards because there's Org in Emacs, the one that
+
+00:11:40.920 --> 00:11:44.279
+ships built-in. There's the one in ELPA. There's the one in
+
+00:11:44.280 --> 00:11:48.519
+Org, probably the Org ELPA, I assume. Is there a best
+
+00:11:48.520 --> 00:11:51.959
+practice on what Org to use when following Emacs latest?
+
+00:11:51.960 --> 00:11:58.919
+when following us latest. It depends on, I think, my rough
+
+00:11:58.920 --> 00:12:02.559
+heuristic is if you do use Org a lot and if you follow the
+
+00:12:02.560 --> 00:12:06.279
+newest features, then use the version on Elpa, because the
+
+00:12:06.280 --> 00:12:09.959
+Elpa version should be the most up-to-date one. The Org Elpa
+
+00:12:09.960 --> 00:12:14.999
+was deprecated, to my knowledge. If that seems true, please
+
+00:12:15.000 --> 00:12:18.319
+someone interrupt me before I make a fool of myself.
+
+00:12:18.320 --> 00:12:24.519
+No one's done that yet.
+
+00:12:24.520 --> 00:12:29.519
+I think a couple of years ago there were chats and then we
+
+00:12:29.520 --> 00:12:33.999
+deprecated the all contrib ELPA, but I think all the ELPA is
+
+00:12:34.000 --> 00:12:40.759
+still alive. I didn't know that about that. Okay, in that
+
+00:12:40.760 --> 00:12:44.839
+case, that relativizes how absolute my answer is.
+
+00:12:44.840 --> 00:12:49.559
+Personally, I just use the version in Emacs, which is
+
+00:12:49.560 --> 00:12:53.399
+bundled with Emacs, which is regularly updated on master
+
+00:12:53.400 --> 00:12:58.319
+whenever there's a release. But that might take maybe, it
+
+00:12:58.320 --> 00:13:03.559
+might be a short time behind the ELPA version, or the other
+
+00:13:03.560 --> 00:13:11.879
+ELPA, the Org ELPA, which we mentioned. But I'm a very light
+
+00:13:11.880 --> 00:13:16.119
+Org mode user, so please don't take my word for that one. No,
+
+00:13:16.120 --> 00:13:23.439
+and I'm happy to come to you. Yeah. I
+
+00:13:23.440 --> 00:13:27.719
+feel like we lost Leo again. OK. Well, that's all right. I
+
+00:13:27.720 --> 00:13:31.279
+wanted a bite at that, Apple. I'm a little bit. Yeah, I also
+
+00:13:31.280 --> 00:13:34.239
+describe myself as a light org user, but somehow your
+
+00:13:34.240 --> 00:13:37.159
+comment made me think, well, maybe I do use it just a little
+
+00:13:37.160 --> 00:13:41.719
+bit more than you, Philip.
+
+00:13:41.720 --> 00:13:45.359
+From my standpoint, I'm using it as a technical basis for
+
+00:13:45.360 --> 00:13:49.959
+dungeon mode in order to keep the game notes for the games
+
+00:13:49.960 --> 00:13:52.479
+that are made using this game engine I'm making that I talked
+
+00:13:52.480 --> 00:13:56.079
+about a few years ago. As soon as you said technical grounds,
+
+00:13:56.080 --> 00:13:59.319
+you definitely use it more. Right, right. So I've studied
+
+00:13:59.320 --> 00:14:04.159
+its internals a bit, and I have my own thoughts about this or
+
+00:14:04.160 --> 00:14:06.959
+that. But of course, I'm rolling with the punches because
+
+00:14:06.960 --> 00:14:10.119
+I'm just grateful that the bear dances. What an amazing
+
+00:14:10.120 --> 00:14:14.519
+thing is Org Mode. But Leo knows far more than me,
+
+00:14:14.520 --> 00:14:18.359
+conveniently having his stage right here, so he can't
+
+00:14:18.360 --> 00:14:22.359
+defend himself from this. But I've had thoughts around this
+
+00:14:22.360 --> 00:14:28.559
+space. Are you back, Leo? Yeah, sorry, I'm back. You save us
+
+00:14:28.560 --> 00:14:33.479
+all. Maybe closing remarks. I was trying to clear my throat
+
+00:14:33.480 --> 00:14:36.079
+to be very inconspicuous about me coming back, but
+
+00:14:36.080 --> 00:14:39.319
+apparently I was ousted. Yeah, I was trying to answer the
+
+00:14:39.320 --> 00:14:42.239
+question and I was trying to desperately save you from
+
+00:14:42.240 --> 00:14:45.999
+answering, Philip, because yes, the thing about Org Mode is
+
+00:14:46.000 --> 00:14:48.879
+that if you are the kind of people who tend to check out master
+
+00:14:48.880 --> 00:14:51.919
+on Org Mode, generally it's roughly pretty stable. Like
+
+00:14:51.920 --> 00:14:54.319
+when we were working with Org Element and stuff like this,
+
+00:14:54.320 --> 00:14:56.479
+Perhaps there were some elements of stability which
+
+00:14:56.480 --> 00:14:59.199
+weren't there quite yet, but usually now it's pretty
+
+00:14:59.200 --> 00:15:02.039
+stable. So I think that if you are really excited about
+
+00:15:02.040 --> 00:15:04.639
+contributing to Org Mode and stuff like this, I think there
+
+00:15:04.640 --> 00:15:08.199
+isn't all that many risks to just checking out Org Mode
+
+00:15:08.200 --> 00:15:10.999
+Master, so cloning the repository and just keeping up to
+
+00:15:11.000 --> 00:15:15.119
+date. Otherwise, ELPA is a fairly safe bet if you want to have
+
+00:15:15.120 --> 00:15:19.839
+the latest stable version. And we've got a question about
+
+00:15:19.840 --> 00:15:24.759
+[??] as with Emacs itself. You can follow whatever is
+
+00:15:24.760 --> 00:15:28.519
+published in your package archives or in your system
+
+00:15:28.520 --> 00:15:32.399
+distribution package manager. You can build it yourself if
+
+00:15:32.400 --> 00:15:36.839
+you want to contribute and fix bugs, add features, and so on.
+
+00:15:36.840 --> 00:15:40.399
+Yeah, and I don't think perhaps a little more with Emacs,
+
+00:15:40.400 --> 00:15:43.439
+because the features that tends to get introduced in Emacs
+
+00:15:43.440 --> 00:15:48.039
+are slightly more wild. Not wild in the sense that they are
+
+00:15:48.040 --> 00:15:50.679
+less stable, but wild in the sense that they tend to change a
+
+00:15:50.680 --> 00:15:54.119
+lot more stuff. The core of Org, at least during Bastien's
+
+00:15:54.120 --> 00:15:56.879
+maintenance ship, was very stable when you think about it.
+
+00:15:56.880 --> 00:15:59.719
+So things might change with Ihor right now in terms of how he
+
+00:15:59.720 --> 00:16:02.839
+wants to change some of the core behaviors, but it's usually
+
+00:16:02.840 --> 00:16:06.079
+pretty stable. And whether you use the latest major
+
+00:16:06.080 --> 00:16:09.159
+version, the latest minor version, things are probably
+
+00:16:09.160 --> 00:16:11.679
+going to be pretty stable. It's like you heard me while you
+
+00:16:11.680 --> 00:16:16.199
+were offline. And I do agree with that, in case you might have
+
+00:16:16.200 --> 00:16:18.319
+heard both our remarks and think we're talking different
+
+00:16:18.320 --> 00:16:22.439
+angles. Actually, I think we would tend to agree on this, Leo
+
+00:16:22.440 --> 00:16:26.759
+and I. For the record, when I'm saying, oh, I have to go keep up
+
+00:16:26.760 --> 00:16:30.719
+with org, that's because org grows behaviors that I've got
+
+00:16:30.720 --> 00:16:34.639
+my own. I had to figure out at some point my own way to do it, and
+
+00:16:34.640 --> 00:16:38.119
+now I'm learning how it's done, right? So I'm like, in my
+
+00:16:38.120 --> 00:16:41.279
+abstraction, blah, right? And those conversations
+
+00:16:41.280 --> 00:16:44.279
+usually end at, and somebody else took the time to figure out
+
+00:16:44.280 --> 00:16:48.039
+how to actually make Emacs do that. Go be quiet. And I do, and I
+
+00:16:48.040 --> 00:16:52.999
+do consider that under Bastien's tenure, it has been quite
+
+00:16:53.000 --> 00:16:57.039
+stable. We might notice the occasional like, oh, this
+
+00:16:57.040 --> 00:17:00.519
+highlights now and that didn't, right? But very often, very
+
+00:17:00.520 --> 00:17:03.599
+infrequently is it breaking my workflow as a user, any of it.
+
+00:17:03.600 --> 00:17:07.799
+It's interesting to me that this mirrors my experience with
+
+00:17:07.800 --> 00:17:12.679
+Emacs itself, where I think, in my perception, Emacs master
+
+00:17:12.680 --> 00:17:17.199
+is very stable and I might notice the slight changes between
+
+00:17:17.200 --> 00:17:21.839
+git pulls. But otherwise, in my experience, Org mode
+
+00:17:21.840 --> 00:17:24.879
+suddenly changes something, I don't know what changed or
+
+00:17:24.880 --> 00:17:29.439
+what's going on or what caused it, and it seemed... I
+
+00:17:29.440 --> 00:17:33.719
+perceive it as being a sudden uncontrolled change or
+
+00:17:33.720 --> 00:17:36.239
+something. I think that's apt. Right. That gets
+
+00:17:36.240 --> 00:17:40.159
+right at it. If we're following, if we're pulling for more
+
+00:17:40.160 --> 00:17:42.759
+pretty regularly, cronjob every night or pulling a few
+
+00:17:42.760 --> 00:17:44.639
+times a day or something like that, we're going to the
+
+00:17:44.640 --> 00:17:48.639
+internals yeah, we'll have a different experience than,
+
+00:17:48.640 --> 00:17:51.959
+you know, if we only remember to update Org once every four
+
+00:17:51.960 --> 00:17:54.759
+months. It really pays to stick with everything. And
+
+00:17:54.760 --> 00:17:59.199
+suddenly lots of things might change. Whatever broke in my
+
+00:17:59.200 --> 00:18:03.439
+own config, right? And so a lot of, like a lot of things within
+
+00:18:03.440 --> 00:18:06.759
+Emacs, but also within the free software tool chain, it's
+
+00:18:06.760 --> 00:18:09.559
+how much you're going to invent in the config, invest in the
+
+00:18:09.560 --> 00:18:14.199
+config, might limit you know, and maintaining your config
+
+00:18:14.200 --> 00:18:17.199
+may limit the depth of how far it makes sense for you to go with
+
+00:18:17.200 --> 00:18:21.759
+the tool at any given point in time. Actually just looked up
+
+00:18:21.760 --> 00:18:25.279
+my org config and it's four, I said four options, user
+
+00:18:25.280 --> 00:18:29.239
+options. So that's, if that's the measurements of org
+
+00:18:29.240 --> 00:18:32.119
+expertise, that's my level, it's four.
+
+00:18:32.120 --> 00:18:38.559
+That's all good then. Four of four, I'm assuming that is,
+
+00:18:38.560 --> 00:18:44.279
+right? Four of what? What was the metric there, four of like a
+
+00:18:44.280 --> 00:18:48.119
+thousand? Four out of the number of user options that Word
+
+00:18:48.120 --> 00:18:54.239
+provides. Oh, okay, I see. Four, yeah, more like 10,000. I'm
+
+00:18:54.240 --> 00:18:59.079
+there. Yeah. All right. On that note, I suggest we move to
+
+00:18:59.080 --> 00:19:00.999
+what's close because it's fairly late for me and I need to
+
+00:19:01.000 --> 00:19:03.119
+sleep. And Philip, I think it's pretty late for you as well,
+
+00:19:03.120 --> 00:19:07.239
+isn't it? I'm in Germany, so it's about... So it is pretty
+
+00:19:07.240 --> 00:19:09.799
+late. It's the same time zone as me. It's 11 p.m. for you.
+
+00:19:09.800 --> 00:19:16.399
+Truly, yeah. Yeah, so I suggest we both take the chance to go
+
+00:19:16.400 --> 00:19:20.359
+to bed as soon as we can. But Philip, thank you so much for
+
+00:19:20.360 --> 00:19:22.759
+both the presentation and also the answers that you
+
+00:19:22.760 --> 00:19:26.119
+provided to us and the nice little chat we had at the end. We
+
+00:19:26.120 --> 00:19:29.519
+look forward to seeing you again next year, perhaps for
+
+00:19:29.520 --> 00:19:34.159
+Emacs 31. I'm not sure. I was chatting with wasamasa
+
+00:19:34.160 --> 00:19:37.679
+trying to make prognostics about when Emacs 30 is going to be
+
+00:19:37.680 --> 00:19:40.839
+released. There's a pre-release coming soon. I should have
+
+00:19:40.840 --> 00:19:46.719
+mentioned that earlier. Well, there you go. Gone.
+
+00:19:46.720 --> 00:19:51.839
+All right. Well, thank you so much, Philip. We'll be moving
+
+00:19:51.840 --> 00:19:54.479
+towards close. Give us about two minutes to get set up in the
+
+00:19:54.480 --> 00:19:58.439
+other room. And Philip, we'll see you next time. Goodbye.
+
+00:19:58.440 --> 00:20:02.160
+Bye-bye. Thank you.
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
new file mode 100644
index 00000000..57ef14d3
--- /dev/null
+++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:41.759
+Introduction
+
+00:01:41.760 --> 00:07:44.699
+Android
+
+00:07:44.700 --> 00:09:30.239
+EditorConfig
+
+00:09:30.240 --> 00:13:11.399
+use-package integration with package-vc
+
+00:13:11.400 --> 00:15:56.839
+JSON
+
+00:15:56.840 --> 00:17:30.719
+Native compilation
+
+00:17:30.720 --> 00:18:16.819
+Tree-sitter
+
+00:18:16.820 --> 00:19:34.219
+Completion preview mode
+
+00:19:34.220 --> 00:21:16.779
+package-isolate
+
+00:21:16.780 --> 00:23:17.879
+Reindenting
+
+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
new file mode 100644
index 00000000..feebc2ed
--- /dev/null
+++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt
@@ -0,0 +1,1361 @@
+WEBVTT captioned by anush
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.119
+Hello, and welcome to Emacs 30 Highlights at EmacsConf 2024.
+
+00:00:06.120 --> 00:00:08.839
+Before I begin, I'd like to thank the organizers
+
+00:00:08.840 --> 00:00:11.799
+and everyone involved for putting this all together.
+
+00:00:11.800 --> 00:00:13.759
+While this talk is being pre-recorded,
+
+00:00:13.760 --> 00:00:15.239
+my experience from the last few years
+
+00:00:15.240 --> 00:00:19.159
+assures me that it will be a great experience for everyone.
+
+00:00:19.160 --> 00:00:21.359
+My name is Philip Kaludercic.
+
+00:00:21.360 --> 00:00:24.479
+I am a core contributor and ELPA co-maintainer.
+
+00:00:24.480 --> 00:00:26.079
+I was honored when Sacha asked me
+
+00:00:26.080 --> 00:00:28.359
+to take over the slot for this year.
+
+00:00:28.360 --> 00:00:29.879
+In the past few iterations,
+
+00:00:29.880 --> 00:00:32.199
+John Wiegley has filled a similar presentation
+
+00:00:32.200 --> 00:00:35.679
+focusing on more general Emacs development updates.
+
+00:00:35.680 --> 00:00:38.519
+This year, I will specifically focus on
+
+00:00:38.520 --> 00:00:41.919
+highlight features from the upcoming Emacs 30 release,
+
+00:00:41.920 --> 00:00:43.919
+which might or might not have been released
+
+00:00:43.920 --> 00:00:48.079
+by the time you are seeing this.
+
+00:00:48.080 --> 00:00:51.079
+As you can imagine, everything new about Emacs
+
+00:00:51.080 --> 00:00:55.059
+can always be found in the Emacs NEWS file.
+
+00:00:55.060 --> 00:00:57.079
+Or, alternatively,
+
+00:00:57.080 --> 00:01:01.919
+if one doesn't want to read through the 3,000 lines here,
+
+00:01:01.920 --> 00:01:05.279
+one can also take a look at the Emacs FAQ
+
+00:01:05.280 --> 00:01:07.999
+and then go to the what's new about
+
+00:01:08.000 --> 00:01:12.219
+or what's different about Emacs 30 node.
+
+00:01:12.220 --> 00:01:14.759
+Next to these two official options,
+
+00:01:14.760 --> 00:01:18.599
+I also have a page on Emacs Wiki
+
+00:01:18.600 --> 00:01:21.439
+called EmacsThirtyHighlights,
+
+00:01:21.440 --> 00:01:24.279
+highlighting some of the interesting features
+
+00:01:24.280 --> 00:01:28.439
+with some context and suggestions on how to try them out.
+
+00:01:28.440 --> 00:01:30.039
+This is more of a collaborative effort.
+
+00:01:30.040 --> 00:01:32.719
+So if you see this and think something is missing,
+
+00:01:32.720 --> 00:01:34.519
+feel free to add it.
+
+00:01:34.520 --> 00:01:36.839
+So without further ado,
+
+00:01:36.840 --> 00:01:41.759
+let's begin taking a look at new features in Emacs 30.
+
+NOTE Android
+
+00:01:41.760 --> 00:01:44.679
+The biggest one, and the one I want to mention first,
+
+00:01:44.680 --> 00:01:49.039
+is Android support, native Android support.
+
+00:01:49.040 --> 00:01:51.879
+As you can see here, Emacs has been ported
+
+00:01:51.880 --> 00:01:53.639
+to the Android operating system.
+
+00:01:53.640 --> 00:01:56.479
+What this means is that from Emacs 30 onwards,
+
+00:01:56.480 --> 00:02:01.279
+you can build Android to target Android devices natively
+
+00:02:01.280 --> 00:02:06.759
+and using a graphical interface.
+
+00:02:06.760 --> 00:02:08.799
+While it has been possible to run Emacs
+
+00:02:08.800 --> 00:02:11.159
+inside of terminal emulators on Android for a while,
+
+00:02:11.160 --> 00:02:13.919
+this actually means that you can use Emacs
+
+00:02:13.920 --> 00:02:17.519
+on an Android device, a phone or a tablet,
+
+00:02:17.520 --> 00:02:20.959
+and have all the usual advantages from GUI Emacs,
+
+00:02:20.960 --> 00:02:23.479
+such as the ability to bind all commands
+
+00:02:23.480 --> 00:02:25.479
+without having to worry about--
+
+00:02:25.480 --> 00:02:27.279
+all keys without having to worry
+
+00:02:27.280 --> 00:02:29.359
+about terminal compatibility issues,
+
+00:02:29.360 --> 00:02:32.759
+displaying images and multiple fonts
+
+00:02:32.760 --> 00:02:35.359
+on the same display of different sizes.
+
+00:02:35.360 --> 00:02:37.279
+I should have a recording
+
+00:02:37.280 --> 00:02:42.199
+of that somewhere here--here we are--
+
+00:02:42.200 --> 00:02:44.439
+which I made earlier on my phone,
+
+00:02:44.440 --> 00:02:47.319
+because I'm recording this on a laptop--
+
+00:02:47.320 --> 00:02:50.479
+where we can see how touch interaction works
+
+00:02:50.480 --> 00:02:53.199
+on an Android phone. I can switch between buffers.
+
+00:02:53.200 --> 00:02:56.119
+Here I've connected an external keyboard,
+
+00:02:56.120 --> 00:02:58.559
+opening the Emacs website.
+
+00:02:58.560 --> 00:03:02.679
+We have images that we can interact with.
+
+00:03:02.680 --> 00:03:05.319
+We could resize them if we wanted to
+
+00:03:05.320 --> 00:03:07.559
+with the image resizing commands.
+
+00:03:07.560 --> 00:03:10.359
+Pinch-to-zoom works, so it
+
+00:03:10.360 --> 00:03:12.759
+does realize what touchscreen interactions are.
+
+00:03:12.760 --> 00:03:15.239
+With an external mouse, and for example,
+
+00:03:15.240 --> 00:03:17.799
+enabling context menu mode,
+
+00:03:17.800 --> 00:03:22.679
+I can even pop up little interaction windows,
+
+00:03:22.680 --> 00:03:27.239
+which one you would usually also know from GUI Emacs.
+
+00:03:27.240 --> 00:03:32.959
+TUI Emacs actually also supports them since a while now.
+
+00:03:32.960 --> 00:03:34.639
+And in this case, I'm demonstrating
+
+00:03:34.640 --> 00:03:35.999
+how even the touchscreen events
+
+00:03:36.000 --> 00:03:39.119
+can be inspected using the usual help system,
+
+00:03:39.120 --> 00:03:43.359
+and how context-mode notices
+
+00:03:43.360 --> 00:03:45.239
+where we are and allows me to, for example,
+
+00:03:45.240 --> 00:03:47.799
+evaluate this specific region,
+
+00:03:47.800 --> 00:03:49.079
+which I've highlighted down there,
+
+00:03:49.080 --> 00:03:58.319
+binding a command to touch-screen-scroll. Yeah.
+
+00:03:58.320 --> 00:04:00.479
+One should note that these additions,
+
+00:04:00.480 --> 00:04:02.359
+for example touchscreen interaction,
+
+00:04:02.360 --> 00:04:04.159
+are not specific to Android,
+
+00:04:04.160 --> 00:04:06.839
+but they also are supported in other operating systems,
+
+00:04:06.840 --> 00:04:12.279
+such as Wayland and Xorg, which are not operating systems,
+
+00:04:12.280 --> 00:04:15.279
+and Windows, insofar as they have touchscreen,
+
+00:04:15.280 --> 00:04:18.419
+and devices have touchscreen support.
+
+00:04:18.420 --> 00:04:21.239
+One should mention, or I want to mention,
+
+00:04:21.240 --> 00:04:24.039
+that the main developer behind this feature, Po Lu,
+
+00:04:24.040 --> 00:04:27.319
+should be complimented for the additional effort he put
+
+00:04:27.320 --> 00:04:30.979
+into making sure that Emacs for Android
+
+00:04:30.980 --> 00:04:33.719
+can be built using only a free software toolchain,
+
+00:04:33.720 --> 00:04:36.999
+which is certainly not something one has come to expect
+
+00:04:37.000 --> 00:04:40.759
+from working on Android applications,
+
+00:04:40.760 --> 00:04:43.839
+as usually you have to agree to some terms and conditions
+
+00:04:43.840 --> 00:04:46.479
+for Google-specific software.
+
+00:04:46.480 --> 00:04:49.639
+Final note is that if you try and look for this online,
+
+00:04:49.640 --> 00:04:52.119
+there are APKs you can find,
+
+00:04:52.120 --> 00:04:54.679
+but some of them might be outdated.
+
+00:04:54.680 --> 00:04:59.359
+To the best of my knowledge, Po Lu has...
+
+00:04:59.360 --> 00:05:02.399
+Emacs 30 Android Sourceforge...
+
+00:05:02.400 --> 00:05:06.759
+He has set up some system where here in Sourceforge,
+
+00:05:06.760 --> 00:05:12.799
+there are regular and updated
+
+00:05:12.800 --> 00:05:14.519
+APK files which you can download
+
+00:05:14.520 --> 00:05:17.039
+to avoid having to build it yourself,
+
+00:05:17.040 --> 00:05:18.559
+testing out the newest version
+
+00:05:18.560 --> 00:05:27.619
+in case there are some bugs which you'd like to report.
+
+00:05:27.620 --> 00:05:33.119
+Which-key is a package which has now been moved
+
+00:05:33.120 --> 00:05:34.719
+from ELPA to the core.
+
+00:05:34.720 --> 00:05:38.879
+If you haven't heard of which-key before, the idea is,
+
+00:05:38.880 --> 00:05:41.399
+or the general pitch is that which-key
+
+00:05:41.400 --> 00:05:45.279
+is a additional documentation interface for Emacs
+
+00:05:45.280 --> 00:05:49.639
+for displaying various keys which you could input,
+
+00:05:49.640 --> 00:05:53.479
+or various keys and key maps
+
+00:05:53.480 --> 00:05:55.479
+that have been partially inputted.
+
+00:05:55.480 --> 00:05:57.639
+A better way to demonstrate this
+
+00:05:57.640 --> 00:05:59.319
+or to explain this is just to show it.
+
+00:05:59.320 --> 00:06:03.519
+If we enable the which-key mode--it's a global minor mode--
+
+00:06:03.520 --> 00:06:06.399
+then I can press, for example, C-x,
+
+00:06:06.400 --> 00:06:08.719
+which is a prefix for the C-x keymap.
+
+00:06:08.720 --> 00:06:11.719
+Then down here in the buffer, in this window down here,
+
+00:06:11.720 --> 00:06:15.599
+we see various commands which we could invoke
+
+00:06:15.600 --> 00:06:17.919
+and the keys to invoke them with.
+
+00:06:17.920 --> 00:06:23.039
+For example, if I wanted to say C-x i for insert-file,
+
+00:06:23.040 --> 00:06:27.319
+then I just have to press i to highlight it once again.
+
+00:06:27.320 --> 00:06:32.559
+It should be down here. Pressing i without having to repeat
+
+00:06:32.560 --> 00:06:34.759
+the entire key code again,
+
+00:06:34.760 --> 00:06:37.719
+the partial key code again, just works.
+
+00:06:37.720 --> 00:06:41.679
+This is different from the feature which Emacs has already,
+
+00:06:41.680 --> 00:06:45.519
+which is if you have input the partial keychord,
+
+00:06:45.520 --> 00:06:47.039
+you can press C-h
+
+00:06:47.040 --> 00:06:50.959
+and then a help buffer pops up with a listing
+
+00:06:50.960 --> 00:06:54.159
+of all keybindings that start with C-x.
+
+00:06:54.160 --> 00:06:56.639
+The information is the same, the presentation is different,
+
+00:06:56.640 --> 00:06:59.159
+because now if I wanted to do C-x i,
+
+00:06:59.160 --> 00:07:03.319
+I have to repeat the entire keychord again.
+
+00:07:03.320 --> 00:07:09.479
+So it's a matter of personal preference, which you prefer.
+
+00:07:09.480 --> 00:07:12.519
+This is more of a traditional static approach
+
+00:07:12.520 --> 00:07:19.639
+because I get a help buffer which I can search
+
+00:07:19.640 --> 00:07:21.119
+using usual key commands,
+
+00:07:21.120 --> 00:07:28.159
+while which-key is more of a transient and modern.
+
+00:07:28.160 --> 00:07:31.299
+Some might prefer that approach
+
+00:07:31.300 --> 00:07:35.519
+to solving the same problem.
+
+00:07:35.520 --> 00:07:39.119
+Also, don't forget to check out the customization group
+
+00:07:39.120 --> 00:07:41.959
+for which-key which has a number of options
+
+00:07:41.960 --> 00:07:44.699
+which you might or might not be interested in.
+
+NOTE EditorConfig
+
+00:07:44.700 --> 00:07:50.879
+Next up, Emacs 30 has built-in EditorConfig support.
+
+00:07:50.880 --> 00:07:53.679
+If you have not heard of EditorConfig before,
+
+00:07:53.680 --> 00:07:56.379
+I believe I've linked to it down here somewhere.
+
+00:07:56.380 --> 00:08:00.160
+Ah, there it is, EditorConfig.
+
+00:08:00.161 --> 00:08:05.260
+This is a file format used to specify
+
+00:08:05.261 --> 00:08:11.959
+common formatting rules in an editor-agnostic way.
+
+00:08:11.960 --> 00:08:16.319
+You might compare it to .dir-locals.el files,
+
+00:08:16.320 --> 00:08:19.159
+which is a sort of an s-expression
+
+00:08:19.160 --> 00:08:22.159
+for setting file-local variables in Emacs.
+
+00:08:22.160 --> 00:08:26.559
+Of course, this is restricted to the common subset
+
+00:08:26.560 --> 00:08:29.299
+of what all editors should understand.
+
+00:08:29.300 --> 00:08:31.839
+For example, indentation styles,
+
+00:08:31.840 --> 00:08:36.699
+whether you prefer tabs or spaces,
+
+00:08:36.700 --> 00:08:38.759
+tab width, file encoding, and so on.
+
+00:08:38.760 --> 00:08:43.959
+So it's nothing too advanced, but it's something...
+
+00:08:43.960 --> 00:08:48.559
+It is a file format which one sees popping up more
+
+00:08:48.560 --> 00:08:50.439
+and more often in lots of projects
+
+00:08:50.440 --> 00:08:53.479
+which want to enforce a consistent indentation style
+
+00:08:53.480 --> 00:08:56.639
+or formatting rules for all editors in a project.
+
+00:08:56.640 --> 00:09:00.159
+Having this built in is certainly useful in Emacs.
+
+00:09:00.160 --> 00:09:03.579
+Though one should note that it's not enabled by default.
+
+00:09:03.580 --> 00:09:11.039
+You still have to enable the global minor mode,
+
+00:09:11.040 --> 00:09:14.239
+which is simply turning on this one option.
+
+00:09:14.240 --> 00:09:15.599
+Shouldn't be more than that,
+
+00:09:15.600 --> 00:09:18.759
+and then Emacs will respect the rules.
+
+00:09:18.760 --> 00:09:22.999
+If it finds a .editorconfig file in the project directory,
+
+00:09:23.000 --> 00:09:25.319
+then it will respect those rules
+
+00:09:25.320 --> 00:09:30.239
+without having to do anything else.
+
+NOTE use-package integration with package-vc
+
+00:09:30.240 --> 00:09:34.599
+Next up, use-package integration with package-vc.
+
+00:09:34.600 --> 00:09:36.519
+For those not familiar with either of the two,
+
+00:09:36.520 --> 00:09:38.119
+or at least one of the two,
+
+00:09:38.120 --> 00:09:41.079
+use-package is a popular configuration macro.
+
+00:09:41.080 --> 00:09:43.119
+What it does is it allows
+
+00:09:43.120 --> 00:09:46.274
+users to declaratively specify packages
+
+00:09:46.275 --> 00:09:48.879
+they would like to have installed and configured
+
+00:09:48.880 --> 00:09:51.539
+in their configuration file,
+
+00:09:51.540 --> 00:09:54.359
+so that, for example, if you copy your init.el
+
+00:09:54.360 --> 00:09:55.959
+from one system to another,
+
+00:09:55.960 --> 00:09:58.519
+it could bootstrap the entire configuration,
+
+00:09:58.520 --> 00:10:00.719
+downloading all the packages you want
+
+00:10:00.720 --> 00:10:02.239
+without having to manually do this
+
+00:10:02.240 --> 00:10:05.039
+on every system you'd like to use.
+
+00:10:05.040 --> 00:10:07.559
+This allows configurations
+
+00:10:07.560 --> 00:10:11.039
+to be self-encapsulated and portable.
+
+00:10:11.040 --> 00:10:15.959
+package-vc is an extension of package.el,
+
+00:10:15.960 --> 00:10:19.679
+which allows installing packages from an alternative.
+
+00:10:19.680 --> 00:10:22.279
+Instead of using the standard way to install packages,
+
+00:10:22.280 --> 00:10:26.239
+which is just download tarball and unpack it,
+
+00:10:26.240 --> 00:10:28.359
+byte compile, and so on,
+
+00:10:28.360 --> 00:10:32.759
+it will fetch the files for a package
+
+00:10:32.760 --> 00:10:35.279
+directly from the source code repository
+
+00:10:35.280 --> 00:10:37.239
+and initialize it in such a way
+
+00:10:37.240 --> 00:10:39.119
+that package.el can work with it.
+
+00:10:39.120 --> 00:10:44.319
+So it's just a front-end for installing packages.
+
+00:10:44.320 --> 00:10:46.519
+Even though these two were added to Emacs 29,
+
+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.639
+use-package integration of package-vc into use-package,
+
+00:10:52.640 --> 00:10:55.359
+which has been changed now.
+
+00:10:55.360 --> 00:11:00.119
+What we have with Emacs 30 is that
+
+00:11:00.120 --> 00:11:02.839
+there is a :vc keyword for use-package
+
+00:11:02.840 --> 00:11:05.319
+with which we can instruct use-package
+
+00:11:05.320 --> 00:11:10.760
+to not download a package using tarball,
+
+00:11:10.774 --> 00:11:12.519
+but instead to fetch the source code
+
+00:11:12.520 --> 00:11:13.799
+from a source code repository.
+
+00:11:13.800 --> 00:11:15.919
+This is useful if you, for example,
+
+00:11:15.920 --> 00:11:18.319
+have packages which you yourself work on
+
+00:11:18.320 --> 00:11:19.959
+and know that you always want to have
+
+00:11:19.960 --> 00:11:21.919
+the development version of the package
+
+00:11:21.920 --> 00:11:26.639
+where you can directly commit changes you've made
+
+00:11:26.640 --> 00:11:29.159
+to the repository and push them upstream.
+
+00:11:29.160 --> 00:11:32.399
+Or, if you know that you want to contribute to a package,
+
+00:11:32.400 --> 00:11:35.559
+you can use package-vc to download the source code,
+
+00:11:35.560 --> 00:11:37.319
+have all the version control information,
+
+00:11:37.320 --> 00:11:41.759
+prepare a patch and send it upstream.
+
+00:11:41.760 --> 00:11:44.119
+In these examples here,
+
+00:11:44.120 --> 00:11:49.119
+the first example Lisp instructs package-vc
+
+00:11:49.120 --> 00:11:52.959
+to download the source code from a URL.
+
+00:11:52.960 --> 00:11:55.119
+So this is a git URL where it will download
+
+00:11:55.120 --> 00:11:57.399
+the source code from, and in this case,
+
+00:11:57.400 --> 00:12:00.399
+choose the newest checkout of the source code,
+
+00:12:00.400 --> 00:12:05.680
+not the latest release. Down here, we have another example.
+
+00:12:05.060 --> 00:12:09.159
+I prefer to consider the following example here.
+
+00:12:09.160 --> 00:12:10.879
+If we just had written this,
+
+00:12:10.880 --> 00:12:13.159
+then package-vc would use the metadata
+
+00:12:13.160 --> 00:12:16.279
+which an ELPA server provides
+
+00:12:16.280 --> 00:12:19.799
+to fetch the URL from the official repository of,
+
+00:12:19.800 --> 00:12:22.839
+in this case, BBDB, without having to...
+
+00:12:22.840 --> 00:12:28.239
+It would be more or less the same like this up here,
+
+00:12:28.240 --> 00:12:32.639
+with the simple difference that package-vc integration
+
+00:12:32.640 --> 00:12:36.359
+into use-package doesn't check out the latest commit,
+
+00:12:36.360 --> 00:12:38.359
+but the latest release,
+
+00:12:38.360 --> 00:12:44.159
+just to keep configurations more deterministic by default.
+
+00:12:44.160 --> 00:12:47.879
+Of course, if you prefer to use latest commit,
+
+00:12:47.880 --> 00:12:52.439
+you can use a package-vc install command
+
+00:12:52.440 --> 00:12:54.879
+or just update the package manually yourself,
+
+00:12:54.880 --> 00:13:01.739
+which you can use using package-vc-upgrade.
+
+00:13:01.740 --> 00:13:04.319
+Next, I'd like to focus on a few features
+
+00:13:04.320 --> 00:13:07.740
+which one might not necessarily realize directly,
+
+00:13:07.741 --> 00:13:11.399
+but will hopefully improve your experience with Emacs.
+
+NOTE JSON
+
+00:13:11.400 --> 00:13:15.119
+First up in this list is a new JSON parser.
+
+00:13:15.120 --> 00:13:21.399
+Let's maybe show the source code for that one:
+
+00:13:21.400 --> 00:13:39.319
+not json.el, json.c. The history of JSON parsing in Emacs
+
+00:13:39.320 --> 00:13:43.279
+started with Emacs 23 with the addition of json.el.
+
+00:13:43.280 --> 00:13:46.919
+This was the file which we had just opened a moment ago.
+
+00:13:46.920 --> 00:13:50.959
+This is a JSON parser in Emacs Lisp.
+
+00:13:50.960 --> 00:13:53.199
+It's fine, it does the job, but it can get slow
+
+00:13:53.200 --> 00:13:55.479
+if we have a situation like where
+
+00:13:55.480 --> 00:14:00.479
+Eglot uses a LSP server to communicate with
+
+00:14:00.480 --> 00:14:02.959
+and the LSP server can get a bit chatty,
+
+00:14:02.960 --> 00:14:05.479
+sending a lot of JSON data,
+
+00:14:05.480 --> 00:14:08.199
+which all has to be parsed and garbage collected,
+
+00:14:08.200 --> 00:14:10.199
+which can slow down Emacs a bit.
+
+00:14:10.200 --> 00:14:14.119
+The situation was improved upon in Emacs 29
+
+00:14:14.120 --> 00:14:17.959
+when JSON parsing was added to the core.
+
+00:14:17.960 --> 00:14:21.039
+This was the json.c file, which we see on this side,
+
+00:14:21.040 --> 00:14:23.279
+the old version of the json.c file,
+
+00:14:23.280 --> 00:14:27.119
+which employed the Jansson library (it's the C library)
+
+00:14:27.120 --> 00:14:33.159
+for parsing and accelerating JSON parsing in Emacs.
+
+00:14:33.160 --> 00:14:33.999
+This was good enough,
+
+00:14:34.000 --> 00:14:36.159
+or it certainly improved the situation
+
+00:14:36.160 --> 00:14:38.559
+for a lot of LSP clients.
+
+00:14:38.560 --> 00:14:45.479
+But in Emacs 30, the situation has been improved once more
+
+00:14:45.480 --> 00:14:50.359
+with the addition of a JSON parser directly in Emacs.
+
+00:14:50.360 --> 00:14:52.999
+So instead of using an external library,
+
+00:14:53.000 --> 00:14:57.719
+there's a custom JSON parser written in C in the Emacs core,
+
+00:14:57.720 --> 00:15:01.559
+which directly generates Elisp objects.
+
+00:15:01.560 --> 00:15:04.999
+The advantage to this approach
+
+00:15:05.000 --> 00:15:06.359
+compared to the Jansson approach
+
+00:15:06.360 --> 00:15:07.919
+is that there's no intermediate format
+
+00:15:07.920 --> 00:15:09.199
+which has to be allocated
+
+00:15:09.200 --> 00:15:11.559
+and memory managed and freed again,
+
+00:15:11.560 --> 00:15:19.479
+which of course incurs an additional performance overhead.
+
+00:15:19.480 --> 00:15:22.659
+Next to this, there's also a custom serializer
+
+00:15:22.660 --> 00:15:27.119
+for JSON contents translating a JSON object into a string.
+
+00:15:27.120 --> 00:15:30.279
+... The consequence of this is that
+
+00:15:30.280 --> 00:15:35.600
+there is absolutely no dependency on Jansson anymore.
+
+00:15:35.640 --> 00:15:38.559
+This in turn means that now all Emacs users
+
+00:15:38.560 --> 00:15:39.799
+from Emacs 30 onwards
+
+00:15:39.800 --> 00:15:43.119
+can take advantage of this new JSON parser
+
+00:15:43.120 --> 00:15:44.879
+and don't have to worry about whether
+
+00:15:44.880 --> 00:15:47.799
+or not they have Jansson, this JSON parsing library,
+
+00:15:47.800 --> 00:15:50.999
+installed on their system or not when they want
+
+00:15:51.000 --> 00:15:56.839
+to take advantage of this accelerated JSON parsing.
+
+NOTE Native compilation
+
+00:15:56.840 --> 00:16:00.639
+Next up, another behind-the-scenes feature
+
+00:16:00.640 --> 00:16:04.559
+is that if you build Emacs on your own from source,
+
+00:16:04.560 --> 00:16:07.879
+you might know that if you wanted
+
+00:16:07.880 --> 00:16:09.559
+to use native compilation,
+
+00:16:09.560 --> 00:16:12.319
+so the translation of Elisp bytecodes
+
+00:16:12.320 --> 00:16:15.559
+to whatever the native assembly
+
+00:16:15.560 --> 00:16:19.319
+or native instruction set is on your system,
+
+00:16:19.320 --> 00:16:24.359
+you have to specify with native compilation.
+
+00:16:24.360 --> 00:16:25.879
+when invoking the configure script,
+
+00:16:25.880 --> 00:16:28.879
+otherwise it would not have been enabled at all.
+
+00:16:28.880 --> 00:16:34.119
+With Emacs 30, this step is not necessary anymore.
+
+00:16:34.120 --> 00:16:36.719
+The configure script will automatically check
+
+00:16:36.720 --> 00:16:41.759
+if you have the libgccjit library installed on your system,
+
+00:16:41.760 --> 00:16:42.879
+and if that is so,
+
+00:16:42.880 --> 00:16:45.999
+then native compilation will be enabled by default.
+
+00:16:46.000 --> 00:16:49.559
+In other words, if you have an issue with native compilation
+
+00:16:49.560 --> 00:16:52.799
+or prefer not to use it for whatever reason,
+
+00:16:52.800 --> 00:16:55.559
+you now have to type --without-native-compilation
+
+00:16:55.560 --> 00:16:58.199
+when compiling Emacs to prevent this from happening.
+
+00:16:58.200 --> 00:17:02.279
+But native compilation was added in Emacs 28
+
+00:17:02.280 --> 00:17:04.399
+and has proven to be a very stable
+
+00:17:04.400 --> 00:17:06.199
+and useful feature for most people,
+
+00:17:06.200 --> 00:17:10.199
+so there's probably no reason to do this
+
+00:17:10.200 --> 00:17:10.939
+and you can just invoke the configure script
+
+00:17:10.940 --> 00:17:16.239
+with one argument less. Right, and I'd like to finish up
+
+00:17:16.240 --> 00:17:19.399
+with a few smaller features, a few smaller highlights.
+
+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:30.720 --> 00:17:32.839
+There are a few new major modes
+
+00:17:32.840 --> 00:17:34.239
+based on the tree-sitter library.
+
+00:17:34.240 --> 00:17:37.739
+tree-sitter is this parser library
+
+00:17:37.740 --> 00:17:42.879
+which has been integrated into Emacs 29.
+
+00:17:42.880 --> 00:17:44.079
+It allows the integration
+
+00:17:44.080 --> 00:17:48.359
+of external, specialized, and quick parsers into Emacs,
+
+00:17:48.360 --> 00:17:52.119
+which improve stuff like syntax highlighting, indentation,
+
+00:17:52.120 --> 00:17:55.279
+structural navigation, imenu support,
+
+00:17:55.280 --> 00:18:00.839
+by simply having a better understanding of, for example,
+
+00:18:00.840 --> 00:18:03.919
+a HTML file, or a Lua file, a PHP file,
+
+00:18:03.920 --> 00:18:06.239
+than what people usually implement
+
+00:18:06.240 --> 00:18:10.319
+using regular expressions in traditional major modes.
+
+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.820 --> 00:18:19.959
+Another interesting feature is the completion-preview-mode.
+
+00:18:19.960 --> 00:18:23.319
+We can maybe try it out here in the scratch buffer.
+
+00:18:23.320 --> 00:18:28.199
+If I enable completion-preview-mode...
+
+00:18:28.200 --> 00:18:32.719
+This is a non-global minor mode,
+
+00:18:32.720 --> 00:18:38.479
+which will display completion options inline using overlays.
+
+00:18:38.480 --> 00:18:43.199
+For example, if I start typing a longer symbol like define,
+
+00:18:43.200 --> 00:18:48.119
+now we have a derived mode. It suggests me to...
+
+00:18:48.120 --> 00:18:51.039
+I can just press TAB and then it completes the option here,
+
+00:18:51.040 --> 00:18:51.839
+but it didn't actually...
+
+00:18:51.840 --> 00:18:55.279
+It's not actually modifying the buffer, it's not pressing,
+
+00:18:55.280 --> 00:18:57.039
+these are just overlays,
+
+00:18:57.040 --> 00:18:59.519
+so if I move around, it gets deleted.
+
+00:18:59.520 --> 00:19:02.539
+It wouldn't get saved if I were to save the buffer.
+
+00:19:02.540 --> 00:19:04.999
+The same also should work in a shell buffer.
+
+00:19:05.000 --> 00:19:09.239
+If I enable completion preview mode here and start...
+
+00:19:09.240 --> 00:19:12.759
+In this case, I'm using the bash completion package,
+
+00:19:12.760 --> 00:19:15.199
+which provides additional completion information.
+
+00:19:15.200 --> 00:19:17.839
+This is not only limited to programming systems,
+
+00:19:17.840 --> 00:19:22.919
+but anywhere where you have completion at point in Emacs.
+
+00:19:22.920 --> 00:19:26.059
+I can start typing here, ignore, and put ignore-backups,
+
+00:19:26.060 --> 00:19:29.919
+and it hints to the options which I have
+
+00:19:29.920 --> 00:19:34.219
+and allows me to complete them quickly.
+
+NOTE package-isolate
+
+00:19:34.220 --> 00:19:37.879
+Another small feature is the package-isolate command.
+
+00:19:37.880 --> 00:19:39.959
+What this does is it will start
+
+00:19:39.960 --> 00:19:42.759
+or it will prompt me for packages
+
+00:19:42.760 --> 00:19:44.119
+I have installed in my system
+
+00:19:44.120 --> 00:19:46.439
+and will start an isolated
+
+00:19:46.440 --> 00:19:51.079
+or like "emacs -Q"-ish instance of emacs
+
+00:19:51.080 --> 00:19:53.639
+with only these packages installed.
+
+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.280 --> 00:20:02.279
+then this is a new Emacs window.
+
+00:20:02.280 --> 00:20:04.439
+It's unrelated to the one around.
+
+00:20:04.440 --> 00:20:06.839
+It uses the same executable, of course,
+
+00:20:06.840 --> 00:20:09.939
+but will not load your configuration file
+
+00:20:09.940 --> 00:20:13.619
+or any other further customizations on your system.
+
+00:20:13.620 --> 00:20:15.159
+All it does, it will ensure
+
+00:20:15.160 --> 00:20:17.919
+that these packages, which are listed here,
+
+00:20:17.920 --> 00:20:24.499
+so in our case SLIME and dependencies of SLIME and diff-hl,
+
+00:20:24.500 --> 00:20:25.239
+in the system
+
+00:20:25.240 --> 00:20:29.039
+so that I could, for example, as you can see here,
+
+00:20:29.040 --> 00:20:31.959
+diff-hl-mode works.
+
+00:20:31.960 --> 00:20:35.479
+Okay, this is not a version-controlled file.
+
+00:20:35.480 --> 00:20:41.119
+Maybe if we take a look at, have I enabled diff-hl-mode?
+
+00:20:41.120 --> 00:20:44.559
+It's enabled in this case. What diff-hl-mode does
+
+00:20:44.560 --> 00:20:48.479
+is it displays these version control changes
+
+00:20:48.480 --> 00:20:49.999
+in the fringe of a buffer.
+
+00:20:50.000 --> 00:20:54.079
+And even though this is a uncustomized version of Emacs,
+
+00:20:54.080 --> 00:20:56.319
+or an uncustomized instance of Emacs,
+
+00:20:56.320 --> 00:20:58.959
+it was easy for me to load this one package,
+
+00:20:58.960 --> 00:21:01.959
+or these two packages and all the dependencies necessary.
+
+00:21:01.960 --> 00:21:05.319
+As you can imagine, the main purpose for this
+
+00:21:05.320 --> 00:21:07.719
+is to make debugging issues easier.
+
+00:21:07.720 --> 00:21:10.519
+If you want to report about an issue
+
+00:21:10.520 --> 00:21:14.519
+you have with a package. And if I close this, it's closed
+
+00:21:14.520 --> 00:21:16.779
+and everything's thrown away.
+
+NOTE Reindenting
+
+00:21:16.780 --> 00:21:18.959
+Last up, a nice feature I think
+
+00:21:18.960 --> 00:21:21.199
+a lot of people will appreciate is,
+
+00:21:21.200 --> 00:21:24.239
+if you are familiar with... Let's open a text buffer.
+
+00:21:24.240 --> 00:21:30.079
+The M-q key is traditionally bound to fill-paragraph.
+
+00:21:30.080 --> 00:21:32.119
+What this means is that...
+
+00:21:32.120 --> 00:21:34.999
+Let's, for example, copy this text from here
+
+00:21:35.000 --> 00:21:40.359
+and squash it all into one line. If I press M-q here,
+
+00:21:40.360 --> 00:21:42.399
+then the lines will be broken
+
+00:21:42.400 --> 00:21:49.479
+according to the fill column indicator up here.
+
+00:21:49.480 --> 00:21:52.399
+This is the traditional usage of M-q,
+
+00:21:52.400 --> 00:21:54.119
+and it still works in text-mode buffers,
+
+00:21:54.120 --> 00:21:56.639
+but in prog-mode buffers--
+
+00:21:56.640 --> 00:22:00.079
+so any major mode inheriting prog-mode--
+
+00:22:00.080 --> 00:22:02.199
+M-q will now by default be bound
+
+00:22:02.200 --> 00:22:09.719
+to prog-fill-reindent-defun. To summarize the point,
+
+00:22:09.720 --> 00:22:13.479
+if you are editing a string or a comment,
+
+00:22:13.480 --> 00:22:15.919
+then the comment will be filled.
+
+00:22:15.920 --> 00:22:19.159
+But if you are outside of a comment or outside of a string,
+
+00:22:19.160 --> 00:22:22.919
+then the defun or the top-level construct
+
+00:22:22.920 --> 00:22:26.119
+in the programming language will be re-indented.
+
+00:22:26.120 --> 00:22:33.859
+Let's try that out with maybe some file I have open here.
+
+00:22:33.860 --> 00:22:38.819
+If I'm in this... Let's choose some function,
+
+00:22:38.820 --> 00:22:41.279
+let's take this for example.
+
+00:22:41.280 --> 00:22:43.879
+If we followed all of this again,
+
+00:22:43.880 --> 00:22:47.619
+and I press M-q in on this paragraph,
+
+00:22:47.620 --> 00:22:50.039
+then the paragraph gets re-indented.
+
+00:22:50.040 --> 00:22:54.859
+But if I'm down here and I choose to break the indentation
+
+00:22:54.860 --> 00:22:56.180
+and then press M-q,
+
+00:22:56.181 --> 00:23:02.399
+then as you see, it practically selected the defun
+
+00:23:02.400 --> 00:23:03.559
+and re-indented everything
+
+00:23:03.560 --> 00:23:05.959
+without having need to move the point around in the buffer.
+
+00:23:06.800 --> 00:23:08.679
+So I think that's a really nice feature,
+
+00:23:08.680 --> 00:23:11.039
+which a lot of people can appreciate.
+
+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.880 --> 00:23:20.679
+Right, so that was my overview
+
+00:23:20.680 --> 00:23:22.559
+of what's going to be new in Emacs 30.
+
+00:23:22.560 --> 00:23:24.359
+I hope that most people could take away
+
+00:23:24.360 --> 00:23:25.659
+something from this presentation
+
+00:23:25.660 --> 00:23:29.419
+and have something to look forward
+
+00:23:29.420 --> 00:23:31.599
+to try out after upgrading.
+
+00:23:31.600 --> 00:23:33.839
+As mentioned initially, as of recording,
+
+00:23:33.840 --> 00:23:36.939
+this release has not been completed yet.
+
+00:23:36.940 --> 00:23:38.879
+If this is still not the case
+
+00:23:38.880 --> 00:23:40.199
+when you're seeing this video,
+
+00:23:40.200 --> 00:23:43.799
+please consider downloading and building Emacs 30 yourself.
+
+00:23:43.800 --> 00:23:48.319
+If you have any issues, which is always the case,
+
+00:23:48.320 --> 00:23:56.339
+please report them to using report-emacs-bug.
+
+00:23:56.340 --> 00:23:57.740
+That will pop up a mail buffer,
+
+00:23:57.741 --> 00:23:59.519
+and then you can describe your issue and send them out.
+
+00:23:59.520 --> 00:24:01.839
+All bug reports are valuable,
+
+00:24:01.840 --> 00:24:03.999
+even if they are false positives or duplicates--
+
+00:24:04.000 --> 00:24:05.239
+it doesn't matter--
+
+00:24:05.240 --> 00:24:08.919
+because when you take the time to submit a bug report,
+
+00:24:08.920 --> 00:24:12.359
+which describes something that's specific to your setup,
+
+00:24:12.360 --> 00:24:16.839
+which the developers might not have noticed or known about,
+
+00:24:16.840 --> 00:24:19.079
+then you are certainly helping out a lot of other people
+
+00:24:19.080 --> 00:24:21.679
+which might run into the same issue in the future.
+
+00:24:21.680 --> 00:24:23.359
+Especially with upgrades,
+
+00:24:23.360 --> 00:24:26.559
+it would be nice to figure out small problems
+
+00:24:26.560 --> 00:24:30.879
+which make upgrading difficult for some people.
+
+00:24:30.880 --> 00:24:34.559
+The ideal is, of course, to have no issues
+
+00:24:34.560 --> 00:24:37.199
+when upgrading from one version to another.
+
+00:24:37.200 --> 00:24:41.939
+Having said that, I thank you for your attention,
+
+00:24:41.940 --> 00:24:43.120
+and I'm saying goodbye.
diff --git a/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt
new file mode 100644
index 00000000..510e556e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt
@@ -0,0 +1,720 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:08.119
+All right. Hey, thanks for bearing with us there. We had a
+
+00:00:08.120 --> 00:00:11.239
+couple of bumps in the road, a cross between a couple of
+
+00:00:11.240 --> 00:00:13.479
+different versions of our program that we deliver here,
+
+00:00:13.480 --> 00:00:17.959
+different ways that we bring this stream together between
+
+00:00:17.960 --> 00:00:22.359
+the recorded content that that speakers are putting
+
+00:00:22.360 --> 00:00:26.879
+together in advance in the live content, such as what you're
+
+00:00:26.880 --> 00:00:31.039
+seeing right here. So thanks go to Sacha and Leo, and
+
+00:00:31.040 --> 00:00:34.359
+everybody behind the stages gluing it all together. And
+
+00:00:34.360 --> 00:00:40.199
+we're back here now, and I'm speaking with Robin, who us
+
+00:00:40.200 --> 00:00:42.799
+ready to take on some of your questions and address some of
+
+00:00:42.800 --> 00:00:46.879
+the comments over here on the etherpad. If you want to jump in
+
+00:00:46.880 --> 00:00:51.319
+there, there's links in the chat. And thanks so much, Robin,
+
+00:00:51.320 --> 00:00:53.999
+for your talk. And it's also been a pleasure chatting with
+
+00:00:54.000 --> 00:00:57.919
+you just a little bit over the last couple of months on IRC.
+
+00:00:57.920 --> 00:01:33.319
+Yeah, absolutely. Great meeting you.
+
+00:01:33.320 --> 00:01:37.679
+All right. All right, everyone. I think I am streaming now.
+
+00:01:37.680 --> 00:01:42.439
+So let's look at it. Let's see. I see the IRC scrolling. So
+
+00:01:42.440 --> 00:01:47.199
+let's see where that's going. Yes, the Common Lisp is what I
+
+00:01:47.200 --> 00:01:50.519
+thought would piss people off. And because it's not part of
+
+00:01:50.520 --> 00:01:54.239
+either community, but I think it would be a good compromise
+
+00:01:54.240 --> 00:01:57.839
+for building a Lisp into a language that's more suitable for
+
+00:01:57.840 --> 00:02:01.879
+building large systems like the kind that we are building in
+
+00:02:01.880 --> 00:02:07.279
+Emacs today. I also left out an important part of the talk,
+
+00:02:07.280 --> 00:02:12.079
+which is part of the motivation for transitioning from C to
+
+00:02:12.080 --> 00:02:15.599
+Lisp. And that's the performance characteristics
+
+00:02:15.600 --> 00:02:19.399
+fundamentally change when you get a modern and high
+
+00:02:19.400 --> 00:02:23.559
+performance Lisp system involved. it starts getting less
+
+00:02:23.560 --> 00:02:27.799
+practical to just call out to C to speed up every operation.
+
+00:02:27.800 --> 00:02:31.559
+Among other things, you lose the ability to use more
+
+00:02:31.560 --> 00:02:34.759
+advanced control structures, like the limited
+
+00:02:34.760 --> 00:02:40.039
+continuations. And you also have to pay the overhead of
+
+00:02:40.040 --> 00:02:43.879
+calling out to our foreign function. So it gets to be an
+
+00:02:43.880 --> 00:02:47.879
+increasingly better deal to optimize your list
+
+00:02:47.880 --> 00:02:52.719
+implementation and provide ways for building faster list
+
+00:02:52.720 --> 00:02:55.879
+programs, such as type annotations, once you've gotten
+
+00:02:55.880 --> 00:03:01.479
+over a certain threshold of performance.
+
+NOTE 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?
+
+00:03:01.480 --> 00:03:07.359
+I'm going to look at the pad. Here we go. The first question is
+
+00:03:07.360 --> 00:03:12.519
+about fibers and whether they help with making Elisp
+
+00:03:12.520 --> 00:03:18.279
+concurrent in terms of its data structures. Yes, that's
+
+00:03:18.280 --> 00:03:23.879
+absolutely correct. Fibers by themselves do not provide
+
+00:03:23.880 --> 00:03:26.799
+thread safety for any of the existing Emacs data
+
+00:03:26.800 --> 00:03:32.879
+structures. What they are useful for is building things
+
+00:03:32.880 --> 00:03:38.199
+that don't use Emacs data structures, say a network client
+
+00:03:38.200 --> 00:03:44.559
+that reads input from a stream or in scheme, a port or a stream
+
+00:03:44.560 --> 00:03:49.679
+instead of a buffer. And we can also take a look at options for
+
+00:03:49.680 --> 00:03:54.199
+making more Emacs features concurrency safe or thread
+
+00:03:54.200 --> 00:03:58.079
+safe. For example, we could introduce the idea of a thread
+
+00:03:58.080 --> 00:04:03.039
+local buffer that didn't require locks for sharing between
+
+00:04:03.040 --> 00:04:09.239
+different threads. And I'm not sure how that would develop,
+
+00:04:09.240 --> 00:04:12.319
+but I'm sure the Emacs maintainers already have some ideas
+
+00:04:12.320 --> 00:04:17.519
+in this direction. Fibers will basically provide a
+
+00:04:17.520 --> 00:04:22.159
+high-performance system that you can use apart from
+
+00:04:22.160 --> 00:04:28.079
+ordinary Emacs-less constructs.
+
+NOTE Q: Do you have a rough idea of how much of Guile is written in C?
+
+00:04:28.080 --> 00:04:34.839
+Let's see. We have another question. Emacs is roughly 25% C.
+
+00:04:34.840 --> 00:04:38.839
+How much of Guile is in C?
+
+00:04:38.840 --> 00:04:45.679
+Well, part of my point about C is not so much that there, well,
+
+00:04:45.680 --> 00:04:50.279
+obviously, I phrased it a little provocatively, but the
+
+00:04:50.280 --> 00:04:54.719
+problem is not so much that there is C, but that there is so
+
+00:04:54.720 --> 00:05:00.279
+much C involved in every single layer of the application.
+
+00:05:00.280 --> 00:05:04.559
+So, for example, we're limited in our ability to use tools
+
+00:05:04.560 --> 00:05:08.159
+like limit continuations, which can be used to express
+
+00:05:08.160 --> 00:05:13.599
+buffer local variable binding in a few dozen lines, because
+
+00:05:13.600 --> 00:05:21.839
+Emacs has so much calling back and forth between guile and C,
+
+00:05:21.840 --> 00:05:26.599
+due to so much basic functionality being in primitive C
+
+00:05:26.600 --> 00:05:34.119
+subroutines. So that's one issue apart from the question of
+
+00:05:34.120 --> 00:05:38.359
+how much is in a particular language. To answer the question
+
+00:05:38.360 --> 00:05:45.879
+about Guile, Guile has about 165,000 lines of scheme code
+
+00:05:45.880 --> 00:05:51.599
+and about 160,000 lines of C code, so it's about half and
+
+00:05:51.600 --> 00:05:55.879
+half. And that shouldn't really be surprising given that it
+
+00:05:55.880 --> 00:06:00.359
+is actually focused on low-level things like building a
+
+00:06:00.360 --> 00:06:05.079
+high-performance bytecode compiler, and a just-in-time
+
+00:06:05.080 --> 00:06:09.719
+compiler, and so on, as well as providing its own fairly
+
+00:06:09.720 --> 00:06:14.999
+rich, but still far less complete than Emacs's standard
+
+00:06:15.000 --> 00:06:19.239
+library, in terms of Ice9 and other system libraries
+
+NOTE Q: A Common Lisp implementation for Guile sounds really cool! Is there already work on this underway?
+
+00:06:19.240 --> 00:06:24.359
+shipped with Guile. The next question is on a Common Lisp
+
+00:06:24.360 --> 00:06:27.759
+implementation for Guile, and whether work on it is
+
+00:06:27.760 --> 00:06:33.079
+underway. In fact, work on it is already underway. I've been
+
+00:06:33.080 --> 00:06:36.399
+working on it on and off in my spare time for a couple of years
+
+00:06:36.400 --> 00:06:40.039
+now. I've gotten, I think, a couple of chapters of the
+
+00:06:40.040 --> 00:06:43.519
+hyperspectin, if you want to measure it that way. But I've
+
+00:06:43.520 --> 00:06:51.719
+been focusing my work more on research and on what we need to
+
+00:06:51.720 --> 00:06:57.399
+do to have a LISP environment, a polyglot LISP environment,
+
+00:06:57.400 --> 00:07:02.759
+wherein the features of Common Lisp and Scheme and Emacs
+
+00:07:02.760 --> 00:07:08.919
+Lisp can all work easily and ergonomically together. So
+
+00:07:08.920 --> 00:07:13.879
+this involves things like the question of Lisps having
+
+00:07:13.880 --> 00:07:22.079
+Lisp1s versus Lisp2s. That is, a Lisp1-like scheme has one
+
+00:07:22.080 --> 00:07:27.599
+namespace, like every variable is a single name that can
+
+00:07:27.600 --> 00:07:31.999
+refer to one value, whereas in Lisp2s like EmacsLisp,
+
+00:07:32.000 --> 00:07:37.399
+symbols can have different definitions as functions and as
+
+00:07:37.400 --> 00:07:41.119
+variables, as well as other namespaces like property
+
+00:07:41.120 --> 00:07:45.719
+lists. So Kent Pittman has some interesting thoughts on
+
+00:07:45.720 --> 00:07:51.039
+this that I've been looking into. Another issue is the
+
+00:07:51.040 --> 00:07:57.519
+interaction between package and module systems. So I don't
+
+00:07:57.520 --> 00:08:01.839
+have really anything ready to publish just yet on this, but I
+
+00:08:01.840 --> 00:08:05.279
+have been looking into the background issues of
+
+00:08:05.280 --> 00:08:08.119
+integrating this into Guile in a useful way.
+
+00:08:08.120 --> 00:08:15.719
+And let's see, one other thing I was going to mention.
+
+00:08:15.720 --> 00:08:27.679
+Okay, I've lost it. But yeah, there is some work already. And
+
+00:08:27.680 --> 00:08:30.399
+if people are interested in moving Emacs in this direction,
+
+00:08:30.400 --> 00:08:34.479
+then we'll certainly start working on it in earnest.
+
+NOTE Q: Did switching from guile 2 to 3 give any performance benefits?
+
+00:08:34.480 --> 00:08:41.119
+Another question, did switching from Guile 2 to 3 give any
+
+00:08:41.120 --> 00:08:46.279
+performance benefits? Well, honestly, we're not really
+
+00:08:46.280 --> 00:08:50.759
+benchmarking stuff here because Guile Emacs has so much
+
+00:08:50.760 --> 00:08:55.759
+overhead from structuring the compiler to closely conform
+
+00:08:55.760 --> 00:08:59.879
+to Emacs in terms of like even things as simple as metadata
+
+00:08:59.880 --> 00:09:03.879
+layout for variable information.
+
+00:09:03.880 --> 00:09:11.999
+So I haven't actually noticed a perceptual change. I would
+
+00:09:12.000 --> 00:09:15.359
+guess based on the Gabriel benchmark results that is
+
+00:09:15.360 --> 00:09:21.399
+benefited from what somewhat from Gal 3's performance
+
+00:09:21.400 --> 00:09:27.479
+improvements but for Emacs I just don't know yet and working
+
+00:09:27.480 --> 00:09:30.199
+on the compiler's code generation and lowering the
+
+00:09:30.200 --> 00:09:33.719
+overhead is going to be the thing that provides the most
+
+00:09:33.720 --> 00:09:37.319
+return for improving that aspect of Gal Emacs.
+
+00:09:37.320 --> 00:09:54.079
+Let's see, I see SICL mentioned here, as well as SPCL. And it
+
+00:09:54.080 --> 00:09:56.919
+could certainly help with the implementation of
+
+00:09:56.920 --> 00:10:01.519
+Commonwealth and Guile, because a lot of the basic stuff is
+
+00:10:01.520 --> 00:10:05.559
+just providing a new interface to some bit of
+
+00:10:05.560 --> 00:10:08.879
+functionality. Like the sequence library, it's mostly
+
+00:10:08.880 --> 00:10:13.279
+stuff that we already have through SR5 and so on. The
+
+00:10:13.280 --> 00:10:16.879
+difficult, well, not the difficult but the time consuming
+
+00:10:16.880 --> 00:10:21.599
+parts are going to be all the little DSL sitcom on this path
+
+00:10:21.600 --> 00:10:26.999
+packed up inside it like pretty printing format loop and so
+
+00:10:27.000 --> 00:10:32.359
+on. It's for those high-level features that I think we could
+
+00:10:32.360 --> 00:10:34.959
+potentially share code with other Common Lisp
+
+00:10:34.960 --> 00:10:39.039
+implementations. And Common Lisp implementations do tend
+
+00:10:39.040 --> 00:10:43.239
+to be permissively licensed, SPCL's public domain, for
+
+00:10:43.240 --> 00:10:46.439
+example, so there's no barrier to sharing code with them.
+
+NOTE Q: Do you know if the Emacs maintainers are interested in switching to Guile as the engine for Emacs Lisp?
+
+00:10:46.440 --> 00:10:52.719
+There's another question about whether the Emacs
+
+00:10:52.720 --> 00:10:55.679
+maintainers are interested in switching to Guile as the
+
+00:10:55.680 --> 00:10:59.199
+engine for Emacs Lisp. I can't speak for the current
+
+00:10:59.200 --> 00:11:05.439
+maintainers. I can say that people have talked to previous
+
+00:11:05.440 --> 00:11:10.439
+Emacs maintainers about the whole idea, and their attitude
+
+00:11:10.440 --> 00:11:15.479
+was generally cautiously optimistic. As in, it's not
+
+00:11:15.480 --> 00:11:18.799
+something they, it's somewhat political, they didn't want
+
+00:11:18.800 --> 00:11:23.479
+to get into it, but they didn't think that it was a bad idea,
+
+00:11:23.480 --> 00:11:25.919
+and they wanted to know more about how it might evolve in the
+
+00:11:25.920 --> 00:11:31.879
+future. I can comment that Eli Zaretsky, who I believe is the
+
+00:11:31.880 --> 00:11:36.879
+current Emacs maintainer, is very concerned about
+
+00:11:36.880 --> 00:11:44.679
+cross-platform compatibility. And so if I can guess at his
+
+00:11:44.680 --> 00:11:48.519
+priorities correctly, I think that that's something that
+
+00:11:48.520 --> 00:11:52.599
+we'll have to make sure is rock solid before we propose any
+
+00:11:52.600 --> 00:11:58.359
+kind of upstreaming of Gala Emacs. but in general
+
+00:11:58.360 --> 00:12:03.719
+maintainers have been cautious but curious. So I just
+
+00:12:03.720 --> 00:12:06.719
+wanted to break in and note at this point that as lives I
+
+00:12:06.720 --> 00:12:09.519
+didn't sorry I couldn't do so more gracefully while we were
+
+00:12:09.520 --> 00:12:13.439
+still on stream but I wanted to let you know that just as of 10
+
+00:12:13.440 --> 00:12:17.399
+seconds ago or so we've had to cut away into our next talk but
+
+00:12:17.400 --> 00:12:22.199
+we can keep going here as long as we like. Okay, let's wrap up.
+
+00:12:22.200 --> 00:12:25.399
+There's only a couple questions left on the pad, so I'll
+
+00:12:25.400 --> 00:12:29.999
+answer those, and then I'll be available on IRC. So, the next
+
+NOTE Q: Do you think guile-emacs will be able to use or (collaborate with) some of the other awesome projects around Emacs Lisp?
+
+00:12:30.000 --> 00:12:33.319
+question is whether Guile Emacs will be able to collaborate
+
+00:12:33.320 --> 00:12:35.959
+with projects like Gypsum and
+
+00:12:35.960 --> 00:12:44.319
+the native compilation projects or the pre-scheme
+
+00:12:44.320 --> 00:12:48.039
+efforts. Oh, yes, that is one of the things I forgot to bring
+
+00:12:48.040 --> 00:12:53.199
+up in my talk. So, first of all, Gypsum is approaching a
+
+00:12:53.200 --> 00:12:58.199
+similar idea from a different direction. And we clearly
+
+00:12:58.200 --> 00:13:03.919
+have a different focus. My focus is on improving Emacs Lisp
+
+00:13:03.920 --> 00:13:09.279
+and making Emacs itself better by integrating Guile Elisp
+
+00:13:09.280 --> 00:13:15.159
+and Emacs, rather than replacing eLisp or deprecating it in
+
+00:13:15.160 --> 00:13:20.159
+any way. But given gypsum's requirements, I do think that we
+
+00:13:20.160 --> 00:13:26.439
+could share a lot of code required for emulating basic Emacs
+
+00:13:26.440 --> 00:13:29.839
+functionality. And this could even become interesting if
+
+00:13:29.840 --> 00:13:35.799
+we get to the point of rewriting parts of Emacs in Lisp. With
+
+00:13:35.800 --> 00:13:41.279
+respect to the native compilation effort, I'm familiar
+
+00:13:41.280 --> 00:13:45.879
+with it. I'm not that impressed with the results of it. It's a
+
+00:13:45.880 --> 00:13:52.359
+very impressive effort, but as far as I can tell, it's
+
+00:13:52.360 --> 00:13:57.239
+accelerating a bytecode interpreter that just simply has
+
+00:13:57.240 --> 00:14:02.719
+an out-of-date design, to be quite blunt. It's possible
+
+00:14:02.720 --> 00:14:08.919
+that Emacs's JIT has ideas that Guile should adopt, like
+
+00:14:08.920 --> 00:14:14.039
+perhaps libgccjit might perhaps be better than GNU
+
+00:14:14.040 --> 00:14:16.999
+Lightning, which is a relatively simple JIT that Guile
+
+00:14:17.000 --> 00:14:17.639
+uses.
+
+00:14:17.640 --> 00:14:25.839
+But it doesn't have to have a direct relationship to Guile
+
+00:14:25.840 --> 00:14:31.159
+Emacs. And as far as pre-scheme goes, I have been watching
+
+00:14:31.160 --> 00:14:36.199
+Flat Watson's work on pre-scheme with great interest
+
+00:14:36.200 --> 00:14:39.999
+because Scheme 48 used to be my favorite implementation.
+
+00:14:40.000 --> 00:14:44.919
+And I do think that it could be, it's a tool that we should look
+
+00:14:44.920 --> 00:14:47.879
+at when we're thinking about moving functionality into
+
+00:14:47.880 --> 00:14:53.199
+Lisp and could certainly make it easier to upstream some of
+
+00:14:53.200 --> 00:14:54.519
+the work we may end up doing.
+
+00:14:54.520 --> 00:15:04.199
+All right, do we have more questions?
+
+NOTE Q: SBCL, ...You mentioned Robert Strandh's SICL along with SBCL---does that work help with the implementation of CL in Guile?
+
+00:15:04.200 --> 00:15:13.159
+There's a question about SICL and SBCL. I think I answered
+
+00:15:13.160 --> 00:15:17.519
+that earlier. It should help us implement Common Lisp when
+
+00:15:17.520 --> 00:15:24.999
+it comes to high-level features and the various large
+
+00:15:25.000 --> 00:15:28.759
+subcomponents of Common Lisp. Another important factor is
+
+00:15:28.760 --> 00:15:32.279
+that Guile already has decent support for the Common Lisp
+
+00:15:32.280 --> 00:15:35.799
+object system. Without that, it would be far more
+
+00:15:35.800 --> 00:15:41.919
+difficult. But I do expect that we can share code with other
+
+00:15:41.920 --> 00:15:44.799
+Common Lisp implementations. I've personally rated
+
+00:15:44.800 --> 00:15:49.199
+Common Lisp compiler code when working on Guile Hoot, for
+
+00:15:49.200 --> 00:15:52.959
+example. So there are definitely places where they can
+
+00:15:52.960 --> 00:15:54.039
+contribute.
+
+00:15:54.040 --> 00:16:02.839
+Regarding the Hoot project and its relationship to
+
+00:16:02.840 --> 00:16:11.079
+Galimax, it's a purely speculative thing. First of all,
+
+00:16:11.080 --> 00:16:17.079
+Hoot is only tested on Scheme-to-WebAssembly
+
+00:16:17.080 --> 00:16:22.599
+compilations. I've heard some suggestions that some uses
+
+00:16:22.600 --> 00:16:26.439
+of Tree.io may not be compatible with the Hoot compiler. I'm
+
+00:16:26.440 --> 00:16:29.999
+not sure if that's the case or not.
+
+00:16:30.000 --> 00:16:41.199
+But it is a complete enough project that if Emacs is, say, 90%
+
+00:16:41.200 --> 00:16:45.119
+Lisp, there's only a few thousand lines of C code to
+
+00:16:45.120 --> 00:16:49.159
+implement, then it would be entirely practical to compile
+
+00:16:49.160 --> 00:16:54.159
+Emacs WebAssembly, as long as we had a back end, like one
+
+00:16:54.160 --> 00:16:58.119
+based on the browser's document object model, or some sort
+
+00:16:58.120 --> 00:17:04.439
+of graphical interface through WASI. And that may have some
+
+00:17:04.440 --> 00:17:07.359
+interesting applications for portability to unusual
+
+00:17:07.360 --> 00:17:11.359
+platforms. It may even bring performance advantages in
+
+00:17:11.360 --> 00:17:18.959
+cases where the WebAssembly implementation is connected
+
+00:17:18.960 --> 00:17:22.759
+to a tracing just-in-time compiler, because that may be
+
+00:17:22.760 --> 00:17:26.839
+more appropriate to the high level of dynamism the Emacs
+
+00:17:26.840 --> 00:17:32.439
+list has than the kind of simple template JITs that both
+
+00:17:32.440 --> 00:17:34.519
+Emacs and Guile are using.
+
+00:17:34.520 --> 00:17:39.799
+What a fascinating point. Just to break into active
+
+00:17:39.800 --> 00:17:43.999
+listening a little so this doesn't, to you, feel like you're
+
+00:17:44.000 --> 00:17:46.919
+talking to yourself. I can see from chat and the questions
+
+00:17:46.920 --> 00:17:51.439
+still coming in, you know, comments. You know, it isn't, but
+
+00:17:51.440 --> 00:17:54.999
+I just want you to be able to hear and feel that. Yeah, great,
+
+00:17:55.000 --> 00:18:00.679
+great point there. All right. Thank you. And yes, if there
+
+00:18:00.680 --> 00:18:04.679
+are more questions, keep throwing them at me. I should
+
+00:18:04.680 --> 00:18:07.999
+probably also mention I will have to jump out myself, but the
+
+00:18:08.000 --> 00:18:10.799
+recording will automatically end when we all jump out or
+
+00:18:10.800 --> 00:18:15.199
+just drop a note anywhere, ping me, whatever. And I'll come
+
+00:18:15.200 --> 00:18:18.439
+along and shut off the recording and we'll trim it up before
+
+00:18:18.440 --> 00:18:21.879
+we publish it. I'm looking forward to reading through
+
+00:18:21.880 --> 00:18:30.199
+anything I do miss. Thank you. Sounds good.
+
+00:18:30.200 --> 00:19:08.439
+All right, I'm not seeing changes in the etherpad. So I'm
+
+00:19:08.440 --> 00:19:14.999
+going to close this in maybe 30 seconds if there are no more
+
+00:19:15.000 --> 00:19:21.159
+additions. Thanks, everyone, for the interesting and very
+
+00:19:21.160 --> 00:19:26.399
+pointed questions on some of the most significant areas. I
+
+00:19:26.400 --> 00:19:31.919
+appreciate everyone's feedback. I'm glad this provoked so
+
+00:19:31.920 --> 00:19:33.679
+much curiosity in people.
+
+00:19:33.680 --> 00:19:44.519
+Thank you, janneke.
+
+00:19:44.520 --> 00:19:51.439
+All right, I think we are done with the Q&A session, so I'm
+
+00:19:51.440 --> 00:19:57.199
+going to close this BBB and we can continue with the rest of
+
+00:19:57.200 --> 00:19:58.719
+EmacsConf.
+
+00:19:58.720 --> 00:20:10.160
+You are currently the only person in this conference.
diff --git a/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt
new file mode 100644
index 00000000..35cf8ccd
--- /dev/null
+++ b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt
@@ -0,0 +1,808 @@
+WEBVTT captioned by anush, checked by robin
+
+00:00.000 --> 00:03.066
+Hello everyone. I'm Robin Templeton,
+
+00:03.083 --> 00:05.750
+and I'm going to talk about Emacs Beguiled
+
+00:05.766 --> 00:13.866
+and recent progress on the Guile-Emacs project.
+
+00:13.883 --> 00:16.433
+First of all, if you're not familiar with Guile,
+
+00:16.450 --> 00:19.716
+it's an implementation of the Scheme programming language,
+
+00:19.733 --> 00:22.150
+which is a dialect of Lisp,
+
+00:22.166 --> 00:24.550
+and in the same family as Emacs Lisp,
+
+00:24.566 --> 00:28.150
+and Guile is GNU's official extension language.
+
+00:28.166 --> 00:30.400
+The goal of the Guile-Emacs project
+
+00:30.400 --> 00:34.950
+is to use Guile as the basis for Emacs's Lisp support.
+
+00:34.966 --> 00:37.116
+It has two main components:
+
+00:37.133 --> 00:41.033
+a new Emacs Lisp compiler built on top of Guile,
+
+00:41.050 --> 00:42.550
+and a variant of Emacs
+
+00:42.566 --> 00:45.316
+in which the built-in Lisp implementation
+
+00:45.333 --> 00:49.716
+is entirely replaced with Guile Elisp.
+
+00:49.733 --> 00:52.800
+We expect the combination of these two projects
+
+00:52.800 --> 00:57.350
+to have several benefits. One is improved performance.
+
+00:57.366 --> 01:00.200
+Another is increased expressiveness for Elisp
+
+01:00.200 --> 01:04.350
+and making it easier to extend
+
+01:04.366 --> 01:07.200
+and experiment with the language.
+
+01:07.200 --> 01:08.550
+Finally, it will reduce
+
+01:08.566 --> 01:12.316
+Emacs's reliance on C for two reasons.
+
+01:12.333 --> 01:16.316
+Guile will be responsible for the language implementation,
+
+01:16.333 --> 01:21.350
+so Emacs will no longer have to include a Lisp interpreter.
+
+01:21.366 --> 01:23.200
+It will also become possible
+
+01:23.200 --> 01:25.666
+to implement much more of Emacs in Lisp
+
+01:25.683 --> 01:29.233
+than is currently feasible.
+
+01:29.250 --> 01:31.116
+Of course, this raises the question of
+
+01:31.133 --> 01:34.033
+why Guile is suitable for this project.
+
+01:34.050 --> 01:36.666
+And we chose Guile for a few reasons.
+
+01:36.683 --> 01:39.400
+Guile is primarily a Scheme implementation,
+
+01:39.400 --> 01:42.150
+but it also has built-in support for multiple languages
+
+01:42.166 --> 01:43.466
+using its compiler tower.
+
+01:43.483 --> 01:46.866
+To add support for a new language to Guile,
+
+01:46.883 --> 01:50.066
+you only have to write a compiler
+
+01:50.083 --> 01:52.550
+from the source language to Tree-IL,
+
+01:52.566 --> 01:55.800
+which is essentially a low-level,
+
+01:55.800 --> 01:58.866
+minimal representation of Scheme.
+
+01:58.883 --> 02:01.800
+All of Guile's compiler optimizations
+
+02:01.800 --> 02:04.433
+occur at the Tree-IL layer or lower,
+
+02:04.450 --> 02:06.033
+so you don't need to worry
+
+02:06.050 --> 02:09.633
+about the lower-level details of the compiler
+
+02:09.650 --> 02:12.350
+when initially implementing your language.
+
+02:12.366 --> 02:14.633
+Guile also has some Lisp features
+
+02:14.650 --> 02:18.316
+that are very rare in Scheme implementations.
+
+02:18.333 --> 02:20.033
+For example, it has a nil value
+
+02:20.050 --> 02:23.916
+that counts as both false and an empty list,
+
+02:23.933 --> 02:25.633
+just like in Elisp,
+
+02:25.650 --> 02:30.466
+and it also has a version of the Common Lisp Object System
+
+02:30.483 --> 02:37.200
+and its metaobject protocol, which is called GOOPS.
+
+02:37.200 --> 02:40.150
+The idea of Guile-Emacs has a pretty long history,
+
+02:40.166 --> 02:43.866
+going back at least three decades.
+
+02:43.883 --> 02:44.550
+There have been about
+
+02:44.566 --> 02:48.000
+half a dozen previous implementation attempts.
+
+02:48.000 --> 02:49.950
+But the current iteration began with
+
+02:49.966 --> 02:52.866
+a series of six Summer of Code internships:
+
+02:52.883 --> 02:56.033
+Daniel Kraft's in 2009,
+
+02:56.050 --> 03:01.200
+and then my internships from 2010 to 2014.
+
+03:01.200 --> 03:03.000
+My basic implementation strategy
+
+03:03.000 --> 03:05.316
+was pretty straightforward.
+
+03:05.333 --> 03:07.466
+I implemented a core subset of Elisp,
+
+03:07.483 --> 03:10.400
+which was enough to run some batch mode programs
+
+03:10.400 --> 03:12.833
+outside of Emacs.
+
+03:12.850 --> 03:15.266
+In Emacs, I modified the garbage collector
+
+03:15.283 --> 03:18.600
+and the data structures for Lisp objects
+
+03:18.600 --> 03:23.033
+to use their libguile equivalents.
+
+03:23.050 --> 03:26.950
+I replaced Emacs' Lisp evaluator
+
+03:26.966 --> 03:32.200
+with the one provided by Guile Elisp.
+
+03:32.200 --> 03:34.033
+After a little over a year of work,
+
+03:34.050 --> 03:37.950
+at the end of the 2014 internship,
+
+03:37.966 --> 03:44.316
+I ended up with a fully functional prototype of Guile-Emacs.
+
+03:44.333 --> 03:48.916
+It used Guile Elisp alone as its Lisp implementation
+
+03:48.933 --> 03:53.916
+and was completely compatible with Emacs functionality
+
+03:53.933 --> 03:56.716
+and with external extensions.
+
+03:56.733 --> 03:59.433
+One caveat was that performance was pretty bad,
+
+03:59.450 --> 04:03.033
+because I was focused on correctness,
+
+04:03.050 --> 04:07.600
+as well as ease of integration with the Emacs C code.
+
+04:07.600 --> 04:11.550
+But it was nonetheless a major milestone for the project.
+
+04:11.566 --> 04:19.600
+Let's take just a moment to look at Guile-Elisp.
+
+04:19.600 --> 04:23.233
+For starters, we have access to Guile modules.
+
+04:23.250 --> 04:25.116
+If we call Guile's <i>version</i> function,
+
+04:25.133 --> 04:30.516
+we can see that we're running under Guile 3.0.
+
+04:30.533 --> 04:33.233
+We have access to some of the numeric tower
+
+04:33.250 --> 04:39.516
+via the arithmetic functions. We also have multiple values.
+
+04:39.533 --> 04:43.950
+We have to be careful to use Guile's <i>values</i> procedure here,
+
+04:43.966 --> 04:46.666
+not the CL library's,
+
+04:46.683 --> 04:48.833
+but you can see that this works properly
+
+04:48.850 --> 04:51.550
+rather than being an emulation.
+
+04:51.566 --> 04:54.033
+Finally, we have tail call elimination.
+
+04:54.050 --> 05:02.866
+Naturally, we're going to use factorial to demonstrate it.
+
+05:02.883 --> 05:05.633
+If <i>n</i> is zero, return the answer,
+
+05:05.650 --> 05:14.266
+else recurse with <i>n</i> less one and <i>n</i> times <i>a</i>.
+
+05:14.283 --> 05:16.150
+Of course, this definition works correctly,
+
+05:16.166 --> 05:18.950
+but it gets more interesting
+
+05:18.966 --> 00:05:25.000
+if we communicate the answer with an error,
+
+00:05:25.100 --> 05:29.633
+in order to look at a backtrace.
+
+05:29.650 --> 05:32.350
+You can see here that there are
+
+05:32.366 --> 05:35.516
+no calls to <i>fact</i> visible in between
+
+05:35.533 --> 05:37.833
+the request to evaluate
+
+05:37.850 --> 05:42.200
+and the error communicating the answer.
+
+05:42.200 --> 05:44.200
+That's because this tail call
+
+05:44.200 --> 05:48.350
+has been optimized into effectively a goto.
+
+05:48.366 --> 05:54.916
+This is essential for any kind
+
+05:54.933 --> 00:05:59.916
+of serious functional programming.
+
+00:06:00.116 --> 06:03.033
+That's a peek at Guile-Elisp.
+
+06:03.050 --> 06:08.066
+In 2015, I left university to go work on web technologies,
+
+06:08.083 --> 06:11.316
+and the project was dormant for a very long time.
+
+06:11.333 --> 06:13.433
+But that's been changing recently.
+
+06:13.450 --> 06:16.066
+During the last few months,
+
+06:16.083 --> 06:17.633
+I've been working with Larry Valkama
+
+06:17.650 --> 06:20.716
+to rebase Guile-Emacs
+
+06:20.733 --> 06:24.833
+onto the development branch of upstream Emacs,
+
+06:24.850 --> 06:29.666
+including the past decade's worth of upstream development.
+
+06:29.683 --> 00:06:33.967
+What we've ended up with is a series of
+
+00:06:34.267 --> 00:06:37.550
+rebases onto different versions of Emacs.
+
+06:37.566 --> 06:39.516
+The older ones tend to work pretty well.
+
+06:39.533 --> 06:46.866
+The newer ones have increasingly bad problems
+
+06:46.883 --> 06:49.800
+where they haven't been properly adjusted
+
+06:49.800 --> 06:52.200
+for changes in the Emacs implementation.
+
+06:52.200 --> 06:56.833
+But we do have by now a version of Emacs 30
+
+06:56.850 --> 06:57.800
+which boots correctly
+
+06:57.800 --> 06:59.833
+and can be used for interactive debugging,
+
+06:59.850 --> 07:06.150
+as well as the ability to bisect the revisions of Emacs
+
+07:06.166 --> 07:10.516
+and find out where regressions were introduced.
+
+07:10.533 --> 07:14.033
+Our immediate goal is of course to complete the rebase.
+
+07:14.050 --> 07:16.233
+At the same time,
+
+07:16.250 --> 07:20.633
+we want to improve Guile Elisp's performance
+
+07:20.650 --> 07:24.350
+to at least be competitive with ordinary Emacs Lisp.
+
+07:24.366 --> 07:29.266
+Just to characterize the performance situation,
+
+07:29.283 --> 07:32.750
+Guile Elisp is usually about half
+
+07:32.766 --> 07:34.466
+as fast as ordinary Elisp,
+
+07:34.483 --> 07:37.833
+while Guile Scheme is quite often
+
+07:37.850 --> 00:07:41.250
+an order of magnitude faster than ordinary Elisp,
+
+00:07:41.350 --> 07:43.916
+and that's based on micro benchmarks
+
+07:43.933 --> 00:07:46.133
+like the Gabriel benchmarks.
+
+00:07:46.233 --> 00:07:50.900
+But there's clearly a lot of room
+
+00:07:50.900 --> 00:07:53.150
+to improve our compiler's output.
+
+00:07:53.350 --> 07:56.633
+If you want to mark your calendars,
+
+07:56.650 --> 08:00.150
+we're expecting to have a usable version of Guile-Emacs 30
+
+08:00.166 --> 00:08:03.016
+out sometime next spring.
+
+00:08:03.116 --> 08:05.433
+We're also going to put some effort
+
+08:05.450 --> 00:08:09.000
+into either extracting old work
+
+00:08:09.100 --> 08:12.600
+or doing new work that could be contributed upstream.
+
+08:12.600 --> 00:08:16.650
+On the Guile side, we'll probably start out with
+
+00:08:16.750 --> 00:08:21.033
+optimizing the dynamic binding facilities,
+
+00:08:21.233 --> 08:23.433
+which are used very seldom in Scheme,
+
+08:23.450 --> 08:27.833
+but are used all the time in traditional Lisp dialects.
+
+08:27.850 --> 08:31.400
+On the Emacs side, we'll be working initially
+
+08:31.400 --> 08:35.316
+on abstracting away the details of the Lisp implementation
+
+08:35.333 --> 00:08:37.433
+where they're not relevant.
+
+00:08:37.533 --> 08:40.716
+And that will clean up the Emacs code base a bit.
+
+08:40.733 --> 08:45.000
+It'll make it easier to integrate Emacs and Guile Elisp.
+
+08:45.000 --> 08:47.916
+It will probably be helpful for anyone
+
+08:47.933 --> 08:51.550
+who is working on ordinary Elisp on their own.
+
+08:51.566 --> 08:57.200
+We're also going to be adding new features to Emacs Lisp.
+
+08:57.200 --> 08:59.316
+We've seen a few of them already.
+
+08:59.333 --> 09:02.633
+The numeric tower, tail call optimization,
+
+09:02.650 --> 09:04.550
+Common Lisp compatibility.
+
+09:04.566 --> 09:07.950
+We're also going to provide access to Fibers,
+
+09:07.966 --> 09:12.466
+which is a Guile library based on ideas from Concurrent ML
+
+09:12.483 --> 09:15.716
+that provides much more powerful facilities
+
+09:15.733 --> 09:18.266
+for concurrent and parallel programming
+
+09:18.283 --> 00:09:24.566
+than what Emacs currently offers.
+
+00:09:24.666 --> 09:32.233
+This plan meets Guile-Emacs' basic goals,
+
+09:32.250 --> 09:36.316
+and it's work that we could maybe get integrated upstream
+
+09:36.333 --> 00:09:38.100
+in a reasonable amount of time.
+
+00:09:38.200 --> 00:09:42.500
+But it's also worth considering what more we can do,
+
+00:09:42.600 --> 09:46.600
+and what effect Guile-Emacs might have on Emacs
+
+09:46.600 --> 00:09:50.566
+if it becomes simply Emacs.
+
+00:09:50.666 --> 09:54.033
+For context, the amount of C code in Emacs
+
+09:54.050 --> 09:57.400
+has increased by around 50% in the last decade,
+
+09:57.400 --> 09:59.950
+and now it constitutes around a quarter of the code base.
+
+09:59.966 --> 10:06.400
+C can be a bit of a barrier
+
+10:06.400 --> 00:10:10.900
+to customizing and extending Emacs.
+
+00:10:11.000 --> 10:15.516
+For example, there are about 1500 C subroutines.
+
+10:15.533 --> 10:19.633
+Around 500 are used in C code,
+
+10:19.650 --> 10:23.150
+as well as available to Lisp code,
+
+10:23.166 --> 10:25.800
+and being written in C means
+
+10:25.800 --> 10:28.066
+that they can't be practically redefined.
+
+10:28.083 --> 10:34.433
+The use of C can become a barrier to extending Emacs
+
+10:34.450 --> 10:36.233
+or customizing its behavior.
+
+10:36.250 --> 10:39.200
+We might consider writing
+
+10:39.200 --> 00:10:42.816
+as much of Emacs as possible in Lisp.
+
+00:10:42.916 --> 10:46.033
+One way to speed up this process
+
+10:46.050 --> 10:49.400
+would be to provide a Common Lisp implementation for Guile.
+
+10:49.400 --> 10:54.833
+Note that between Guile Elisp and Guile Scheme,
+
+10:54.850 --> 10:57.516
+we have all of the essential ingredients
+
+10:57.533 --> 11:03.200
+for a Common Lisp environment. We can also share code
+
+11:03.200 --> 00:11:06.016
+with other Common Lisp implementations
+
+11:06.016 --> 11:10.200
+such as SBCL and SICL.
+
+11:10.200 --> 11:13.800
+Overall, the duration of the project
+
+11:13.800 --> 11:16.916
+will be better measured in months rather than years,
+
+11:16.933 --> 11:19.466
+despite Common Lisp's reputation
+
+11:19.483 --> 00:11:21.116
+for being a large language.
+
+00:11:21.216 --> 11:24.466
+This could have multiple uses, of course.
+
+11:24.483 --> 11:29.633
+It could be a model for future improvements to Elisp,
+
+11:29.650 --> 11:34.866
+because Elisp and CL can interact directly without problems.
+
+11:34.883 --> 11:38.400
+And it would be very easy for Elisp
+
+11:38.400 --> 11:41.466
+to borrow language features from Common Lisp.
+
+11:41.483 --> 11:46.600
+But for the purpose of a C to Lisp transition,
+
+11:46.600 --> 11:50.066
+it would also provide us with instant access
+
+11:50.083 --> 11:52.600
+to a huge number of high-quality libraries
+
+11:52.600 --> 11:54.833
+for things that
+
+11:54.850 --> 11:58.116
+Guile is not necessarily equipped to deal with,
+
+11:58.133 --> 12:01.350
+such as access to low-level Windows APIs,
+
+12:01.366 --> 12:05.150
+as well as lots of other libraries,
+
+12:05.166 --> 12:10.000
+such as interfaces to GUI toolkits
+
+12:10.000 --> 00:12:13.766
+for a variety of operating systems.
+
+00:12:13.866 --> 12:20.550
+At a certain point, this has technical advantages.
+
+12:20.566 --> 00:12:24.216
+If most of Emacs is written in Lisp,
+
+00:12:24.216 --> 12:27.233
+then we could consider using Guile Hoot
+
+12:27.250 --> 12:29.666
+to compile Emacs to WebAssembly,
+
+12:29.683 --> 12:33.200
+making it available perhaps in web browsers
+
+12:33.200 --> 12:37.233
+or on systems with the WebAssembly System Interface.
+
+12:37.250 --> 12:41.266
+But it would also be a great victory
+
+12:41.283 --> 12:43.033
+for practical software freedom.
+
+12:43.050 --> 12:45.866
+That's the idea that Freedom One,
+
+12:45.883 --> 12:48.350
+the freedom to study and modify programs,
+
+12:48.366 --> 12:51.633
+should not just be legally and technically possible,
+
+12:51.650 --> 12:53.316
+but should be actively encouraged
+
+12:53.333 --> 12:57.066
+by our computing environments.
+
+12:57.083 --> 13:00.116
+Emacs is really one of the archetypal examples of this,
+
+13:00.133 --> 00:13:03.116
+but we can and should go further.
+
+00:13:03.216 --> 13:08.400
+When Emacs is implemented primarily in Lisp,
+
+13:08.400 --> 13:11.466
+the entirety of the system
+
+13:11.483 --> 13:14.600
+will be transparent to examination
+
+13:14.600 --> 13:16.066
+and open to modification.
+
+13:16.083 --> 13:21.200
+Every part of Emacs will be instantaneously inspectable,
+
+13:21.200 --> 00:13:24.916
+redefinable, and debuggable.
+
+00:13:25.016 --> 13:28.266
+This will be a fundamental change
+
+13:28.283 --> 13:32.800
+in what is possible to do with Emacs extensions.
+
+13:32.800 --> 13:37.000
+For example, one experiment I'd be interested in
+
+13:37.000 --> 13:40.316
+is using the Common Lisp Interface Manager
+
+13:40.333 --> 13:43.233
+as the basis for Emacs's user interface.
+
+13:43.250 --> 13:48.516
+Screwlisp is giving a talk about McCLIM later today,
+
+13:48.533 --> 13:53.233
+but for present purposes,
+
+13:53.250 --> 13:55.633
+just think of it as a super-powered version
+
+13:55.650 --> 13:58.350
+of Emacs's concept of interactive functions.
+
+13:58.366 --> 14:02.800
+It would be a pretty long-term project
+
+14:02.800 --> 14:04.800
+in Emacs as it currently exists,
+
+14:04.800 --> 14:06.600
+but it would be almost trivial
+
+14:06.600 --> 14:12.633
+if Emacs were customizable at the lowest layers via Lisp.
+
+14:12.650 --> 14:19.150
+We'll certainly be looking at the practicality
+
+14:19.166 --> 14:20.950
+of these kinds of changes
+
+14:20.966 --> 00:14:25.033
+as we continue developing Guile-Emacs.
+
+00:14:25.133 --> 00:14:29.933
+Finally, how can you get involved
+
+00:14:30.033 --> 00:14:32.400
+with and support Guile Emacs?
+
+00:14:32.500 --> 14:35.316
+One way to help is just by trying it out
+
+14:35.333 --> 00:14:37.716
+and letting us know what your experiences are like.
+
+00:14:37.816 --> 14:41.466
+There will be a snapshot available
+
+14:41.483 --> 00:14:44.166
+on the Codeberg project site
+
+00:14:44.266 --> 14:47.000
+of the version that I'm using to give this presentation.
+
+14:47.000 --> 14:51.116
+It will be available both as a Guix package
+
+14:51.133 --> 14:55.916
+and as a portable tarball. This will be more interesting
+
+14:55.933 --> 00:15:00.266
+as we get closer to a complete rebase.
+
+00:15:00.366 --> 15:06.516
+We're also always happy to talk to potential contributors
+
+15:06.533 --> 00:15:12.100
+or potential collaborators from other projects.
+
+00:15:12.200 --> 15:16.433
+We can always use bug reports,
+
+15:16.450 --> 15:18.866
+and we're interested in what kind of features
+
+15:18.883 --> 15:21.716
+people actually want to see in Guile-Emacs.
+
+15:21.733 --> 00:15:25.200
+Guile-Emacs is also being developed
+
+00:15:25.300 --> 00:15:27.816
+by a small worker cooperative,
+
+00:15:27.916 --> 00:15:33.100
+so donations are a pretty direct way to support the project.
+
+00:15:33.200 --> 15:37.150
+If you do nothing else, I recommend going to the website
+
+15:37.166 --> 15:40.716
+and subscribing to our mailing lists
+
+15:40.733 --> 15:45.600
+so that you can keep up with news on the project.
+
+15:45.600 --> 15:47.316
+If you're watching this at EmacsConf,
+
+15:47.333 --> 15:50.466
+there will be a Q&A session immediately following this,
+
+15:50.483 --> 15:57.066
+and thanks for watching!
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
new file mode 100644
index 00000000..7c2708d9
--- /dev/null
+++ b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt
@@ -0,0 +1,725 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.999
+...Troy Hinckley's project that I'm talking about. I was going
+
+00:00:03.000 --> 00:00:08.799
+to mention this in my presentation, but it's possible,
+
+00:00:08.800 --> 00:00:16.359
+theoretically, that Troy Hinckley, his project could be
+
+00:00:16.360 --> 00:00:18.559
+used as a scheme of limitation that actually runs my own
+
+00:00:18.560 --> 00:00:23.759
+version of Emacs. And although, you know, This is
+
+00:00:23.760 --> 00:00:30.719
+completely theoretical, and I don't know how difficult
+
+00:00:30.720 --> 00:00:34.079
+that would be. But if Troy Hinckley implemented enough of
+
+00:00:34.080 --> 00:00:39.879
+the R7-RS standard in Rust, it would theoretically be
+
+00:00:39.880 --> 00:00:46.719
+possible to run the Gypsum editor in Troy Hinckley's own
+
+00:00:46.720 --> 00:00:50.239
+editor. I thought that was kind of interesting, and I
+
+00:00:50.240 --> 00:00:59.119
+thought it was worth mentioning, at least in the questions
+
+00:00:59.120 --> 00:01:12.159
+and answers.
+
+00:01:12.160 --> 00:01:16.199
+I also mentioned this in the presentation. I wanted to see
+
+00:01:16.200 --> 00:01:20.119
+Robin Templeton's project presentation, but
+
+00:01:20.120 --> 00:01:22.399
+unfortunately it's going to be at like four in the morning
+
+00:01:22.400 --> 00:01:26.239
+for me. So I'm going to try and watch that tomorrow, but
+
+00:01:26.240 --> 00:01:29.559
+that's also going to be a very interesting project to keep an
+
+00:01:29.560 --> 00:01:34.039
+eye on if you're interested in Scheme. That's the project
+
+00:01:34.040 --> 00:01:37.519
+where you've got the Guylain interpreter running inside of
+
+00:01:37.520 --> 00:02:04.679
+the Emacs process. It's dynamically linked as a library.
+
+00:02:04.680 --> 00:02:08.759
+I'm ready for questions from anybody. You can ask or you can
+
+00:02:08.760 --> 00:02:32.079
+type. It's up to you.
+
+00:02:32.080 --> 00:02:37.319
+Okay, let me check the etherpad.
+
+00:02:37.320 --> 00:02:41.159
+Let's see here.
+
+00:02:41.160 --> 00:02:42.719
+I'm not sure if I'm doing that right.
+
+00:02:42.720 --> 00:02:54.199
+Let me check one more time. Oh, there it goes.
+
+00:02:54.200 --> 00:03:00.079
+Let's see, so this is...
+
+00:03:00.080 --> 00:03:02.239
+I didn't know about that first bit of history. Oh, I've heard
+
+00:03:02.240 --> 00:03:06.119
+RMS say that Scheme Guile is just a nicer Lisp, but I didn't
+
+00:03:06.120 --> 00:03:09.079
+know there were concrete talks attempts to use Guile for
+
+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:14.320 --> 00:03:17.439
+I'm curious to know how the hell Guile Emacs deals with all the
+
+00:03:17.440 --> 00:03:21.359
+dynamically scoped modules out there. Is there any effort
+
+00:03:21.360 --> 00:03:29.759
+to automatically modularize and name? Let's see.
+
+00:03:29.760 --> 00:03:40.919
+That might be a better question for Robin Templeton. In my
+
+00:03:40.920 --> 00:03:44.639
+own project,
+
+00:03:44.640 --> 00:03:49.399
+there's no module system for Emacs Lisp. There is a module
+
+00:03:49.400 --> 00:03:55.559
+system for Scheme. And the Emacs Lisp interpreter runs in
+
+00:03:55.560 --> 00:04:01.599
+its own environment. the require system or whatever module
+
+00:04:01.600 --> 00:04:06.359
+system that Emacs has, once it's implemented, all of that
+
+00:04:06.360 --> 00:04:09.759
+would just happen inside of the Emacs Lisp environment,
+
+00:04:09.760 --> 00:04:12.399
+which is inside of the Scheme environment. And
+
+00:04:12.400 --> 00:04:21.479
+environments are objects in Scheme.
+
+00:04:21.480 --> 00:04:26.399
+I think a more difficult question is how to handle
+
+00:04:26.400 --> 00:04:33.279
+threading, and Scheme has very good threading built in, in
+
+00:04:33.280 --> 00:04:34.839
+Serphe-18[??].
+
+00:04:34.840 --> 00:04:43.399
+But I don't think it will be easy to write Emacs Lisp form
+
+00:04:43.400 --> 00:04:48.479
+bindings to the Scheme multi-threading implementation.
+
+00:04:48.480 --> 00:04:52.279
+Emacs Lisp was just not cut out for that kind of thing. So I
+
+00:04:52.280 --> 00:04:56.559
+think each Emacs Lisp, you could, I suppose, have multiple
+
+00:04:56.560 --> 00:05:00.039
+threads each running their own Emacs Lisp environment.
+
+00:05:00.040 --> 00:05:04.999
+Scheme would make that very simple to do.
+
+00:05:05.000 --> 00:05:08.759
+And then there'd just be a question of how you would get those
+
+00:05:08.760 --> 00:05:11.679
+different interpreters to communicate with each other,
+
+00:05:11.680 --> 00:05:16.279
+perhaps using the same protocol that's used by the Emacs
+
+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?
+
+00:05:23.640 --> 00:05:26.839
+Would it be possible to support a GUI toolkit other than the
+
+00:05:26.840 --> 00:05:31.319
+GTK? Like, how is it still supports Lucid? Yes, this is
+
+00:05:31.320 --> 00:05:36.999
+absolutely a goal of the project. I'm trying to keep the back
+
+00:05:37.000 --> 00:05:41.599
+end separate as possible. The scheme has what you call
+
+00:05:41.600 --> 00:05:45.239
+parameters. And these are like global variables that are
+
+00:05:45.240 --> 00:05:50.519
+still somewhat thread safe. And every call to the GUI goes
+
+00:05:50.520 --> 00:05:58.199
+through a parameter. So the Emacs, the interpreter and the
+
+00:05:58.200 --> 00:06:01.679
+editor logic is all in one module. And then that module calls
+
+00:06:01.680 --> 00:06:06.319
+out into a separate GUI module. And then you can implement
+
+00:06:06.320 --> 00:06:11.599
+different GUI modules. So you could have one for GTK3, one
+
+00:06:11.600 --> 00:06:16.879
+for GTK4, if you want to write the extern C bindings around Qt
+
+00:06:16.880 --> 00:06:21.199
+or full tick, that would certainly be possible as well. It
+
+00:06:21.200 --> 00:06:25.919
+would be nice maybe to have an SDL implementation based
+
+00:06:25.920 --> 00:06:30.999
+maybe on Chikiti or some kind of immediate mode GUI,
+
+00:06:31.000 --> 00:06:37.399
+something like that. But definitely GTK3 through Guile GI
+
+00:06:37.400 --> 00:06:41.319
+is the reference implementation. Things start there. But
+
+00:06:41.320 --> 00:06:43.999
+I'm very interested in supporting other GUIs, yes. Let's
+
+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:46.040 --> 00:06:50.759
+Question, do you plan to provide improvements to ELisp
+
+00:06:50.760 --> 00:06:54.519
+as a language or focus on a compatibility layer to
+
+00:06:54.520 --> 00:06:57.999
+facilitate all new extensions in Scheme? Yeah, the second
+
+00:06:58.000 --> 00:07:04.719
+one. I want to move off to Scheme. I would like for this
+
+00:07:04.720 --> 00:07:08.999
+project to try and keep up to date with each new release of
+
+00:07:09.000 --> 00:07:13.799
+Emacs and Emacs Lisp. That's a difficult moving target to
+
+00:07:13.800 --> 00:07:18.639
+follow, I realize. But to the greatest extent possible, any
+
+00:07:18.640 --> 00:07:25.239
+new features to Emacs Lisp will be pulled in from GNU Emacs.
+
+00:07:25.240 --> 00:07:28.599
+If we happen to be able to implement something cool in
+
+00:07:28.600 --> 00:07:31.639
+Scheme, and be able to port it over to Emacs Lisp, then sure,
+
+00:07:31.640 --> 00:07:35.799
+it'd be nice to be able to upload or to submit that upstream to
+
+00:07:35.800 --> 00:07:43.079
+the GNU Emacs. But I think I would prefer to have new features
+
+00:07:43.080 --> 00:07:47.799
+written in Scheme. I would like this gypsum to be more of a
+
+00:07:47.800 --> 00:07:51.479
+Scheme app platform that just happens to be able to also run
+
+00:07:51.480 --> 00:07:56.199
+Emacs Lisp. That's how I see it. Of course, this will be a
+
+00:07:56.200 --> 00:08:00.799
+community project. I'm open to debate about that if anybody
+
+00:08:00.800 --> 00:08:02.079
+wants to convince me otherwise.
+
+00:08:02.080 --> 00:08:11.759
+Why is being able to interpret all of that EL a useful goal?
+
+00:08:11.760 --> 00:08:15.519
+Sure, there is a lot of code written in Elisp. Can we
+
+00:08:15.520 --> 00:08:18.959
+consider... Oh, it's still being written. Please go ahead
+
+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?
+
+00:08:19.440 --> 00:08:32.519
+Can we consider a translator like utility to convert eLisp
+
+00:08:32.520 --> 00:08:37.519
+to Scheme once Guile-Emacs has become a reality?
+
+00:08:37.520 --> 00:08:42.119
+Certainly. For the time being, I just wanted to get the
+
+00:08:42.120 --> 00:08:47.559
+interpreter running. So the actual, the Guile-Emacs Lisp,
+
+00:08:47.560 --> 00:08:51.919
+the one that was written in 2011 that I didn't write, that
+
+00:08:51.920 --> 00:08:57.599
+actually does compile to, I think it's the tree
+
+00:08:57.600 --> 00:08:59.239
+intermediate representation It's one of the intermediate
+
+00:08:59.240 --> 00:09:03.759
+languages that Guile uses to compile Guile scheme itself.
+
+00:09:03.760 --> 00:09:09.079
+So the Emacs lisp that was written before actually does
+
+00:09:09.080 --> 00:09:13.119
+that. It actually compiles and makes use of the entire Guile
+
+00:09:13.120 --> 00:09:17.479
+compiler tool chain and actually produces like JIT
+
+00:09:17.480 --> 00:09:21.719
+compilable binaries, which is really cool. Like I said,
+
+00:09:21.720 --> 00:09:27.519
+that's the one that I had trouble getting to work properly.
+
+00:09:27.520 --> 00:09:34.399
+Maybe we can follow that architecture. I'm not sure how to do
+
+00:09:34.400 --> 00:09:37.919
+that, but I would like to be able to do some kind of
+
+00:09:37.920 --> 00:09:41.999
+translating, keeping in mind that we want to have this be
+
+00:09:42.000 --> 00:09:48.919
+portable, do various schemes. And so Guile makes this very
+
+00:09:48.920 --> 00:09:52.719
+easy, but other schemes don't. Gambit might do this pretty
+
+00:09:52.720 --> 00:09:57.919
+well as well. It compiles to C and then compiles C down to a
+
+00:09:57.920 --> 00:10:06.159
+dynamically linkable library. So yeah, I think probably
+
+00:10:06.160 --> 00:10:09.559
+the most portable, I'm just thinking out loud right now,
+
+00:10:09.560 --> 00:10:13.239
+most portable implementation will just be able to
+
+00:10:13.240 --> 00:10:17.119
+translate Emacs Lisp directly to Scheme, which is not what
+
+00:10:17.120 --> 00:10:22.439
+the old Guile Emacs Lisp implementation does. That goes to
+
+00:10:22.440 --> 00:10:26.439
+TreeIL, so it's very, very Guile-specific, can't be
+
+00:10:26.440 --> 00:10:30.799
+ported. But yeah, if we could somehow get Emacs Lisp
+
+00:10:30.800 --> 00:10:36.999
+translated to Scheme and then compiled, say, in Shea Scheme
+
+00:10:37.000 --> 00:10:40.879
+or Gambit or MIT Scheme or one of those other compilers, that
+
+00:10:40.880 --> 00:10:44.919
+would be very cool. And I would absolutely love to do that.
+
+00:10:44.920 --> 00:10:49.279
+And I would very quickly accept any code into the code base
+
+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?
+
+00:10:50.600 --> 00:10:59.119
+Oh, and to answer the question about init.el,
+
+00:10:59.120 --> 00:11:02.839
+It's just because people spend a lot of time on their configs
+
+00:11:02.840 --> 00:11:06.959
+and it would be nice if, you know, you're starting to use this
+
+00:11:06.960 --> 00:11:14.079
+new editor and want it to be similar to Emacs users, just the
+
+00:11:14.080 --> 00:11:16.519
+Emacs community in general and people who are familiar with
+
+00:11:16.520 --> 00:11:20.879
+using Emacs. It would be more useful to everybody in the
+
+00:11:20.880 --> 00:11:25.119
+Emacs community if this were more compatible with GNU
+
+00:11:25.120 --> 00:11:35.999
+Emacs. And so that's why that's, I think that's an important
+
+00:11:36.000 --> 00:11:38.559
+goal.
+
+00:11:38.560 --> 00:12:01.839
+Question is not yet. Great. Oh, here comes another
+
+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)?
+
+00:12:02.280 --> 00:12:11.879
+Okay, what is the plan to handle elisp packages that depend
+
+00:12:11.880 --> 00:12:16.119
+on third-party or external libraries like git or magit
+
+00:12:16.120 --> 00:12:22.719
+or ripgrep? So that's going to be tricky. It depends on how
+
+00:12:22.720 --> 00:12:27.079
+these external packages are linked into emacs. If it's
+
+00:12:27.080 --> 00:12:32.879
+going to be a dynamic library like Robin Templeton's
+
+00:12:32.880 --> 00:12:38.039
+project which you load the libgit library into the Emacs
+
+00:12:38.040 --> 00:12:43.159
+process, that is going to be extremely difficult. So if you
+
+00:12:43.160 --> 00:12:49.359
+have an external library like, I don't know, libgit or
+
+00:12:49.360 --> 00:12:59.279
+what's the GUI thing? Cabal. No, not Cabal. Cairo, libcairo
+
+00:12:59.280 --> 00:13:01.439
+to do SVG graphics and so on.
+
+00:13:01.440 --> 00:13:09.719
+You can do that very easily with Guile, but then on top of
+
+00:13:09.720 --> 00:13:14.719
+that, implementing Emacs list bindings to it, I mean,
+
+00:13:14.720 --> 00:13:17.199
+you've got two layers there, and that makes things pretty
+
+00:13:17.200 --> 00:13:23.119
+difficult. So it's possible. And to some degree, maybe
+
+00:13:23.120 --> 00:13:27.799
+necessary for example, Cairo, if we want to do SVG graphics
+
+00:13:27.800 --> 00:13:30.599
+the way that Emacs Lisp does, we're going to have to have
+
+00:13:30.600 --> 00:13:33.959
+that. So that would be necessary. We would have to have those
+
+00:13:33.960 --> 00:13:39.199
+two layers. Yes, let's do that. But if it's like for Magit,
+
+00:13:39.200 --> 00:13:45.479
+you can just call out to your git process, and then you're
+
+00:13:45.480 --> 00:13:50.719
+just using the regular process APIs that Emacs Lisp has. And
+
+00:13:50.720 --> 00:13:57.119
+that can be, already we, like Guile has some very good
+
+00:13:57.120 --> 00:14:08.079
+implementations for process management. And so it would
+
+00:14:08.080 --> 00:14:12.439
+just be a matter of wrapping up those in the Emacs lisp form
+
+00:14:12.440 --> 00:14:24.919
+bindings. So yeah, dynamic libraries, I wanna try to avoid.
+
+00:14:24.920 --> 00:14:32.799
+And I would prefer to do things more through, you know,
+
+00:14:32.800 --> 00:14:40.399
+launching a child process in the Emacs process. and then
+
+00:14:40.400 --> 00:14:47.239
+communicating over the standard in, standard out
+
+00:14:47.240 --> 00:14:47.959
+channels.
+
+00:14:47.960 --> 00:14:52.799
+That's the easier way to do things, I think, because then you
+
+00:14:52.800 --> 00:14:58.519
+can just use the process library that Emacs already has, and
+
+00:14:58.520 --> 00:15:03.239
+you can just reuse all of that code.
+
+00:15:03.240 --> 00:15:09.079
+I'm not sure how ripgrep works, unfortunately, but I
+
+00:15:09.080 --> 00:15:15.279
+believe that's also a process, a child process. So, we can
+
+00:15:15.280 --> 00:15:23.479
+just reuse all of the Emacs Lisp code that does that already.
+
+00:15:23.480 --> 00:15:30.399
+We just need to make sure that the process management
+
+00:15:30.400 --> 00:15:35.119
+implementation and scheme is properly bound to Emacs Lisp,
+
+00:15:35.120 --> 00:15:43.359
+and it works the same as GNU Emacs does. Once that's all set,
+
+00:15:43.360 --> 00:15:48.399
+then these porcelains, like around git, should fall into
+
+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?
+
+00:15:55.280 --> 00:15:59.199
+How about Schemax as a name? I like the name. I like that name.
+
+00:15:59.200 --> 00:16:03.119
+I haven't really looked into like, is that already used or is
+
+00:16:03.120 --> 00:16:09.759
+that going to be confusing? But certainly something we can
+
+00:16:09.760 --> 00:16:10.959
+discuss.
+
+00:16:10.960 --> 00:16:13.039
+Another thing I should mention,
+
+00:16:13.040 --> 00:16:18.759
+I should probably set up a server or something like Discord
+
+00:16:18.760 --> 00:16:25.359
+or something like that. Discourse, not Discord.
+
+00:16:25.360 --> 00:16:31.599
+Discourse, the open source one, where we could actually
+
+00:16:31.600 --> 00:16:49.239
+chat about this stuff. For the time being, ActivityPub,
+
+00:16:49.240 --> 00:16:52.399
+mostly Mastodon, is how I communicate with people in real
+
+00:16:52.400 --> 00:16:57.279
+time, that or email. So if you want to get a hold of me, check
+
+00:16:57.280 --> 00:17:02.439
+the notes for this presentation and just send me an email.
+
+00:17:02.440 --> 00:17:09.039
+Any question at all is fine. If you want to contribute code,
+
+00:17:09.040 --> 00:17:12.799
+if you want to just learn how to contribute code, send me any
+
+00:17:12.800 --> 00:17:22.199
+questions. It's fine. I'm happy to answer them. And we can
+
+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?
+
+00:17:25.880 --> 00:17:30.239
+Okay, why is it not feasible for the Emacs layer that
+
+00:17:30.240 --> 00:17:34.319
+interprets Emacs Lisp, the core in C, have a Scheme
+
+00:17:34.320 --> 00:17:39.799
+interpreter instead of using Guile? Let's see, I have to,
+
+00:17:39.800 --> 00:17:48.799
+okay. Emacs layer interprets Emacs Lisp, the core in C, have
+
+00:17:48.800 --> 00:17:54.079
+a Scheme interpreter instead of using Guile. Okay, so that,
+
+00:17:54.080 --> 00:17:59.959
+the question xlarsx is asking, xlars, x, So Lars is asking,
+
+00:17:59.960 --> 00:18:02.319
+is it not feasible for there to be an
+
+00:18:02.320 --> 00:18:06.839
+Emacs layer that interprets Emacs Lisp have a scheme
+
+00:18:06.840 --> 00:18:33.079
+interpreter? This is Robin Templeton's project. And
+
+00:18:33.080 --> 00:18:39.839
+they're presenting later today. So check the roster and be
+
+00:18:39.840 --> 00:18:45.199
+sure to see that presentation because that's exactly what
+
+00:18:45.200 --> 00:18:52.119
+Robin Templeton is doing. That's not what I'm doing though.
+
+00:18:52.120 --> 00:18:57.239
+I'm trying to create something in Scheme. But yes, there is
+
+00:18:57.240 --> 00:19:02.959
+an attempt to get an Scheme interpreter to run inside of
+
+00:19:02.960 --> 00:19:07.159
+Emacs itself. And it has its own method of binding to Emacs
+
+00:19:07.160 --> 00:19:11.199
+Lisp functions and translating data like Lisp structures
+
+00:19:11.200 --> 00:19:14.439
+between Guile Scheme and Emacs Lisp. Robin will explain all
+
+00:19:14.440 --> 00:19:15.799
+of that in their presentation.
+
+00:19:15.800 --> 00:19:18.919
+OK, I think I've got through all the questions on Etherpad.
+
+00:19:18.920 --> 00:19:23.879
+But I'm going to hang out here for a bit longer. And yeah, feel
+
+00:19:23.880 --> 00:19:28.239
+free to do a video chat with me or send me more questions on
+
+00:19:28.240 --> 00:19:33.839
+Etherpad or here in the big blue button. And so I'm just going
+
+00:19:33.840 --> 00:21:49.119
+to hang out. And thanks for asking all your questions. And
+
+00:21:49.120 --> 00:21:50.839
+yeah, I look forward to working with all of you if you're
+
+00:21:50.840 --> 00:21:51.799
+interested. take it easy. Thanks so much for the talk and
+
+00:21:51.800 --> 00:21:53.199
+looking forward to seeing some of your progress as this
+
+00:21:53.200 --> 00:21:54.359
+moves forward, exciting space. We'll go ahead and leave the
+
+00:21:54.360 --> 00:21:54.879
+room open for you and thanks for offering to hang out and chat
+
+00:21:54.880 --> 00:21:55.639
+with other people that come by. Feel free to throw something
+
+00:21:55.640 --> 00:21:56.719
+in the chat if you want to remind people you're still here.
+
+00:21:56.720 --> 00:21:57.919
+Meanwhile, on the stream, we have moved along to our next
+
+00:21:57.920 --> 00:21:59.599
+talk on Rust, and that is just getting started. But again,
+
+00:21:59.600 --> 00:22:00.479
+we're continuing to record this, and I'll just keep an eye on
+
+00:22:00.480 --> 00:22:01.239
+it to stop the recording. Thank you. Thank you. It was
+
+00:22:01.240 --> 00:22:01.559
+awesome.
+
+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
+
+00:22:03.960 --> 00:22:05.439
+anybody else on BBB, so I'm going to go ahead and stop the
+
+00:22:05.440 --> 00:22:08.479
+recording. We can start it back up. I would say, yes, there's
+
+00:22:08.480 --> 00:22:09.519
+a lot of things you can do with this. You can handle
+
+00:22:09.520 --> 00:22:11.239
+processing. Yeah, I'm going to try and join over the chat for
+
+00:22:11.240 --> 00:22:14.679
+the next talk. I'm not sure if I can do both big blue buttons at
+
+00:22:14.680 --> 00:22:15.759
+the same time. You should be able to just watch your mute
+
+00:22:15.760 --> 00:22:19.159
+settings and mute tab settings and whatever all you have to
+
+00:22:19.160 --> 00:23:37.800
+avoid bleed through. Okay.
diff --git a/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt
new file mode 100644
index 00000000..6d214518
--- /dev/null
+++ b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt
@@ -0,0 +1,1108 @@
+WEBVTT timed by sachac, captioned by ramin
+
+00:00:00.000 --> 00:00:02.780
+Hi, my name is Ramin Honary,
+
+00:00:02.781 --> 00:00:04.480
+and I'm here to talk to you today
+
+00:00:04.481 --> 00:00:08.940
+about my clone of Emacs and Emacs Lisp that I've written in
+
+00:00:08.941 --> 00:00:12.980
+Scheme so far.
+
+00:00:12.981 --> 00:00:19.102
+So I am an Emacs enthusiast since 2017,
+
+00:00:19.103 --> 00:00:22.664
+currently employed as a full stack developer,
+
+00:00:22.665 --> 00:00:25.225
+mostly working with Python and JavaScript,
+
+00:00:25.226 --> 00:00:27.079
+although my true love is functional
+
+00:00:27.080 --> 00:00:30.559
+programming, especially Haskell, and Scheme. I started
+
+00:00:30.560 --> 00:00:33.679
+learning Scheme about two years ago. And for the past year,
+
+00:00:33.680 --> 00:00:36.279
+I've been working on a project that I'm tentatively calling
+
+00:00:36.280 --> 00:00:40.794
+Gypsum. Naming things is hard. It's not a great name.
+
+00:00:40.795 --> 00:00:43.376
+I'm open to suggestions.
+
+00:00:43.377 --> 00:00:45.897
+But yes, this is the project in which
+
+00:00:45.898 --> 00:00:53.319
+I am trying to write an Emacs Lisp interpreter in Scheme.
+
+00:00:53.320 --> 00:00:58.199
+There are many clones already of Emacs. You've probably
+
+00:00:58.200 --> 00:01:04.799
+heard of Edwin, Jed, Jedit, Jove, Lem, MG, Yi, Zile. Edwin
+
+00:01:04.800 --> 00:01:10.519
+itself is also written in Scheme--MIT Scheme. These only
+
+00:01:10.520 --> 00:01:16.159
+clone the key bindings of Emacs and not Emacs Lisp itself.
+
+00:01:16.160 --> 00:01:21.199
+The only alternative to GNU Emacs that I'm aware of is
+
+00:01:21.200 --> 00:01:26.679
+XEmacs, which is a fork of GNU Emacs.
+
+00:01:26.680 --> 00:01:30.359
+Most people don't use Emacs for the key bindings. I mean,
+
+00:01:30.360 --> 00:01:34.039
+this is anecdotally speaking, but the people who I've
+
+00:01:34.040 --> 00:01:39.519
+talked to, I would say don't use Emacs for the key bindings.
+
+00:01:39.520 --> 00:01:42.679
+They use it really more because of the power of Emacs Lisp.
+
+00:01:42.680 --> 00:01:48.439
+Emacs is as powerful as any system shell, perhaps even more
+
+00:01:48.440 --> 00:01:53.105
+powerful than system shells like Bash.
+
+00:01:53.106 --> 00:01:55.207
+The reason why it's so powerful is because
+
+00:01:55.208 --> 00:01:56.959
+there's a good programming language
+
+00:01:56.960 --> 00:02:00.039
+which you can use to control everything on your system. You
+
+00:02:00.040 --> 00:02:01.732
+can control processes. You can load and save files.
+
+00:02:01.733 --> 00:02:06.416
+You can create files. You can configure things.
+
+00:02:06.417 --> 00:02:10.219
+You can capture the output of processes in buffers.
+
+00:02:10.220 --> 00:02:13.421
+You can filter text through buffers.
+
+00:02:13.422 --> 00:02:17.839
+And a good programming language is what
+
+00:02:17.840 --> 00:02:23.479
+you need in order to do all of this. So one big goal of this
+
+00:02:23.480 --> 00:02:29.239
+project is to try to stick as closely as possible to the R7RS
+
+00:02:29.240 --> 00:02:33.859
+standard Scheme definition. That is the latest Scheme
+
+00:02:33.860 --> 00:02:38.919
+standard: R7. And this is just because I want my project to
+
+00:02:38.920 --> 00:02:43.519
+work on many scheme implementations, not just Guile.
+
+00:02:43.520 --> 00:02:45.499
+Although Guile certainly is the reference
+
+00:02:45.500 --> 00:02:50.239
+implementation.
+
+00:02:50.240 --> 00:02:56.459
+So another goal is to be able to run any "init.el".
+
+00:02:56.460 --> 00:02:59.740
+So you can take your existing "init.el"
+
+00:02:59.741 --> 00:03:01.720
+and run it in my program without
+
+00:03:01.721 --> 00:03:05.340
+significant changes. That's one of my goals in the end.
+
+00:03:05.341 --> 00:03:07.315
+I should be able to do that.
+
+00:03:07.316 --> 00:03:09.119
+A lot of people invest significant
+
+00:03:09.120 --> 00:03:12.717
+time in their configs, and it's kind of disruptive
+
+00:03:12.718 --> 00:03:14.300
+if you want to change editors,
+
+00:03:14.301 --> 00:03:16.500
+not be able to use your Emacs Lisp
+
+00:03:16.501 --> 00:03:21.646
+config. And so I think a useful Emacs clone
+
+00:03:21.647 --> 00:03:25.127
+would be able to clone Emacs Lisp well enough
+
+00:03:25.128 --> 00:03:29.799
+that you can run your "init.el".
+
+00:03:29.800 --> 00:03:33.879
+And so overall, why am I doing this? It's just because I like
+
+00:03:33.880 --> 00:03:37.999
+the Scheme programming language. I love its simplicity and
+
+00:03:38.000 --> 00:03:42.439
+its power. It's an extremely well thought-out language.
+
+00:03:42.440 --> 00:03:46.159
+It's one of those languages where you can understand the
+
+00:03:46.160 --> 00:03:48.739
+entire language from top to bottom. You can read the entire
+
+00:03:48.740 --> 00:03:52.879
+specification and understand it yourself.
+
+00:03:52.880 --> 00:03:57.239
+It's like the computers I grew up with when I was a kid.
+
+00:03:57.240 --> 00:03:59.319
+They were all very simple computers
+
+00:03:59.320 --> 00:04:02.559
+in the late 80s, early 90s. And back then,
+
+00:04:02.560 --> 00:04:05.579
+theoretically, an engineer could understand the entire
+
+00:04:05.580 --> 00:04:07.959
+system at the software level all the way down to the circuit
+
+00:04:07.960 --> 00:04:12.159
+level. You can't do that nowadays. And so nowadays, my
+
+00:04:12.160 --> 00:04:16.859
+computer is not really a physical computer anymore. It's
+
+00:04:16.860 --> 00:04:21.079
+the Scheme language standard itself. That is the core of
+
+00:04:21.080 --> 00:04:25.599
+computation, of all of computation for me. And I would like
+
+00:04:25.600 --> 00:04:30.579
+to use it as more than just an academic curiosity. It was
+
+00:04:30.580 --> 00:04:36.359
+originally designed for teaching at MIT, but it's found use
+
+00:04:36.360 --> 00:04:41.399
+in industry. And the R7RS standard is still
+
+00:04:41.400 --> 00:04:44.270
+relatively new. It's over 10 years old at this point,
+
+00:04:44.271 --> 00:04:47.999
+but hasn't, I mean, the
+
+00:04:48.000 --> 00:04:52.980
+Scheme ecosystem itself is already fairly small.
+
+00:04:52.981 --> 00:04:54.341
+There still, I don't think,
+
+00:04:54.342 --> 00:04:56.359
+has been a whole lot of adoption of R7RS
+
+00:04:56.360 --> 00:04:58.785
+quite yet. Kind of a shame.
+
+00:04:58.786 --> 00:05:01.119
+So I'd like a project like this, a
+
+00:05:01.120 --> 00:05:04.009
+very large scale, kind of a killer-app-like project
+
+00:05:04.010 --> 00:05:05.920
+where you're developing a text editor
+
+00:05:05.921 --> 00:05:09.060
+and perhaps even an integrated development environment
+
+00:05:09.061 --> 00:05:11.920
+in Scheme, I think would be very useful
+
+00:05:11.921 --> 00:05:13.799
+just even as a study of, you know, what
+
+00:05:13.800 --> 00:05:18.461
+can this language do? And just overall,
+
+00:05:18.462 --> 00:05:21.220
+there seems to be a lot of interest in
+
+00:05:21.221 --> 00:05:24.320
+Guile-based Emacs and well, maybe a
+
+00:05:24.321 --> 00:05:27.163
+Scheme-based Emacs, but Guile in particular.
+
+00:05:27.164 --> 00:05:28.220
+There has been talk of
+
+00:05:28.221 --> 00:05:33.660
+changing Emacs Lisp or the core of the Emacs Lisp over to
+
+00:05:33.661 --> 00:05:38.469
+Guile for about 30 years or so,
+
+00:05:38.470 --> 00:05:41.199
+talks originally in the early
+
+00:05:41.200 --> 00:05:44.799
+mid 90s. There were discussions between Richard Stallman,
+
+00:05:44.800 --> 00:05:49.919
+Tom Lord, and Aubrey Jaffer. They considered
+
+00:05:49.920 --> 00:05:53.219
+actually replacing Emacs Lisp with Scheme.
+
+00:05:53.220 --> 00:05:56.827
+In 1999, and going for about 10 years,
+
+00:05:56.828 --> 00:06:01.079
+someone named Ken Raeburn actually started
+
+00:06:01.080 --> 00:06:07.240
+a project where he started writing Emacs in Guile.
+
+00:06:07.241 --> 00:06:11.859
+My project is very similar to this.
+
+00:06:11.860 --> 00:06:15.120
+Here's a quote from his webpage, which is still up, even
+
+00:06:15.121 --> 00:06:18.399
+though it hasn't been updated in 15 years.
+
+00:06:18.400 --> 00:06:20.519
+This project that I have started
+
+00:06:20.520 --> 00:06:23.101
+is for converting GNU Emacs to Guile
+
+00:06:23.102 --> 00:06:24.121
+as its programming language.
+
+00:06:24.122 --> 00:06:26.082
+Support for Emacs Lisp will continue to exist,
+
+00:06:26.083 --> 00:06:27.760
+of course, but it may be through
+
+00:06:27.761 --> 00:06:29.244
+translation and/or interpretation.
+
+00:06:29.245 --> 00:06:30.339
+The Lisp engine itself
+
+00:06:30.340 --> 00:06:32.906
+may no longer be the core of the program.
+
+00:06:32.907 --> 00:06:38.538
+And this is my goal as well. In 2010,
+
+00:06:38.539 --> 00:06:41.879
+Andy Wingo and Ludovic Courtes
+
+00:06:41.880 --> 00:06:46.402
+took maintainership of the Guile project.
+
+00:06:46.403 --> 00:06:52.719
+From 2009, so while Andy... 2009
+
+00:06:52.720 --> 00:06:59.399
+to 2011, the first Emacs Lisp interpreter was already being
+
+00:06:59.400 --> 00:07:02.089
+implemented in Guile. And even to this day,
+
+00:07:02.090 --> 00:07:05.651
+this Emacs Lisp interpreter ships with Guile.
+
+00:07:05.652 --> 00:07:06.599
+And so this was happening
+
+00:07:06.600 --> 00:07:10.112
+while Andy Wingo took control of the project.
+
+00:07:10.113 --> 00:07:13.833
+In 2011, so shortly after Andy Wingo
+
+00:07:13.834 --> 00:07:15.119
+took control of the project,
+
+00:07:15.120 --> 00:07:22.279
+Guile 2.0 was released. And also in 2011, in the summertime,
+
+00:07:22.280 --> 00:07:27.279
+someone named Robin Templeton, I believe it was a Google
+
+00:07:27.280 --> 00:07:33.519
+Summer of Code project, started actually trying to
+
+00:07:33.520 --> 00:07:38.719
+incorporate libguile, that's the guile interpreter, as a
+
+00:07:38.720 --> 00:07:45.199
+linkable or loadable library, linking it to the Emacs
+
+00:07:45.200 --> 00:07:49.179
+executable, and then providing some built-in functions in
+
+00:07:49.180 --> 00:07:54.759
+Emacs that allows you to call the scheme
+
+00:07:54.760 --> 00:07:58.739
+interpreter, the Guile Scheme interpreter, from Emacs.
+
+00:07:58.740 --> 00:08:02.239
+And so it's not like a wrapper around the REPL like Geiser or
+
+00:08:02.240 --> 00:08:08.959
+SLIME. It's actually the whole Scheme interpreter loaded
+
+00:08:08.960 --> 00:08:13.939
+into your Emacs process. And that means your Emacs will have
+
+00:08:13.940 --> 00:08:20.079
+the ability to actually load compiled Scheme programs and
+
+00:08:20.080 --> 00:08:25.879
+actually run them and share memory with Emacs Lisp
+
+00:08:25.880 --> 00:08:29.799
+processes. And, well, Robin Templeton will explain all of
+
+00:08:29.800 --> 00:08:33.039
+this. They're presenting today, and I'm very excited to
+
+00:08:33.040 --> 00:08:37.079
+actually see their presentation. They'll explain
+
+00:08:37.080 --> 00:08:40.179
+everything.
+
+00:08:40.180 --> 00:08:45.679
+So, let's see. Moving on. 2020, someone named Vasilij
+
+00:08:45.680 --> 00:08:49.039
+Schneidermann, I'm not sure how you pronounce that, published
+
+00:08:49.040 --> 00:08:53.639
+an overview called The State of Emacs Lisp on Guile. Let's see
+
+00:08:53.640 --> 00:08:58.399
+if I have that here. Yep, it's this page right here. He goes
+
+00:08:58.400 --> 00:09:04.879
+into detail about who has done what so far, and what can you do
+
+00:09:04.880 --> 00:09:09.759
+in Guile with Emacs Lisp so far, and so on. Like, what is the
+
+00:09:09.760 --> 00:09:12.717
+state of the project overall?
+
+00:09:12.718 --> 00:09:15.899
+And so (speak of the devil)
+
+00:09:15.900 --> 00:09:20.960
+(Andy Wingo on social media).
+
+00:09:20.961 --> 00:09:24.339
+So, 2020 to present. Guile Emacs
+
+00:09:24.340 --> 00:09:32.071
+is dead? So there's GCC Emacs now.
+
+00:09:32.072 --> 00:09:35.752
+Emacs Lisp now has its own JIT compiler.
+
+00:09:35.753 --> 00:09:39.259
+And it seems like over the past few years,
+
+00:09:39.260 --> 00:09:44.319
+Emacs Lisp has kind of moved off into the direction of
+
+00:09:44.320 --> 00:09:48.439
+becoming its own programming language in its own right,
+
+00:09:48.440 --> 00:09:51.839
+and it is decidedly Common Lisp-flavored. It is
+
+00:09:51.840 --> 00:09:54.166
+very similar to Common Lisp,
+
+00:09:54.167 --> 00:09:56.519
+and that seems to be the direction
+
+00:09:56.520 --> 00:10:00.719
+that it's headed now, and I don't know if there's really any
+
+00:10:00.720 --> 00:10:05.559
+interest anymore amongst the Emacs maintainers of
+
+00:10:05.560 --> 00:10:09.799
+continuing with a Guile-based Emacs.
+
+00:10:09.800 --> 00:10:13.319
+But as far as I know, there's still a lot of interest in the
+
+00:10:13.320 --> 00:10:19.599
+community amongst Scheme and Lisp and Emacs users who are
+
+00:10:19.600 --> 00:10:24.779
+interested in maybe continuing to try to get Guile to become
+
+00:10:24.780 --> 00:10:28.079
+the core of Emacs, or if not, you know, what Robin Templeton
+
+00:10:28.080 --> 00:10:31.639
+has been doing, at least trying to get Guile a
+
+00:10:31.640 --> 00:10:37.279
+language, a first class supported language in Emacs. So
+
+00:10:37.280 --> 00:10:39.999
+that's enough talking. Let me just show you what I have so
+
+00:10:40.000 --> 00:10:45.239
+far. The GUI is barely working, because I have very little
+
+00:10:45.240 --> 00:10:50.039
+experience with GTK or GObject Introspection. It's very
+
+00:10:50.040 --> 00:10:53.639
+difficult to debug, so it's very slow to develop. Any crash
+
+00:10:53.640 --> 00:10:58.199
+at C level produces no stack traces. So far, most of the
+
+00:10:58.200 --> 00:11:03.199
+crashes that I've experienced are due to simple mistakes
+
+00:11:03.200 --> 00:11:09.399
+like passing the wrong data type. So, so far, no, not a whole
+
+00:11:09.400 --> 00:11:14.174
+lot of need for GDB or rebuilding all GTK, glib,
+
+00:11:14.175 --> 00:11:17.877
+and so on with the debugging symbols.
+
+00:11:17.878 --> 00:11:19.319
+But yes, still development's been
+
+00:11:19.320 --> 00:11:25.499
+very slow. I'm learning as I go. I've chosen to use Guile GI as
+
+00:11:25.500 --> 00:11:30.499
+the foundation for the GUI. Let me just load it up quick here.
+
+00:11:30.600 --> 00:11:39.899
+"load main-guile.scm". And this will launch the GUI. I also
+
+00:11:39.900 --> 00:11:44.199
+happen to have a REPL that runs in a separate thread and
+
+00:11:44.200 --> 00:11:49.759
+submits any form that you type to be evaluated inside of the
+
+00:11:49.760 --> 00:11:57.079
+running GUI environment. But you can just type stuff. So
+
+00:11:57.080 --> 00:12:02.903
+"hello world." And of course there is...
+
+00:12:02.904 --> 00:12:08.059
+as you can see, it's not quite rendering correctly.
+
+00:12:08.060 --> 00:12:11.090
+This "*Messages*" thing here,
+
+00:12:11.091 --> 00:12:13.760
+that should be over here, obviously. I haven't been able to
+
+00:12:13.761 --> 00:12:17.820
+figure out how to get those little details down. But yeah,
+
+00:12:17.821 --> 00:12:23.215
+you can do M-:, and you get your eval,
+
+00:12:23.216 --> 00:12:26.637
+and you can just evaluate, like (what's an emacs,)
+
+00:12:26.638 --> 00:12:29.280
+(or what's a Scheme-specific thing?)
+
+00:12:29.281 --> 00:12:37.679
+Like "(import (srfi 1))", and
+
+00:12:37.680 --> 00:12:44.888
+let's see, do "(iota 20)", for example.
+
+00:12:44.889 --> 00:12:46.780
+And so that is the procedure
+
+00:12:46.781 --> 00:12:52.900
+that iterates and produces some 20 elements of a
+
+00:12:52.901 --> 00:12:58.419
+list. Or you can do something like, let's see,
+
+00:12:58.420 --> 00:13:08.114
+string-append "hello" with space "world".
+
+00:13:08.115 --> 00:13:10.259
+And you get the result and so on. And,
+
+00:13:10.260 --> 00:13:13.039
+you know, scheme allows you to return multiple values. So
+
+00:13:13.040 --> 00:13:14.998
+what I have done here is just
+
+00:13:14.999 --> 00:13:17.979
+every value is captured in a list
+
+00:13:17.980 --> 00:13:21.001
+and it prints all of the return values in the list.
+
+00:13:21.002 --> 00:13:23.462
+So if a procedure returns no values,
+
+00:13:23.463 --> 00:13:26.144
+you get an empty list.
+
+00:13:26.145 --> 00:13:29.405
+And that's that. It's still quite buggy.
+
+00:13:29.406 --> 00:13:31.519
+So like, here's a bug
+
+00:13:31.520 --> 00:13:37.319
+that I can reproduce fairly consistently.
+
+00:13:37.320 --> 00:13:41.407
+I can, yeah, if you do...
+
+00:13:41.408 --> 00:13:46.199
+there seems to be a problem with a
+
+00:13:46.200 --> 00:13:49.719
+widget being freed too soon, so it will crash. I'm going to
+
+00:13:49.720 --> 00:13:53.319
+try and solve that, hopefully, before this presentation
+
+00:13:53.320 --> 00:13:57.109
+goes live. Let's see here.
+
+00:13:57.110 --> 00:13:59.839
+The Emacs Lisp parser is based on
+
+00:13:59.840 --> 00:14:04.399
+Guile Emacs Lisp. So the Guile Emacs Lisp interpreter that
+
+00:14:04.400 --> 00:14:09.039
+ships with Guile, that is what I am using. I've actually
+
+00:14:09.040 --> 00:14:15.719
+copied and pasted the source code from the Guile source base
+
+00:14:15.720 --> 00:14:20.639
+into my own project so that I can iterate on it more quickly.
+
+00:14:20.640 --> 00:14:25.799
+And I've already had to make some modifications to the
+
+00:14:25.800 --> 00:14:29.899
+Emacs Lisp interpreter in Guile. So here's the evaluator.
+
+00:14:29.900 --> 00:14:33.079
+I've actually already modified the parser and the lexer a
+
+00:14:33.080 --> 00:14:37.858
+little bit. And it's at least able to parse
+
+00:14:37.859 --> 00:14:43.149
+all of the "subr.el" program, the Emacs Lisp program.
+
+00:14:43.150 --> 00:14:44.599
+It can actually load that, but not
+
+00:14:44.600 --> 00:14:47.570
+evaluate it, or parse it, but not evaluate it...
+
+00:14:47.571 --> 00:14:51.719
+Read, not eval.
+
+00:14:51.720 --> 00:14:53.959
+By the time this goes live, I will have submitted a patch
+
+00:14:53.960 --> 00:14:57.559
+upstream. And that's another goal of this project,
+
+00:14:57.560 --> 00:15:01.199
+incidentally, is that anything that we can contribute to
+
+00:15:01.200 --> 00:15:08.359
+Guile and any built-in functions that we can implement
+
+00:15:08.360 --> 00:15:10.999
+I would like to, for this project, I would like to try and
+
+00:15:11.000 --> 00:15:15.679
+contribute upstream to Guile. The Emacs Lisp interpreter
+
+00:15:15.680 --> 00:15:21.359
+is not working well, unfortunately. So this copy, this is
+
+00:15:21.360 --> 00:15:29.479
+the copy of the code base (from this commit in particular)
+
+00:15:29.480 --> 00:15:34.979
+and well, I can't get it working. I can't actually get the
+
+00:15:34.980 --> 00:15:37.759
+non-copy, the actual built-in version of
+
+00:15:37.760 --> 00:15:41.211
+the Emacs Lisp interpreter to work properly quite yet.
+
+00:15:41.212 --> 00:15:47.033
+So let me quick go to, (what is this here?)
+
+00:15:47.034 --> 00:15:51.879
+Guile Elisp. So suppose you have this
+
+00:15:51.880 --> 00:15:55.999
+"eval-elisp" procedure here and it takes
+
+00:15:56.000 --> 00:16:00.639
+an Elisp environment and then it evaluates an expression in that
+
+00:16:00.640 --> 00:16:03.599
+environment. And evaluates to a value. So this
+
+00:16:03.600 --> 00:16:05.084
+is the standard way of doing it in Guile.
+
+00:16:05.085 --> 00:16:06.039
+If you can see here,
+
+00:16:06.040 --> 00:16:09.946
+you've got this expression, "compile" expression.
+
+00:16:09.947 --> 00:16:16.859
+This is like "eval". And so actually trying to load this.
+
+00:16:16.860 --> 00:16:24.672
+So let's do "load gypsum". (Let's see here. This is, no),
+
+00:16:24.673 --> 00:16:35.759
+I wanted to "import gypsum backend guile Elisp".
+
+00:16:35.760 --> 00:16:39.039
+And if I actually want to do this... So elisp eval, first of all,
+
+00:16:39.040 --> 00:16:42.879
+it says it failed because there's an unbound variable
+
+00:16:42.880 --> 00:16:45.348
+"elisp-eval". Don't know what it's talking about.
+
+00:16:45.349 --> 00:16:48.229
+There's no such variable in any of my programs.
+
+00:16:48.230 --> 00:16:51.151
+I have no idea what's going on here.
+
+00:16:51.152 --> 00:16:59.279
+You can try to run eval elisp on some simple form like
+
+00:16:59.280 --> 00:17:04.759
+(+ 1 2). And it gives you this exception. This works.
+
+00:17:04.760 --> 00:17:09.579
+This is the same issue that I have with all of the,
+
+00:17:09.580 --> 00:17:13.200
+every version of the Emacs Lisp Interpreter in Guile.
+
+00:17:13.201 --> 00:17:18.751
+I can get it to work with this big ",L" mode.
+
+00:17:18.752 --> 00:17:21.593
+So I can actually do (+ 1 2) here.
+
+00:17:21.594 --> 00:17:26.816
+I can do "princ" like here.
+
+00:17:26.817 --> 00:17:30.119
+That all works fine. It gives me, for some reason,
+
+00:17:30.120 --> 00:17:34.940
+a stack trace here.
+
+00:17:34.941 --> 00:17:43.926
+And yeah, so it's a bit, it's not well-documented.
+
+00:17:43.927 --> 00:17:45.887
+The code base is fairly old.
+
+00:17:45.888 --> 00:17:50.399
+As I said, it was developed around 2011,
+
+00:17:50.400 --> 00:17:53.239
+and it's fairly opaque, and I have not been able to figure out
+
+00:17:53.240 --> 00:17:57.959
+how to get Emacs Lisp in Guile working smoothly. So I have
+
+00:17:57.960 --> 00:18:04.539
+started writing my own Emacs Lisp interpreter. And, uh,
+
+00:18:04.540 --> 00:18:13.399
+"gypsum/elisp/eval-tests.scm".
+
+00:18:13.400 --> 00:18:18.269
+It's, uh, not entirely ready.
+
+00:18:18.270 --> 00:18:21.695
+I can show you some of the tests at least.
+
+00:18:21.696 --> 00:18:25.036
+Here is a simple Emacs Lisp program
+
+00:18:25.037 --> 00:18:25.856
+that you can evaluate.
+
+00:18:25.857 --> 00:18:31.139
+You got "progn", "setq" a to 3, "setq" b to 5,
+
+00:18:31.140 --> 00:18:35.839
+"setq" c to the sum of a and b, return c.
+
+00:18:35.840 --> 00:18:39.059
+And this at least works correctly.
+
+00:18:39.060 --> 00:18:43.279
+As you can see here, the result is eight. Um, but
+
+00:18:43.280 --> 00:18:46.520
+the "let*" semantics are not completed yet.
+
+00:18:46.521 --> 00:18:51.103
+Lots of work left to do there.
+
+00:18:51.104 --> 00:18:54.464
+So in the time I have left, I guess I can just,
+
+00:18:54.465 --> 00:18:56.759
+talk a little bit about what my plans
+
+00:18:56.760 --> 00:18:59.387
+are for the future.
+
+00:18:59.388 --> 00:19:02.599
+I would like to begin by evaluating or
+
+00:19:02.600 --> 00:19:06.759
+actually loading the "subr.el" into my Emacs Lisp
+
+00:19:06.760 --> 00:19:09.639
+interpreter. I actually have tests set up for that as well,
+
+00:19:09.640 --> 00:19:15.909
+so I can actually select any form I want from "subr.el".
+
+00:19:15.910 --> 00:19:18.832
+I can just run this through my interpreter
+
+00:19:18.833 --> 00:19:21.593
+and test to see if everything is working
+
+00:19:21.594 --> 00:19:28.779
+once I get that far.
+
+00:19:28.780 --> 00:19:33.239
+And yeah, let me just say that this is my formal appeal to the
+
+00:19:33.240 --> 00:19:37.799
+community for help on this project. Emacs Lisp has
+
+00:19:37.800 --> 00:19:41.179
+1,393 built-in functions.
+
+00:19:41.180 --> 00:19:45.039
+I could never implement that many functions on my own, so if
+
+00:19:45.040 --> 00:19:47.599
+this project is going to be useful to anybody in any
+
+00:19:47.600 --> 00:19:51.114
+reasonable amount of time, I'm going to need help.
+
+00:19:51.115 --> 00:19:53.476
+And I know that there are people out there
+
+00:19:53.477 --> 00:19:56.398
+who are very interested in a Guile-based Emacs,
+
+00:19:56.399 --> 00:19:58.999
+and so if you're watching this,
+
+00:19:59.000 --> 00:20:00.521
+please feel free to contact me
+
+00:20:00.522 --> 00:20:05.699
+on social media or over e-mail.
+
+00:20:05.700 --> 00:20:09.647
+My job, the way I see it, is if there's enough interest,
+
+00:20:09.648 --> 00:20:12.064
+and I do get a lot of people interested in
+
+00:20:12.065 --> 00:20:13.199
+starting to contribute,
+
+00:20:13.200 --> 00:20:17.919
+my job will be to document the building and testing process
+
+00:20:17.920 --> 00:20:21.039
+and make sure that it is as easy as possible to contribute
+
+00:20:21.040 --> 00:20:24.079
+code to this project. I want to document the system
+
+00:20:24.080 --> 00:20:27.599
+architecture. I'll write blog posts. I'll do videos on
+
+00:20:27.600 --> 00:20:31.879
+PeerTube explaining how everything works. And I will
+
+00:20:31.880 --> 00:20:34.199
+prioritize which built-in functions
+
+00:20:34.200 --> 00:20:36.462
+I think are probably going to be the most necessary,
+
+00:20:36.463 --> 00:20:40.878
+the most essential to get the interpreter running,
+
+00:20:40.879 --> 00:20:42.559
+and then find low-hanging fruit,
+
+00:20:42.560 --> 00:20:46.519
+functions that are easy for people to implement
+
+00:20:46.520 --> 00:20:50.845
+as a good introduction to getting them started
+
+00:20:50.846 --> 00:20:53.947
+on contributing to the project.
+
+00:20:53.948 --> 00:20:56.679
+And then, of course, I will take
+
+00:20:56.680 --> 00:21:01.719
+responsibility myself of making sure that we can
+
+00:21:01.720 --> 00:21:03.774
+get the Elisp interpreter to the point
+
+00:21:03.775 --> 00:21:09.079
+where it can run the Emacs regression tests.
+
+00:21:09.080 --> 00:21:13.333
+These are the test suites that are used
+
+00:21:13.334 --> 00:21:20.359
+to test Emacs Lisp itself in the GNU Emacs code base. And so
+
+00:21:20.360 --> 00:21:24.559
+ERT is itself written in Emacs Lisp. And so
+
+00:21:24.560 --> 00:21:27.033
+I think if we implement enough of the built-in functions
+
+00:21:27.034 --> 00:21:29.933
+to be able to run ERT,
+
+00:21:29.934 --> 00:21:31.195
+then we can actually start
+
+00:21:31.196 --> 00:21:33.617
+using the GNU Emacs regression tests
+
+00:21:33.618 --> 00:21:39.248
+to test our own interpreter, our own Emacs clone.
+
+00:21:39.249 --> 00:21:41.199
+And of course, I'll make sure that there's at least
+
+00:21:41.200 --> 00:21:45.833
+one usable GUI. I'm currently working on Guile GI
+
+00:21:45.834 --> 00:21:51.396
+and GTK. It would be great to have an...
+
+00:21:51.397 --> 00:21:53.879
+ANSI terminal based...
+
+00:21:53.880 --> 00:21:58.219
+something that works in your terminal emulator.
+
+00:21:58.220 --> 00:22:00.283
+And yeah, it would be great if someday soon,
+
+00:22:00.284 --> 00:22:03.159
+hopefully, we get enough done
+
+00:22:03.160 --> 00:22:06.094
+that you can actually contribute a patch to this project
+
+00:22:06.095 --> 00:22:11.778
+from within the Gypsum editor itself.
+
+00:22:11.779 --> 00:22:13.380
+I was going to do an overview,
+
+00:22:13.381 --> 00:22:19.679
+but that would be for more of an hour-long presentation.
+
+00:22:19.680 --> 00:22:22.927
+So I'm out of time. I guess the last thing
+
+00:22:22.928 --> 00:22:25.449
+I should quickly say is there's no
+
+00:22:25.450 --> 00:22:27.159
+meta object protocol in this
+
+00:22:27.160 --> 00:22:29.001
+project. I think that's a little bit too difficult
+
+00:22:29.002 --> 00:22:30.962
+to port to various scheme implementations.
+
+00:22:30.963 --> 00:22:33.739
+So I've created a substitute, which I'm
+
+00:22:33.740 --> 00:22:36.959
+calling "functional lenses", which is inspired by the
+
+00:22:36.960 --> 00:22:42.059
+Haskell project of the same name.
+
+00:22:42.060 --> 00:22:47.511
+Everything in this project is based on functional lenses.
+
+00:22:47.512 --> 00:22:52.603
+Yeah, also a lot a work went into the keymaps data structure.
+
+00:22:52.604 --> 00:22:55.206
+The point being that I think I have
+
+00:22:55.207 --> 00:22:58.589
+a pretty good foundation here upon which we can build,
+
+00:22:58.590 --> 00:23:00.839
+even though there isn't an actual, there isn't
+
+00:23:00.840 --> 00:23:04.699
+a lot done in the actual prototype itself, not yet anyway,
+
+00:23:04.700 --> 00:23:08.419
+but I made sure to get the fundamentals down
+
+00:23:08.420 --> 00:23:11.080
+from the beginning. And so I think we have something
+
+00:23:11.081 --> 00:23:16.308
+like a solid foundation on which to build.
+
+00:23:16.309 --> 00:23:21.230
+So, I'm going to conclude it there.
+
+00:23:21.231 --> 00:23:24.599
+And here's my contact details. Like I said,
+
+00:23:24.600 --> 00:23:29.319
+this is a project, I'm appealing to the community of all
+
+00:23:29.320 --> 00:23:31.899
+people who are interested in Guile and Emacs to help
+
+00:23:31.900 --> 00:23:35.839
+contribute to this project. I see myself as just getting the
+
+00:23:35.840 --> 00:23:40.600
+ball rolling. Again, taking-off from the work
+
+00:23:40.601 --> 00:23:46.278
+that Ken Raeburn left behind, with my own
+
+00:23:46.279 --> 00:23:50.637
+from-the-ground-up implementation. So yeah,
+
+00:23:50.638 --> 00:23:53.858
+contact me: e-mail, you can take a look at my blog
+
+00:23:53.859 --> 00:23:57.419
+where I talk about what I have done.
+
+00:23:57.420 --> 00:24:00.759
+My source code, the code for this project, is up on
+
+00:24:00.760 --> 00:24:06.139
+Codeberg... The presentation... this
+
+00:24:06.140 --> 00:24:09.379
+presentation, the home page for this presentation, you
+
+00:24:09.380 --> 00:24:15.559
+can find more details there. Oh, I'm on
+
+00:24:15.560 --> 00:24:19.139
+ActivityPub as well, so my handle is
+
+00:24:19.140 --> 00:24:27.119
+@ramin_hal9001@fe.disroot.org, and I'm on everyday.
+
+00:24:27.120 --> 00:24:30.939
+So yeah, please feel free to contact me if you're interested,
+
+00:24:30.940 --> 00:24:35.640
+and thank you for your attention.
diff --git a/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt
new file mode 100644
index 00000000..f1425353
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt
@@ -0,0 +1,690 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:12.919
+And I believe we are live. Hi, Mats, how are you doing? Oh, I'm
+
+00:00:12.920 --> 00:00:17.319
+fine. It's a pleasure to see you again after last year. And I
+
+00:00:17.320 --> 00:00:20.519
+was trying to think about it. We saw you last year, but didn't
+
+00:00:20.520 --> 00:00:26.919
+we see you as well in 2022? Yes. This is my third year. Yeah,
+
+00:00:26.920 --> 00:00:29.559
+well, thank you for being a regular at EmacsConf. It's
+
+00:00:29.560 --> 00:00:31.919
+always a pleasure to have you chat about hyperbole.
+
+00:00:31.920 --> 00:00:33.559
+Although I think you're the only one chatting about
+
+00:00:33.560 --> 00:00:37.159
+hyperbole this year compared to last year. Yes,
+
+00:00:37.160 --> 00:00:41.879
+unfortunately, that's, yeah, Bob has some family issues.
+
+00:00:41.880 --> 00:00:45.839
+So yeah, I'm here, but I'm here. Yeah, but we are happy to have
+
+00:00:45.840 --> 00:00:49.199
+you here. And as I was saying before, I'm not sure if you were,
+
+00:00:49.200 --> 00:00:52.519
+you had the time to watch the previous talk by Mohsen, you
+
+00:00:52.520 --> 00:00:56.239
+know, you had, there were plenty of ideas, I think that were
+
+00:00:56.240 --> 00:00:58.999
+very similar to what Hyperbole is trying to do by having
+
+00:00:59.000 --> 00:01:04.399
+buttons and having stuff that can be in any other mode that
+
+00:01:04.400 --> 00:01:08.399
+would allow you to supplement a coding file with extra
+
+00:01:08.400 --> 00:01:11.879
+information. So the ideas are living on. And even though
+
+00:01:11.880 --> 00:01:15.239
+hyperbole is one thing, I feel like other packages are also
+
+00:01:15.240 --> 00:01:17.759
+taking a lot of inspiration for it. So congratulations on
+
+00:01:17.760 --> 00:01:21.439
+being an inspiration, I suppose. Oh, thanks.
+
+00:01:21.440 --> 00:01:24.839
+Unfortunately, I have not had any time to watch anything of
+
+00:01:24.840 --> 00:01:29.759
+the Emacs conference since apparently my life is like every
+
+00:01:29.760 --> 00:01:33.559
+time it's Emacs conference, I do something else. So I've been
+
+00:01:33.560 --> 00:01:37.919
+just moving this weekend. So, I'm in a new apartment, but I'm
+
+00:01:37.920 --> 00:01:42.479
+connected and everything seems to work okay. So, I can't
+
+00:01:42.480 --> 00:01:45.199
+relate to what we said in any of the other talks, I'm afraid.
+
+00:01:45.200 --> 00:01:48.199
+So, sorry about that. No, that's okay. No, but that's
+
+00:01:48.200 --> 00:01:51.559
+completely fine, because you may be able to watch the talks
+
+00:01:51.560 --> 00:01:54.599
+at any point later on, because I'll remind the viewers that
+
+00:01:54.600 --> 00:01:57.319
+the talks are currently available on EmacsConf or the
+
+00:01:57.320 --> 00:02:01.199
+pre-recorded one. And I think we only had one live talk
+
+00:02:01.200 --> 00:02:04.239
+yesterday. All of them are already available with
+
+00:02:04.240 --> 00:02:08.039
+subtitles and all the funny stuff that we usually put. So
+
+00:02:08.040 --> 00:02:11.359
+that's an invitation for people to watch it. All right. So,
+
+00:02:11.360 --> 00:02:14.439
+Mats, before we start with the questions, I see people in the
+
+00:02:14.440 --> 00:02:17.959
+process of writing them. Was there anything else you wanted
+
+00:02:17.960 --> 00:02:21.159
+to add on top of your presentation? Maybe some supplements
+
+00:02:21.160 --> 00:02:29.039
+or whatnot? No, no. Nothing to add. Right. I mean, this year
+
+00:02:29.040 --> 00:02:31.519
+was more a bag of tricks, some new stuff that you've
+
+00:02:31.520 --> 00:02:36.159
+implemented in Hyperbole. And it's fun because I see the UI
+
+00:02:36.160 --> 00:02:40.159
+that you have for some of those modes. And earlier, you
+
+00:02:40.160 --> 00:02:42.399
+weren't able to watch those talks, but we were talking a lot
+
+00:02:42.400 --> 00:02:46.119
+about Transient and about what it allows you to do in terms of
+
+00:02:46.120 --> 00:02:51.039
+interactivity. I'm actually familiar with Transient. No,
+
+00:02:51.040 --> 00:02:56.279
+no, no. It's a mode written by Tarsius, so Jonas Bernoulli,
+
+00:02:56.280 --> 00:03:01.599
+the person behind Magit, and it's a very nice way to create
+
+00:03:01.600 --> 00:03:06.319
+menus for interactive setups. So, if you are interested in
+
+00:03:06.320 --> 00:03:10.039
+perhaps augmenting what you currently have with
+
+00:03:10.040 --> 00:03:12.959
+Hyperbole, it might be nice to look into Transient because I
+
+00:03:12.960 --> 00:03:16.359
+think this is heading towards eventually being merged into
+
+00:03:16.360 --> 00:03:18.879
+the core of Emacs. I mean, don't quote me on this. and I'm not
+
+00:03:18.880 --> 00:03:21.719
+sure how Tarsius feels about it, but because of the
+
+00:03:21.720 --> 00:03:25.879
+adoption, because Magit obviously uses transient, Org is
+
+00:03:25.880 --> 00:03:28.839
+trying to make a move towards adopting transient, it feels
+
+00:03:28.840 --> 00:03:32.479
+like Hyperbole would do well as well to adopt it because it's
+
+00:03:32.480 --> 00:03:36.799
+starting to become a grammar of general UI at this point.
+
+00:03:36.800 --> 00:03:40.839
+Yeah, now when you mention it, I remember because I'm a heavy
+
+00:03:40.840 --> 00:03:47.519
+user of Magic, of course. So I know Transient that way. I know
+
+00:03:47.520 --> 00:03:50.999
+also that people have been complaining about Hyperbole's
+
+00:03:51.000 --> 00:03:56.079
+menu system. You know that Hyperbole reach back to
+
+00:03:56.080 --> 00:04:02.639
+something like 1993, so it has some maybe things that are not
+
+00:04:02.640 --> 00:04:07.279
+modern in that sense. So we have it on the plate to maybe look
+
+00:04:07.280 --> 00:04:11.479
+into these things and how we can sort of make things modern,
+
+00:04:11.480 --> 00:04:16.279
+etc. Sure, but it's completely fine to take your time. You
+
+00:04:16.280 --> 00:04:19.359
+don't necessarily have to follow the latest fads when it
+
+00:04:19.360 --> 00:04:24.439
+comes to completion engines or interactive engines like
+
+00:04:24.440 --> 00:04:26.879
+Transient is. I'm not actually sure how you would call
+
+00:04:26.880 --> 00:04:31.519
+Transient. Is this a UI maker, an interaction engine? I
+
+00:04:31.520 --> 00:04:36.559
+don't know. I'll need to ask Tarsius at some point. All
+
+00:04:36.560 --> 00:04:41.439
+right. Okay. Okay so let's move on to the questions. We've
+
+00:04:41.440 --> 00:04:45.719
+got a couple of them and for the Q&A we'll have about five
+
+00:04:45.720 --> 00:04:49.199
+minutes and 30 seconds until we got to lunch. So starting
+
+00:04:49.200 --> 00:04:51.193
+with the first question.
+
+NOTE Q: How is the log buffer generated?
+
+00:04:51.194 --> 00:04:52.679
+How is the log buffer generated in
+
+00:04:52.680 --> 00:04:56.719
+your presentation? But it's a very quick answer to this.
+
+00:04:56.720 --> 00:04:59.839
+We recommend at EmacsConf that speakers use the
+
+00:04:59.840 --> 00:05:02.679
+interaction-log package, which allows you to have a
+
+00:05:02.680 --> 00:05:07.879
+slightly prettier lossage. Lossage being in Emacs how you
+
+00:05:07.880 --> 00:05:10.359
+call the comments that you've used. And so if you're
+
+00:05:10.360 --> 00:05:12.439
+interested in using this for your own presentation,
+
+00:05:12.440 --> 00:05:17.519
+interaction log, and you'll be able to find it fairly
+
+00:05:17.520 --> 00:05:18.999
+easily.
+
+00:05:19.000 --> 00:05:21.050
+Moving to the next question.
+
+NOTE Q: So, the "select a thing" C-c RET is similar to expand-region? How does it behave in codes (functions, class, ...)
+
+00:05:21.051 --> 00:05:23.651
+So the selector thing C-c RET
+
+00:05:23.652 --> 00:05:26.479
+is similar to expand-region. How does it behave in
+
+00:05:26.480 --> 00:05:31.999
+codes i.e functions or class?
+
+00:05:32.000 --> 00:05:45.319
+Well I think it behaves exactly the same. I mean in the
+
+00:05:45.320 --> 00:05:50.079
+In any sort of buffer, it might depend on what
+
+00:05:50.080 --> 00:05:54.679
+constitutes a word, et cetera, and a sentence in the mood.
+
+00:05:54.680 --> 00:06:00.799
+That's how I would say it. Right.
+
+00:06:00.800 --> 00:06:09.279
+I'm just, in that sense, I'm just a user of the function. I
+
+00:06:09.280 --> 00:06:12.359
+haven't implemented it. I haven't tested it more than that.
+
+00:06:12.360 --> 00:06:17.959
+We can do this as a demo that you start with maybe select a
+
+00:06:17.960 --> 00:06:21.999
+small thing and by hitting it over and over again, you select
+
+00:06:22.000 --> 00:06:26.399
+more and more. Yeah, but it's completely fine sometimes to
+
+00:06:26.400 --> 00:06:30.199
+merely be a user of something, you know. It's easy. It's a
+
+00:06:30.200 --> 00:06:33.079
+testament to how amazing Emacs is because everything is
+
+00:06:33.080 --> 00:06:35.759
+written in Lisp in the background, that as soon as you start
+
+00:06:35.760 --> 00:06:38.119
+becoming a maintainer of something, you kind of expect it to
+
+00:06:38.120 --> 00:06:40.639
+just be able to understand everything else. And whilst it's
+
+00:06:40.640 --> 00:06:43.919
+technically true, the limiter here is the amount of time
+
+00:06:43.920 --> 00:06:47.199
+that you can invest looking at the definitions,
+
+00:06:47.200 --> 00:06:50.359
+understanding what they do, and sadly we don't have the time
+
+00:06:50.360 --> 00:06:53.319
+to do all of this. And especially with Hyperbole, which is
+
+00:06:53.320 --> 00:06:55.959
+obviously interacting with major modes in something that
+
+00:06:55.960 --> 00:07:01.239
+is more involved than Org mode, for instance. We do have
+
+00:07:01.240 --> 00:07:05.879
+another question. So, I know you Hyperbole devs are active
+
+00:07:05.880 --> 00:07:08.919
+and interested in sharing and interoperating with other
+
+00:07:08.920 --> 00:07:09.971
+Emacs tools.
+
+NOTE 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?
+
+00:07:09.972 --> 00:07:11.839
+What is a recent tool that you find exciting to
+
+00:07:11.840 --> 00:07:14.799
+think about using in combination with Hyperbole or would
+
+00:07:14.800 --> 00:07:21.599
+like to suggest using in combination with it? Well, lately
+
+00:07:21.600 --> 00:07:24.519
+we've been focusing a lot of sort of trying to make Hyperbole
+
+00:07:24.520 --> 00:07:29.639
+work together with Org Mode and in in a good way so they can
+
+00:07:29.640 --> 00:07:36.119
+sort of, I mean... The idea with Hyperbole is not to be better
+
+00:07:36.120 --> 00:07:40.119
+than everything else, but more to be like the glue or spider
+
+00:07:40.120 --> 00:07:46.349
+that could integrate different modes in a good way together.
+
+00:07:46.350 --> 00:07:51.359
+So that being top of everything. And Org is a very
+
+00:07:51.360 --> 00:07:55.559
+popular mode, and there are a lot of sub-modes, or whatever
+
+00:07:55.560 --> 00:07:59.519
+you can call it, with Org for information management. And we
+
+00:07:59.520 --> 00:08:03.119
+would want Hyperbole to work together with Org in a good way,
+
+00:08:03.120 --> 00:08:09.119
+so Org users could benefit from Hyperbole as well. So we put
+
+00:08:09.120 --> 00:08:13.319
+in some effort in that. But I think there's a lot of way to go.
+
+00:08:13.320 --> 00:08:17.319
+There's much more that can be done there as well because
+
+00:08:17.320 --> 00:08:21.559
+different modes can easily compete in a bad way in the
+
+00:08:21.560 --> 00:08:26.519
+details. So it's a little bit of a tricky thing, especially
+
+00:08:26.520 --> 00:08:32.839
+like we have this and how probably we have this M-RET
+
+00:08:32.840 --> 00:08:36.319
+for the action production key and that's also used in many
+
+00:08:36.320 --> 00:08:40.639
+modes. So we would really, in the best of words, we would like
+
+00:08:40.640 --> 00:08:46.388
+Emacs to sort of come to some agreement on using of the
+
+00:08:46.389 --> 00:08:52.759
+M-RET in a good way for modes to sort of be able to work and
+
+00:08:52.760 --> 00:08:58.119
+live together. Yeah, I mean it's a tough thing to share the
+
+00:08:58.120 --> 00:09:01.759
+key bindings and the grammar of interaction between
+
+00:09:01.760 --> 00:09:04.719
+packages because you tell me M-RET, I don't want you
+
+00:09:04.720 --> 00:09:07.759
+to touch M-RET. For me it's just inserting a new line
+
+00:09:07.760 --> 00:09:10.639
+and not adding indentation at the start and everyone is
+
+00:09:10.640 --> 00:09:14.639
+going to have their own you know, feelings and thoughts about
+
+00:09:14.640 --> 00:09:17.959
+this, so it's really hard to impose any kind of system on
+
+00:09:17.960 --> 00:09:20.559
+this. But I'm glad to hear that you're looking into
+
+00:09:20.560 --> 00:09:23.239
+interaction with Org Mode because I remember the questions
+
+00:09:23.240 --> 00:09:26.359
+we were having on your first conference when people were
+
+00:09:26.360 --> 00:09:28.959
+asking, oh I'm so glad that you're talking about Hyperbole
+
+00:09:28.960 --> 00:09:31.719
+because the only way I'm interacting with it is when people
+
+00:09:31.720 --> 00:09:35.599
+chat about Org Mode and then whenever we had announcements
+
+00:09:35.600 --> 00:09:39.039
+about Hyperbole, be it on Reddit, be it on Hacker News,
+
+00:09:39.040 --> 00:09:41.999
+people would say, but don't we already have Org Mode? And we
+
+00:09:42.000 --> 00:09:44.879
+won't get into the topic again, because I think you've done a
+
+00:09:44.880 --> 00:09:47.279
+wonderful job of explaining the differences in previous
+
+00:09:47.280 --> 00:09:51.359
+years. And today, the conference, your talk at the
+
+00:09:51.360 --> 00:09:54.199
+conference also made it obvious that it's doing something
+
+00:09:54.200 --> 00:09:58.039
+that Org Mode is not able to do. But ultimately, being able to
+
+00:09:58.040 --> 00:10:00.254
+interface between the two is something great.
+
+NOTE On Ihor as the new maintainer for Org Mode
+
+00:10:00.255 --> 00:10:02.676
+And I kind of wanted to ask you as well the question,
+
+00:10:02.677 --> 00:10:04.719
+because you haven't
+
+00:10:04.720 --> 00:10:10.199
+seen the talk, but yesterday we had the announcement that
+
+00:10:10.200 --> 00:10:13.879
+Ihor Radchenko was becoming the new maintainer of Org Mode.
+
+00:10:13.880 --> 00:10:18.799
+So obviously, a new maintainer introduces idea of changes
+
+00:10:18.800 --> 00:10:23.719
+of, you know, philosophy and strategy and all this. Is this
+
+00:10:23.720 --> 00:10:28.199
+somehow on your end with Hyperbole inspiring you perhaps to
+
+00:10:28.200 --> 00:10:31.999
+also innovate in a sense to maybe try to change the way some
+
+00:10:32.000 --> 00:10:32.559
+things are done?
+
+00:10:32.560 --> 00:10:45.239
+Hmm, tricky question. I know, right? Yeah, no, well, I don't
+
+00:10:45.240 --> 00:10:46.159
+know.
+
+00:10:46.160 --> 00:10:52.799
+I don't know if it answers the question, but we have this
+
+00:10:52.800 --> 00:11:02.919
+idea that we meet and work from our point of view. And then we
+
+00:11:02.920 --> 00:11:07.679
+pick up maybe details from the outside world. So we're not
+
+00:11:07.680 --> 00:11:13.079
+heavily looking into what happens in the rest of the world
+
+00:11:13.080 --> 00:11:17.239
+when it comes to Emacs and personal information
+
+00:11:17.240 --> 00:11:21.159
+management, etc. But but we do pick up some ideas.
+
+00:11:21.160 --> 00:11:26.719
+Sometimes. But yeah, we mostly do hacking and then we want to
+
+00:11:26.720 --> 00:11:31.639
+we meet once a week and work on hyperbole and you know, so
+
+00:11:31.640 --> 00:11:35.599
+Yeah, that's already very cool. And the reason I'm
+
+00:11:35.600 --> 00:11:38.799
+mentioning this is not because I know that you are operating
+
+00:11:38.800 --> 00:11:42.079
+in a little bit of a silo when it comes to all of Hyperbole, but
+
+00:11:42.080 --> 00:11:45.399
+it's always nice for me personally to see a lot of energy
+
+00:11:45.400 --> 00:11:49.039
+being brought in by people. Whenever there's a new major
+
+00:11:49.040 --> 00:11:52.919
+version being published, be it Org Mode or be it Hyperbole,
+
+00:11:52.920 --> 00:11:55.519
+people are excited. There's a lot of energy in here because
+
+00:11:55.520 --> 00:11:58.039
+people are chatting about what you're doing. And that's why
+
+00:11:58.040 --> 00:12:02.399
+I find that people, a new maintenanceship for Org Mode
+
+00:12:02.400 --> 00:12:05.199
+actually benefits Hyperbole in a way because you get a lot of
+
+00:12:05.200 --> 00:12:07.559
+excitement, a lot of people thinking and bringing ideas to
+
+00:12:07.560 --> 00:12:12.279
+the table. And I think it's a prime time to actually try I'm
+
+00:12:12.280 --> 00:12:14.599
+using the word stealing, but in a very nice way, stealing in
+
+00:12:14.600 --> 00:12:17.519
+terms of floss, stealing some ideas and trying to see if you
+
+00:12:17.520 --> 00:12:21.199
+can run with them on your own end. And that's also why I was
+
+00:12:21.200 --> 00:12:24.479
+suggesting transient, because transient looks like it's
+
+00:12:24.480 --> 00:12:28.759
+on its path to reach core at some point. And it would be nice if
+
+00:12:28.760 --> 00:12:31.479
+you had the idea early on to integrate with it, because it
+
+00:12:31.480 --> 00:12:34.319
+might save you time later on and make your user happy,
+
+00:12:34.320 --> 00:12:37.319
+because they can find the same grammar between the Git,
+
+00:12:37.320 --> 00:12:41.639
+between org mode, and between hyperbole. All right. Is
+
+00:12:41.640 --> 00:12:46.439
+there... I don't think... Yeah, go on, please. Yeah, I just
+
+00:12:46.440 --> 00:12:49.879
+want to add on that, that, I mean, as an ultimate goal, in the
+
+00:12:49.880 --> 00:12:56.679
+far distance, we would want sort of Hyperbole or hyperbole
+
+00:12:56.680 --> 00:13:00.399
+type of functionality be part of the core Emacs. So in that
+
+00:13:00.400 --> 00:13:06.839
+sense, it's sort of totally sort of okay with us that
+
+00:13:06.840 --> 00:13:10.599
+different packages steal ideas and try to merge them into
+
+00:13:10.600 --> 00:13:16.359
+sort of the core system. Yeah. All right, I don't see any more
+
+00:13:16.360 --> 00:13:19.279
+questions, so I think we can move to close. Actually, we're
+
+00:13:19.280 --> 00:13:22.439
+actually three minutes over time, so I'm glad we managed to
+
+00:13:22.440 --> 00:13:24.759
+discuss a little more, but that's fine. Mats, do you have
+
+00:13:24.760 --> 00:13:31.519
+any last words? I'll try it out. Okay, well, then, you heard
+
+00:13:31.520 --> 00:13:35.479
+it, everyone. Just try it out. Try it out, and if you like it,
+
+00:13:35.480 --> 00:13:37.239
+you can join us on Sundays
+
+00:13:37.240 --> 00:13:41.959
+Right. And every Sunday, well, if you do not know what to do,
+
+00:13:41.960 --> 00:13:44.919
+you know, here's an idea for you. All right. Thank you so
+
+00:13:44.920 --> 00:13:47.079
+much, Mats, for coming again to Emacs Conf. And we look
+
+00:13:47.080 --> 00:13:50.319
+forward, perhaps, to seeing you next year. Yes. I'll be
+
+00:13:50.320 --> 00:13:55.119
+there. Hopefully, I can see some of the presentations live
+
+00:13:55.120 --> 00:13:58.399
+then. OK. That's OK. You've got the entire year to catch up on
+
+00:13:58.400 --> 00:14:01.159
+the ones you haven't seen this year and next year. But you'll
+
+00:14:01.160 --> 00:14:04.359
+have the time to catch another one live. All right. Yes.
+
+00:14:04.360 --> 00:14:09.519
+Great! For the folks watching, we will be taking a break, a
+
+00:14:09.520 --> 00:14:14.039
+one hour and one minute break. We'll be back at 1 p.m. EST and I
+
+00:14:14.040 --> 00:14:21.479
+think if my UTC conversion is working right, it should be 6
+
+00:14:21.480 --> 00:14:24.679
+p.m. UTC, so at least in one hour. All right, see you in a bit
+
+00:14:24.680 --> 00:14:30.159
+folks! Oh yes, and sorry, I've got a little elf speaking
+
+00:14:30.160 --> 00:14:32.999
+in my ears. In case you're interested in discussing further
+
+00:14:33.000 --> 00:14:35.999
+hyperbole with Mats, Mats is in the room right now and I see
+
+00:14:36.000 --> 00:14:39.919
+people have joined the BBB chat. So if you want to join and
+
+00:14:39.920 --> 00:14:42.439
+chat directly with Mats, I'm sure Mats would be more than
+
+00:14:42.440 --> 00:14:44.999
+happy to answer your questions. And obviously everything
+
+00:14:45.000 --> 00:14:48.239
+has been recorded and will be published later on. But for me,
+
+00:14:48.240 --> 00:14:54.119
+I will use the break to rest a little bit and I'll be back in the
+
+00:14:54.120 --> 00:14:59.039
+afternoon. All right, see you folks. Bye, take a break.
+
+00:14:59.040 --> 00:15:03.160
+Okay.
diff --git a/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt
new file mode 100644
index 00000000..f63f8b0c
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt
@@ -0,0 +1,23 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:41.298
+Introduction
+
+00:00:41.299 --> 00:02:22.839
+The action key and the assist key
+
+00:02:22.840 --> 00:03:44.599
+Composing an e-mail
+
+00:03:44.600 --> 00:06:03.410
+Inserting implicit links
+
+00:06:03.411 --> 00:11:19.719
+Window grid
+
+00:11:19.720 --> 00:12:33.817
+Select a thing
+
+00:12:33.818 --> 00:14:09.400
+Web search
diff --git a/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt
new file mode 100644
index 00000000..39603c7e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt
@@ -0,0 +1,459 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:08.239
+Hi, Emacs Conference. I'm Mats Lidell. I'm the maintainer
+
+00:00:08.240 --> 00:00:13.399
+of the GNU Hyperbole, together with the author, Bob
+
+00:00:13.400 --> 00:00:19.759
+Weiner. The title of the talk is Fun Things with GNU
+
+00:00:19.760 --> 00:00:27.959
+Hyperbole. With that, I intend to cover a different set of
+
+00:00:27.960 --> 00:00:33.319
+small things that is in the package. So this will not be a
+
+00:00:33.320 --> 00:00:36.854
+tutorial of Hyperbole.
+
+00:00:36.855 --> 00:00:41.298
+For that, you have to look for other sources.
+
+NOTE The action key and the assist key
+
+00:00:41.299 --> 00:00:45.039
+This is a short talk, so let's get started with
+
+00:00:45.040 --> 00:00:50.879
+the first thing. We're going to talk about scrolling and
+
+00:00:50.880 --> 00:00:56.239
+with the subtitle using the end of line. If you're new to
+
+00:00:56.240 --> 00:00:59.559
+Hyperbole, you need to know about the action key and assist
+
+00:00:59.560 --> 00:01:06.079
+key. The action key is bound to M-RET and the assist key
+
+00:01:06.080 --> 00:01:10.279
+is bound by default to M-RET with the prefix argument.
+
+00:01:10.280 --> 00:01:15.559
+Both of these keys are used for performing actions on
+
+00:01:15.560 --> 00:01:20.319
+different contexts. In this case, we'll look what
+
+00:01:20.320 --> 00:01:27.719
+happens when you use it on the end of a line.
+
+00:01:27.720 --> 00:01:35.439
+I have here the tutorial, the Emacs tutorial, and we see
+
+00:01:35.440 --> 00:01:40.599
+here a line inserting and deleting. I move there and put the
+
+00:01:40.600 --> 00:01:45.439
+cursor on the end of the line. I then hit M-RET, the
+
+00:01:45.440 --> 00:01:53.479
+action key, and it's moved to the top of the window. If I want
+
+00:01:53.480 --> 00:01:58.919
+to move it to the last row on the window I can press C-u and
+
+00:01:58.920 --> 00:02:05.879
+then M-RET, so I use the assist key. If I repeatedly hit
+
+00:02:05.880 --> 00:02:10.399
+M-RET, it will scroll so the first time it moves to the
+
+00:02:10.400 --> 00:02:16.159
+top of the window, but if I at the top of the window hit
+
+00:02:16.160 --> 00:02:22.839
+M-RET again it scrolls.
+
+NOTE Composing an e-mail
+
+00:02:22.840 --> 00:02:27.799
+Now over to the next thing.
+
+00:02:27.800 --> 00:02:34.559
+So next thing is to compose an email from an address
+
+00:02:34.560 --> 00:02:42.599
+of the style of username@domain. Let's look into
+
+00:02:42.600 --> 00:02:48.359
+that. Here I have entered the file in the Emacs
+
+00:02:48.360 --> 00:02:54.239
+distribution vc.el. At its top it has a lot of
+
+00:02:54.240 --> 00:03:01.359
+different email addresses from the contributors. This is, in
+
+00:03:01.360 --> 00:03:09.199
+principle, a normal text file. By placing the cursor over
+
+00:03:09.200 --> 00:03:13.519
+one of these addresses and hitting the action key, Hyperbole
+
+00:03:13.520 --> 00:03:17.839
+identifies that it's an email address and tries to open or
+
+00:03:17.840 --> 00:03:28.519
+opens the email composer with that, using that email address.
+
+00:03:28.520 --> 00:03:33.719
+If we'll go to the scratch buffer... Prepared another name
+
+00:03:33.720 --> 00:03:38.119
+there so just to demonstrate it works in a buffer the same
+
+00:03:38.120 --> 00:03:44.599
+way.
+
+NOTE Inserting implicit links
+
+00:03:44.600 --> 00:03:51.079
+The next fun thing is insert implicit link. I'm going to give
+
+00:03:51.080 --> 00:03:56.279
+you an example with email how to share an implicit link with
+
+00:03:56.280 --> 00:04:02.359
+someone. An implicit link is a text pattern, just as we saw
+
+00:04:02.360 --> 00:04:05.159
+with the email address, something that Hyperbole
+
+00:04:05.160 --> 00:04:13.319
+recognizes just by how the text looks. Here we have the
+
+00:04:13.320 --> 00:04:15.981
+example. We have started writing an email to
+
+00:04:15.982 --> 00:04:20.662
+the user@domain, and in the other window below,
+
+00:04:20.663 --> 00:04:27.423
+the vc.el file is open. It's now opened within the search path,
+
+00:04:27.424 --> 00:04:34.279
+the load path. That's why it's compressed. I want to tell
+
+00:04:34.280 --> 00:04:40.719
+my friend about the credit section. First, the cursor is
+
+00:04:40.720 --> 00:04:44.559
+placed here at your credit section. I move over to the other
+
+00:04:44.560 --> 00:04:48.879
+window and I use the Hyperbole menu system. By hitting
+
+00:04:48.880 --> 00:04:55.261
+C-h h, I go into the menu system. I press i for getting an
+
+00:04:55.262 --> 00:05:05.119
+i-button, implicit button, and I press l for creating a link.
+
+00:05:05.120 --> 00:05:12.159
+And there you have the link. What does the link mean? Well, it
+
+00:05:12.160 --> 00:05:15.519
+means that in the load for Hyperbole, Emacs lib files are
+
+00:05:15.520 --> 00:05:20.719
+special. If they are in the load path, they will use this short
+
+00:05:20.720 --> 00:05:26.279
+format. At the end, you have the L for the line number 24 and
+
+00:05:26.280 --> 00:05:31.439
+the C for the column. If I hit the action key on this line, you
+
+00:05:31.440 --> 00:05:35.559
+can see that the cursor moves over to the credit section. we
+
+00:05:35.560 --> 00:05:44.919
+can remove that file just to make sure that it works and move
+
+00:05:44.920 --> 00:05:50.639
+the cursor a little bit and hit M-RET again.
+
+00:05:50.640 --> 00:05:55.599
+M-RET and we moved over there. I mean, given that
+
+00:05:55.600 --> 00:06:00.039
+the receiver has a similar setup with Emacs, et cetera, that
+
+00:06:00.040 --> 00:06:03.410
+link will work there as well.
+
+NOTE Window grid
+
+00:06:03.411 --> 00:06:05.879
+Hi, Emacs Conference. It's a
+
+00:06:05.880 --> 00:06:09.639
+new recording day, the sun is shining, I'm wearing a new
+
+00:06:09.640 --> 00:06:14.359
+t-shirt but we're still cracking on with fun things in
+
+00:06:14.360 --> 00:06:21.239
+Hyperbole. Our next subject is window grid. With
+
+00:06:21.240 --> 00:06:25.039
+Hyperbole, it's easy to create a grid of windows. I'm going to
+
+00:06:25.040 --> 00:06:29.319
+show how you can do that and also moving on I'm going to show
+
+00:06:29.320 --> 00:06:34.239
+how you can use Dired or IBuffer to select what buffers to
+
+00:06:34.240 --> 00:06:39.959
+show in the grid. I will also show how you can save
+
+00:06:39.960 --> 00:06:46.079
+configuration for use later.
+
+00:06:46.080 --> 00:06:50.039
+You reach the window grid functionality through the
+
+00:06:50.040 --> 00:06:56.839
+hyperbole menu system. C-h h screen. There you have
+
+00:06:56.840 --> 00:07:01.279
+two submenus, frame control and window control. The grid
+
+00:07:01.280 --> 00:07:05.039
+functionality is part of both of these submenus. You can
+
+00:07:05.040 --> 00:07:09.359
+select either, but I'll go with window control here.
+
+00:07:09.360 --> 00:07:15.239
+Down to the left, we see the @ character and the grid of
+
+00:07:15.240 --> 00:07:21.799
+windows, so hit @. I'm prompted with the number of
+
+00:07:21.800 --> 00:07:25.803
+columns and rows for the window grid.
+
+00:07:25.804 --> 00:07:34.359
+I select the 3x3 grid.
+
+00:07:34.360 --> 00:07:41.919
+We get the 3x3 grid, and it's populated with buffers I have
+
+00:07:41.920 --> 00:07:46.639
+loaded in Emacs.
+
+00:07:46.640 --> 00:07:52.319
+Let's go back here to the scratch buffer.
+
+00:07:52.320 --> 00:07:56.399
+Now, using all those keystrokes for the menu system is a
+
+00:07:56.400 --> 00:08:01.599
+little bit cumbersome, so there is a shortcut: C-c @.
+
+00:08:01.600 --> 00:08:08.519
+If I use that, C-c @, I get immediately prompted the
+
+00:08:08.520 --> 00:08:16.538
+number of rows and columns. If i use a prefix arg 0,
+
+00:08:16.539 --> 00:08:23.359
+C-u 0 C-c @, I get also prompted with what type of
+
+00:08:23.360 --> 00:08:28.719
+buffers I want to have populated in my grid. Let's select
+
+00:08:28.720 --> 00:08:36.599
+the emacs-lisp-mode. Again we do a 3x3 grid. Here
+
+00:08:36.600 --> 00:08:44.959
+you see all the grids. The whole grid is populated with Emacs
+
+00:08:44.960 --> 00:08:45.919
+Lisp buffers.
+
+00:08:45.920 --> 00:08:57.679
+To get even finer control, you can go into IBuffer. I have
+
+00:08:57.680 --> 00:09:04.279
+pre-selected here all the Emacs Lisp files I have. Let's
+
+00:09:04.280 --> 00:09:10.279
+pick a few. I mark them like this. Let's pick three or maybe
+
+00:09:10.280 --> 00:09:16.879
+pick four. Then I hit the @ sign, and then it
+
+00:09:16.880 --> 00:09:22.368
+automatically shows a 2x2 grid
+
+00:09:22.369 --> 00:09:26.279
+with the selected buffers.
+
+00:09:26.280 --> 00:09:35.239
+We can go in again and maybe select a few more and do the same
+
+00:09:35.240 --> 00:09:44.399
+thing: hit add and it now becomes a 3x2 grid with these buffers
+
+00:09:44.400 --> 00:09:50.178
+The same thing is possible through Dired.
+
+00:09:50.179 --> 00:10:00.639
+Let's just mark quite a few here and then hit @, and then it
+
+00:10:00.640 --> 00:10:04.199
+populates it with all the buffers. You see that if it's not
+
+00:10:04.200 --> 00:10:10.679
+enough buffer to fill the whole grid, there are blank grids or
+
+00:10:10.680 --> 00:10:15.039
+rectangles in the grid.
+
+00:10:15.040 --> 00:10:20.519
+Now going back and forth like this, maybe if you want to work
+
+00:10:20.520 --> 00:10:26.759
+on some file and and then go over to Dired again to select this,
+
+00:10:26.760 --> 00:10:31.759
+can be a little bit cumbersome. You maybe have prepared a
+
+00:10:31.760 --> 00:10:34.965
+grid with the buffers you want to have there.
+
+00:10:34.966 --> 00:10:42.559
+Hyperbole comes with a simple window configuration support.
+
+00:10:42.560 --> 00:10:46.119
+You reach that the same way through the Hyperbole menu, so
+
+00:10:46.120 --> 00:10:54.119
+C-h h and window, w for window, and there you can hit save to
+
+00:10:54.120 --> 00:10:58.599
+save the configuration to a ring of configurations.
+
+00:10:58.600 --> 00:11:04.759
+Let's go back to the scratch buffer again here. Now we
+
+00:11:04.760 --> 00:11:09.919
+want to bring up our window configuration again, so we
+
+00:11:09.920 --> 00:11:15.079
+hit C-h h and window, and yank in the configuration. Boom,
+
+00:11:15.080 --> 00:11:19.719
+there is the grid again.
+
+NOTE Select a thing
+
+00:11:19.720 --> 00:11:23.319
+We're reaching the end of the talk. The last fun thing I want to
+
+00:11:23.320 --> 00:11:27.639
+talk about is the Hyperbole support for select a thing.
+
+00:11:27.640 --> 00:11:33.439
+We'll show some use of selections together with web search.
+
+00:11:33.440 --> 00:11:43.599
+Here I have brought up the GNU General Public License for
+
+00:11:43.600 --> 00:11:48.119
+just getting some text that I can show the select a thing
+
+00:11:48.120 --> 00:11:52.919
+functionality. Let's move the cursor over the word
+
+00:11:52.920 --> 00:11:59.399
+versions. Then I hit C-c RET, which is bound for the
+
+00:11:59.400 --> 00:12:03.119
+select a thing functionality.
+
+00:12:03.120 --> 00:12:11.039
+Then it selects the word that the cursor was at. If I hit it
+
+00:12:11.040 --> 00:12:15.199
+again, C-c RET, it selects the line. Again, it
+
+00:12:15.200 --> 00:12:22.359
+selects the sentence, and again, the whole paragraph. So
+
+00:12:22.360 --> 00:12:26.159
+that's a convenient way to extend your searches--your
+
+00:12:26.160 --> 00:12:33.817
+selections, rather--in a buffer.
+
+NOTE Web search
+
+00:12:33.818 --> 00:12:38.198
+Looking at selections, how you can use that from web search...
+
+00:12:38.199 --> 00:12:44.321
+Let's mark some text and then hit C-c /, which is bound
+
+00:12:44.322 --> 00:12:48.542
+for the web search. Here you see the Hyperbole menu system again.
+
+00:12:48.543 --> 00:12:54.959
+It's slightly customized with things that I use, but the basic
+
+00:12:54.960 --> 00:13:00.519
+menus are the ones supported by Hyperbole. Let's look at
+
+00:13:00.520 --> 00:13:07.999
+searching DuckDuckGo. It then populates the prompt with
+
+00:13:08.000 --> 00:13:08.839
+the selection.
+
+00:13:08.840 --> 00:13:17.919
+I have configured it so it uses my Firefox for these
+
+00:13:17.920 --> 00:13:23.319
+searches. Here we have the GNU General Public License
+
+00:13:23.320 --> 00:13:30.599
+shown. I can also show that for like me, being not a native
+
+00:13:30.600 --> 00:13:36.319
+English speaker, let's look what "take away your freedoms"
+
+00:13:36.320 --> 00:13:41.679
+means in Swedish. So C-c /, and then I hit translate.
+
+00:13:41.680 --> 00:13:45.879
+Take away your freedom, yeah, what's the translation for
+
+00:13:45.880 --> 00:13:48.582
+that? Using Google Translate,
+
+00:13:48.583 --> 00:13:50.799
+I get it translated to Swedish.
+
+00:13:50.800 --> 00:14:03.430
+That was the whole talk. We reached the end,
+
+00:14:03.431 --> 00:14:09.400
+and thanks for listening. Bye.
diff --git a/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt
new file mode 100644
index 00000000..7b377fed
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt
@@ -0,0 +1,630 @@
+WEBVTT captioned by sachac
+
+NOTE New version of hyperdrive.el
+
+00:00:00.000 --> 00:00:02.596
+One thing I wanted to mention was that
+
+00:00:02.597 --> 00:00:08.596
+as with last year, I just released a new version of
+
+00:00:08.597 --> 00:00:13.476
+hyperdrive.el and it depends on the latest release of
+
+00:00:13.477 --> 00:00:19.156
+transient.el and so if you are going to install this
+
+00:00:19.157 --> 00:00:25.156
+package, make sure that you restart your Emacs after you
+
+00:00:25.157 --> 00:00:29.796
+install it, if you aren't already up to date with transient,
+
+00:00:29.797 --> 00:00:35.316
+which was released yesterday. Otherwise, since it, this
+
+00:00:35.317 --> 00:00:40.876
+latest version of transient.el updates the transient
+
+00:00:40.877 --> 00:00:46.316
+prefix EIEIO class, and it won't work unless you restart
+
+00:00:46.317 --> 00:00:50.996
+Emacs. Okay, well, good to know. I think that's a small price
+
+00:00:50.997 --> 00:00:57.076
+to pay to be on a bleedingest of bleeding edges. All right, I
+
+00:00:57.077 --> 00:00:59.596
+see there's a question here. Let me see if I can read it. Yeah,
+
+00:00:59.597 --> 00:01:01.276
+sure. Do you want me to field it to you or do you want to read it?
+
+00:01:01.277 --> 00:01:04.104
+Oh, sure. Go ahead. I'd love to hear you read it. Sure.
+
+00:01:04.105 --> 00:01:06.686
+Thank you. So first question. Hi there.
+
+NOTE Q: Network effects are tricky - do you know of any public shares people can join to try this tool out properly?
+
+00:01:06.687 --> 00:01:07.787
+Thank you for the talk.
+
+00:01:07.788 --> 00:01:10.756
+I enjoyed watching it. I tried this tool last year and it
+
+00:01:10.757 --> 00:01:13.156
+seemed to work well, but I don't know anyone who actually
+
+00:01:13.157 --> 00:01:16.516
+uses it. Network effects are tricky. Do you know of any
+
+00:01:16.517 --> 00:01:19.636
+public shares people can join to try to try this tool out
+
+00:01:19.637 --> 00:01:24.396
+properly? Thank you. Network effects are indeed tricky.
+
+00:01:24.397 --> 00:01:29.916
+Yeah. That's kind of part of the purpose of the peer graph is
+
+00:01:29.917 --> 00:01:34.596
+to make it easier to discover peers in a way that's more, uh,
+
+00:01:34.597 --> 00:01:37.956
+more reliable and consistent than just somebody puts a
+
+00:01:37.957 --> 00:01:42.076
+public key on Reddit and then it's lost unless somebody
+
+00:01:42.077 --> 00:01:50.156
+finds it. Um, but the, the public keys that I know of are,
+
+00:01:50.157 --> 00:01:53.076
+there's the public key for the Ushin hyperdrive, which is
+
+00:01:53.077 --> 00:01:56.236
+basically just the same content that's on the website
+
+00:01:56.237 --> 00:02:00.156
+mirrored to a hyperdrive. Um, and then there are a few other
+
+00:02:00.157 --> 00:02:07.316
+ones. There's like, uh, hypha.coop has some WebZine
+
+00:02:07.317 --> 00:02:13.796
+content accessible via HyperDrive and also via IPFS. And
+
+00:02:13.797 --> 00:02:19.916
+then mauvesignweaver has a blog that's also available on
+
+00:02:19.917 --> 00:02:23.196
+Hyper. So that's blog.mauve.moe .
+
+00:02:23.197 --> 00:02:28.276
+But besides that, that's kind of the purpose of this
+
+00:02:28.277 --> 00:02:31.756
+peer graph thing is to make it easier to discover other
+
+00:02:31.757 --> 00:02:36.596
+peers. Yeah, to make it also very visual in a way, because,
+
+00:02:36.597 --> 00:02:40.436
+you know, I personally, it's funny because it reminded me of
+
+00:02:40.437 --> 00:02:45.156
+talks that I did in the past about the trust system for PGP
+
+00:02:45.157 --> 00:02:47.596
+keychains, because at the end of the day, you know, this
+
+00:02:47.597 --> 00:02:50.596
+trust system, whether you trust someone absolutely or
+
+00:02:50.597 --> 00:02:53.876
+relatively, the blocking system, it feels very related.
+
+00:02:53.877 --> 00:02:57.356
+Any kind of a chain of trust like this, feels very
+
+00:02:57.357 --> 00:03:00.436
+reminiscent, obviously, but it felt very nice that for you,
+
+00:03:00.437 --> 00:03:04.676
+you had a dynamic display of this web of trust. Whereas for
+
+00:03:04.677 --> 00:03:08.836
+me, I had to make fancy diagram in ticks, in latex, just to
+
+00:03:08.837 --> 00:03:14.956
+make sure that people understood what was actually going
+
+00:03:14.957 --> 00:03:21.596
+on. Yeah, one thing I want to point out is just the difference
+
+00:03:21.597 --> 00:03:25.556
+in utility for something like the PGP web of trust versus
+
+00:03:25.557 --> 00:03:29.956
+this kind of network of peers is, if I understand right, the
+
+00:03:29.957 --> 00:03:34.716
+main purpose of web of trust is to identify that a certain
+
+00:03:34.717 --> 00:03:42.516
+public key is actually created by the person that they claim
+
+00:03:42.517 --> 00:03:46.036
+to be. So you have a way of identifying that a key actually
+
+00:03:46.037 --> 00:03:49.996
+matches like a government identity. Whereas this kind of
+
+00:03:49.997 --> 00:03:53.356
+network of peers has nothing to do with authenticating a key
+
+00:03:53.357 --> 00:03:57.636
+or associating a key with an identity, like a government
+
+00:03:57.637 --> 00:04:03.396
+identity. The purpose is exclusively just to get more peers
+
+00:04:03.397 --> 00:04:07.276
+to be able to discover more peers who have things that are
+
+00:04:07.277 --> 00:04:07.676
+worth reading.
+
+00:04:07.677 --> 00:04:14.356
+Yeah, it's a different take on a concept, but even though the
+
+00:04:14.357 --> 00:04:18.836
+concept might be the same, I find there's a wealth of things
+
+00:04:18.837 --> 00:04:21.716
+that can be done thanks to this, because as you said, you
+
+00:04:21.717 --> 00:04:25.396
+trust someone to send you a file that is trustworthy. Well,
+
+00:04:25.397 --> 00:04:28.236
+with PGP, it's mostly about communication, but about file
+
+00:04:28.237 --> 00:04:33.356
+sharing, it just opens up completely new avenues. Yeah. Do
+
+00:04:33.357 --> 00:04:40.516
+you have anything else to add? And about that, I think one of
+
+00:04:40.517 --> 00:04:45.476
+the barriers to the PGP web of trust is that it required
+
+00:04:45.477 --> 00:04:48.916
+getting together to have key parties to meet people and
+
+00:04:48.917 --> 00:04:51.596
+verify identities. Whereas with this kind of thing,
+
+00:04:51.597 --> 00:04:54.076
+there's no need to do that because so long as your content is
+
+00:04:54.077 --> 00:04:57.876
+interesting, it doesn't matter that you're not who you
+
+00:04:57.877 --> 00:05:01.076
+claim to be or that you don't even claim to be anybody. Yeah, I
+
+00:05:01.077 --> 00:05:04.556
+mean, again, as you mentioned, it's not about identifying
+
+00:05:04.557 --> 00:05:08.196
+people, it's just about identifying value, in a way, in the
+
+00:05:08.197 --> 00:05:10.636
+content that people share. It has nothing to do with
+
+00:05:10.637 --> 00:05:13.916
+verifying their actual identity. But again, it's the same
+
+00:05:13.917 --> 00:05:16.596
+technology, it's the same understanding, but for
+
+00:05:16.597 --> 00:05:18.556
+different applications, which is lovely because
+
+00:05:18.557 --> 00:05:22.116
+programming is fractals all over. The same problems repeat
+
+00:05:22.117 --> 00:05:24.836
+themselves and the same solutions show up for widely
+
+00:05:24.837 --> 00:05:26.996
+different scenarios, which is always good. Yeah. Anything
+
+00:05:26.997 --> 00:05:32.676
+else? One more thing. Yeah. One more thing is that I wanted to
+
+00:05:32.677 --> 00:05:36.956
+give some kudos to, um, some of the other projects that
+
+00:05:36.957 --> 00:05:42.796
+inspired the pure graph work. One of them is Adam Porter's or
+
+00:05:42.797 --> 00:05:50.076
+graph view, um, which is a, um, a tool for visualizing
+
+00:05:50.077 --> 00:05:55.276
+different nodes in an org file and how they link to one
+
+00:05:55.277 --> 00:06:01.876
+another. Um, he did. the pioneering work to figure out how to
+
+00:06:01.877 --> 00:06:07.316
+render interactive graphs with GraphViz. And so we worked
+
+00:06:07.317 --> 00:06:12.476
+together on it and kind of hacked down the last parts that
+
+00:06:12.477 --> 00:06:16.796
+weren't working correctly. And so this is inspired a lot.
+
+00:06:16.797 --> 00:06:19.316
+The user interface is inspired a lot by Adam's work. And then
+
+00:06:19.317 --> 00:06:26.156
+also the idea of having people that you mark as blockers and
+
+00:06:26.157 --> 00:06:31.076
+block is inspired by another project called TrustNet by
+
+00:06:31.077 --> 00:06:37.196
+Alex Cobleigh. I can type in the link there. Alex, how do you
+
+00:06:37.197 --> 00:06:43.516
+spell it? Cobleigh? Yeah, I'll type it in here. Thank you. And I
+
+00:06:43.517 --> 00:06:50.596
+think the link is https://cblgh.org/trustnet. I think that is it.
+
+00:06:50.597 --> 00:06:57.836
+I'm not totally sure. But yeah. Okay, well, that's very good.
+
+00:06:57.837 --> 00:07:01.396
+and thank you for giving credits to the inspiration, because
+
+00:07:01.397 --> 00:07:05.556
+again, nothing is done without context, and it's always nice
+
+00:07:05.557 --> 00:07:08.516
+in the free software world to acknowledge people who have
+
+00:07:08.517 --> 00:07:11.676
+influenced us, because it's very nice when people start
+
+00:07:11.677 --> 00:07:14.556
+contributing, maintaining software, publishing stuff
+
+00:07:14.557 --> 00:07:17.916
+that they actually start collaborating with people who've
+
+00:07:17.917 --> 00:07:21.916
+inspired them, which is a nice way to climb over the shoulders
+
+00:07:21.917 --> 00:07:25.636
+of giants, which this community likes so much. All right,
+
+00:07:25.637 --> 00:07:28.676
+moving on to the next question. We are, we have about seven
+
+00:07:28.677 --> 00:07:31.063
+more minutes for questions, so we're still good.
+
+NOTE Q: blocklist or whitelist so I can make them containing useful information for only me while also being useful with in a public sense
+
+00:07:31.064 --> 00:07:33.956
+Second question, one use case for this sharing and building upon
+
+00:07:33.957 --> 00:07:37.996
+second brain, sorry, one use case for this is sharing and
+
+00:07:37.997 --> 00:07:41.436
+building upon second brains, i.e. Zettelkasten, that's
+
+00:07:41.437 --> 00:07:44.396
+denote or what I'm actually doing, but a blocker for me
+
+00:07:44.397 --> 00:07:46.916
+wanting to make one public is wanting to use a block list or
+
+00:07:46.917 --> 00:07:51.556
+whitelist so that I can make them... Cautioning?
+
+00:07:51.557 --> 00:07:56.156
+Quarantining? Containing. Yes, definitely containing.
+
+00:07:56.157 --> 00:07:59.756
+Why did I go for quarantine rather than containing? I guess
+
+00:07:59.757 --> 00:08:04.636
+my brain went to a dark place from the 2020s. So I can make
+
+00:08:04.637 --> 00:08:08.996
+containing useful information for only me while also being
+
+00:08:08.997 --> 00:08:16.156
+useful in a public sense. Yes, I think your question is about
+
+00:08:16.157 --> 00:08:22.276
+how to keep some of the content of your Zettelkasten private
+
+00:08:22.277 --> 00:08:29.956
+and only have certain parts of it be public. If your desire is
+
+00:08:29.957 --> 00:08:35.796
+to only share certain files in your Zettelkasten, then you
+
+00:08:35.797 --> 00:08:43.596
+can use the hyperdrive mirror command that we demonstrated
+
+00:08:43.597 --> 00:08:48.596
+in the Emacs 2023 talk. In short,
+
+00:08:48.597 --> 00:08:53.916
+It lets you specify either a regular expression that
+
+00:08:53.917 --> 00:08:58.036
+matches only some of the files that'll get uploaded from a
+
+00:08:58.037 --> 00:09:02.236
+directory of files on your machine. And only the files that
+
+00:09:02.237 --> 00:09:05.716
+match that regex will be put into the hyperdrive and shared
+
+00:09:05.717 --> 00:09:08.796
+with the world. But it doesn't have to be a regex. It could be a
+
+00:09:08.797 --> 00:09:13.276
+lambda. So it could match based on file size or modification
+
+00:09:13.277 --> 00:09:18.996
+time or really whatever you like. So I hope that answers your
+
+00:09:18.997 --> 00:09:23.956
+question. Great. And I personally, as someone who loves
+
+00:09:23.957 --> 00:09:27.876
+tinkering with my Elisp, I particularly like the ability to
+
+00:09:27.877 --> 00:09:31.156
+specify things with a lambda because it just opens up the
+
+00:09:31.157 --> 00:09:34.356
+ceiling of the possibilities with interactions between
+
+00:09:34.357 --> 00:09:37.316
+different parts of software. And, you know, as I have worked
+
+00:09:37.317 --> 00:09:39.956
+significantly in Org Roam, I could definitely see
+
+00:09:39.957 --> 00:09:44.116
+interactions with lambdas here to make sure that we can send
+
+00:09:44.117 --> 00:09:47.156
+and share files based on the filter list that is
+
+00:09:47.157 --> 00:09:51.036
+incrementally added to thanks to those lambdas. So thanks
+
+00:09:51.037 --> 00:09:55.116
+for this. One more thing I want to add about that is that the,
+
+00:09:55.117 --> 00:10:00.116
+that same question of being able to upload only certain
+
+00:10:00.117 --> 00:10:04.316
+files while leaving others to be private was something
+
+00:10:04.317 --> 00:10:07.556
+that was inspired by Karl Voit. I had an email thread with
+
+00:10:07.557 --> 00:10:16.036
+him in which he talked about how he uses his file tags project
+
+00:10:16.037 --> 00:10:21.676
+to organize his files. And he'll put a public tag on the files
+
+00:10:21.677 --> 00:10:26.476
+in his org database that he wants to have be published to his
+
+00:10:26.477 --> 00:10:29.916
+website. And so you could very easily just set a regular
+
+00:10:29.917 --> 00:10:33.636
+expression matches that public tag and then all of the other
+
+00:10:33.637 --> 00:10:39.676
+files would be not shared. Yeah, and, oh, sorry, I was, I
+
+00:10:39.677 --> 00:10:42.716
+misclicked, I was talking to production for a second. First
+
+00:10:42.717 --> 00:10:45.636
+time it happens today, so I think this is a testament to the
+
+00:10:45.637 --> 00:10:47.996
+level of tightness. But yeah, as you were saying, whatever
+
+00:10:47.997 --> 00:10:51.396
+heuristics you want is actually a good thing. I think people
+
+00:10:51.397 --> 00:10:54.636
+are a little antsy because they tend to brain dump into their
+
+00:10:54.637 --> 00:10:59.836
+Org Roam, Zettelkasten, Denote, and they
+
+00:10:59.837 --> 00:11:02.516
+really don't want some of their personal notes being out
+
+00:11:02.517 --> 00:11:05.596
+there. And well, if you are worried about this, I think
+
+00:11:05.597 --> 00:11:09.356
+learning some Elisp and implementing some Lambda function
+
+00:11:09.357 --> 00:11:13.116
+that allows you to filter with intention might be the best
+
+00:11:13.117 --> 00:11:17.636
+solution for you. So I hope we've covered the question as
+
+00:11:17.637 --> 00:11:21.436
+well as we could have. Next question is more about an idea
+
+00:11:21.437 --> 00:11:24.996
+about trying hyperdrive to distribute the Worg. Does that
+
+00:11:24.997 --> 00:11:28.596
+make sense to you? Yeah, I mean, you could distribute
+
+00:11:28.597 --> 00:11:32.636
+whatever you wanted. I think that'd be a great idea. Okay,
+
+00:11:32.637 --> 00:11:36.116
+great. Moving to the next question, and we have about three
+
+00:11:36.117 --> 00:11:38.316
+minutes, so I think we'll cover the last two questions and
+
+00:11:38.317 --> 00:11:41.023
+we'll move on to the next talk after that.
+
+NOTE 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.)?
+
+00:11:41.024 --> 00:11:43.164
+Could you comment on the visualization thing,
+
+00:11:43.165 --> 00:11:44.716
+Org visualization, and your
+
+00:11:44.717 --> 00:11:47.236
+experience with this type of content in buffers and the
+
+00:11:47.237 --> 00:11:52.916
+various possibilities, SVG, et cetera?
+
+00:11:52.917 --> 00:11:59.916
+Sure. So one thing that we worked on was I added a patch that
+
+00:11:59.917 --> 00:12:05.156
+was merged as part of Emacs 30, which fixes the way that image
+
+00:12:05.157 --> 00:12:14.196
+maps scale when images are scaled. So as an Emacs 30, if you
+
+00:12:14.197 --> 00:12:19.276
+zoom in on an image or shrink an image or rotate an image, now
+
+00:12:19.277 --> 00:12:24.276
+the image map, which is the overlay, so it's not actually an
+
+00:12:24.277 --> 00:12:26.716
+overlay, but it's, so to speak, it's an overlay that allows
+
+00:12:26.717 --> 00:12:30.116
+the images to be clickable based on, you know, where the
+
+00:12:30.117 --> 00:12:32.756
+actual visual display is. You can also click on it or hit help
+
+00:12:32.757 --> 00:12:37.356
+echo. And as of Emacs 30, now that scales with the image
+
+00:12:37.357 --> 00:12:37.796
+itself.
+
+00:12:37.797 --> 00:12:45.236
+The code to make that work on previous versions of Emacs, you
+
+00:12:45.237 --> 00:12:51.756
+can see the advice that we added in hyperdrive-sbb-view, that
+
+00:12:51.757 --> 00:12:55.956
+file in hyperdrive.el, if you're curious to see how you
+
+00:12:55.957 --> 00:13:01.196
+could polyfill that code, so to speak, to make it work on
+
+00:13:01.197 --> 00:13:06.076
+previous versions of Emacs before Emacs 30. But it works
+
+00:13:06.077 --> 00:13:11.076
+great. The way that this works is we generate a GraphViz
+
+00:13:11.077 --> 00:13:16.716
+string that will be sent to GraphViz to render an SVG and also
+
+00:13:16.717 --> 00:13:23.676
+render a CMAPX string. We pipe those back into Emacs and then
+
+00:13:23.677 --> 00:13:27.596
+we generate the image map from the CMAPX file and then we put
+
+00:13:27.597 --> 00:13:32.596
+that image map with the SVG, and we render it in a buffer.
+
+00:13:32.597 --> 00:13:37.076
+Works pretty well. You can check out the code to see exactly
+
+00:13:37.077 --> 00:13:41.876
+how it works. OK, great. Well, sadly, I think we are a little
+
+00:13:41.877 --> 00:13:44.996
+short on time to cover the last two questions. So Joseph, if
+
+00:13:44.997 --> 00:13:47.236
+you want to take a little bit of time maybe to answer the
+
+00:13:47.237 --> 00:13:51.196
+questions in the BBB, you can just do this, even though the
+
+00:13:51.197 --> 00:13:54.476
+stream will be moving to the next talk. But I'll use the
+
+00:13:54.477 --> 00:13:57.716
+opportunity to thank you both for the talk and for your
+
+00:13:57.717 --> 00:14:00.316
+answers, because they were very insightful. And thank you
+
+00:14:00.317 --> 00:14:03.636
+so much for taking the time to be with us today. Thank you,
+
+00:14:03.637 --> 00:14:05.876
+Leo. Enjoy the rest of the conference. Any last words in
+
+00:14:05.877 --> 00:14:10.356
+about 15 seconds? Thank you. I'm grateful for your taking
+
+00:14:10.357 --> 00:14:14.076
+all this time to make this conference possible. Well, you
+
+00:14:14.077 --> 00:14:16.916
+know, the conference would be nothing without the speakers
+
+00:14:16.917 --> 00:14:19.676
+coming and chatting, so you are the ones to thank. I mean, we
+
+00:14:19.677 --> 00:14:21.796
+like the thanking, obviously, but it's mostly you doing the
+
+00:14:21.797 --> 00:14:26.156
+work. All right. Thank you, Joseph. We'll see you later.
+
+00:14:26.157 --> 00:14:26.796
+Bye-bye.
diff --git a/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt
new file mode 100644
index 00000000..9a180103
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt
@@ -0,0 +1,841 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:03.919
+Hello, welcome to this talk on hyperdrive.el. I'm Joseph
+
+00:00:03.920 --> 00:00:07.439
+Turner presenting on behalf of ushin, a tiny independent
+
+00:00:07.440 --> 00:00:12.039
+information freedom nonprofit. hyperdrive.el is an Emacs
+
+00:00:12.040 --> 00:00:14.959
+interface to the hyperdrive peer-to-peer file sharing
+
+00:00:14.960 --> 00:00:18.399
+system built by Holepunch. Like other peer-to-peer file
+
+00:00:18.400 --> 00:00:22.119
+sharing tools, such as BitTorrent, hyperdrive lets you
+
+00:00:22.120 --> 00:00:25.959
+share unlimited files directly with other users without
+
+00:00:25.960 --> 00:00:29.519
+having to go through a central hub. One thing that sets
+
+00:00:29.520 --> 00:00:32.519
+Hyperdrive apart is that the files you share can be
+
+00:00:32.520 --> 00:00:35.759
+modified. Since hyperdrive has built-in versioning,
+
+00:00:35.760 --> 00:00:38.519
+you can explore the history of changes that you make to your
+
+00:00:38.520 --> 00:00:42.199
+files or others make to theirs. You can stream video and
+
+00:00:42.200 --> 00:00:45.639
+audio. There's no sign-up or account creation process
+
+00:00:45.640 --> 00:00:49.319
+required. It's all free software. This means that the
+
+00:00:49.320 --> 00:00:52.319
+community has the legal right, the tools, and the
+
+00:00:52.320 --> 00:00:55.359
+information necessary to participate in the development
+
+00:00:55.360 --> 00:00:58.337
+process, or even fork the project
+
+00:00:58.338 --> 00:01:00.799
+and go cimarron. Since
+
+00:01:00.800 --> 00:01:04.919
+last year's talk, we've added a few new features. It's now
+
+00:01:04.920 --> 00:01:08.559
+much easier to get started using hyperdrive.el, since we
+
+00:01:08.560 --> 00:01:12.399
+added the hyperdrive-install command, which downloads the
+
+00:01:12.400 --> 00:01:16.399
+gateway program and installs it on your machine. We added a
+
+00:01:16.400 --> 00:01:19.959
+peer graph feature, which lets you visualize your network
+
+00:01:19.960 --> 00:01:24.719
+of sources of information. We also published a new package,
+
+00:01:24.720 --> 00:01:29.079
+hyperdrive-org-transclusion, which lets you display live
+
+00:01:29.080 --> 00:01:34.599
+updating snippets of hyperdrive files in Org documents.
+
+00:01:34.600 --> 00:01:37.319
+Let's get started. Let's say you get an email from your
+
+00:01:37.320 --> 00:01:41.079
+friend Alice inviting you to check out hyperdrive.el.
+
+00:01:41.080 --> 00:01:45.519
+Let's click on the link here to look at the manual. Let's go
+
+00:01:45.520 --> 00:01:50.239
+down to the installation section. It says you need to have
+
+00:01:50.240 --> 00:01:54.639
+GNU Emacs version 28.1 or later. I'll assume you have it
+
+00:01:54.640 --> 00:01:57.479
+installed, but if not, you can click this link.
+
+00:01:57.480 --> 00:01:59.399
+You need to have curl installed,
+
+00:01:59.400 --> 00:02:01.919
+which is likely already the case, but if not,
+
+00:02:01.920 --> 00:02:04.719
+hyperdrive.el will let you know.
+
+00:02:04.720 --> 00:02:10.879
+Now from within Emacs you can install hyperdrive.el.
+
+00:02:10.880 --> 00:02:14.399
+Run M-x package-refresh-contents.
+
+00:02:14.400 --> 00:02:20.919
+Then, M-x package-install, type in hyperdrive,
+
+00:02:20.920 --> 00:02:26.079
+and hit return. Next, we'll install hyper-gateway-ushin.
+
+00:02:26.080 --> 00:02:32.999
+Let's run M-x hyperdrive-install. It's prompting me to
+
+00:02:33.000 --> 00:02:35.880
+download and install the gateway, which is 51 megabytes.
+
+00:02:35.881 --> 00:02:39.780
+I'll press y.
+
+00:02:39.781 --> 00:02:44.159
+I will skip most of the download process. The download is
+
+00:02:44.160 --> 00:02:49.439
+wrapping up.
+
+00:02:49.440 --> 00:02:53.399
+Now, it's prompting me to start the gateway. I can either run
+
+00:02:53.400 --> 00:02:59.279
+M-x hyperdrive-start, or I can press this button. And
+
+00:02:59.280 --> 00:03:03.479
+after a few moments, we'll see that the gateway will start.
+
+00:03:03.480 --> 00:03:07.279
+It's ready. You can also click this button, "View hyperdrive
+
+00:03:07.280 --> 00:03:10.239
+User Info Manual", to view the same manual that we were
+
+00:03:10.240 --> 00:03:13.479
+viewing in the browser. The info manual comes with
+
+00:03:13.480 --> 00:03:17.319
+hyperdrive.el and is available offline. Now that
+
+00:03:17.320 --> 00:03:20.559
+everything's installed and the gateway is running, we're
+
+00:03:20.560 --> 00:03:23.399
+back at Alice's email. Let's click on the link to her
+
+00:03:23.400 --> 00:03:28.719
+hyperdrive. Here's Alice's hyperdrive. Let's open her
+
+00:03:28.720 --> 00:03:33.079
+hello.org file.
+
+00:03:33.080 --> 00:03:37.319
+I'm being prompted to mark Alice's hyperdrive. Currently,
+
+00:03:37.320 --> 00:03:41.879
+it's unknown. I'll press ? to see more details.
+
+00:03:41.880 --> 00:03:48.279
+"safe", "unsafe", "unknown". I'll press e for "explain". In the info
+
+00:03:48.280 --> 00:03:54.139
+manual, it says that if a hyperdrive is marked as safe, that
+
+00:03:54.140 --> 00:03:57.799
+means files in that hyperdrive will automatically have
+
+00:03:57.800 --> 00:04:02.559
+their major mode enabled based on their file extension. In
+
+00:04:02.560 --> 00:04:06.719
+this case, if I mark Alice's hyperdrive as safe and I click on
+
+00:04:06.720 --> 00:04:10.519
+this hello.org file, Emacs will automatically enable Org
+
+00:04:10.520 --> 00:04:14.919
+mode in that file. Since I know Alice directly, I'll mark her
+
+00:04:14.920 --> 00:04:19.639
+hyperdrive as safe. I'll click on the file hello.org again,
+
+00:04:19.640 --> 00:04:25.679
+and now I'll press Shift-s for safe.
+
+00:04:25.680 --> 00:04:30.639
+Now I'm going to set Alice's petname. hyperdrive.el has
+
+00:04:30.640 --> 00:04:34.679
+different ways to name a hyperdrive. The public key is the
+
+00:04:34.680 --> 00:04:38.719
+drive's unique identifier. You can also assign yourself a
+
+00:04:38.720 --> 00:04:42.359
+public nickname, which you announce to the world. Then
+
+00:04:42.360 --> 00:04:45.959
+users on their own machines can assign each hyperdrive that
+
+00:04:45.960 --> 00:04:50.439
+they are aware of a private petname. I'll assign Alice a
+
+00:04:50.440 --> 00:04:54.079
+petname, which is the way that I will identify Alice just on
+
+00:04:54.080 --> 00:05:01.906
+my own machine. I'll type in "My Friend Alice".
+
+00:05:01.907 --> 00:05:03.707
+Then when I refresh her drive,
+
+00:05:03.708 --> 00:05:07.359
+we see that it says petname in the top left.
+
+00:05:07.360 --> 00:05:09.392
+Now I'll do what she asks,
+
+00:05:09.393 --> 00:05:11.613
+which is to right click on her name and
+
+00:05:11.614 --> 00:05:15.259
+open her peer graph. In the context menu, I see a few
+
+00:05:15.260 --> 00:05:19.159
+different actions I can take, but I'll click on "Peer Graph".
+
+00:05:19.160 --> 00:05:22.959
+It's prompting me to pick the max hops for sources. Default 3.
+
+00:05:22.960 --> 00:05:26.799
+I'll choose the default. Same for blockers. I'll explain
+
+00:05:26.800 --> 00:05:27.599
+what that means later.
+
+00:05:30.380 --> 00:05:35.959
+This is Alice's peer graph. Here we can see that Alice has two
+
+00:05:35.960 --> 00:05:41.279
+direct sources, Bob and Eve. Both Bob and Eve have assigned
+
+00:05:41.280 --> 00:05:45.919
+themselves nicknames, and so we see Bob and Eve here. Eve has
+
+00:05:45.920 --> 00:05:50.479
+assigned this other hyperdrive to be a source. But this
+
+00:05:50.480 --> 00:05:55.959
+other hyperdrive, whose public key is "kb3zr6mq"
+
+00:05:55.960 --> 00:05:59.519
+and so on--if we hover over the hyperdrive, we'll see the full
+
+00:05:59.520 --> 00:06:03.239
+public key--has not assigned itself a nickname. So we
+
+00:06:03.240 --> 00:06:07.999
+just see the truncated short public key. Because we've
+
+00:06:08.000 --> 00:06:10.917
+assigned a petname for Alice,
+
+00:06:10.918 --> 00:06:14.558
+we see Alice's petname show up here.
+
+00:06:14.559 --> 00:06:17.839
+Now I'll open the peer list view to show the same
+
+00:06:17.840 --> 00:06:21.479
+information in a different way. Since I'm using a large
+
+00:06:21.480 --> 00:06:25.199
+font, I'll widen this window so we can see everything going
+
+00:06:25.200 --> 00:06:29.319
+on in the peer list. We see that the root hyperdrive is
+
+00:06:29.320 --> 00:06:33.639
+petname "My Friend Alice", nickname "alice", public key "dm1",
+
+00:06:33.640 --> 00:06:38.359
+and so on. We've set the sources max hops to three, which means
+
+00:06:38.360 --> 00:06:42.359
+that we will go out at most three hops from Alice in order to
+
+00:06:42.360 --> 00:06:49.839
+find sources. One hop from Alice are Bob and Eve. One hop
+
+00:06:49.840 --> 00:06:55.839
+from Eve is "kb3", which is two hops from Alice. Now we've set
+
+00:06:55.840 --> 00:06:59.159
+the max hops for sources to three, but in this case, the
+
+00:06:59.160 --> 00:07:04.279
+network is small, and "kb3" has no sources. So we can only go
+
+00:07:04.280 --> 00:07:07.959
+out two hops from Alice until we run out of sources. In the
+
+00:07:07.960 --> 00:07:11.159
+future, we plan to add a search feature based on this list of
+
+00:07:11.160 --> 00:07:14.479
+sources. You type in a query, and you get back a list of
+
+00:07:14.480 --> 00:07:19.879
+results published by Eve, Bob, or "kb3". It's also possible to
+
+00:07:19.880 --> 00:07:23.239
+block peers. I'll open the transient menu by pressing
+
+00:07:23.240 --> 00:07:28.759
+question mark. For now, let's turn on showing blocked
+
+00:07:28.760 --> 00:07:35.439
+peers. I'll press "s x", and now it says blocked sources.
+
+00:07:35.440 --> 00:07:38.839
+Now we can see Mallory also shows up. Mallory has been
+
+00:07:38.840 --> 00:07:43.399
+included as a source by Eve, but is blocked. So in the end
+
+00:07:43.400 --> 00:07:47.039
+result, she does not show up in the list of sources. Instead,
+
+00:07:47.040 --> 00:07:51.839
+she shows up as a blocked source. But how is it that Mallory
+
+00:07:51.840 --> 00:07:55.039
+ended up being blocked? Let's open up the transient menu
+
+00:07:55.040 --> 00:08:02.759
+once more and click "s b" to show blockers. Now we can see that
+
+00:08:02.760 --> 00:08:07.079
+Bob has blocked Mallory. This means that Bob is not
+
+00:08:07.080 --> 00:08:12.519
+interested in seeing search results from Mallory. Since
+
+00:08:12.520 --> 00:08:17.639
+Alice has included Bob as a blocker, that means that Alice
+
+00:08:17.640 --> 00:08:23.439
+trusts Bob to block people on her behalf. So since Bob has
+
+00:08:23.440 --> 00:08:27.479
+blocked Mallory, Mallory does not show up in Alice's
+
+00:08:27.480 --> 00:08:31.919
+peergraph as a source. Well, now I'm curious to see what it is
+
+00:08:31.920 --> 00:08:35.919
+Mallory published that drove Bob to block her. I'll
+
+00:08:35.920 --> 00:08:39.439
+right-click on Mallory, and in the context menu, "Open Hyperdrive"
+
+00:08:39.440 --> 00:08:44.319
+and... Wingsuit Flying Grand Canyon Point of View Not Clickbait?
+
+00:08:44.320 --> 00:08:49.879
+I gotta check this out! [playing: Rick Astley's "Never Gonna Give You Up"]
+
+00:08:49.880 --> 00:08:56.159
+No! Disgusting! No wonder Bob blocked Mallory. Let's go
+
+00:08:56.160 --> 00:09:01.839
+back to Alice's peer graph. Mallory is a blocked source.
+
+00:09:01.840 --> 00:09:05.599
+Are there any peers who are blocked but who aren't sources?
+
+00:09:05.600 --> 00:09:11.739
+I'll open the transient menu and I'll press "s x". Now we're
+
+00:09:11.740 --> 00:09:16.839
+looking at blocked non-sources. Darth, who's been blocked
+
+00:09:16.840 --> 00:09:20.759
+by Bob, has not been added by any of Alice's sources as a
+
+00:09:20.760 --> 00:09:25.559
+source. So Darth is a blocked non-source. I'll open the
+
+00:09:25.560 --> 00:09:29.699
+transient menu again and I'll press "s x". Now we're
+
+00:09:29.700 --> 00:09:34.639
+looking at all blocked peers. Both Mallory and Darth show
+
+00:09:34.640 --> 00:09:37.959
+up. If I scroll down in the peer list, we'll see that Mallory
+
+00:09:37.960 --> 00:09:42.519
+is listed under blocked sources, and Darth is listed under
+
+00:09:42.520 --> 00:09:45.559
+blocked non-sources. This view has gotten a little bit busy.
+
+00:09:45.560 --> 00:09:49.319
+Let's say that we're only interested in how Alice
+
+00:09:49.320 --> 00:09:54.519
+relates to Mallory. I'll open the transient menu, and I
+
+00:09:54.520 --> 00:09:58.519
+will filter the graph to show paths only to Mallory. I'll
+
+00:09:58.520 --> 00:10:05.519
+press "o a", type in Mallory, and hit enter. Now we see that
+
+00:10:05.520 --> 00:10:11.479
+Mallory has a bold border and "kb3" and Darth are missing from
+
+00:10:11.480 --> 00:10:16.679
+the graph. Eve shows up because there's a path from Alice to
+
+00:10:16.680 --> 00:10:22.479
+Mallory that goes through Eve. Same for Bob. We can also add
+
+00:10:22.480 --> 00:10:28.599
+more than one peer in this view. I'll press "o a" again, and
+
+00:10:28.600 --> 00:10:34.719
+this time I'll choose Darth. Now Darth and Mallory have bold
+
+00:10:34.720 --> 00:10:38.839
+borders, and "kb3" is still missing. We can remove Mallory and
+
+00:10:38.840 --> 00:10:42.799
+Darth one at a time with "o r", or we can press C-u, the
+
+00:10:42.800 --> 00:10:47.679
+universal prefix argument, and then "o r" to remove both
+
+00:10:47.680 --> 00:10:51.239
+Mallory and Darth from the list. Now we're back to seeing
+
+00:10:51.240 --> 00:10:55.679
+everybody. This view of the graph is somewhat simplified
+
+00:10:55.680 --> 00:10:57.537
+because we're showing only
+
+00:10:57.538 --> 00:11:00.238
+the shortest paths between peers.
+
+00:11:00.239 --> 00:11:06.039
+If I press Shift-s now we're looking at all paths.
+
+00:11:06.040 --> 00:11:10.039
+Here, we can see that in addition to going from Alice to
+
+00:11:10.040 --> 00:11:15.519
+Bob as a source directly, we also go from Alice to Bob through
+
+00:11:15.520 --> 00:11:21.079
+Eve as a source. Let's go back to showing only the shortest
+
+00:11:21.080 --> 00:11:27.719
+paths. Currently, the max hops for sources and for blockers
+
+00:11:27.720 --> 00:11:31.679
+is set to 3. Let's see what happens if we set the
+
+00:11:31.680 --> 00:11:33.519
+blockers max hops to 0.
+
+00:11:35.800 --> 00:11:39.479
+After the graph reloads, we now see that Mallory
+
+00:11:39.480 --> 00:11:43.286
+shows up as a source, not as a blocked source.
+
+00:11:43.287 --> 00:11:44.759
+This is because Bob,
+
+00:11:44.760 --> 00:11:49.199
+who is one hop away from Alice, is no longer included as a
+
+00:11:49.200 --> 00:11:52.479
+blocker, because we've set the blockers max hops to 0. And
+
+00:11:52.480 --> 00:11:57.519
+since Bob is not a blocker, the fact that Bob blocks Mallory
+
+00:11:57.520 --> 00:12:01.719
+doesn't factor in. While Alice is the only one who gets to
+
+00:12:01.720 --> 00:12:05.959
+decide who her direct sources, blockers, and blocked peers
+
+00:12:05.960 --> 00:12:10.239
+are, anyone can view Alice's peer graph, tinker with the
+
+00:12:10.240 --> 00:12:14.439
+sources or blockers max hops, and use her list of sources to
+
+00:12:14.440 --> 00:12:19.239
+do a search. Let's see what happens if we set sources max
+
+00:12:19.240 --> 00:12:24.719
+hops to 2. Well, the graph doesn't change, because we only
+
+00:12:24.720 --> 00:12:29.239
+ever went out 2 hops anyway. Let's set source's max hops to 1.
+
+00:12:30.140 --> 00:12:35.159
+Now we only see Bob and Eve, since "kb3" and Mallory are
+
+00:12:35.160 --> 00:12:43.079
+2 hops out. Source hops 0. Now we're left with just Alice.
+
+00:12:44.120 --> 00:12:47.999
+Now I'd like to create a new hyperdrive and add Alice as a
+
+00:12:48.000 --> 00:12:52.731
+source. I'll run M-x hyperdrive-new.
+
+00:12:52.732 --> 00:12:53.812
+Now it's prompting me
+
+00:12:53.813 --> 00:12:57.479
+for a new hyperdrive seed. A seed is a string of characters
+
+00:12:57.480 --> 00:13:01.359
+that's combined with your secret key, which is generated
+
+00:13:01.360 --> 00:13:04.719
+for you by the gateway program, in order to create a new
+
+00:13:04.720 --> 00:13:10.679
+public key for each new hyperdrive. I'll type in "Joseph".
+
+00:13:10.680 --> 00:13:15.319
+A new drive. Now, I'll right-click on my own name, and in the
+
+00:13:15.320 --> 00:13:21.599
+context menu, I'll choose "Set Relation From". From Joseph...
+
+00:13:21.600 --> 00:13:32.279
+to Alice...as a source. Now, I'll right-click on my name again,
+
+00:13:32.280 --> 00:13:40.919
+and click on "Peer Graph". Sources max hops, let's say three
+
+00:13:40.920 --> 00:13:41.879
+and [three] for blockers as well,
+
+00:13:45.440 --> 00:13:49.399
+Here's the peer graph from my newly created
+
+00:13:49.400 --> 00:13:54.199
+hyperdrive's perspective. Mallory is included as a
+
+00:13:54.200 --> 00:13:58.519
+source, three hops from the root. Let's open the list view.
+
+00:14:01.220 --> 00:14:06.439
+If we were to mark Alice as a blocker by clicking on this
+
+00:14:06.440 --> 00:14:10.319
+button in the blocker column next to the petname for Alice,
+
+00:14:12.120 --> 00:14:16.959
+Then we see that Mallory shows up as a blocked source. Only
+
+00:14:16.960 --> 00:14:21.359
+now that Joseph includes Alice as a blocker does the fact
+
+00:14:21.360 --> 00:14:26.399
+that Bob blocked Mallory take effect. You can click on
+
+00:14:26.400 --> 00:14:30.539
+another peer to set them as the root hyperdrive. I'll click
+
+00:14:30.540 --> 00:14:34.999
+on Eve. Now we're looking at the peer graph from Eve's
+
+00:14:35.000 --> 00:14:39.519
+perspective. This peer graph view has a history. If I open
+
+00:14:39.520 --> 00:14:42.359
+the transient menu, you'll see here there's a back and a
+
+00:14:42.360 --> 00:14:47.359
+forward button. Back is bound to "l" for "left". If I press "l",
+
+00:14:48.440 --> 00:14:51.839
+we're looking at the graph from Joseph's perspective. If I
+
+00:14:51.840 --> 00:14:56.279
+press "l" again, now we're looking at Alice, as at the
+
+00:14:56.280 --> 00:15:01.439
+beginning. I'll press "r" to go forward, and "r" again, and now
+
+00:15:01.440 --> 00:15:04.734
+we're back at Eve. Now, I'd like to show you
+
+00:15:04.735 --> 00:15:08.337
+the hyperdrive-org-transclusion package we published.
+
+00:15:08.338 --> 00:15:10.358
+I'll open up the hyperdrive manual
+
+00:15:10.359 --> 00:15:14.399
+to see how to install it.
+
+00:15:15.680 --> 00:15:20.999
+Now, from here, I'll press "m" and type in transclusion to jump
+
+00:15:21.000 --> 00:15:23.599
+straight to the "Org-transclusion integration" section of
+
+00:15:23.600 --> 00:15:27.079
+the manual. To summarize, we can install
+
+00:15:27.080 --> 00:15:30.879
+hyperdrive-org-transclusion with
+
+00:15:32.220 --> 00:15:33.919
+M-x package-install RET hyperdrive-org-transclusion.
+
+00:15:37.000 --> 00:15:42.159
+Then, once this is done, we will copy the following snippet
+
+00:15:43.780 --> 00:15:47.559
+and add it either to our init.el file or, in this case, I'll
+
+00:15:47.560 --> 00:15:52.439
+just evaluate it. Now, hyperdrive-org-transclusion-mode is
+
+00:15:52.440 --> 00:15:52.879
+enabled.
+
+00:15:58.100 --> 00:16:01.479
+Let's go back to the hello.org file in Alice's hyperdrive.
+
+00:16:01.480 --> 00:16:07.239
+I'll right-click on Alice, then click "Open Hyperdrive", and
+
+00:16:07.240 --> 00:16:11.359
+hit RET on hello.org. This time, I'm not prompted to mark
+
+00:16:11.360 --> 00:16:16.199
+Alice's hyperdrive as safe, since we did it already. I'll
+
+00:16:16.200 --> 00:16:20.719
+navigate to the "Check out my peers" heading. Then I'll run
+
+00:16:20.720 --> 00:16:28.359
+M-x org-store-link. Now, I'll create a new file in my
+
+00:16:28.360 --> 00:16:32.959
+hyperdrive by running M-x hyperdrive-find-file. I'll
+
+00:16:32.960 --> 00:16:38.488
+select my hyperdrive and I'll call this new file
+
+00:16:38.489 --> 00:16:45.919
+response-to-alice.org.
+
+00:16:45.920 --> 00:16:50.780
+Now, I'll paste in a response that I've written.
+
+00:16:50.781 --> 00:16:57.979
+I'll go to the bottom and I will run M-x org-insert-link
+
+00:16:57.980 --> 00:16:59.423
+and I'll insert the link
+
+00:16:59.424 --> 00:17:02.799
+that I stored earlier. As a link
+
+00:17:02.800 --> 00:17:07.759
+description, I'll change it to
+
+00:17:08.880 --> 00:17:09.879
+"Snippet from Alice's hyperdrive file".
+
+00:17:12.700 --> 00:17:18.399
+I'll save my hyperdrive file.
+
+00:17:18.400 --> 00:17:21.839
+Now, to show that the link works, I'll just kill this buffer
+
+00:17:21.840 --> 00:17:27.099
+showing the hello.org file, and I'll click on the link.
+
+00:17:27.100 --> 00:17:29.487
+Now, in addition to linking from my file
+
+00:17:29.488 --> 00:17:31.488
+to the heading in Alice's file,
+
+00:17:31.489 --> 00:17:35.699
+I'd like to transclude this heading's content in my file.
+
+00:17:35.700 --> 00:17:38.634
+So I'll go to the link in my file and run
+
+00:17:38.635 --> 00:17:45.400
+M-x org-transclusion-make-from-link
+
+00:17:45.401 --> 00:17:47.879
+and I'll save my file again.
+
+00:17:47.880 --> 00:17:50.504
+All that's been added is another link,
+
+00:17:50.505 --> 00:17:54.433
+prefixed with this transclude keyword.
+
+00:17:54.434 --> 00:17:57.034
+To make the transclusion show up inline,
+
+00:17:57.035 --> 00:18:02.359
+I'll run M-x org-transclusion-add. The content
+
+00:18:02.360 --> 00:18:05.359
+of Alice's file hasn't been copied into mine. It's just
+
+00:18:05.360 --> 00:18:12.959
+being transcluded. If I run M-x org-transclusion-remove,
+
+00:18:12.960 --> 00:18:15.439
+you'll see that the underlying content is still
+
+00:18:15.440 --> 00:18:21.639
+just the transclude keyword and the link.
+
+00:18:21.640 --> 00:18:24.319
+Now some time has passed and Alice has updated her
+
+00:18:24.320 --> 00:18:29.879
+hyperdrive file. She wrote, "Please add me as a source." Since
+
+00:18:29.880 --> 00:18:33.559
+the transclude link that I added in my file does not specify a
+
+00:18:33.560 --> 00:18:36.879
+version, it will always transclude the latest version of
+
+00:18:36.880 --> 00:18:42.639
+Alice's hello.org file. If I run M-x org-transclusion-add
+
+00:18:42.640 --> 00:18:46.719
+once more, we'll see that the latest version of Alice's
+
+00:18:46.720 --> 00:18:51.679
+file gets transcluded into mine. Let's say that I want to
+
+00:18:51.680 --> 00:18:54.959
+transclude the previous version of Alice's hello.org
+
+00:18:54.960 --> 00:18:58.879
+file, and I don't want my transclusion to change when Alice
+
+00:18:58.880 --> 00:19:02.919
+updates her file. That's possible too. I'll go over to her
+
+00:19:02.920 --> 00:19:09.759
+file and run M-x hyperdrive-open-previous-version. Now
+
+00:19:09.760 --> 00:19:14.079
+when I widen the window a little, we can see in the mode line
+
+00:19:14.080 --> 00:19:18.279
+that this is version 57. For an explanation of what the
+
+00:19:18.280 --> 00:19:21.599
+version numbers mean, check out the last video or the info
+
+00:19:21.600 --> 00:19:25.759
+manual. For now, I'll go down to her "Check out my peers"
+
+00:19:25.760 --> 00:19:32.999
+heading and run M-x org-store-link. Now, in my response to
+
+00:19:33.000 --> 00:19:39.159
+Alice, I'll insert the link. I'll run org-transclusion-make-from-link.
+
+00:19:39.160 --> 00:19:44.759
+Now there are two transclusions. The first
+
+00:19:44.760 --> 00:19:47.719
+transclusion will update whenever Alice updates her file,
+
+00:19:47.720 --> 00:19:52.919
+and the second transclusion is pinned to version 57.
+
+00:19:52.920 --> 00:19:53.356
+That covers hyperdrive-install, the peer graph, and
+
+00:19:53.357 --> 00:19:58.298
+hyperdrive-org-transclusion.
+
+00:19:58.299 --> 00:20:00.519
+Feel free to check out the hyperdrive.el
+
+00:20:00.520 --> 00:20:04.119
+info manual in the ushin hyperdrive here, or on the
+
+00:20:04.120 --> 00:20:08.439
+ushin.org website. Thanks to the folks at Sopranica, we
+
+00:20:08.440 --> 00:20:11.879
+have a public XMPP group chat you can join, either using an
+
+00:20:11.880 --> 00:20:15.919
+XMPP client or anonymously from your browser. If you use
+
+00:20:15.920 --> 00:20:19.799
+Matrix, there's also a bridge. Thank you for watching, and
+
+00:20:19.800 --> 00:20:22.519
+Thank you to the EmacsConf organizers and all the
+
+00:20:22.520 --> 00:20:25.160
+presenters who made this wonderful event possible.
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
new file mode 100644
index 00000000..5f0d3fc5
--- /dev/null
+++ b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt
@@ -0,0 +1,346 @@
+WEBVTT
+
+NOTE Q: Do you have any suggestions for interactive debugging of Julia code in Emacs?
+
+00:00:00.000 --> 00:00:05.319
+... answer to that. I, I think the infrastructure for an
+
+00:00:05.320 --> 00:00:08.599
+ecosystem in Julia in general is as mature as other
+
+00:00:08.600 --> 00:00:12.559
+languages, and even debugger infiltrator themselves are
+
+00:00:12.560 --> 00:00:17.519
+not particularly well developed. And so I don't think
+
+00:00:17.520 --> 00:00:21.519
+there's much we can do about that right now. I think that it's
+
+00:00:21.520 --> 00:00:25.999
+unfortunate that most of the development for these type of
+
+00:00:26.000 --> 00:00:31.759
+tools is tightly linked to VS code. But even there, I don't
+
+00:00:31.760 --> 00:00:35.719
+think that there's much done in terms of interactive
+
+00:00:35.720 --> 00:00:42.359
+debugging. So I, yeah, I think this has to be worked on mostly
+
+00:00:42.360 --> 00:00:47.519
+on the Julia side first. And then probably Emacs can get
+
+00:00:47.520 --> 00:00:51.239
+something out of that. I know that there's development in
+
+00:00:51.240 --> 00:00:55.559
+debugger.jl itself for future releases to make it at least
+
+00:00:55.560 --> 00:01:01.839
+faster and more stable. But yeah, I think we're not there as
+
+00:01:01.840 --> 00:01:06.879
+Julia community itself. So let alone Emacs, integration
+
+00:01:06.880 --> 00:01:11.239
+with Emacs. The way I personally debug is mostly using,
+
+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?
+
+00:01:15.200 --> 00:01:21.679
+Emacs. The second question, can you call out something that
+
+00:01:21.680 --> 00:01:26.839
+Julia has that Emacs does not and which could benefit Emacs?
+
+00:01:26.840 --> 00:01:31.879
+Nothing stands out to me except the usual multi-threading
+
+00:01:31.880 --> 00:01:36.119
+and things like this. I don't necessarily see something
+
+00:01:36.120 --> 00:01:42.479
+that Julia has going on that DMX doesn't have, but I see some
+
+00:01:42.480 --> 00:01:45.839
+differences and approaches that I think are important,
+
+00:01:45.840 --> 00:01:49.759
+like the community. I think Julia is a very active and tight
+
+00:01:49.760 --> 00:01:54.159
+community. Julia uses Slack and is very, very active. I
+
+00:01:54.160 --> 00:01:56.559
+think he might say something like that, but it's maybe more
+
+00:01:56.560 --> 00:02:01.799
+on Reddit, IRC. JuliaCon is big and brings together lots and
+
+00:02:01.800 --> 00:02:05.159
+lots of people. And I think the sense of community is really
+
+00:02:05.160 --> 00:02:10.479
+powerful. It's very easy to essentially meet people that
+
+00:02:10.480 --> 00:02:12.919
+are interested in what we're building and interested in
+
+00:02:12.920 --> 00:02:15.999
+what we're doing and interested in Julian, our, you know,
+
+00:02:16.000 --> 00:02:21.239
+hacker spirit. I think Emacs is a very strong community.
+
+00:02:21.240 --> 00:02:24.279
+We're here on a Saturday talking about Emacs, which again
+
+00:02:24.280 --> 00:02:29.679
+proves that we are doing this. But I'd like to emphasize that
+
+00:02:29.680 --> 00:02:33.639
+the community is a really important aspect in Julia that I
+
+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?
+
+00:02:38.160 --> 00:02:46.519
+about Lisp syntax with Julia, like what we can do in Python.
+
+00:02:46.520 --> 00:02:52.359
+I don't think that's, I don't, I am not aware of any package
+
+00:02:52.360 --> 00:02:56.879
+that does that. I would bet that there's something there. I
+
+00:02:56.880 --> 00:03:01.519
+think that that's possible. Indeed, there used to be a Lisp
+
+00:03:01.520 --> 00:03:08.079
+interpreter in Julia itself until the latest release. The
+
+00:03:08.080 --> 00:03:12.039
+syntax parsing was done with a Lisp, it was called TemtoList
+
+00:03:12.040 --> 00:03:18.679
+indeed. I think this got rid, get rid of this for our more
+
+00:03:18.680 --> 00:03:23.039
+Julia-based solution that is faster and with better code
+
+00:03:23.040 --> 00:03:28.599
+provenance. I think that it should be possible to use the
+
+00:03:28.600 --> 00:03:33.319
+metaprogramming features in Julia to change the structure
+
+00:03:33.320 --> 00:03:38.159
+of your syntax to be a Lispy syntax. I do want to emphasize
+
+00:03:38.160 --> 00:03:43.879
+that Julia is heavily inspired by Lisp, so I wouldn't be
+
+00:03:43.880 --> 00:03:49.239
+surprised if if something like this were possible.
+
+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.240 --> 00:03:54.399
+So the next question is about Julia
+
+00:03:54.400 --> 00:03:58.199
+Snail. I found Julia REPL to be a little bit easier to set up
+
+00:03:58.200 --> 00:04:02.839
+and use. So I just settled on that. I should maybe revisit
+
+00:04:02.840 --> 00:04:05.999
+that. In particular, I use the Julia REPL with the vterm
+
+00:04:06.000 --> 00:04:10.959
+backend, which essentially makes a companion REPL to my
+
+00:04:10.960 --> 00:04:15.439
+scripts. And that works for me. I do think that the tooling
+
+00:04:15.440 --> 00:04:19.239
+uh, could be improved. I think there is definitely much room
+
+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?
+
+00:04:26.080 --> 00:04:31.639
+so we have data inspector for Julia REPL.
+
+00:04:31.640 --> 00:04:37.279
+I don't think so. I don't, is there any data inspector
+
+00:04:37.280 --> 00:04:40.439
+in for, for the Julia REPL that we can use in Emacs?
+
+00:04:40.440 --> 00:04:44.839
+I'm not sure. I don't think so.
+
+00:04:44.840 --> 00:04:47.799
+I think the way I look at data is
+
+00:04:47.800 --> 00:04:50.519
+essentially ignoring Emacs when encoded. It's just using the
+
+00:04:50.520 --> 00:04:56.839
+REPL. And again, with Julia REPL. So I'm not aware of any
+
+00:04:56.840 --> 00:05:00.479
+specialized tool And again, maybe this is, again, a good
+
+00:05:00.480 --> 00:05:04.279
+moment to emphasize that tooling, the Julia community
+
+00:05:04.280 --> 00:05:09.079
+clusters around VS Code. And there is tools like the, pretty
+
+00:05:09.080 --> 00:05:14.199
+much all the work with VS Code, unfortunately. And while
+
+00:05:14.200 --> 00:05:17.759
+there's a very, very decent Julia mode and Julia repo mode
+
+00:05:17.760 --> 00:05:21.439
+and Julia snail, there's definitely, definitely room for
+
+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?
+
+00:05:24.360 --> 00:05:27.759
+Next, we have a question about literate programming in
+
+00:05:27.760 --> 00:05:32.439
+Julia. I haven't done much of it with Org Babel or
+
+00:05:32.440 --> 00:05:37.079
+anything else. I haven't done much of it. I can say that Julia
+
+00:05:37.080 --> 00:05:40.719
+has developed a new iteration of notebooks called Pluto.
+
+00:05:40.720 --> 00:05:47.119
+Here I'm thinking about Jupyter notebooks. The Pluto
+
+00:05:47.120 --> 00:05:55.359
+notebooks for Julia try to remove a bunch of the pain points
+
+00:05:55.360 --> 00:06:00.439
+that Jupyter notebooks have, meaning you cannot easily
+
+00:06:00.440 --> 00:06:03.639
+commit them to Git or things like this.
+
+00:06:03.640 --> 00:06:09.279
+I haven't used them, but I know some people are very fond of
+
+00:06:09.280 --> 00:06:13.559
+them. And so I think that that's what some of the Julia
+
+00:06:13.560 --> 00:06:16.879
+community would use for notebooks. And I think they can
+
+00:06:16.880 --> 00:06:22.239
+interact with Emacs with no problem. And that would be a form
+
+00:06:22.240 --> 00:06:26.879
+of later programming. But if you can do it in Python, you can
+
+00:06:26.880 --> 00:06:32.119
+do it in Julia. I think there is no reason. And actually, you
+
+00:06:32.120 --> 00:06:35.839
+can take advantage of all this just-in-time or
+
+00:06:35.840 --> 00:06:38.239
+just-out-of-time compilation by keeping the same
+
+00:06:38.240 --> 00:06:45.199
+session. So I think it will be definitely a nice use case. So
+
+00:06:45.200 --> 00:06:49.199
+these are the questions that I see here. I'm going to scroll
+
+00:06:49.200 --> 00:06:52.759
+through the comments and see if there's something that I
+
+00:06:52.760 --> 00:06:57.319
+should say about comments. I'm excited people want to learn
+
+00:06:57.320 --> 00:07:02.519
+Julia. I have to say that if I want to do GPU computing
+
+00:07:02.520 --> 00:07:06.399
+nowadays, I find it much easier to do it with Julia than with
+
+00:07:06.400 --> 00:07:11.759
+CUDA. So I encourage people to look into that. And I do,
+
+00:07:11.760 --> 00:07:19.359
+again, I would like to share what makes me excited about
+
+00:07:19.360 --> 00:07:23.799
+Emacs, about this being open, being collaborative, being
+
+00:07:23.800 --> 00:07:26.399
+respectable with documentation is something that I find in
+
+00:07:26.400 --> 00:07:30.999
+Julia. So I think people that are excited about the same
+
+00:07:31.000 --> 00:07:35.279
+features will find a little bit of joy in working with Julia.
+
+00:07:35.280 --> 00:07:41.999
+I think I addressed what I have here. I don't know if there's
+
+00:07:42.000 --> 00:07:43.559
+anything else that I should add.
+
+00:07:43.560 --> 00:07:52.879
+It took me a minute to unmute there.
+
+00:07:52.880 --> 00:07:57.519
+No, I think that was awesome. And thank you so much.
+
+00:07:57.520 --> 00:08:00.119
+I guess I thought it would
+
+00:08:00.120 --> 00:08:06.279
+collapse that shared area on BBB, my mistake, on the stream,
+
+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.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.839
+questions and comments. And thank you again so much for your
+
+00:08:17.840 --> 00:08:23.199
+talk and getting us all excited to learn Julia. Thank you.
+
+00:08:23.200 --> 00:08:27.759
+Enjoy EmacsConf. And again, thanks so much for attending,
+
+00:08:27.760 --> 00:08:42.400
+for being EmacsConf. Thank you.
diff --git a/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt
new file mode 100644
index 00000000..b6e69c85
--- /dev/null
+++ b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt
@@ -0,0 +1,616 @@
+WEBVTT captioned by gabriele
+
+00:00:00.000 --> 00:00:02.359
+Hello, I'm very excited to tell you
+
+00:00:02.360 --> 00:00:03.679
+about shared philosophies
+
+00:00:03.680 --> 00:00:06.479
+between the Julia programming language and Emacs.
+
+00:00:06.480 --> 00:00:08.679
+While Julia and Emacs might look like
+
+00:00:08.680 --> 00:00:10.279
+different pieces of software,
+
+00:00:10.280 --> 00:00:13.439
+I think there is profound commonalities between the two.
+
+00:00:13.440 --> 00:00:16.359
+Let's start by introducing Julia.
+
+00:00:16.360 --> 00:00:19.719
+Julia is a high-level dynamic programming language.
+
+00:00:19.720 --> 00:00:21.679
+Julia is free and open source software
+
+00:00:21.680 --> 00:00:24.639
+and is used primarily for scientific computing.
+
+00:00:24.640 --> 00:00:27.039
+The reason Julia is used for scientific computing
+
+00:00:27.040 --> 00:00:29.679
+is that while Julia is high level
+
+00:00:29.680 --> 00:00:32.559
+and has a syntax that looks like Python or MATLAB,
+
+00:00:32.560 --> 00:00:34.559
+Julia can be high performance.
+
+00:00:34.560 --> 00:00:36.519
+I use it to develop climate models
+
+00:00:36.520 --> 00:00:38.479
+that run on hundreds of GPUs.
+
+00:00:38.480 --> 00:00:43.399
+Models that are traditionally developed with C, C++, or Fortran.
+
+00:00:43.400 --> 00:00:44.759
+But how is this possible?
+
+00:00:44.760 --> 00:00:46.799
+How can Julia be high performance
+
+00:00:46.800 --> 00:00:48.799
+but also high level at the same time?
+
+00:00:48.800 --> 00:00:50.424
+What makes Julia, Julia?
+
+00:00:50.425 --> 00:00:52.469
+Well, what makes Julia, Julia
+
+00:00:52.470 --> 00:00:54.719
+is the idea of multiple dispatch.
+
+00:00:54.720 --> 00:00:58.999
+Multiple dispatch is the concept where a function call is resolved
+
+00:00:59.000 --> 00:01:02.359
+by looking at the types of every single argument involved.
+
+00:01:02.360 --> 00:01:04.959
+So, let's explore this with this example.
+
+00:01:04.960 --> 00:01:07.719
+Here, I define a function add that takes two objects
+
+00:01:07.720 --> 00:01:09.159
+and sums them together.
+
+00:01:09.160 --> 00:01:11.879
+And I call add with two different types.
+
+00:01:11.880 --> 00:01:14.639
+First with just integers and second with floats.
+
+00:01:14.640 --> 00:01:17.559
+So, let's look at what this produces.
+
+00:01:17.560 --> 00:01:20.439
+Here is the output of add in Julia.
+
+00:01:20.440 --> 00:01:23.279
+So, first we have add, a function with one method.
+
+00:01:23.280 --> 00:01:24.839
+I'm going to explain this in a second.
+
+00:01:24.840 --> 00:01:28.719
+And then we have our return values 12 and 12.0.
+
+00:01:28.720 --> 00:01:30.799
+What we cannot see here is that
+
+00:01:30.800 --> 00:01:33.439
+Julia has specialized code
+
+00:01:33.440 --> 00:01:35.119
+for the two different function calls.
+
+00:01:35.120 --> 00:01:38.359
+For integers and for floating points.
+
+00:01:38.360 --> 00:01:42.239
+Let's make this more explicit by specifically providing
+
+00:01:42.240 --> 00:01:45.079
+a new method for the case with floating point.
+
+00:01:45.080 --> 00:01:47.599
+So here, now I have an add function
+
+00:01:47.600 --> 00:01:50.119
+specifically for floating point. Instead of taking
+
+00:01:50.120 --> 00:01:54.759
+A + B, this returns A exponent B. Let's call this.
+
+00:01:54.760 --> 00:01:56.799
+And what we can see here is that
+
+00:01:56.800 --> 00:01:58.319
+now we have two methods.
+
+00:01:58.320 --> 00:02:00.559
+So, we add a new method to the same function.
+
+00:02:00.560 --> 00:02:01.639
+This is a method that is
+
+00:02:01.640 --> 00:02:03.679
+specifically for floating points.
+
+00:02:03.680 --> 00:02:06.959
+And instead of having the value 12, we have 100.
+
+00:02:06.960 --> 00:02:09.039
+And this is where the trick lies.
+
+00:02:09.040 --> 00:02:13.879
+Julia compiles the most, um, specialized version
+
+00:02:13.880 --> 00:02:16.839
+that can be compiled. So, a version with integers,
+
+00:02:16.840 --> 00:02:19.199
+a version with floats. And in this,
+
+00:02:19.200 --> 00:02:22.679
+compiling is an actual compilation with LLVM
+
+00:02:22.680 --> 00:02:24.479
+with optimization and so on.
+
+00:02:24.480 --> 00:02:27.439
+This is not just ahead of time compilation.
+
+00:02:27.440 --> 00:02:30.719
+Soon as the Julia knows the type,
+
+00:02:30.720 --> 00:02:33.719
+a function is compiled if it's not compiled already
+
+00:02:33.720 --> 00:02:35.079
+and then it's used.
+
+00:02:35.080 --> 00:02:37.159
+When types are stable and well inferred,
+
+00:02:37.160 --> 00:02:40.079
+this can lead to code that is as performant
+
+00:02:40.080 --> 00:02:42.159
+or comparable to C and Fortran.
+
+00:02:42.160 --> 00:02:45.159
+So, this is what makes Julia, Julia.
+
+00:02:45.160 --> 00:02:48.439
+Multiple dispatch with just ahead of time compilation
+
+00:02:48.440 --> 00:02:49.719
+of highly efficient code.
+
+00:02:49.720 --> 00:02:53.439
+So now, what makes Emacs, Emacs?
+
+00:02:53.440 --> 00:02:56.679
+Well, in my opinion, what makes Emacs, Emacs
+
+00:02:56.680 --> 00:03:01.159
+is interactivity, extensibility, and community.
+
+00:03:01.160 --> 00:03:06.199
+And I claim that Julia has the same three.
+
+00:03:06.200 --> 00:03:09.079
+Interactivity, extensibility, and community
+
+00:03:09.080 --> 00:03:11.839
+are three key pillars for Julia.
+
+00:03:11.840 --> 00:03:14.599
+More specifically, Julia encourages a
+
+00:03:14.600 --> 00:03:17.079
+REPL-driven, introspective, interactive workflow.
+
+00:03:17.080 --> 00:03:19.879
+It's largely open to extension and modification
+
+00:03:19.880 --> 00:03:23.559
+to the point that most of Julia is written in Julia.
+
+00:03:23.560 --> 00:03:25.959
+And Julia has a thriving and welcoming community
+
+00:03:25.960 --> 00:03:28.799
+with lots of packages. So, let me showcase
+
+00:03:28.800 --> 00:03:31.079
+a little bit of this REPL-driven, introspective,
+
+00:03:31.080 --> 00:03:34.359
+interactive workflow with the hope that commonalities
+
+00:03:34.360 --> 00:03:36.759
+with Emacs will emerge naturally.
+
+00:03:36.760 --> 00:03:39.919
+So, let's start by opening a Julia REPL.
+
+00:03:39.920 --> 00:03:41.759
+Here, I have a Julia REPL.
+
+00:03:41.760 --> 00:03:44.399
+Let me give you a tour of the Julia REPL.
+
+00:03:44.400 --> 00:03:47.759
+So, the REPL comes with lots of useful features,
+
+00:03:47.760 --> 00:03:51.559
+from a shell to a package manager.
+
+00:03:51.560 --> 00:03:54.999
+So, for example, let's add the random package.
+
+00:03:55.000 --> 00:03:58.279
+Um, yeah, I have the random package.
+
+00:03:58.280 --> 00:03:59.279
+I can look at what's inside.
+
+00:03:59.280 --> 00:04:01.279
+We have the statistics with random
+
+00:04:01.280 --> 00:04:02.479
+in this particular environment.
+
+00:04:02.480 --> 00:04:05.719
+Environments are fully declarative.
+
+00:04:05.720 --> 00:04:08.039
+So here we have the dependencies of this environment.
+
+00:04:08.040 --> 00:04:10.239
+And I can explore in this manifest,
+
+00:04:10.240 --> 00:04:13.999
+the specific versions that are used.
+
+00:04:14.000 --> 00:04:17.719
+So we have a shell, we have a package manager,
+
+00:04:17.720 --> 00:04:20.559
+and then we have a very powerful help system.
+
+00:04:20.560 --> 00:04:24.199
+So, for example, I can ask for help for length.
+
+00:04:24.200 --> 00:04:26.639
+And here we can see we have, well,
+
+00:04:26.640 --> 00:04:30.999
+the help for length. Lots of information about
+
+00:04:31.000 --> 00:04:33.399
+how to call length, the expected return values,
+
+00:04:33.400 --> 00:04:36.119
+examples. And now you can probably start seeing that
+
+00:04:36.120 --> 00:04:37.759
+this is not that different from calling length.
+
+00:04:37.760 --> 00:04:42.119
+So this is the output for length,
+
+00:04:42.120 --> 00:04:44.999
+or for help for length in in Emacs.
+
+00:04:45.000 --> 00:04:47.959
+So we have help, and we can do more.
+
+00:04:47.960 --> 00:04:51.879
+We can even look at the source code for length.
+
+00:04:51.880 --> 00:04:57.079
+So now, what we can see here is that now, well,
+
+00:04:57.080 --> 00:04:58.919
+we cannot see because it's zoomed in
+
+00:04:58.920 --> 00:05:02.799
+because the font size is huge, but in this page here,
+
+00:05:02.800 --> 00:05:04.759
+we can see the implementation of length.
+
+00:05:04.760 --> 00:05:06.719
+It's this line here in the middle,
+
+00:05:06.720 --> 00:05:09.719
+or these few lines here in the middle.
+
+00:05:09.720 --> 00:05:12.079
+And as you... Let's do this again.
+
+00:05:12.080 --> 00:05:12.999
+As we can see here at the bottom,
+
+00:05:13.000 --> 00:05:13.799
+what we are looking at,
+
+00:05:13.800 --> 00:05:15.639
+this is the source code of Julia.
+
+00:05:15.640 --> 00:05:17.039
+We can change this.
+
+00:05:17.040 --> 00:05:20.039
+There's even a macro edit
+
+00:05:20.040 --> 00:05:22.759
+if you want to change its length.
+
+00:05:22.760 --> 00:05:24.599
+And yeah, I use the word macro.
+
+00:05:24.600 --> 00:05:28.639
+Julia supports metaprogramming.
+
+00:05:28.640 --> 00:05:30.359
+And actually metaprogramming is
+
+00:05:30.360 --> 00:05:32.079
+one of the key features in Julia.
+
+00:05:32.080 --> 00:05:33.639
+It's used extensively in the core,
+
+00:05:33.640 --> 00:05:36.399
+but it's also used extensively in packages,
+
+00:05:36.400 --> 00:05:40.079
+both to extend the Julia ecosystem and functionalities,
+
+00:05:40.080 --> 00:05:43.479
+but also to develop full domain specific languages.
+
+00:05:43.480 --> 00:05:47.239
+Some of the useful macros are, well, I don't know,
+
+00:05:47.240 --> 00:05:52.239
+like time. Here, we have a built-in
+
+00:05:52.240 --> 00:05:55.799
+basic performance tool in in in Julia.
+
+00:05:55.800 --> 00:06:00.479
+And I want to showcase more introspection, macros.
+
+00:06:00.480 --> 00:06:02.959
+But for that, I'm going to do it slightly different.
+
+00:06:02.960 --> 00:06:04.039
+I'm going to open a file
+
+00:06:04.040 --> 00:06:06.239
+example.jl where I define a
+
+00:06:06.240 --> 00:06:08.039
+function, or our
+
+00:06:08.040 --> 00:06:09.519
+function add, there was an asterisk
+
+00:06:09.520 --> 00:06:11.199
+and I will go back to that in a second.
+
+00:06:11.200 --> 00:06:15.239
+So now, I am going to include this this file,
+
+00:06:15.240 --> 00:06:18.199
+and I can call my function add, one and two,
+
+00:06:18.200 --> 00:06:22.639
+and we get three. And now, what I can do is this.
+
+00:06:22.640 --> 00:06:28.039
+I can look at what code gets compiled
+
+00:06:28.040 --> 00:06:31.359
+when I call my when I call 1 + 2.
+
+00:06:31.360 --> 00:06:33.359
+And here, now we can see
+
+00:06:33.360 --> 00:06:34.639
+that there is some integer stuff.
+
+00:06:34.640 --> 00:06:38.159
+But if I make this floating point,
+
+00:06:38.160 --> 00:06:40.239
+now the compiled code changes.
+
+00:06:40.240 --> 00:06:43.599
+Now, maybe assembly code
+
+00:06:43.600 --> 00:06:45.079
+is a little bit too hard to read,
+
+00:06:45.080 --> 00:06:48.639
+so I can look at the LLVM IR representation.
+
+00:06:48.640 --> 00:06:50.399
+In this case we can see that there is promotion.
+
+00:06:50.400 --> 00:06:52.239
+The promotion will probably go away
+
+00:06:52.240 --> 00:06:56.039
+if I make everything float. So this we have F add,
+
+00:06:56.040 --> 00:06:57.999
+floating point add for a double,
+
+00:06:58.000 --> 00:06:59.439
+but we can also look at
+
+00:06:59.440 --> 00:07:04.239
+the Julia lowered representation
+
+00:07:04.240 --> 00:07:06.079
+after the abstract syntax tree is produced.
+
+00:07:06.080 --> 00:07:07.919
+The reason I put this in a file is because
+
+00:07:07.920 --> 00:07:10.119
+now what I can do is I can change this.
+
+00:07:10.120 --> 00:07:14.079
+And now, one and two will be two.
+
+00:07:14.080 --> 00:07:16.879
+So this to me is very reminiscent
+
+00:07:16.880 --> 00:07:18.719
+of how I work in Emacs,
+
+00:07:18.720 --> 00:07:20.239
+where there is a global state
+
+00:07:20.240 --> 00:07:22.959
+that I can access and modify any time
+
+00:07:22.960 --> 00:07:27.159
+with no restrictions. And this happens in in Julia too.
+
+00:07:27.160 --> 00:07:29.559
+Typically, we don't want to modify functions
+
+00:07:29.560 --> 00:07:32.519
+that are in other packages or they are in base,
+
+00:07:32.520 --> 00:07:34.079
+but we can do that. For example,
+
+00:07:34.080 --> 00:07:37.639
+I can change what is plus for integers.
+
+00:07:37.640 --> 00:07:41.079
+And if I change with this plus
+
+00:07:41.080 --> 00:07:43.759
+and make it so that any two integers return zero,
+
+00:07:43.760 --> 00:07:46.319
+well, I can do this. This will break Julia because,
+
+00:07:46.320 --> 00:07:48.359
+well, Julia is built in Julia.
+
+00:07:48.360 --> 00:07:51.399
+So if we break this, well, nothing will work.
+
+00:07:51.400 --> 00:07:53.399
+But I can do that. This to me is one of
+
+00:07:53.400 --> 00:07:56.199
+the signs of the powerful, introspective,
+
+00:07:56.200 --> 00:07:58.479
+and powerful interactive type of workflows
+
+00:07:58.480 --> 00:07:59.279
+that Julia enables.
+
+00:07:59.280 --> 00:08:03.479
+Finally, I want to talk about the general registry.
+
+00:08:03.480 --> 00:08:06.399
+This is the equivalent of Melpa.
+
+00:08:06.400 --> 00:08:08.759
+It comes with with Julia.
+
+00:08:08.760 --> 00:08:11.119
+But this is very akin to Melpa.
+
+00:08:11.120 --> 00:08:14.479
+It's built upon Git essentially.
+
+00:08:14.480 --> 00:08:19.399
+It's collaborative, as relies heavily on GitHub, GitLab.
+
+00:08:19.400 --> 00:08:21.119
+It's heavily automated.
+
+00:08:21.120 --> 00:08:24.479
+And comes with lots and lots of tools and packages.
+
+00:08:24.480 --> 00:08:27.559
+What's beautiful about all these tools and packages
+
+00:08:27.560 --> 00:08:30.279
+is that in the same way many of Emacs packages
+
+00:08:30.280 --> 00:08:32.399
+just play nicely with each other
+
+00:08:32.400 --> 00:08:34.879
+without any input from the developers,
+
+00:08:34.880 --> 00:08:37.559
+the same is true for Julia packages.
+
+00:08:37.560 --> 00:08:40.679
+The Julia packages are highly composable,
+
+00:08:40.680 --> 00:08:42.879
+so two developers can develop
+
+00:08:42.880 --> 00:08:44.719
+two distinct packages
+
+00:08:44.720 --> 00:08:47.639
+that end up playing nicely together for free
+
+00:08:47.640 --> 00:08:51.879
+because of the intrinsic structure, intrinsic way
+
+00:08:51.880 --> 00:08:54.079
+Julia objects are built.
+
+00:08:54.080 --> 00:08:57.479
+So, with all of this, I also want to mention that
+
+00:08:57.480 --> 00:09:00.079
+the community, in addition to have all these packages,
+
+00:09:00.080 --> 00:09:02.599
+is highly active, highly collaborative.
+
+00:09:02.600 --> 00:09:06.159
+The community meets regularly on places like Slack,
+
+00:09:06.160 --> 00:09:08.199
+as opposed to the Emacs community
+
+00:09:08.200 --> 00:09:10.039
+that I'd say maybe meets on Reddit.
+
+00:09:10.040 --> 00:09:12.999
+So, with all of this, I want to thank you
+
+00:09:13.000 --> 00:09:16.560
+for your attention, enjoy Emacs, and enjoy Julia.
diff --git a/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt
new file mode 100644
index 00000000..009f023d
--- /dev/null
+++ b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt
@@ -0,0 +1,961 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:05.159
+I'm doing well. Thank you so much. I was supposed to chat and
+
+00:00:05.160 --> 00:00:08.799
+write down stuff in the etherpad, but you guys accommodated
+
+00:00:08.800 --> 00:00:12.439
+me very nicely, swiftly, efficiently, in spite of my quirky
+
+00:00:12.440 --> 00:00:16.599
+last minute requests. Yeah, but that's okay because, well,
+
+00:00:16.600 --> 00:00:19.479
+it's funny that you talk about accommodating you and doing
+
+00:00:19.480 --> 00:00:22.159
+all the things we need to do because, frankly, your talk is
+
+00:00:22.160 --> 00:00:24.199
+about getting things done and you've mentioned the book,
+
+00:00:24.200 --> 00:00:27.439
+obviously, but the philosophy of getting things done is
+
+00:00:27.440 --> 00:00:30.759
+ultimately what we've been applying with Emacs Conf so that
+
+00:00:30.760 --> 00:00:33.759
+when we have curveballs thrown at us, like you've done right
+
+00:00:33.760 --> 00:00:36.399
+now, we can accommodate them because we made sure that
+
+00:00:36.400 --> 00:00:41.039
+everything else was done. So we'll move to questions and I
+
+00:00:41.040 --> 00:00:45.039
+invite viewers to go to the pad, to the etherpad that is on IRC
+
+00:00:45.040 --> 00:00:48.199
+and also on the talk page and put your questions over there.
+
+00:00:48.200 --> 00:00:51.559
+But first I wanted to make sure, Bala, that if you had
+
+00:00:51.560 --> 00:00:54.639
+anything that you could not include in your presentation,
+
+00:00:54.640 --> 00:01:00.159
+just to give you some time to mention them now if you want. I
+
+00:01:00.160 --> 00:01:09.119
+think I mentioned most of what I wanted to convey. I wanted to
+
+00:01:09.120 --> 00:01:12.479
+keep it general with whichever format people are
+
+00:01:12.480 --> 00:01:15.719
+comfortable with, whether it's Org Mode, whether it's
+
+00:01:15.720 --> 00:01:21.599
+plain text, whether it is docx. In fact, I was speaking to one
+
+00:01:21.600 --> 00:01:25.799
+of my friends and he said, Hey, I use Google Sheets to note
+
+00:01:25.800 --> 00:01:28.679
+down everything, all the tasks that are coming. I said, suit
+
+00:01:28.680 --> 00:01:33.439
+yourself, whatever it is. So, in that way, this methodology
+
+00:01:33.440 --> 00:01:37.359
+or whatever, the way which we follow is quite flexible. The
+
+00:01:37.360 --> 00:01:41.679
+system is quite flexible in whichever way you want to use it.
+
+00:01:41.680 --> 00:01:46.919
+go ahead and use it. But start emptying your teacup. That
+
+00:01:46.920 --> 00:01:50.599
+will be my first and foremost. I have nothing else to add per
+
+00:01:50.600 --> 00:01:54.879
+se. Okay, cool. So we'll start with the first question and
+
+00:01:54.880 --> 00:01:58.279
+I'll be reading the questions to you. And just so we know, we
+
+00:01:58.280 --> 00:02:01.079
+have about eight minutes of Q&A until we need to move to the
+
+00:02:01.080 --> 00:02:03.553
+next talk. All right, so first question.
+
+NOTE Q: What is TRIZ?
+
+00:02:03.554 --> 00:02:06.399
+What is TRIZ? Okay,
+
+00:02:06.400 --> 00:02:11.679
+this is a Russian methodology. It's pardon my, I mean poor
+
+00:02:11.680 --> 00:02:16.679
+Russian, but it translates to theory of inventive problem
+
+00:02:16.680 --> 00:02:21.919
+solving. So, that's what it translates to. What it is, is it
+
+00:02:21.920 --> 00:02:26.119
+is said that all the inventions problem solved so far in
+
+00:02:26.120 --> 00:02:30.239
+humanity. If you can categorize them, they fall into
+
+00:02:30.240 --> 00:02:36.159
+exactly 40 principles. That's one of the core tenets in
+
+00:02:36.160 --> 00:02:40.959
+theory of inventive problem solving. Also, that creative
+
+00:02:40.960 --> 00:02:46.319
+people have a process they follow. and in defining a problem
+
+00:02:46.320 --> 00:02:49.839
+and solving a problem. So, this is what I was trained in a
+
+00:02:49.840 --> 00:02:55.359
+company that I work for and I started using it and started
+
+00:02:55.360 --> 00:02:59.199
+applying it. So, creative process starts with defining a
+
+00:02:59.200 --> 00:03:02.799
+problem and solving a problem in a very systematic manner
+
+00:03:02.800 --> 00:03:06.239
+and you can be as creative as the creatives that we know about
+
+00:03:06.240 --> 00:03:11.759
+as the methodology talks about. So, that is what TRIZ is,
+
+00:03:11.760 --> 00:03:15.639
+Theory of Inventive Problem Solving. There is lot of open
+
+00:03:15.640 --> 00:03:19.799
+source literature like we have in Emacs. It is the same way
+
+00:03:19.800 --> 00:03:24.159
+with TRIZ, people share very generous and you can learn
+
+00:03:24.160 --> 00:03:29.879
+about it. what it can be useful for what in the core of our talk
+
+00:03:29.880 --> 00:03:34.679
+also is that many times we face conflicts, that is, I don't
+
+00:03:34.680 --> 00:03:38.719
+want to spend a lot of time, you know, figuring out a system
+
+00:03:38.720 --> 00:03:42.919
+like this. However, I want everything in one place, you
+
+00:03:42.920 --> 00:03:46.839
+know, how can that happen? So start little by little is one
+
+00:03:46.840 --> 00:03:50.399
+suggestion I have. Don't And this is also a contradiction we
+
+00:03:50.400 --> 00:03:55.199
+have, right? So, we need to spend a lot of time to set up things
+
+00:03:55.200 --> 00:03:58.559
+before we can start organizing our life. But there's not a
+
+00:03:58.560 --> 00:04:01.599
+lot of time because we haven't organized our life. So, we
+
+00:04:01.600 --> 00:04:04.839
+don't have that's a conundrum or a contradiction. That's
+
+00:04:04.840 --> 00:04:09.479
+what TRIZ methodology is about to identify that this is a
+
+00:04:09.480 --> 00:04:15.039
+contradiction and we have to resolve it not compromise. So,
+
+00:04:15.040 --> 00:04:18.319
+resolve it in a manner that gives you enough time to set up a
+
+00:04:18.320 --> 00:04:22.439
+system and enough time, free time to enjoy your life or focus
+
+00:04:22.440 --> 00:04:26.559
+on a project and be present when you're working with
+
+00:04:26.560 --> 00:04:31.439
+something. So, that's what the crux of the methodology is.
+
+00:04:31.440 --> 00:04:34.359
+Okay, splendid answer. Thank you. Moving on to the next one.
+
+NOTE Q: Do you agree that learning similar but different things again and again is ultimately wasted bandwidth? What can we do as technologists to push back against this?
+
+00:04:34.360 --> 00:04:37.199
+Thank you for this talk. Very interesting. One of the things
+
+00:04:37.200 --> 00:04:40.199
+that frustrates me about modern web development is the rate
+
+00:04:40.200 --> 00:04:43.279
+of churn when it comes to useful knowledge. I think Emacs can
+
+00:04:43.280 --> 00:04:45.679
+help to counteract against this by building lasting tools
+
+00:04:45.680 --> 00:04:48.279
+where mastery can be built. Do you agree that learning
+
+00:04:48.280 --> 00:04:50.799
+similar but different things again and again is ultimately
+
+00:04:50.800 --> 00:04:54.079
+wasted bandwidth? What can we do as technologists to push
+
+00:04:54.080 --> 00:05:00.159
+back against this? Yeah, this is an interesting one
+
+00:05:00.160 --> 00:05:04.879
+because, I mean, I'm like everyone else where a new package
+
+00:05:04.880 --> 00:05:09.439
+shows up. I mentioned that in my talk also, the first
+
+00:05:09.440 --> 00:05:12.879
+introduction. Sajajo's newsletter is amazing. It has all
+
+00:05:12.880 --> 00:05:15.599
+these new things coming up and new developments coming up.
+
+00:05:15.600 --> 00:05:18.879
+Same thing with web dev, I guess, you have new things coming
+
+00:05:18.880 --> 00:05:25.519
+up. So you want to learn that new thing. However, you need to
+
+00:05:25.520 --> 00:05:31.559
+also be aware that there are so many other projects and
+
+00:05:31.560 --> 00:05:37.879
+hobbies or life that's also waiting for you. And it's not a
+
+00:05:37.880 --> 00:05:42.799
+balancing act, but if you if you pay attention and be present
+
+00:05:42.800 --> 00:05:46.199
+and give whatever is in front of you, it's full attention.
+
+00:05:46.200 --> 00:05:50.959
+Then look back and connect. That's an interesting way,
+
+00:05:50.960 --> 00:05:55.759
+because hindsight is 20 20. Use it to your advantage. So my I
+
+00:05:55.760 --> 00:05:59.679
+don't know, I don't want to push back against this because
+
+00:05:59.680 --> 00:06:02.879
+some of it is just amazing because it thinks that you think is
+
+00:06:02.880 --> 00:06:05.759
+a waste of time and it's a distraction right now. could
+
+00:06:05.760 --> 00:06:09.719
+potentially be. I'm not saying it will be because there are
+
+00:06:09.720 --> 00:06:13.359
+things that are truly a waste of time that could truly
+
+00:06:13.360 --> 00:06:17.250
+potentially tie back to something and be really helpful.
+
+NOTE org-mode export, CSS, WeasyPrint
+
+00:06:17.251 --> 00:06:22.039
+I can give you an example from our Emacs part of my life. I was
+
+00:06:22.040 --> 00:06:27.839
+experimenting with CSS and Cascade style sheets and how I
+
+00:06:27.840 --> 00:06:34.599
+can customize it to use it in org mode export. For me at the
+
+00:06:34.600 --> 00:06:38.639
+time, it seemed like a waste of time. I was spending so much
+
+00:06:38.640 --> 00:06:42.599
+time. Then I parked it. I didn't do much about it later. But
+
+00:06:42.600 --> 00:06:47.319
+then one of my students said, "Your slides are too bulky for me
+
+00:06:47.320 --> 00:06:49.588
+to scroll through to get to exactly what I am looking for."
+
+00:06:49.589 --> 00:06:55.319
+I was using the reveal HTML and I used to pass on the link
+
+00:06:55.320 --> 00:07:00.999
+before. And the student sort of hinted at a handout. And now
+
+00:07:01.000 --> 00:07:05.319
+that's not easy with the RevealJS framework. It's rather
+
+00:07:05.320 --> 00:07:08.439
+tricky. At least I couldn't figure it out. but then it
+
+00:07:08.440 --> 00:07:10.879
+occurred to me that, hey, wait a second i've already looked at
+
+00:07:10.880 --> 00:07:15.799
+this CSS thing and maybe that'll help. It did help. I can
+
+00:07:15.800 --> 00:07:18.995
+drop in the name of the tool that I use now.
+
+00:07:18.996 --> 00:07:23.016
+It's called WeasyPrint uh let me use the uh
+
+00:07:23.017 --> 00:07:24.877
+i don't know if some...
+
+00:07:24.878 --> 00:07:32.100
+If you can look it up, W-E-A-S-Y print.
+
+00:07:32.101 --> 00:07:32.519
+That's what it's called. And that's
+
+00:07:32.520 --> 00:07:36.399
+mighty useful. That's really, really useful. You can
+
+00:07:36.400 --> 00:07:40.919
+customize it. You can change everything. I think I can even,
+
+00:07:40.920 --> 00:07:44.519
+I'll probably even share the code later on. It's really
+
+00:07:44.520 --> 00:07:48.959
+useful and I've been able to, so what seemed like a waste of
+
+00:07:48.960 --> 00:07:52.039
+time is actually something that became useful later on. But
+
+00:07:52.040 --> 00:07:55.519
+there are several other things I have truly wasted and it's
+
+00:07:55.520 --> 00:07:58.439
+not been useful because I couldn't connect the dots. So,
+
+00:07:58.440 --> 00:08:06.239
+perhaps the, let's say, wasteful of time so that you look at
+
+00:08:06.240 --> 00:08:09.159
+something and see how to connect back like the Zettelkasten
+
+00:08:09.160 --> 00:08:12.839
+that everybody talks about. I do not use it, but I like the
+
+00:08:12.840 --> 00:08:15.399
+idea that you look at it keeping in mind that you could
+
+00:08:15.400 --> 00:08:19.359
+probably connect to something later on. Perhaps, just try
+
+00:08:19.360 --> 00:08:24.519
+it out. OK, great, Bala. Sadly, we are a little short on time
+
+00:08:24.520 --> 00:08:27.159
+to answer all the questions that we have. I see three
+
+00:08:27.160 --> 00:08:31.039
+questions currently that can still be answered, and I don't
+
+00:08:31.040 --> 00:08:33.919
+think any of them would be answerable within just one
+
+00:08:33.920 --> 00:08:37.559
+minute. So what I suggest we do, Bala, feel free. Do you have
+
+00:08:37.560 --> 00:08:40.919
+access to the pad on your end? Yes, I do. I do. I have it here.
+
+00:08:40.920 --> 00:08:43.707
+Okay, cool. I'm putting the link on BBB just in case you need
+
+00:08:43.708 --> 00:08:44.919
+to review it.
+
+00:08:44.920 --> 00:08:47.039
+We're going to leave the room open. By the way,
+
+00:08:47.040 --> 00:08:49.399
+if anyone in the crowd wants to join so that they can ask the
+
+00:08:49.400 --> 00:08:51.919
+question directly with their voice to Bala, feel free to do
+
+00:08:51.920 --> 00:08:56.119
+so. The links are on the website. But Bala, if no one shows up,
+
+00:08:56.120 --> 00:08:58.559
+if you could just answer the three questions that we haven't
+
+00:08:58.560 --> 00:09:01.239
+covered yet, actually. Well, three questions because
+
+00:09:01.240 --> 00:09:04.359
+Sacha just put the link right there. That'd be lovely. And
+
+00:09:04.360 --> 00:09:06.080
+we'll make sure that the entire Q&A
+
+00:09:06.120 --> 00:09:07.839
+finds its place into the
+
+00:09:07.840 --> 00:09:10.719
+website afterwards. How does that sound for you? Yeah,
+
+00:09:10.720 --> 00:09:14.559
+sounds great. Thank you so much. I'll do make sure that I will
+
+00:09:14.560 --> 00:09:17.159
+have the answers there, but I'm going to wait here for some
+
+00:09:17.160 --> 00:09:20.559
+time so that somebody can join. Okay, sure. Any last word in
+
+00:09:20.560 --> 00:09:26.799
+10 seconds for the public? Well, empty your teacup and enjoy
+
+00:09:26.800 --> 00:09:27.199
+your life.
+
+00:09:27.200 --> 00:09:29.879
+Splendid. Thank you so much, Bala, for coming
+
+00:09:29.880 --> 00:09:32.359
+again to EmacsConf this year, and hopefully we'll be seeing
+
+00:09:32.360 --> 00:09:36.439
+you next year with further talks to discuss. Yeah, thank you
+
+00:09:36.440 --> 00:09:39.559
+so much. All right, and right now we'll be moving to the next
+
+00:09:39.560 --> 00:09:42.039
+talk of the day in about five seconds. Thank you again, Bala,
+
+00:09:42.040 --> 00:09:46.799
+and see you later. Bye.
+
+00:09:46.800 --> 00:09:49.399
+All right, we are a fair. So, Bala, I'll need to move to make
+
+00:09:49.400 --> 00:09:51.759
+sure that everything is working for the next talk. So, do as
+
+00:09:51.760 --> 00:09:55.320
+we said, and everything will be fine. Okay.
+
+00:09:55.333 --> 00:09:58.879
+Okay, bye-bye, Bala. Bye. Bye, Leo.
+
+00:09:58.880 --> 00:10:15.119
+Okay.
+
+00:10:15.120 --> 00:10:21.679
+Hello everyone, do you want me to answer a question? I'll be
+
+00:10:21.680 --> 00:10:23.399
+happy to answer that. You want to discuss something? You
+
+00:10:23.400 --> 00:10:27.759
+want to share something? I'm here for that. Please let me
+
+00:10:27.760 --> 00:11:06.479
+know.
+
+00:11:06.480 --> 00:11:10.599
+I'll hang around for another 5 to 10 minutes. Please let me
+
+00:11:10.600 --> 00:11:14.439
+know if you have any questions or if you're the ones who ask
+
+00:11:14.440 --> 00:11:36.739
+those questions also, please let me know.
+
+00:11:36.740 --> 00:11:38.560
+Are you there?
+
+00:11:38.625 --> 00:11:44.359
+Hi, yes. Some tips I've found for getting
+
+00:11:44.360 --> 00:11:50.399
+things done with an image for this stuff is like for
+
+00:11:50.400 --> 00:11:53.919
+separations you have like your Zettelkasten, you're
+
+00:11:53.920 --> 00:11:56.799
+getting things done, and then beyond that you have like
+
+00:11:56.800 --> 00:12:00.559
+dailies and global.
+
+00:12:00.560 --> 00:12:06.439
+Daily Zettelkasten would be journaling. Okay, okay. And
+
+00:12:06.440 --> 00:12:10.479
+then, like, global or daily getting things done, I
+
+00:12:10.480 --> 00:12:11.919
+generally like doing it in a week.
+
+00:12:11.920 --> 00:12:13.800
+And then splitting the,
+
+00:12:13.833 --> 00:12:16.120
+like, core tasks, secondary tasks,
+
+00:12:16.121 --> 00:12:17.220
+unplanned tasks,
+
+00:12:17.221 --> 00:12:22.079
+because those are good categories.
+
+00:12:22.080 --> 00:12:26.439
+I like what you're doing.
+
+00:12:26.440 --> 00:12:32.199
+Sorry? Do you do things like that at all?
+
+00:12:32.200 --> 00:12:38.279
+Or are there separations like with Zettelkasten
+
+00:12:38.280 --> 00:12:45.839
+versus the Getting Things Done?
+
+00:12:45.840 --> 00:12:52.279
+That's very interesting, yes. Daily log and weekly log,
+
+00:12:52.280 --> 00:12:56.800
+that's really helpful. I've also been trying to do that but
+
+00:12:56.821 --> 00:13:02.279
+not being able to successfully do a daily log plus a weekly
+
+00:13:02.280 --> 00:13:06.879
+log. So I gave up on the daily log because it seemed to be like a
+
+00:13:06.880 --> 00:13:12.479
+lot of overhead for me, so I just switch to a weekly review
+
+00:13:12.480 --> 00:13:16.759
+where I would log what's going on and how it is. But it's also
+
+00:13:16.760 --> 00:13:19.759
+interesting to see how it connects back to something that
+
+00:13:19.760 --> 00:13:22.639
+we've already worked on, or we've already learned
+
+00:13:22.640 --> 00:13:26.039
+somewhere, which is essentially using the ZIP and custom
+
+00:13:26.040 --> 00:13:30.239
+method. I probably want to try that a bit later on also.
+
+00:13:30.240 --> 00:13:34.199
+That's a great suggestion, nice idea. Oh, so some of the
+
+00:13:34.200 --> 00:13:38.039
+reason for the separation would be with the daily log, like,
+
+00:13:38.040 --> 00:13:42.839
+for instance, the title for the journal would be, Audinet
+
+00:13:42.840 --> 00:13:47.359
+would be the day, and it starts blank. And then, so if you have
+
+00:13:47.360 --> 00:13:50.159
+a straight thought, if you know it can go straight to your
+
+00:13:50.160 --> 00:13:53.479
+Zettelkasten, it goes into your Zettelkasten. If you don't
+
+00:13:53.480 --> 00:13:57.679
+know where it goes, it goes into your journal. And then same
+
+00:13:57.680 --> 00:14:01.839
+thing for like the week, is like your weeks always start
+
+00:14:01.840 --> 00:14:04.879
+emptying, so like if you have your core tasks, like if it
+
+00:14:04.880 --> 00:14:08.119
+spells beyond three, it's probably not a core task. So it
+
+00:14:08.120 --> 00:14:11.359
+gives you the idea of like, did I actually do what I wanted to
+
+00:14:11.360 --> 00:14:16.999
+yesterday, rather than getting 20 things done that I don't
+
+00:14:17.000 --> 00:14:22.159
+really care about that much. Yes. True, true, true. Very
+
+00:14:22.160 --> 00:14:23.759
+true. Yeah.
+
+00:14:23.760 --> 00:14:30.959
+Nice, nice talk. Thank you so much for sharing that. I've
+
+00:14:30.960 --> 00:14:35.279
+been a, let's say a start and many times I've started on
+
+00:14:35.280 --> 00:14:40.799
+Zettelkasten, you know, with little notes. They have these
+
+00:14:40.800 --> 00:14:43.399
+fleeting notes and permanent notes. I've tried many of
+
+00:14:43.400 --> 00:14:48.199
+those, but somehow it's not sticky for me. I've not been
+
+00:14:48.200 --> 00:14:51.399
+able to get rid of that.
+
+00:14:51.400 --> 00:14:55.919
+Yeah, I've got multiple attempts of using these systems,
+
+00:14:55.920 --> 00:15:01.999
+becoming too big or complex, like I don't know where to put a
+
+00:15:02.000 --> 00:15:06.679
+new piece of information, so then I throw the whole system
+
+00:15:06.680 --> 00:15:14.639
+away. So, this is my favorite iteration that I've done so
+
+00:15:14.640 --> 00:15:23.399
+far. I'm sure it'll change with time. Okay, okay, okay, I
+
+00:15:23.400 --> 00:15:25.079
+see. Yeah, I...
+
+NOTE Daily log
+
+00:15:25.080 --> 00:15:31.759
+I like the way the daily log works, that it has an embedded,
+
+00:15:31.760 --> 00:15:36.799
+you know, you just have a name stamp and then you embed
+
+00:15:36.800 --> 00:15:40.479
+something from another project. And when you go to the
+
+00:15:40.480 --> 00:15:44.559
+project page, the same thing shows up there in the log also. I
+
+00:15:44.560 --> 00:15:48.679
+wanted to take that feature and have that in my optimal
+
+00:15:48.680 --> 00:15:53.399
+setup. I'm not well versed enough to get that set up because I
+
+00:15:53.400 --> 00:15:56.799
+like that with that. Anything I enter in the daily log should
+
+00:15:56.800 --> 00:16:00.359
+show up in my project log also and vice versa. I want to
+
+00:16:00.360 --> 00:16:04.799
+execute on my project. I need that notes where I'm looking
+
+00:16:04.800 --> 00:16:10.599
+for. That's a key feature of that is with logseq you just have
+
+00:16:10.600 --> 00:16:14.160
+a button that says go to today. So you don't think about it and
+
+00:16:14.161 --> 00:16:18.060
+it always starts empty. It's that blank sheet that's always
+
+00:16:18.061 --> 00:16:23.079
+confirming you want the things that I used that before.
+
+00:16:23.080 --> 00:16:26.360
+One of the things I really wanted was, I want this,
+
+00:16:26.397 --> 00:16:29.198
+but I want it for Getting Things Done on my journal.
+
+00:16:29.199 --> 00:16:36.279
+I want two separate ones.
+
+00:16:36.280 --> 00:16:45.319
+Yeah, I like the, also I'm trying to see how to create pages
+
+00:16:45.320 --> 00:16:51.119
+quickly from within Org Mode. I know we can do the square
+
+00:16:51.120 --> 00:16:55.879
+bracket thing and enter and it should go into a new page. but
+
+00:16:55.880 --> 00:17:00.879
+it's not as seamless as in logseq or obsidian i'm trying to
+
+00:17:00.880 --> 00:17:06.239
+see how which way do i do that quickly so that you don't spend
+
+00:17:06.240 --> 00:17:10.439
+time on organizing once you have the bigger setup of the
+
+00:17:10.440 --> 00:17:14.959
+folder structures and the to do then it's easier to
+
+00:17:14.960 --> 00:17:18.599
+integrate it but if i'm starting from a business point of
+
+00:17:18.600 --> 00:17:22.679
+view it's rather tough for them to set it all up because the
+
+00:17:22.680 --> 00:17:27.679
+setup costs are very high in terms of system first and then
+
+00:17:27.680 --> 00:17:30.639
+start with this. Or like you said, you know we could also
+
+00:17:30.640 --> 00:17:33.759
+start with a blank sheet and then start filling it up and then
+
+00:17:33.760 --> 00:17:39.159
+see how to link up things or move it around so that it fits into
+
+00:17:39.160 --> 00:17:44.719
+your larger system or evolve a system as it goes. Don't start
+
+00:17:44.720 --> 00:17:47.959
+with the system in mind, but evolve it because it then fits
+
+00:17:47.960 --> 00:17:52.559
+into how you are rather than the you trying to adapt to the
+
+00:17:52.560 --> 00:17:53.159
+system.
+
+NOTE Capturing
+
+00:17:53.160 --> 00:18:00.559
+So, Denote and org-roam, they'll have a feature, like the
+
+00:18:00.560 --> 00:18:05.199
+note, you have a command called, let's see, create or
+
+00:18:05.200 --> 00:18:09.479
+existing note, and org-roam has an equivalent to that, and
+
+00:18:09.480 --> 00:18:14.999
+what that, you need to consult with that, as you are browsing
+
+00:18:15.000 --> 00:18:19.279
+your notes, you see that, and so if you're making a new note,
+
+00:18:19.280 --> 00:18:23.119
+power generation or something like that you'll easily see
+
+00:18:23.120 --> 00:18:27.799
+if you have any notes that are in power generation or like
+
+00:18:27.800 --> 00:18:30.839
+let's say you have something in power and if you don't you
+
+00:18:30.840 --> 00:18:34.079
+just go down to where you're just you know you don't have
+
+00:18:34.080 --> 00:18:39.599
+anything selected or so it's your what's in your uh what your
+
+00:18:39.600 --> 00:18:46.719
+current so you're not pre-selecting something existing
+
+00:18:46.720 --> 00:18:51.599
+and voila now you have a file And then you have consult so you
+
+00:18:51.600 --> 00:18:57.879
+can preview them as you move up and down the list.
+
+00:18:57.880 --> 00:19:02.319
+And then you also got Emacs
+
+00:19:02.320 --> 00:19:10.719
+Org Capture to just pop up a template
+
+00:19:10.720 --> 00:19:16.599
+capture buffer that is blank that you can tell to go into
+
+00:19:16.600 --> 00:19:20.919
+something like a journal or a GTD inbox.
+
+00:19:20.920 --> 00:19:27.279
+And yeah, this allows you to just make it like a specific
+
+00:19:27.280 --> 00:19:30.999
+buffer to do that specific task. I think Protesilaos has a
+
+00:19:31.000 --> 00:19:35.479
+video about how to make that into just a pop-up window. Like
+
+00:19:35.480 --> 00:19:41.519
+for instance, you're in your browser, you pop it up, Uh, jot
+
+00:19:41.520 --> 00:19:49.599
+down your task, press enter, and it's gone. Hmm, okay. Okay,
+
+NOTE Note silos
+
+00:19:49.600 --> 00:19:54.919
+okay, makes sense, makes sense. Yeah, for me, I wanted to try
+
+00:19:54.920 --> 00:20:01.079
+denote, but my folder structure, I found it very difficult
+
+00:20:01.080 --> 00:20:04.559
+to move it to a denote kind of a structure where the folder
+
+00:20:04.560 --> 00:20:08.519
+hierarchy is not as important because all nodes are treated
+
+00:20:08.520 --> 00:20:12.639
+the same. But for me, because I'm focusing on a project, I
+
+00:20:12.640 --> 00:20:17.079
+need only the project files show up. It was tricky for me to,
+
+00:20:17.080 --> 00:20:20.599
+because sometimes I share the folder with my colleagues and
+
+00:20:20.600 --> 00:20:24.519
+who are not on Emacs or more. So I can't show them all the
+
+00:20:24.520 --> 00:20:28.879
+files, all the notes. I just want that folder to be shared and
+
+00:20:28.880 --> 00:20:32.439
+ignore the todo.org that is there because it's not readable
+
+00:20:32.440 --> 00:20:37.679
+for them. So, I find it easier to share a folder level or a
+
+00:20:37.680 --> 00:20:41.639
+project level and that's why I stuck to this format which is a
+
+00:20:41.640 --> 00:20:46.639
+hierarchy of folders with the to-do inside those folders.
+
+00:20:46.640 --> 00:20:49.719
+That works very well for me, particularly keeping in mind
+
+00:20:49.720 --> 00:20:52.479
+that I need to share some folders sometimes with my
+
+00:20:52.480 --> 00:20:57.439
+colleagues. Whereas Denote with a flat structure or
+
+00:20:57.440 --> 00:21:01.919
+Roam with a flat structure, I find it very tricky to do that.
+
+00:21:01.920 --> 00:21:06.079
+With Denote, you can actually have, there's a feature
+
+00:21:06.080 --> 00:21:07.759
+called silos that will
+
+00:21:07.760 --> 00:21:13.199
+allow you to do both and I think you can make customized
+
+00:21:13.200 --> 00:21:17.959
+commands to go that work only in specific silos. I haven't
+
+00:21:17.960 --> 00:21:20.919
+messed around to it. too much with them. I don't think org run
+
+00:21:20.920 --> 00:21:24.719
+has anything like that though. Yes, I don't think they have
+
+00:21:24.720 --> 00:21:28.239
+that. But I remember seeing silos. Maybe I should give it
+
+00:21:28.240 --> 00:21:32.119
+another spin and see if that works. Because if it can solve my
+
+00:21:32.120 --> 00:21:36.519
+creating new node quickly from the denote part itself while
+
+00:21:36.520 --> 00:21:40.439
+I'm writing the nodes itself rather than go through the R
+
+00:21:40.440 --> 00:21:45.439
+capture. That will really help me in linking back and seeing
+
+00:21:45.440 --> 00:21:49.399
+how it maps to another project that I've already worked on
+
+00:21:49.400 --> 00:21:53.999
+from an archive and then bring it there. I think that's a good
+
+00:21:54.000 --> 00:21:57.639
+idea. I'll look at silos again. Also, with the silos, let's
+
+00:21:57.640 --> 00:22:03.719
+say you're going to use ripgrep on the directory, you could
+
+00:22:03.720 --> 00:22:07.799
+intentionally keep your Zettelkasten and your journal
+
+00:22:07.800 --> 00:22:13.159
+separated. in different folders, like, yeah. So that,
+
+00:22:13.160 --> 00:22:19.039
+like, if you direct them, or if you wanted to share folder by
+
+00:22:19.040 --> 00:22:23.399
+folder basis, yeah, you don't have to be the all-in or
+
+00:22:23.400 --> 00:22:30.759
+nothing approach. Yeah, that works. That works.
+
+00:22:30.760 --> 00:22:35.119
+Excellent.
+
+00:22:35.120 --> 00:22:37.839
+OK.
+
+00:22:37.840 --> 00:22:44.159
+Well, thank you so much for your time and for sharing what is
+
+00:22:44.160 --> 00:22:47.919
+really helpful for me. I hope the talk was useful for you.
+
+00:22:47.920 --> 00:22:53.839
+Yep. Thanks for sharing. Have fun with the rest of the Emacs
+
+00:22:53.840 --> 00:23:00.799
+camp. Okay. All right. Then see you then. Happy Emacs month
+
+00:23:00.800 --> 00:23:06.200
+to you too. Okay. Bye. Bye.
diff --git a/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt
new file mode 100644
index 00000000..1b100ff2
--- /dev/null
+++ b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+
+00:00:00.300 --> 00:01:33.849
+Introduction
+
+00:01:35.350 --> 00:01:46.474
+What is a skill?
+
+00:01:47.424 --> 00:02:09.890
+Why should you learn a new skill?
+
+00:02:11.040 --> 00:02:35.174
+What skills should you learn?
+
+00:02:35.974 --> 00:03:15.424
+What stops you from learning new skills?
+
+00:03:16.274 --> 00:04:40.374
+Empty your teacup
+
+00:04:40.424 --> 00:06:33.274
+Getting Things Done
+
+00:06:33.724 --> 00:07:32.740
+Archive
+
+00:07:33.290 --> 00:10:02.524
+Multiple steps
+
+00:10:02.874 --> 00:10:37.674
+Multiple projects
+
+00:10:37.874 --> 00:11:20.274
+What if the project stops before completion?
+
+00:11:20.974 --> 00:12:16.990
+What if you successfully complete the project?
+
+00:12:18.140 --> 00:12:53.519
+What if the project is ongoing and doesn't really end?
+
+00:12:54.320 --> 00:16:01.640
+What if you forget to visit the TODO files?
+
+00:16:02.740 --> 00:18:36.007
+Planning for the future
+
+00:18:36.957 --> 00:19:02.859
+Summary
+
+00:19:03.210 --> 00:19:36.650
+References
diff --git a/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt
new file mode 100644
index 00000000..81bac250
--- /dev/null
+++ b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt
@@ -0,0 +1,1349 @@
+WEBVTT captioned by rodrigo, checked by sachac and bhavin
+
+NOTE Introduction
+
+00:00:00.300 --> 00:00:00.874
+Oh, wow!
+
+00:00:00.924 --> 00:00:05.740
+I'm gonna tell you about how I'm learning this new thing…
+
+00:00:07.790 --> 00:00:08.539
+Okay…
+
+00:00:11.840 --> 00:00:15.157
+Hey dude, I am recording, okay? So, I'll call you back
+
+00:00:15.757 --> 00:00:18.074
+yeah yeah I'm doing learning the new thing.
+
+00:00:18.724 --> 00:00:20.574
+Yeah yeah yeah later later later
+
+00:00:20.624 --> 00:00:22.924
+not right now later later later later.
+
+00:00:24.024 --> 00:00:24.990
+Sorry about that.
+
+00:00:25.390 --> 00:00:28.719
+Okay, as I was saying, I'm going to tell you all about
+
+00:00:28.920 --> 00:00:30.774
+how I'm learning this new thing.
+
+00:00:32.074 --> 00:00:36.440
+Ooh, Sacha Chua's Emacs newsletter is out.
+
+00:00:36.490 --> 00:00:38.874
+Maybe I should spend some time…
+
+00:00:38.924 --> 00:00:41.769
+Oh, wait a second. I have to learn this new thing.
+
+00:00:43.370 --> 00:00:46.790
+Haha. Okay, so I'm going to tell you
+
+00:00:47.290 --> 00:00:51.474
+how we can learn new skills in the middle of
+
+00:00:51.524 --> 00:00:54.359
+so many other wonderful things that you want to do
+
+00:00:54.360 --> 00:00:56.959
+and to speak to wonderful people that you have to speak to.
+
+00:00:57.460 --> 00:01:01.407
+My name is Bala Ramadurai and I'm going to be talking about
+
+00:01:01.607 --> 00:01:06.307
+the Survival of The Skillest, that's what I call it, okay?
+
+00:01:07.407 --> 00:01:11.574
+Survival of The Skillest. Thriving in the Learning Jungle.
+
+00:01:11.724 --> 00:01:14.149
+Here I'm going to give you some tips and techniques
+
+00:01:14.250 --> 00:01:17.490
+as to how you can learn skills, new skills.
+
+00:01:17.990 --> 00:01:22.974
+I'm going to give you a quote from a multi-talented teacher.
+
+00:01:23.224 --> 00:01:27.007
+He was the second president of my country, India.
+
+00:01:27.357 --> 00:01:29.440
+S. Radhakrishnan, he says,
+
+00:01:29.590 --> 00:01:32.324
+“When we think we know, we cease to learn.”
+
+00:01:32.674 --> 00:01:33.849
+That was his quote.
+
+NOTE What is a skill?
+
+00:01:35.350 --> 00:01:36.240
+What is a skill?
+
+00:01:36.540 --> 00:01:39.157
+A skill is the knowledge and the ability
+
+00:01:39.507 --> 00:01:42.707
+that enables you to do something well.
+
+00:01:43.157 --> 00:01:45.557
+There's the knowledge first and the ability
+
+00:01:45.607 --> 00:01:46.474
+and you have to do it well.
+
+NOTE Why should you learn a new skill?
+
+00:01:47.424 --> 00:01:50.324
+Right. So why should you learn a new skill?
+
+00:01:50.824 --> 00:01:53.474
+Now if you can pause this video,
+
+00:01:53.674 --> 00:01:55.224
+watching streaming part of the video,
+
+00:01:55.524 --> 00:01:57.990
+then come up with your own reasons.
+
+00:01:58.040 --> 00:02:00.290
+I'm going to give you my top three reasons
+
+00:02:00.340 --> 00:02:02.424
+that you might want to learn a new skill.
+
+00:02:02.574 --> 00:02:03.989
+Get ahead in your career.
+
+00:02:04.390 --> 00:02:08.040
+Look good or cool in your community or peer group
+
+00:02:08.640 --> 00:02:09.890
+or someone forced you to.
+
+NOTE What skills should you learn?
+
+00:02:11.040 --> 00:02:14.174
+Now, what skills should you learn?
+
+00:02:14.574 --> 00:02:16.124
+Ok, there could be a whole list.
+
+00:02:16.674 --> 00:02:19.479
+Let me take a stab at some of the ones
+
+00:02:19.529 --> 00:02:21.757
+that I think could be cool: bungee jumping,
+
+00:02:22.057 --> 00:02:24.340
+teaching your pet to pick up the newspaper
+
+00:02:24.390 --> 00:02:25.679
+without tearing it to shreds.
+
+00:02:26.330 --> 00:02:29.974
+Perhaps with Python rearing, I meant coding, coding,
+
+00:02:30.024 --> 00:02:31.090
+you can do learning coding.
+
+00:02:31.240 --> 00:02:34.340
+So you could list your own skills that you have to learn,
+
+00:02:34.390 --> 00:02:35.174
+you want to learn.
+
+NOTE What stops you from learning new skills?
+
+00:02:35.974 --> 00:02:38.540
+But what stops you from learning new skills?
+
+00:02:39.140 --> 00:02:41.030
+The most common reason that I've heard
+
+00:02:41.230 --> 00:02:42.690
+in the past is lack of time.
+
+00:02:42.790 --> 00:02:45.174
+“Oh Bala, I have to do so many things.”
+
+00:02:45.474 --> 00:02:47.540
+“I don't have the time to learn any new skills.”
+
+00:02:48.140 --> 00:02:50.440
+Lack of motivation could be another reason.
+
+00:02:50.740 --> 00:02:52.257
+Or you're just a rebel.
+
+00:02:53.307 --> 00:02:56.407
+Who is he or who is she to tell me what I should learn?
+
+00:02:56.507 --> 00:02:57.707
+I'm going to learn things like that.
+
+00:02:57.857 --> 00:03:00.040
+So then it stops you from learning a new skill.
+
+00:03:01.040 --> 00:03:04.307
+But there's even more fundamental reason
+
+00:03:04.357 --> 00:03:06.874
+for why we don't learn a new skill so easily.
+
+00:03:07.374 --> 00:03:10.074
+And this comes from the story of scholar in the teacup.
+
+00:03:10.174 --> 00:03:12.157
+I can pass on the link later to you.
+
+00:03:12.257 --> 00:03:15.424
+You can watch this, my own version of the story.
+
+NOTE Empty your teacup
+
+00:03:16.274 --> 00:03:18.740
+The ultimate truth in this story
+
+00:03:18.790 --> 00:03:20.757
+or the moral in this story is that
+
+00:03:21.057 --> 00:03:23.657
+we are filled with preconceived ideas
+
+00:03:23.957 --> 00:03:25.874
+and the Zen master in the story says,
+
+00:03:26.074 --> 00:03:27.540
+it's like a full teacup.
+
+00:03:27.940 --> 00:03:32.107
+In order to learn new skills, you have to empty your teacup.
+
+00:03:32.807 --> 00:03:34.674
+Now, how do you empty your teacup?
+
+00:03:34.724 --> 00:03:37.607
+You just can't pour everything out of your head, right?
+
+00:03:37.707 --> 00:03:39.824
+So how do you really empty your teacup?
+
+00:03:40.624 --> 00:03:43.340
+So the way to empty your teacup,
+
+00:03:43.790 --> 00:03:46.540
+simplest way to do it is write down your thoughts.
+
+00:03:46.790 --> 00:03:48.390
+As simple as that.
+
+00:03:48.740 --> 00:03:51.157
+Just take a piece of paper and write it down.
+
+00:03:51.657 --> 00:03:53.674
+Or if you are on electronic means,
+
+00:03:53.724 --> 00:03:57.840
+use Emacs Org Mode and type out your thoughts, okay?
+
+00:03:58.490 --> 00:04:00.007
+There is a task for you right now.
+
+00:04:00.507 --> 00:04:02.607
+What you have to do is to create a folder
+
+00:04:02.657 --> 00:04:05.774
+in your documents folder called Inbox.
+
+00:04:05.824 --> 00:04:09.874
+Create one and create a new file called todo.org.
+
+00:04:10.224 --> 00:04:11.240
+If you are paper based,
+
+00:04:11.290 --> 00:04:14.607
+you can use a notebook or any other forms of the same file.
+
+00:04:15.257 --> 00:04:18.407
+In that, write down all your unfinished tasks
+
+00:04:18.707 --> 00:04:19.969
+personal and professional.
+
+00:04:20.270 --> 00:04:23.207
+Write down some things that have been worrying you,
+
+00:04:23.607 --> 00:04:25.074
+whatever worries you right now.
+
+00:04:25.124 --> 00:04:27.569
+just write it down, the whole thing, okay?
+
+00:04:28.019 --> 00:04:29.957
+Write down some tasks or actions that
+
+00:04:30.107 --> 00:04:32.174
+you are waiting for somebody else
+
+00:04:32.524 --> 00:04:34.740
+that could also be part of your list here.
+
+00:04:35.640 --> 00:04:37.859
+Great. Now that you have emptied your tea cup,
+
+00:04:38.160 --> 00:04:40.374
+I'm going to tell you the origin of these ideas.
+
+NOTE Getting Things Done
+
+00:04:40.424 --> 00:04:42.990
+These come from “Getting Things Done” by David Allen.
+
+00:04:43.090 --> 00:04:46.207
+It's a great book. I've read it multiple times. Fantastic.
+
+00:04:46.657 --> 00:04:50.240
+And he says, your mind is for having ideas,
+
+00:04:50.390 --> 00:04:51.424
+not holding them.
+
+00:04:52.274 --> 00:04:54.740
+You have to hold on to this idea in your mind.
+
+00:04:55.040 --> 00:04:55.840
+Keep it in your mind.
+
+00:04:55.890 --> 00:04:59.107
+saying it's for having ideas, not holding them.
+
+00:05:00.757 --> 00:05:05.007
+Alright, perform one of four actions on your task list.
+
+00:05:05.207 --> 00:05:07.474
+Okay? The one that you just wrote down.
+
+00:05:07.974 --> 00:05:10.274
+You delete them, okay? As simple as that.
+
+00:05:10.324 --> 00:05:13.574
+Strikethrough the task, hit the delete
+
+00:05:13.624 --> 00:05:16.274
+or change the state to cancel, okay?
+
+00:05:16.674 --> 00:05:18.307
+Alright, If you don't want to delete it,
+
+00:05:18.357 --> 00:05:20.074
+you want to defer it, do it later.
+
+00:05:20.524 --> 00:05:21.807
+Add it to your calendar.
+
+00:05:22.107 --> 00:05:23.840
+Add a reminder to it if you want.
+
+00:05:24.190 --> 00:05:27.307
+Or in Emacs Org Mode use C-c C-s to
+
+00:05:27.357 --> 00:05:31.207
+schedule it to a different time that you feel
+
+00:05:31.257 --> 00:05:32.940
+you would be able to do that task.
+
+00:05:33.640 --> 00:05:35.374
+Or just delegate it to somebody else.
+
+00:05:35.424 --> 00:05:37.380
+Maybe you are not the best person to do it
+
+00:05:37.430 --> 00:05:40.090
+or you probably won't find time to do this.
+
+00:05:40.590 --> 00:05:43.357
+Send it to your colleague, student, assistant,
+
+00:05:43.807 --> 00:05:46.524
+maybe even your favorite LLM to do this.
+
+00:05:47.374 --> 00:05:49.624
+LLM being large language model.
+
+00:05:50.274 --> 00:05:53.457
+Or just do it, right? As they say, just do it.
+
+00:05:53.807 --> 00:05:56.140
+Set a timer for two minutes and do the task.
+
+00:05:56.190 --> 00:05:57.807
+Finish the task, right here right now.
+
+00:05:58.257 --> 00:05:59.207
+Nothing is stopping you.
+
+00:05:59.257 --> 00:06:00.909
+Finish it. Oh, great, I'm going to do this
+
+00:06:01.360 --> 00:06:02.457
+but set yourself two minutes
+
+00:06:02.507 --> 00:06:04.940
+because sometimes it may spill over to half an hour
+
+00:06:04.990 --> 00:06:06.674
+and you still haven't processed through your list.
+
+00:06:07.024 --> 00:06:08.407
+That's why the timer for two minutes.
+
+00:06:08.907 --> 00:06:10.524
+One tip I'm going to give you is:
+
+00:06:10.624 --> 00:06:13.459
+Don't skip any of the items from your list
+
+00:06:13.910 --> 00:06:16.490
+because it's tough work you've been trying to avoid it,
+
+00:06:16.640 --> 00:06:17.374
+don't do that.
+
+00:06:17.724 --> 00:06:22.974
+Be rigorous and finish it off, processing at least, okay?
+
+00:06:23.324 --> 00:06:25.607
+Now you can do the absolute same process
+
+00:06:25.657 --> 00:06:26.940
+on your email inbox.
+
+00:06:27.090 --> 00:06:31.490
+I know, I know some of you have 55,000 emails in your inbox.
+
+00:06:31.540 --> 00:06:33.274
+How am I going to process all of them?
+
+NOTE Archive
+
+00:06:33.724 --> 00:06:36.490
+Well, Tiago Forte, whose method
+
+00:06:36.540 --> 00:06:39.157
+I'm going to be also talking about, says:
+
+00:06:39.257 --> 00:06:42.657
+Archive them all and pull out the top 100, okay?
+
+00:06:42.707 --> 00:06:45.007
+The last latest 100 and process that.
+
+00:06:45.757 --> 00:06:48.207
+That's a cool way to do it, okay?
+
+00:06:48.407 --> 00:06:50.674
+So you're not stuck to those 55,000,
+
+00:06:50.724 --> 00:06:52.340
+but just the top 100 of those.
+
+00:06:52.990 --> 00:06:53.957
+You can do the same,
+
+00:06:54.007 --> 00:06:55.140
+absolutely the same thing
+
+00:06:55.190 --> 00:06:57.624
+to any of your messaging apps as well:
+
+00:06:57.674 --> 00:07:01.240
+WhatsApp, Matrix, Slack, whatever you choose.
+
+00:07:01.890 --> 00:07:03.099
+Even to your physical inbox,
+
+00:07:03.200 --> 00:07:04.540
+you can do the absolute same things.
+
+00:07:04.590 --> 00:07:06.574
+You lift your items and
+
+00:07:06.624 --> 00:07:09.707
+see if you can need to process them, okay?
+
+00:07:10.407 --> 00:07:13.174
+What if the email or message or task is something
+
+00:07:13.224 --> 00:07:14.974
+that you might need in the future?
+
+00:07:15.274 --> 00:07:16.807
+Great! Archive them
+
+00:07:17.107 --> 00:07:19.507
+or move it to a place you may refer to later.
+
+00:07:19.757 --> 00:07:23.240
+So, you have plenty of storage in your cloud space,
+
+00:07:23.290 --> 00:07:25.690
+in your email space, in your computer space.
+
+00:07:26.040 --> 00:07:27.790
+Use that. Archive it.
+
+00:07:27.890 --> 00:07:29.719
+You can refer to it later. Not a worry.
+
+00:07:29.820 --> 00:07:31.040
+Don't want it right in front of you.
+
+00:07:31.090 --> 00:07:32.740
+That's the only thing here, right?
+
+NOTE Multiple steps
+
+00:07:33.290 --> 00:07:35.207
+Now another question that pops in your head is:
+
+00:07:35.257 --> 00:07:38.807
+What if something that requires multiple steps, right?
+
+00:07:38.907 --> 00:07:42.774
+not all steps are created… not all tasks are created alike,
+
+00:07:43.074 --> 00:07:44.474
+There are multiple steps to a task.
+
+00:07:45.024 --> 00:07:47.959
+That's when a task becomes a project, ok?
+
+00:07:48.009 --> 00:07:49.990
+An example or few examples of those
+
+00:07:50.190 --> 00:07:53.840
+are finishing a course on say Coursera or NPTEL or Udemy,
+
+00:07:54.340 --> 00:07:56.224
+teaching a course if you are a teacher
+
+00:07:56.274 --> 00:07:57.874
+in your college or school.
+
+00:07:58.224 --> 00:08:00.807
+If you are organizing a conference
+
+00:08:00.957 --> 00:08:03.607
+such as the Emacs conference, it's a huge project,
+
+00:08:03.957 --> 00:08:05.990
+you will need to use… it's a project.
+
+00:08:07.440 --> 00:08:10.359
+Arranging a birthday party for your spouse, that's sweet,
+
+00:08:10.560 --> 00:08:13.170
+but it's still a project, you will have many tasks in it.
+
+00:08:13.220 --> 00:08:14.824
+So these are examples of projects.
+
+00:08:15.874 --> 00:08:17.374
+Here's how one can handle projects.
+
+00:08:18.024 --> 00:08:19.940
+Create a folder for each project.
+
+00:08:20.390 --> 00:08:24.340
+Create a text or word doc or title it as todo.txt
+
+00:08:24.390 --> 00:08:26.559
+or todo.docx or todo.org.
+
+00:08:26.560 --> 00:08:28.507
+I prefer .org and you can do it.
+
+00:08:29.057 --> 00:08:32.340
+And in that, write down the success criteria,
+
+00:08:32.440 --> 00:08:35.079
+the goal or the deadline of the project.
+
+00:08:35.730 --> 00:08:38.290
+Write down all the tasks that need to be done.
+
+00:08:38.340 --> 00:08:40.040
+You don't have to think about all of it,
+
+00:08:40.190 --> 00:08:41.529
+but whatever comes to your mind,
+
+00:08:41.579 --> 00:08:42.474
+just put it in there
+
+00:08:42.524 --> 00:08:45.974
+as some tasks that you need to get done inside this project.
+
+00:08:46.624 --> 00:08:52.174
+Now, identify the immediate action that needs to be done
+
+00:08:52.224 --> 00:08:53.740
+for the project to move forward.
+
+00:08:54.040 --> 00:08:56.279
+That's usually something that's stopping the project
+
+00:08:56.580 --> 00:08:57.257
+from progressing.
+
+00:08:57.457 --> 00:08:58.874
+So identify that and say:
+
+00:08:58.924 --> 00:09:00.307
+“That's the next thing I'm going to do.”
+
+00:09:01.557 --> 00:09:03.974
+An example of a project is right here.
+
+00:09:04.274 --> 00:09:06.107
+Goal of the project is to deliver a talk
+
+00:09:06.207 --> 00:09:09.157
+about my organization system,
+
+00:09:09.257 --> 00:09:12.709
+make it like a workshop with pauses for activities.
+
+00:09:13.010 --> 00:09:14.890
+You can see that this is the talk
+
+00:09:14.940 --> 00:09:16.174
+that I am delivering right now.
+
+00:09:16.424 --> 00:09:19.590
+And right now if you see recording the talk, okay?
+
+00:09:19.840 --> 00:09:21.907
+Of course, the next one I'm going to do after this
+
+00:09:21.957 --> 00:09:24.024
+is going to be sending the recorded talk,
+
+00:09:24.074 --> 00:09:25.339
+the file and the PDF for the talk.
+
+00:09:25.389 --> 00:09:27.974
+Now, if you want, you can add some sub steps and all that
+
+00:09:28.024 --> 00:09:28.774
+also into this.
+
+00:09:29.174 --> 00:09:31.599
+Of course, I'd like to thank the coordinators for their
+
+00:09:31.600 --> 00:09:33.479
+absolutely wonderful work that they're doing
+
+00:09:33.480 --> 00:09:35.240
+throughout this, okay?
+
+00:09:35.640 --> 00:09:37.274
+Now, tasks for you.
+
+00:09:37.474 --> 00:09:38.579
+You can take your time.
+
+00:09:38.779 --> 00:09:40.440
+And first of all, think of a project
+
+00:09:40.490 --> 00:09:42.374
+that you have to absolutely get done.
+
+00:09:43.474 --> 00:09:48.274
+Create a folder on your computer or phone
+
+00:09:48.324 --> 00:09:49.557
+with the name of the project.
+
+00:09:50.157 --> 00:09:51.724
+Create a todo.org.
+
+00:09:52.024 --> 00:09:56.024
+If you want to use a notebook, you can use a fresh leaf.
+
+00:09:56.524 --> 00:10:00.074
+Write down all the tasks associated with this project.
+
+00:10:00.524 --> 00:10:02.524
+That's going to be how you handle it, right?
+
+NOTE Multiple projects
+
+00:10:02.874 --> 00:10:04.540
+Now, what if you have multiple projects?
+
+00:10:05.490 --> 00:10:08.107
+Not many of us have only one project.
+
+00:10:08.157 --> 00:10:09.757
+In fact, many of us have multiple projects.
+
+00:10:09.807 --> 00:10:11.240
+What do we do in that situation?
+
+00:10:11.790 --> 00:10:12.974
+Well, the answer is simple.
+
+00:10:13.274 --> 00:10:15.174
+Create a folder for each project.
+
+00:10:15.624 --> 00:10:20.157
+Add this Org file called todo into each of those folders
+
+00:10:20.657 --> 00:10:25.040
+and write down the task for all of these projects as well.
+
+00:10:25.190 --> 00:10:29.107
+Write down all of these tasks and mark one of them as next.
+
+00:10:29.207 --> 00:10:30.590
+There can be only one next action.
+
+00:10:30.790 --> 00:10:31.940
+It can't be multiple next actions.
+
+00:10:32.390 --> 00:10:34.840
+That's the immediate thing that has to be done
+
+00:10:34.990 --> 00:10:37.674
+to take this project forward, okay?
+
+NOTE What if the project stops before completion?
+
+00:10:37.874 --> 00:10:40.390
+What if the project stops before completion?
+
+00:10:40.440 --> 00:10:42.974
+There are possibilities sometimes you lose interest,
+
+00:10:43.024 --> 00:10:44.874
+sometimes your collaborator loses interest.
+
+00:10:45.124 --> 00:10:46.707
+What do you do in those situations?
+
+00:10:47.157 --> 00:10:49.590
+Have a folder in your computer or phone
+
+00:10:49.740 --> 00:10:52.040
+for abandoned projects called resources.
+
+00:10:52.590 --> 00:10:53.270
+Oh, by the way,
+
+00:10:53.320 --> 00:10:57.157
+for your projects folder, create an
+
+00:10:57.557 --> 00:11:01.239
+overarching projects folder and inside that are
+
+00:11:01.289 --> 00:11:02.507
+all the project folders.
+
+00:11:02.607 --> 00:11:03.507
+I forgot to tell you that.
+
+00:11:03.707 --> 00:11:06.807
+Same way, on the same level, create a resources folder.
+
+00:11:06.957 --> 00:11:09.057
+That's for all your abandoned projects
+
+00:11:09.107 --> 00:11:13.040
+or even could be on your research material as well,
+
+00:11:13.090 --> 00:11:14.859
+which you are not currently working on.
+
+00:11:15.509 --> 00:11:18.669
+Move this particular project that's abandoned or stopped
+
+00:11:18.769 --> 00:11:20.274
+somewhere in between to that folder.
+
+NOTE What if you successfully complete the project?
+
+00:11:20.974 --> 00:11:23.590
+Now, there's a possibility you might successfully complete.
+
+00:11:23.640 --> 00:11:26.840
+I hope all your projects end up being successful.
+
+00:11:27.190 --> 00:11:30.174
+But there are quite a few which will end up in this,
+
+00:11:30.224 --> 00:11:32.857
+quite a few which will end up abandoned as well.
+
+00:11:33.757 --> 00:11:37.390
+Now, I write an end report so that I can learn from this.
+
+00:11:37.440 --> 00:11:39.274
+What did I enjoy most in the project?
+
+00:11:39.324 --> 00:11:40.574
+What could have been better?
+
+00:11:40.874 --> 00:11:43.024
+What did I learn from this particular project?
+
+00:11:43.724 --> 00:11:45.699
+Now, you will need to move that folder
+
+00:11:45.849 --> 00:11:47.490
+to a folder called archives.
+
+00:11:47.790 --> 00:11:50.757
+This is the final resting place for the project,
+
+00:11:50.807 --> 00:11:53.490
+completed projects because if you come up
+
+00:11:53.540 --> 00:11:55.640
+with another project which sounds similar
+
+00:11:55.690 --> 00:11:56.807
+to the archives one,
+
+00:11:56.857 --> 00:11:59.140
+you can pick that out and create that as a template,
+
+00:11:59.190 --> 00:12:00.124
+use that as a template.
+
+00:12:00.524 --> 00:12:04.290
+Now, why would I have one folder per project
+
+00:12:04.340 --> 00:12:07.457
+when there's only one file sitting in it called todo.org?
+
+00:12:07.757 --> 00:12:10.774
+Well, most projects also have some project files
+
+00:12:10.824 --> 00:12:13.574
+and this folder can be a storehouse of all of that
+
+00:12:13.824 --> 00:12:15.824
+and you can access all of them at one shot.
+
+00:12:16.174 --> 00:12:16.990
+That's the advantage.
+
+NOTE What if the project is ongoing and doesn't really end?
+
+00:12:18.140 --> 00:12:20.740
+What if the project is ongoing and doesn't really end?
+
+00:12:20.790 --> 00:12:23.590
+That doesn't seem to have a deadline or an ending point.
+
+00:12:24.190 --> 00:12:27.107
+That's called an Area. This is now an Area.
+
+00:12:27.157 --> 00:12:31.674
+Examples of Areas: gardening, paying bills, never stops,
+
+00:12:32.024 --> 00:12:34.574
+bills never don't stop, blogging.
+
+00:12:34.624 --> 00:12:36.974
+These are all some examples of Areas that really
+
+00:12:37.024 --> 00:12:39.474
+don't have a definite deadline.
+
+00:12:40.374 --> 00:12:44.559
+For Areas also, create a folder for each of them, right?
+
+00:12:44.710 --> 00:12:47.274
+You can create a parent folder called Areas
+
+00:12:47.324 --> 00:12:50.540
+and under them you can have those areas, okay,
+
+00:12:50.990 --> 00:12:53.519
+and have a todo [file] in each of those folders.
+
+NOTE What if you forget to visit the TODO files?
+
+00:12:54.320 --> 00:12:56.724
+Now what if we forget to visit the todo files
+
+00:12:57.024 --> 00:12:58.824
+which in my case often happens?
+
+00:12:58.974 --> 00:13:00.790
+I forget to visit those todo files
+
+00:13:01.040 --> 00:13:03.540
+and see what the task net needs to be done.
+
+00:13:03.940 --> 00:13:08.174
+You can of course add all of this todo.org
+
+00:13:08.224 --> 00:13:11.110
+and into your org-agenda-files variable
+
+00:13:11.360 --> 00:13:14.014
+so that when you pull up your Org Agenda,
+
+00:13:14.015 --> 00:13:14.729
+all of them show up.
+
+00:13:15.080 --> 00:13:15.790
+That's a good idea.
+
+00:13:16.440 --> 00:13:18.574
+You need to have a weekly review with yourself.
+
+00:13:19.624 --> 00:13:22.090
+Weekly review is essentially a weekly appointment
+
+00:13:22.140 --> 00:13:24.207
+with yourself for you to stay
+
+00:13:24.357 --> 00:13:28.674
+in control of your life or career. To keep things on track.
+
+00:13:29.524 --> 00:13:32.474
+In the weekly review, you need to empty your teacup.
+
+00:13:32.724 --> 00:13:34.974
+That's the first and foremost, okay?
+
+00:13:35.274 --> 00:13:38.539
+Then process all your items in the TODO file.
+
+00:13:39.239 --> 00:13:42.007
+Process all your emails from the last week.
+
+00:13:42.057 --> 00:13:45.340
+Use the exact same structure of do, delete, defer, delegate.
+
+00:13:45.390 --> 00:13:47.074
+These are the four D's that you can use.
+
+00:13:47.474 --> 00:13:51.740
+Process all your messaging app messages from the last week.
+
+00:13:51.890 --> 00:13:54.024
+So last one whole week, whatever has come up,
+
+00:13:54.074 --> 00:13:56.824
+you need to process all of them, okay?
+
+00:13:57.174 --> 00:13:58.174
+In the weekly review,
+
+00:13:58.224 --> 00:14:01.439
+you also need to archive all your emails and
+
+00:14:01.440 --> 00:14:03.839
+messaging app messages that you have processed.
+
+00:14:03.990 --> 00:14:05.707
+You've already taken care of it.
+
+00:14:05.857 --> 00:14:07.690
+You don't need to have it right in front of you.
+
+00:14:07.740 --> 00:14:09.707
+You can move them all into archive.
+
+00:14:09.957 --> 00:14:12.240
+Most messaging apps and email systems
+
+00:14:12.290 --> 00:14:14.774
+have archives as part of their features.
+
+00:14:15.524 --> 00:14:17.124
+Look through the project TODO files
+
+00:14:17.174 --> 00:14:20.290
+to see if the next action is marked, okay?
+
+00:14:20.690 --> 00:14:22.374
+Now look through the project folder list
+
+00:14:22.424 --> 00:14:24.157
+to see if some of them need to be archived
+
+00:14:24.307 --> 00:14:26.274
+or moved to resources.
+
+00:14:26.474 --> 00:14:28.390
+Some may be abandoned, some may be done.
+
+00:14:28.640 --> 00:14:30.490
+You can move them successfully to
+
+00:14:30.540 --> 00:14:32.407
+all of where it needs to belong.
+
+00:14:33.257 --> 00:14:34.942
+Now task for you, you can pause this,
+
+00:14:34.943 --> 00:14:36.290
+of course, and do this.
+
+00:14:36.540 --> 00:14:39.679
+Set an appointment with yourself, sacrosanct time,
+
+00:14:39.730 --> 00:14:42.124
+only with yourself and title it weekly review.
+
+00:14:42.324 --> 00:14:43.674
+Start with half an hour,
+
+00:14:43.924 --> 00:14:45.907
+perhaps you can have it longer later on.
+
+00:14:46.057 --> 00:14:47.712
+As you need more time,
+
+00:14:47.713 --> 00:14:49.096
+you can have more time with yourself.
+
+00:14:49.846 --> 00:14:51.907
+And make it repeating every week.
+
+00:14:53.607 --> 00:14:56.307
+Now you can complain, I can hear you some of you complain
+
+00:14:56.357 --> 00:14:58.507
+“Oh, this is such a microscopic view of my life.
+
+00:14:58.557 --> 00:14:59.707
+What about the big picture?”
+
+00:14:59.857 --> 00:15:03.674
+Well, there is quarterly review, once every 13 weeks
+
+00:15:03.724 --> 00:15:06.107
+you can mark an appointment with yourself.
+
+00:15:06.357 --> 00:15:08.274
+Right after your weekly review
+
+00:15:08.324 --> 00:15:11.240
+to do your quarterly review, okay?
+
+00:15:11.290 --> 00:15:14.116
+And also every year, mark yourself--
+
+00:15:14.117 --> 00:15:15.174
+it could be at the start
+
+00:15:15.224 --> 00:15:18.840
+or the end of an academic year or a calendar year--
+
+00:15:18.990 --> 00:15:21.840
+mark yourself an appointment again with yourself
+
+00:15:21.940 --> 00:15:22.890
+called yearly review.
+
+00:15:23.790 --> 00:15:26.474
+And these contain some big life questions, okay?
+
+00:15:27.074 --> 00:15:31.157
+Now I'll give you some examples but feel free to modify it,
+
+00:15:31.207 --> 00:15:32.274
+have it as your own.
+
+00:15:33.324 --> 00:15:34.799
+How much money did I make?
+
+00:15:34.850 --> 00:15:36.540
+How much money did I save?
+
+00:15:36.640 --> 00:15:38.440
+How many people did I help?
+
+00:15:39.040 --> 00:15:42.307
+How many do I plan to help in the future?
+
+00:15:43.457 --> 00:15:44.690
+What projects did I enjoy?
+
+00:15:44.740 --> 00:15:47.707
+Look through your archives and resources.
+
+00:15:47.907 --> 00:15:49.840
+Which one are best avoided?
+
+00:15:49.890 --> 00:15:52.440
+I don't want to get on to this, okay?
+
+00:15:52.490 --> 00:15:55.359
+You can look through a personal and private… I'm sorry…
+
+00:15:55.360 --> 00:15:56.707
+personal and professional and
+
+00:15:56.757 --> 00:15:59.324
+see how much is there a balance between all of these.
+
+00:15:59.724 --> 00:16:01.640
+These are some questions you can answer.
+
+NOTE Planning for the future
+
+00:16:02.740 --> 00:16:04.840
+Now that you know how to manage them now...
+
+00:16:04.890 --> 00:16:06.590
+So far we have looked at the now,
+
+00:16:06.840 --> 00:16:08.240
+how do you plan for the future?
+
+00:16:08.290 --> 00:16:09.674
+like really into the future?
+
+00:16:10.224 --> 00:16:13.174
+Well, I have a trick called nine windows for you.
+
+00:16:13.474 --> 00:16:15.340
+Nine windows are essentially,
+
+00:16:15.640 --> 00:16:18.257
+it's like a tic-tac-toe grid
+
+00:16:18.507 --> 00:16:25.174
+and the left column is your past,
+
+00:16:25.574 --> 00:16:27.740
+the middle column is your present
+
+00:16:28.090 --> 00:16:31.740
+and the right column is your future, okay?
+
+00:16:31.940 --> 00:16:37.590
+and the bottom row is your skill set,
+
+00:16:37.940 --> 00:16:40.519
+the middle row is what you do
+
+00:16:40.920 --> 00:16:44.607
+and the top row is whom do you work for
+
+00:16:44.657 --> 00:16:46.674
+or whom do you serve, right?
+
+00:16:46.724 --> 00:16:50.349
+So you are doing something for an organization
+
+00:16:50.500 --> 00:16:51.869
+so those could be in your top row.
+
+00:16:52.570 --> 00:16:54.974
+Let me give you an example from my own life.
+
+00:16:55.424 --> 00:16:58.874
+This I made about 10 years ago, okay?
+
+00:16:59.024 --> 00:17:05.674
+So the middle column is the what I did 10 years ago.
+
+00:17:05.724 --> 00:17:09.207
+So that is the now let's keep it as the now, okay?
+
+00:17:09.257 --> 00:17:11.390
+So five years before that, I used to work
+
+00:17:11.440 --> 00:17:12.990
+for General Electric (GE).
+
+00:17:13.090 --> 00:17:14.790
+I was a research scientist for them
+
+00:17:15.240 --> 00:17:16.874
+and the skills that I had was:
+
+00:17:16.924 --> 00:17:22.474
+I had a PhD which was used in this profession.
+
+00:17:22.824 --> 00:17:23.740
+I had writing skills,
+
+00:17:23.790 --> 00:17:25.224
+I had some teaching skills,
+
+00:17:25.424 --> 00:17:28.224
+and I love to interact and learn from my teammates.
+
+00:17:29.224 --> 00:17:32.540
+Then I joined Mindtree, which was the current job
+
+00:17:32.590 --> 00:17:35.774
+when I did this, software services company.
+
+00:17:36.824 --> 00:17:38.474
+I co-founded TRIZIndia also.
+
+00:17:38.524 --> 00:17:40.574
+These are two organizations that I served.
+
+00:17:41.124 --> 00:17:44.940
+And facilitator, that was the main profession that I was in.
+
+00:17:45.240 --> 00:17:46.874
+And the skills I had was:
+
+00:17:46.924 --> 00:17:47.399
+TRIZ [Theory of Inventive Problem Solving],
+
+00:17:47.800 --> 00:17:51.874
+interacting with people outside of my team,
+
+00:17:52.224 --> 00:17:54.840
+and I could align well with my organization.
+
+00:17:54.890 --> 00:17:56.224
+I knew exactly where they were going
+
+00:17:56.274 --> 00:17:58.407
+and how to align myself, my goals with that.
+
+00:17:59.107 --> 00:18:02.174
+Now, I said, five years later,
+
+00:18:02.224 --> 00:18:04.674
+I want to be an entrepreneur and an author.
+
+00:18:05.174 --> 00:18:06.924
+And I want to do this for,
+
+00:18:07.224 --> 00:18:11.557
+I want to really work with academia and corporate companies.
+
+00:18:11.757 --> 00:18:12.790
+That was my goal.
+
+00:18:13.240 --> 00:18:15.007
+So the skills I needed to have were:
+
+00:18:15.057 --> 00:18:18.157
+marketing, writing, sales, hiring, people management,
+
+00:18:18.207 --> 00:18:19.474
+all of that I needed to have.
+
+00:18:19.924 --> 00:18:21.490
+And I had to plan that so I used
+
+00:18:21.540 --> 00:18:22.740
+the PARA structure [projects, areas, resources, archives]
+
+00:18:23.090 --> 00:18:27.240
+to manage how I'm going to learn all of these skills
+
+00:18:27.290 --> 00:18:29.207
+and imbibe those and get better at it.
+
+00:18:29.257 --> 00:18:30.357
+So that's where I use this.
+
+00:18:31.157 --> 00:18:32.439
+Ok, your turn.
+
+00:18:32.639 --> 00:18:34.940
+You can pause this video and build your own nine windows
+
+00:18:34.990 --> 00:18:36.007
+to plan for the future.
+
+NOTE Summary
+
+00:18:36.957 --> 00:18:39.957
+So in summary, you need to empty your teacup
+
+00:18:40.007 --> 00:18:42.740
+before engaging with the work in front of you.
+
+00:18:43.040 --> 00:18:45.340
+Use the PARA structure: projects, area,
+
+00:18:45.390 --> 00:18:46.669
+resources and archives.
+
+00:18:46.770 --> 00:18:51.479
+Create this folder structure and use reviews regularly,
+
+00:18:51.480 --> 00:18:53.474
+weekly, quarterly and yearly.
+
+00:18:54.024 --> 00:18:55.740
+Use the nine windows to your advantage
+
+00:18:55.790 --> 00:18:57.290
+for your future career planning
+
+00:18:57.640 --> 00:19:00.340
+and of course, apply PARA to your future plans
+
+00:19:00.440 --> 00:19:02.859
+to plan for those as well, ok?
+
+NOTE References
+
+00:19:03.210 --> 00:19:04.790
+Now, these are the references I have used.
+
+00:19:04.840 --> 00:19:07.240
+heavily borrowed upon Tiago Fortes' PARA,
+
+00:19:07.640 --> 00:19:09.239
+David Allen's “Getting Things Done”
+
+00:19:09.240 --> 00:19:13.039
+and Tasshin's way to implement this in Emacs and Org Mode.
+
+00:19:14.190 --> 00:19:15.457
+These are some acknowledgments.
+
+00:19:15.507 --> 00:19:17.790
+I used some generative AI for this.
+
+00:19:18.290 --> 00:19:20.590
+And this is a question to you:
+
+00:19:20.790 --> 00:19:24.090
+What parts of this talk are you planning on implementing?
+
+00:19:24.140 --> 00:19:26.274
+Please write this in the Etherpad.
+
+00:19:26.824 --> 00:19:28.519
+Thank you so much. If you have any questions,
+
+00:19:28.569 --> 00:19:30.357
+let me know in the Etherpad as well.
+
+00:19:30.857 --> 00:19:32.724
+Good luck managing your tasks,
+
+00:19:33.474 --> 00:19:36.650
+emptying your teacup, and planning for the future.
diff --git a/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt
new file mode 100644
index 00000000..89ebbd97
--- /dev/null
+++ b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt
@@ -0,0 +1,19 @@
+WEBVTT
+
+00:00:00.000 --> 00:01:30.000
+Specialized Apps and Linked Data
+
+00:01:30.000 --> 00:02:53.000
+Discovering Org Roam and Linked Notes
+
+00:02:53.000 --> 00:06:35.000
+Enhanced Org Roam Buffer: Rich Links and Similar Nodes
+
+00:06:35.000 --> 00:08:26.000
+Semantic Search on Link Contexts
+
+00:08:26.000 --> 00:10:38.000
+Exposing notes outside Emacs
+
+00:10:38.000 --> 00:11:20.000
+Future Directions and Potential Improvements \ No newline at end of file
diff --git a/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt
new file mode 100644
index 00000000..19d42157
--- /dev/null
+++ b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt
@@ -0,0 +1,841 @@
+WEBVTT captioned by abhinav
+
+00:00:00.560 --> 00:00:02.560
+Hello. My name is Abhinav, and I'm going
+
+00:00:02.560 --> 00:00:04.880
+to talk about unlocking linked data in Org
+
+00:00:04.880 --> 00:00:07.120
+Mode. So, like, a lot of you, I
+
+00:00:07.120 --> 00:00:09.360
+use Emacs and Org Mode for keeping a
+
+00:00:09.360 --> 00:00:12.320
+lot of my data, personal information. For example,
+
+00:00:12.320 --> 00:00:14.775
+if I'm trying to, you know, write journal
+
+00:00:14.775 --> 00:00:16.535
+entries, it's most likely going to be an
+
+00:00:16.535 --> 00:00:18.615
+Org Mode file. If I'm trying to save
+
+00:00:18.615 --> 00:00:21.015
+bookmarks or save links, again, they go into
+
+00:00:21.015 --> 00:00:23.415
+an Org Mode file. Now, I was doing
+
+00:00:23.415 --> 00:00:26.375
+that earlier, but, last year, I think I
+
+00:00:26.695 --> 00:00:28.615
+around last year, I started to use these
+
+00:00:28.615 --> 00:00:31.390
+specialized applications. So, you know, for example, if
+
+00:00:31.390 --> 00:00:33.710
+I'm trying to save bookmarks, I'm going to
+
+00:00:33.710 --> 00:00:37.230
+use a bookmark manager. I specifically was using
+
+00:00:37.230 --> 00:00:39.870
+Raindrop for it. What happened with that is
+
+00:00:39.870 --> 00:00:42.590
+that it allowed me to save bookmarks. Let's
+
+00:00:42.590 --> 00:00:43.790
+say, you know, when I'm on go, I'm
+
+00:00:43.790 --> 00:00:45.470
+on a mobile phone, I can just,
+
+00:00:45.470 --> 00:00:47.594
+you know, open my Android app and then
+
+00:00:47.594 --> 00:00:50.235
+save links there. I can also annotate and,
+
+00:00:50.235 --> 00:00:51.355
+you know, do other things that you can
+
+00:00:51.355 --> 00:00:54.235
+do on bookmarks. Similarly, you know, for reading,
+
+00:00:54.235 --> 00:00:56.074
+let's say, papers and PDFs, I would use
+
+00:00:56.074 --> 00:01:00.074
+Zotero. For, keeping notes about people, I'll use
+
+00:01:00.074 --> 00:01:03.650
+a tool called Monica CRM. Now all these
+
+00:01:03.650 --> 00:01:05.650
+tools, their aim is to kind of
+
+00:01:05.650 --> 00:01:08.050
+do one thing really well, but they kind
+
+00:01:08.050 --> 00:01:09.730
+of work in their own silos, and it's
+
+00:01:09.730 --> 00:01:11.810
+very hard to link data from one to
+
+00:01:11.810 --> 00:01:13.730
+another. For example, if you have a journal
+
+00:01:13.730 --> 00:01:16.855
+application, you can say things like, you know,
+
+00:01:16.855 --> 00:01:18.795
+"Hey today, I met this person, and then,
+
+00:01:18.935 --> 00:01:20.855
+you know, this person gave me this recipe,"
+
+00:01:20.855 --> 00:01:23.915
+whatever. But you know that the person information
+
+00:01:24.615 --> 00:01:26.375
+is still kept in a different application, and
+
+00:01:26.375 --> 00:01:27.895
+the recipe information is still kept in a
+
+00:01:27.895 --> 00:01:30.235
+different application. You have to, like, you know,
+
+00:01:30.720 --> 00:01:32.079
+like, do a lot of work to kind
+
+00:01:32.079 --> 00:01:35.920
+of make them come together. So, one thing
+
+00:01:35.920 --> 00:01:37.600
+that happened also last year was that I
+
+00:01:37.600 --> 00:01:39.840
+started using Org Roam a lot. So Org
+
+00:01:39.840 --> 00:01:41.920
+Roam is a Zettelkasten system, you know,
+
+00:01:41.920 --> 00:01:45.025
+which allows you to have linked notes. I'll
+
+00:01:45.025 --> 00:01:46.625
+not go too much into that detail, but
+
+00:01:46.625 --> 00:01:48.945
+basically, with Org Roam, you can, you know,
+
+00:01:48.945 --> 00:01:50.785
+have a lot of these text based files
+
+00:01:50.785 --> 00:01:53.025
+that you make anyway and then keep them
+
+00:01:53.025 --> 00:01:55.345
+connected and then, you know, like, have this
+
+00:01:55.345 --> 00:01:57.985
+knowledge base that you can build, around your
+
+00:01:57.985 --> 00:02:02.040
+information, your data. While it's a good system,
+
+00:02:02.040 --> 00:02:04.299
+I still feel like it's not very pro
+
+00:02:04.680 --> 00:02:07.080
+on providing, you know, very good amount of
+
+00:02:07.080 --> 00:02:10.520
+tools for, working with links. I'll show two
+
+00:02:10.520 --> 00:02:12.920
+kind of things. First is that, I'll show
+
+00:02:12.920 --> 00:02:16.885
+how my current knowledge base looks like, what
+
+00:02:16.885 --> 00:02:18.965
+kind of, you know, workflow I kind of
+
+00:02:18.965 --> 00:02:21.205
+use to save, let's say, any information or
+
+00:02:21.205 --> 00:02:22.644
+how do I, like, you know, connect new
+
+00:02:22.644 --> 00:02:25.924
+notes. The other is that because while this
+
+00:02:25.924 --> 00:02:28.084
+information base is working out well for
+
+00:02:28.084 --> 00:02:31.689
+me, I still want all of my external
+
+00:02:31.750 --> 00:02:34.470
+usages to be, you know, to be reflected
+
+00:02:34.470 --> 00:02:37.030
+back into this database of text files. So
+
+00:02:37.030 --> 00:02:38.950
+if I'm browsing something, I still want that
+
+00:02:38.950 --> 00:02:40.790
+thing to be, you know, saved in my
+
+00:02:40.790 --> 00:02:43.975
+Org Mode files, whether I'm browsing on Android
+
+00:02:43.975 --> 00:02:46.475
+or I'm browsing on, let's say, Firefox
+
+00:02:46.535 --> 00:02:49.015
+somewhere on a laptop. So, I'll show you
+
+00:02:49.015 --> 00:02:50.615
+those two things here. It's going to be
+
+00:02:50.615 --> 00:02:52.215
+a short talk, and then, yeah, hope you
+
+00:02:52.215 --> 00:02:54.855
+like it. Okay. So we'll start with this
+
+00:02:54.855 --> 00:02:57.830
+thing. So this is a simple Org Roam
+
+00:02:57.830 --> 00:02:59.990
+node. It's, you know, it's a dummy node.
+
+00:02:59.990 --> 00:03:01.190
+I've made, like, a lot of dummy nodes
+
+00:03:01.190 --> 00:03:03.110
+here just to kind of show, so, you
+
+00:03:03.110 --> 00:03:05.590
+know, maybe some of those information will be
+
+00:03:05.590 --> 00:03:08.470
+sparse, but I hope I convey the
+
+00:03:08.630 --> 00:03:12.555
+meaning clearly. Okay. So here, if you usually,
+
+00:03:12.635 --> 00:03:14.234
+you know, if you're just using plain Org
+
+00:03:14.234 --> 00:03:15.995
+Mode, you just have this file. Right? There's
+
+00:03:15.995 --> 00:03:19.114
+nothing else. Now if you are using Org
+
+00:03:19.114 --> 00:03:20.875
+Roam, you can do something called org-roam-
+
+00:03:20.875 --> 00:03:23.034
+buffer-toggle, which will show you, you know,
+
+00:03:23.034 --> 00:03:26.610
+a few of those connected nodes. Now, usually,
+
+00:03:26.750 --> 00:03:29.470
+the connections are shown here, they only show
+
+00:03:29.470 --> 00:03:32.190
+you backlinks. So, basically, any other node that
+
+00:03:32.190 --> 00:03:34.270
+has linked to this node is going to
+
+00:03:34.270 --> 00:03:36.910
+be shown there. But in my extension, you
+
+00:03:36.910 --> 00:03:40.485
+can see more things. For example, here, in
+
+00:03:40.485 --> 00:03:42.985
+this case, you can see, first of all,
+
+00:03:43.125 --> 00:03:45.364
+we show both links. So any link from
+
+00:03:45.364 --> 00:03:47.765
+this node to something else, will also be
+
+00:03:47.765 --> 00:03:49.285
+shown there. Any link from that node to
+
+00:03:49.285 --> 00:03:52.099
+something else will also be shown there. So
+
+00:03:52.099 --> 00:03:54.420
+you can see, that is one thing. The
+
+00:03:54.420 --> 00:03:56.099
+other thing is that all these links are
+
+00:03:56.099 --> 00:03:58.739
+categorized in, you know, type of notes. For
+
+00:03:58.739 --> 00:04:02.260
+example, when this note specifically right now is
+
+00:04:02.260 --> 00:04:05.005
+of kind book. Tag is one identifier for
+
+00:04:05.005 --> 00:04:06.045
+it, but there are, like, other ways to
+
+00:04:06.045 --> 00:04:09.165
+identify, you know, a kind of note. But
+
+00:04:09.165 --> 00:04:11.165
+this is connected to another node, which is
+
+00:04:11.165 --> 00:04:13.084
+of a kind person. So as you
+
+00:04:13.084 --> 00:04:15.165
+can see, the, Person A asked me to
+
+00:04:15.165 --> 00:04:16.685
+read this book. So, you know, that link
+
+00:04:16.685 --> 00:04:19.170
+is shown there in a very, rich format.
+
+00:04:19.170 --> 00:04:20.769
+So we have, like, more information about the
+
+00:04:20.769 --> 00:04:23.970
+link, in this. The other thing that you
+
+00:04:23.970 --> 00:04:26.610
+can see there is that, there are also
+
+00:04:26.610 --> 00:04:29.570
+links which are not existing right now, but
+
+00:04:29.570 --> 00:04:32.530
+they could be, you know, possibly interesting for
+
+00:04:32.530 --> 00:04:34.675
+me. So these are similar nodes. So these
+
+00:04:34.755 --> 00:04:36.514
+you can see the scores of similarity and
+
+00:04:36.514 --> 00:04:38.435
+then, you know, other nodes like Book on
+
+00:04:38.435 --> 00:04:40.354
+Mathematics, which is another dummy node that
+
+00:04:40.354 --> 00:04:42.995
+I made for this demo. Now these are
+
+00:04:42.995 --> 00:04:44.275
+nodes which, you know, again, I can just
+
+00:04:44.275 --> 00:04:45.474
+go in there and I can see if
+
+00:04:45.474 --> 00:04:47.389
+maybe they make sense or if, you know,
+
+00:04:47.710 --> 00:04:50.210
+I can just, like, make those connections explicitly.
+
+00:04:51.150 --> 00:04:53.229
+So let's let's try some other node here.
+
+00:04:53.229 --> 00:04:55.229
+So let's say so this is a node
+
+00:04:55.229 --> 00:04:57.389
+of a recipe. It's Bombay
+
+00:04:57.389 --> 00:04:59.550
+Sandwich. It's the recipe I made. Now if
+
+00:04:59.550 --> 00:05:01.389
+you go here on the right, you can
+
+00:05:01.389 --> 00:05:03.775
+see, you know, there's, like, some things on,
+
+00:05:04.095 --> 00:05:07.135
+some person liking the sandwich. There are some
+
+00:05:07.135 --> 00:05:09.775
+related notes also, similar notes which I have
+
+00:05:09.775 --> 00:05:12.575
+not linked. Plus, there are some journal entries.
+
+00:05:12.575 --> 00:05:15.855
+Now I use Org-Roam daily to kind of,
+
+00:05:15.855 --> 00:05:19.930
+you know, write down journal entries. And then,
+
+00:05:20.710 --> 00:05:22.150
+you know, what I have to do there
+
+00:05:22.150 --> 00:05:24.070
+is basically just write whatever I want and
+
+00:05:24.070 --> 00:05:25.590
+then just, you know, make those links to
+
+00:05:25.590 --> 00:05:28.630
+this node. So for doing
+
+00:05:28.630 --> 00:05:31.030
+that, I can see, that there were two
+
+00:05:31.030 --> 00:05:32.630
+days where I made Bombay Sandwich, and I
+
+00:05:32.630 --> 00:05:35.465
+had some observations around it, which, you know,
+
+00:05:35.465 --> 00:05:38.505
+you can see here. Right. Same so same
+
+00:05:38.505 --> 00:05:39.865
+for person. Let's say if you go to
+
+00:05:39.865 --> 00:05:41.705
+Person B, you can see that, you know,
+
+00:05:41.705 --> 00:05:43.385
+this person has, again, link to Person A
+
+00:05:43.385 --> 00:05:45.865
+and there's, like, some information around it. Plus,
+
+00:05:45.865 --> 00:05:50.050
+there are some similar notes there. This works
+
+00:05:50.050 --> 00:05:52.210
+really well. The similarity function works really well
+
+00:05:52.210 --> 00:05:54.530
+if you are basically trying to go to,
+
+00:05:54.530 --> 00:05:56.530
+you know, bookmarks that I have saved. So
+
+00:05:56.530 --> 00:05:58.470
+for example, here's a bookmark that I saved,
+
+00:05:58.610 --> 00:06:01.605
+which is, Google at Interspeech 2023. Now
+
+00:06:01.605 --> 00:06:03.845
+this bookmark is a blog post from Google
+
+00:06:03.845 --> 00:06:07.525
+AI team. Basically, you know, tells what research
+
+00:06:07.525 --> 00:06:09.785
+publications they had in this conference.
+
+00:06:10.005 --> 00:06:11.445
+Now if you go to the Similar Nodes
+
+00:06:11.445 --> 00:06:13.365
+here, you can see a very similar blog
+
+00:06:13.365 --> 00:06:15.925
+post from Google's team for other conferences that
+
+00:06:15.925 --> 00:06:17.840
+they attended. Right? Now this is very helpful
+
+00:06:17.840 --> 00:06:19.860
+for me, especially when I'm, like, reading something,
+
+00:06:20.240 --> 00:06:21.840
+later. So I, like, save a lot of
+
+00:06:21.840 --> 00:06:24.400
+links together. And then when I'm deciding
+
+00:06:24.400 --> 00:06:26.080
+to read something, I just open this and
+
+00:06:26.080 --> 00:06:28.319
+then see, you know, how everything is connected,
+
+00:06:28.319 --> 00:06:30.159
+what what else I have saved. Should I
+
+00:06:30.159 --> 00:06:32.625
+read something else or not? One interesting feature
+
+00:06:32.625 --> 00:06:34.784
+I was realizing I should try out is
+
+00:06:34.784 --> 00:06:37.425
+that, you know, if I go to this
+
+00:06:37.425 --> 00:06:39.985
+node, which is Person B, you can see
+
+00:06:39.985 --> 00:06:42.705
+that while I'm linking this to Person A,
+
+00:06:42.705 --> 00:06:45.040
+I also have some context on that. So
+
+00:06:45.040 --> 00:06:47.600
+I've written specifically uncle of Person
+
+00:06:47.600 --> 00:06:49.600
+A. Now if you have a semantic wiki,
+
+00:06:49.600 --> 00:06:52.240
+you will have a typed link where you
+
+00:06:52.240 --> 00:06:54.000
+don't have a plain link. You also have
+
+00:06:54.000 --> 00:06:55.840
+a type of the link. So in this
+
+00:06:55.840 --> 00:06:57.040
+case, the type of the link could be,
+
+00:06:57.040 --> 00:07:00.895
+you know, it's like `uncle:` whatever
+
+00:07:00.895 --> 00:07:03.335
+that link is. But, you know, I don't
+
+00:07:03.335 --> 00:07:05.175
+want to, like, go into that much detail,
+
+00:07:05.175 --> 00:07:07.335
+and I don't want to, like, learn how
+
+00:07:07.335 --> 00:07:09.175
+to link things, learn what kind of types
+
+00:07:09.175 --> 00:07:10.375
+I can make. So I can just write
+
+00:07:10.375 --> 00:07:12.294
+things in plain text. So I've written this
+
+00:07:12.294 --> 00:07:13.815
+in plain text. What I can do now
+
+00:07:13.815 --> 00:07:16.250
+is I can just search for links like
+
+00:07:16.250 --> 00:07:17.850
+this. For example, I can just do something
+
+00:07:17.850 --> 00:07:21.290
+like family members. Now this will show me
+
+00:07:21.290 --> 00:07:23.370
+all the links which have a context which
+
+00:07:23.370 --> 00:07:27.450
+makes sense as family members. So basically, this
+
+00:07:27.450 --> 00:07:29.610
+is semantic search on links, on the context
+
+00:07:29.610 --> 00:07:31.215
+of the links, and then, you know, it
+
+00:07:31.215 --> 00:07:33.134
+kind of gives me what I want here.
+
+00:07:33.134 --> 00:07:34.895
+For example, here, in this demo, I just
+
+00:07:34.895 --> 00:07:37.134
+had, like, one node, one link, which had
+
+00:07:37.134 --> 00:07:39.455
+this uncle relationship. So that kind of works
+
+00:07:39.455 --> 00:07:41.375
+out. Now let's just try another search. For
+
+00:07:41.375 --> 00:07:44.850
+example, let's say if I'm just typing 'check
+
+00:07:44.850 --> 00:07:47.410
+before meeting'. So these are now again links
+
+00:07:47.410 --> 00:07:49.410
+where I have written something where I kind
+
+00:07:49.410 --> 00:07:52.290
+of should do something before meeting someone. So
+
+00:07:52.290 --> 00:07:54.050
+for example, the first one you can see,
+
+00:07:54.850 --> 00:07:57.705
+there's a person called Meeting Person. It's a
+
+00:07:57.705 --> 00:08:00.745
+demo node again. And, I've written one note
+
+00:08:00.745 --> 00:08:05.085
+about, one connection here is basically saying that,
+
+00:08:05.145 --> 00:08:07.145
+hey, you know, read this link before you
+
+00:08:07.145 --> 00:08:09.720
+go to meet them. Right? So it's also
+
+00:08:09.720 --> 00:08:11.560
+been very helpful for me. There are, like,
+
+00:08:11.560 --> 00:08:13.800
+few patterns where I kind of feel this
+
+00:08:13.800 --> 00:08:17.319
+works out well. As I keep making more
+
+00:08:17.319 --> 00:08:20.120
+of the links and keep writing more context
+
+00:08:20.120 --> 00:08:21.800
+around the link, this kind of works
+
+00:08:21.800 --> 00:08:25.135
+out really helpful. This becomes really helpful for
+
+00:08:25.135 --> 00:08:27.935
+me. Okay. So the other few things, you
+
+00:08:27.935 --> 00:08:30.575
+know, how do I, like, work with, systems
+
+00:08:30.575 --> 00:08:32.735
+outside Emacs. Right? So the first thing
+
+00:08:32.735 --> 00:08:35.054
+is that, you know, the I haven't found
+
+00:08:35.054 --> 00:08:38.510
+anything that works really well for saving bookmarks,
+
+00:08:40.250 --> 00:08:42.250
+when I'm on my Android phone. So I
+
+00:08:42.250 --> 00:08:44.890
+had to make a new applications, application, and
+
+00:08:44.890 --> 00:08:47.930
+it's called pile-android. Now this application basically,
+
+00:08:47.930 --> 00:08:49.290
+you know, lets me do whatever I was
+
+00:08:49.290 --> 00:08:52.085
+doing with Raindrop, which was a bookmark manager.
+
+00:08:52.305 --> 00:08:53.825
+So I can open links. I can read
+
+00:08:53.825 --> 00:08:55.985
+stuff in Firefox on my browser on my,
+
+00:08:56.385 --> 00:08:58.065
+Android phone, and then I can save all
+
+00:08:58.065 --> 00:09:00.625
+of that in my Org Roam database. Org
+
+00:09:00.625 --> 00:09:02.465
+roam database here means the Org Roam files
+
+00:09:02.465 --> 00:09:03.905
+that I have. Because, again, these are plain
+
+00:09:03.905 --> 00:09:06.140
+text file, I can sync them through mobile
+
+00:09:06.140 --> 00:09:08.780
+phone to my, you know, desktop and laptop
+
+00:09:08.780 --> 00:09:11.340
+and everything else. So that's one place where
+
+00:09:11.340 --> 00:09:13.460
+I kind of, you know, stop, going to
+
+00:09:13.460 --> 00:09:16.860
+a, new application. I just basically ingest everything
+
+00:09:16.860 --> 00:09:19.625
+in my Org Roam setup. The other thing
+
+00:09:19.625 --> 00:09:22.444
+is that, when I'm browsing on my laptop,
+
+00:09:22.985 --> 00:09:25.785
+I still want to, you know, collect all
+
+00:09:25.785 --> 00:09:28.504
+the data inside my Org Roam system. So
+
+00:09:28.504 --> 00:09:30.504
+so here's something which I call Org Roam
+
+00:09:30.504 --> 00:09:33.380
+Sidekick. Now what you can do here is
+
+00:09:33.380 --> 00:09:34.740
+that, let's say, if you want to search
+
+00:09:34.740 --> 00:09:37.380
+for something, so you can basically do a
+
+00:09:37.380 --> 00:09:39.139
+search normally, which is going to do a
+
+00:09:39.139 --> 00:09:41.860
+web search. But if you call Org Roam
+
+00:09:41.860 --> 00:09:44.740
+SK, which is Sidekick, it will do a
+
+00:09:44.740 --> 00:09:48.025
+search on all of your Org Roam notes. So
+
+00:09:48.025 --> 00:09:50.905
+now this search is basically using recoll. So
+
+00:09:50.905 --> 00:09:53.145
+recoll kind of indexes all the plain text
+
+00:09:53.145 --> 00:09:54.925
+and does a full text search for you.
+
+00:09:55.385 --> 00:09:57.145
+But this this is really helpful because when
+
+00:09:57.145 --> 00:09:59.190
+I'm searching for something and I still want
+
+00:09:59.190 --> 00:10:00.550
+to know that, hey, you know, hey, I
+
+00:10:00.550 --> 00:10:03.510
+have saved some of those links earlier. So,
+
+00:10:03.830 --> 00:10:05.350
+can I, like, you know, see them back
+
+00:10:05.350 --> 00:10:07.590
+and then, you know, it's a very
+
+00:10:07.590 --> 00:10:09.990
+good way to kind of not lose track
+
+00:10:09.990 --> 00:10:12.665
+of what you've already saved. The other
+
+00:10:12.665 --> 00:10:13.625
+thing I can do is, like, I can
+
+00:10:13.625 --> 00:10:16.605
+also, you know again, since I have saved
+
+00:10:16.745 --> 00:10:20.185
+a project, in my Org Roam, I can
+
+00:10:20.185 --> 00:10:22.905
+basically call, again, Sidekick again, and I can
+
+00:10:22.905 --> 00:10:26.200
+see a note for that. That note here
+
+00:10:26.200 --> 00:10:28.780
+specifically is tracking my tasks for this project.
+
+00:10:29.240 --> 00:10:30.840
+And other than tasks, you know, again, I
+
+00:10:30.840 --> 00:10:32.920
+can see other things like similar notes. I
+
+00:10:32.920 --> 00:10:36.040
+can see, you know, other links that are
+
+00:10:36.040 --> 00:10:39.665
+there. So yeah, so this, there's still some
+
+00:10:39.665 --> 00:10:41.585
+optimizations to be done. I think this, you
+
+00:10:41.585 --> 00:10:44.385
+know, the bookmark here is not very intuitive.
+
+00:10:44.385 --> 00:10:46.385
+I still want, I want this to be
+
+00:10:46.385 --> 00:10:49.685
+following the browser, as I switch tabs.
+
+00:10:50.160 --> 00:10:51.839
+But, again, those things are something I'll work
+
+00:10:51.839 --> 00:10:55.519
+on. Other optimizations include, you know, the way
+
+00:10:55.519 --> 00:10:59.540
+I'm doing the search using ML that needs
+
+00:10:59.600 --> 00:11:02.735
+a little bit of fine tuning because, every
+
+00:11:02.735 --> 00:11:04.175
+time I make a new link, I have
+
+00:11:04.175 --> 00:11:07.375
+to, like, rerun the, you know, re kind of
+
+00:11:07.375 --> 00:11:09.855
+build the features and everything else, which I,
+
+00:11:10.335 --> 00:11:13.855
+need it to be real time. Yeah. So
+
+00:11:13.855 --> 00:11:16.334
+that concludes my talk. Hope you enjoyed it.
+
+00:11:16.734 --> 00:11:18.355
+Let me know if there are any questions.
+
+00:11:18.814 --> 00:11:19.554
+Thank you.
diff --git a/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt
new file mode 100644
index 00000000..803d43df
--- /dev/null
+++ b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt
@@ -0,0 +1,996 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:04.839
+I'm doing great. Good to hear from you guys. Yeah, I mean,
+
+00:00:04.840 --> 00:00:07.959
+you've been a regular of the show, I would say, for quite a
+
+00:00:07.960 --> 00:00:11.399
+while, and it's good. I really like the retrospective that
+
+00:00:11.400 --> 00:00:14.959
+you did the first time you attended EmacsConf. And when was
+
+00:00:14.960 --> 00:00:18.759
+it? Was it 2015? I can't actually remember. 2015 was when I
+
+00:00:18.760 --> 00:00:22.319
+presented that, but I did an earlier talk the year before. So
+
+00:00:22.320 --> 00:00:25.479
+yeah, that's why it's kind of thing. It's like, wow, it's
+
+00:00:25.480 --> 00:00:31.279
+been a decade. It's been a while. Yeah, and I'm glad that you
+
+00:00:31.280 --> 00:00:35.559
+are in a much better recording situation than you were in
+
+00:00:35.560 --> 00:00:39.439
+2015 at the back of your colleague's house. It's good to see
+
+00:00:39.440 --> 00:00:44.359
+you at your own place. Well, it's also nice to pre-record and
+
+00:00:44.360 --> 00:00:48.239
+then just share. Yeah, I mean, that's why we keep talking
+
+00:00:48.240 --> 00:00:51.519
+about pre-recording. You know, when we really pushed
+
+00:00:51.520 --> 00:00:53.759
+pre-recordings, I think it was five years ago when we
+
+00:00:53.760 --> 00:00:57.679
+started, people were not really liking it. They thought,
+
+00:00:57.680 --> 00:01:00.039
+oh, but most conferences are just asking you to come and
+
+00:01:00.040 --> 00:01:02.919
+chat. And, you know, I don't need to do the pesky
+
+00:01:02.920 --> 00:01:06.319
+pre-recording. But now, and especially for you regulars,
+
+00:01:06.320 --> 00:01:08.359
+you're really starting to realize that pre-recordings are
+
+00:01:08.360 --> 00:01:11.279
+actually amazing for everyone. You're less stressed on the
+
+00:01:11.280 --> 00:01:14.199
+day of the conference. We, the organizers, are way less
+
+00:01:14.200 --> 00:01:16.519
+stressed. So it's a win-win scenario for absolutely
+
+00:01:16.520 --> 00:01:19.359
+everyone in the equation. Okay, so there's some
+
+00:01:19.360 --> 00:01:22.519
+confirmation bias at work, but I'm not really arguing with
+
+00:01:22.520 --> 00:01:27.639
+what Leo says for the record. It may be that we are just that
+
+00:01:27.640 --> 00:01:30.759
+this stoked that we're lying to ourselves by the
+
+00:01:30.760 --> 00:01:33.959
+opportunity that we have to chat with each of you. Sure.
+
+00:01:33.960 --> 00:01:38.759
+Sure. Sure. I have really appreciated all of the, the
+
+00:01:38.760 --> 00:01:43.559
+transcripts. It's been great that, you know, to be able to
+
+00:01:43.560 --> 00:01:46.519
+read and copy and paste and all that kind of thing. Yeah, it's
+
+00:01:46.520 --> 00:01:49.959
+great. So yeah, let's answer some questions here.
+
+00:01:49.960 --> 00:01:58.159
+Let's see. Yeah, just feel free to jump onto the Etherpad and
+
+00:01:58.160 --> 00:02:01.239
+just drop on the questions. I'll keep answering them all day
+
+00:02:01.240 --> 00:02:07.399
+kind of thing and get better answers as we go along.
+
+NOTE Q: What's the largest code base you've ever tackled with the literate approach (esp. Emacs + Org-mode)?
+
+00:02:07.400 --> 00:02:12.439
+So yeah, the first question here is, what's my largest code base?
+
+00:02:12.440 --> 00:02:18.359
+I kind of touched it in my presentation. However, I think
+
+00:02:18.360 --> 00:02:22.439
+someone just went through and did a better count than it
+
+00:02:22.440 --> 00:02:27.879
+looks like. a little bit more. So
+
+00:02:27.880 --> 00:02:32.959
+as I joked about in the video, we've all worked on larger code
+
+00:02:32.960 --> 00:02:36.799
+bases, but that's still, it's kind of significant. So it's
+
+00:02:36.800 --> 00:02:43.679
+not, so yeah, anyway. So let's talk a little bit about
+
+00:02:43.680 --> 00:02:49.519
+searching for functions here. If you've got your functions
+
+00:02:49.520 --> 00:02:53.679
+in your code or code block, well, you can search for the
+
+00:02:53.680 --> 00:02:59.319
+descriptions, you know, as long as you've evaluated it. And
+
+00:02:59.320 --> 00:03:04.519
+so that wasn't so much of a problem, but I did want to like look
+
+00:03:04.520 --> 00:03:07.839
+at the commentary around any function that I would define.
+
+00:03:07.840 --> 00:03:14.039
+And that's where, yeah, you know, the C-x or the
+
+00:03:14.040 --> 00:03:18.919
+C-f to define that function and display it. It won't
+
+00:03:18.920 --> 00:03:22.279
+pull out the literate stuff around it, obviously, it'll
+
+00:03:22.280 --> 00:03:27.159
+only do the doc header. But if you could search for it and find
+
+00:03:27.160 --> 00:03:30.559
+it quick, then it might be just as useful. And I guess that's
+
+00:03:30.560 --> 00:03:36.079
+why I started getting into seeing if I can't tie that into the
+
+00:03:36.080 --> 00:03:40.839
+X ref. you know, just the standard ways. My first part, I
+
+00:03:40.840 --> 00:03:45.799
+noticed that evil has a different way of searching through
+
+00:03:45.800 --> 00:03:50.999
+for looking for code definitions. That was my first foray
+
+00:03:51.000 --> 00:03:53.959
+into it. It's like, oh, that's not a bad idea. Let's hook it up
+
+00:03:53.960 --> 00:03:58.079
+under, you know, in the standard way.
+
+NOTE Q: Have you ever used org-transclusion?
+
+00:03:58.080 --> 00:04:02.279
+Let's see. Have I ever used org-transclusion?
+
+00:04:02.280 --> 00:04:05.319
+No, I haven't, but I think I want to
+
+00:04:05.320 --> 00:04:08.439
+take a look at it. I haven't heard of it before.
+
+NOTE Q: What is your usage of dynamic blocks in such workflows?
+
+00:04:08.440 --> 00:04:16.519
+Let's see. What's my usage of dynamic blocks in my
+
+00:04:16.520 --> 00:04:21.439
+workflows? You know, that's a real good question. I haven't
+
+00:04:21.440 --> 00:04:26.319
+really used them a lot in all of my workflows, but yeah, it's
+
+00:04:26.320 --> 00:04:29.439
+an interesting, you know, we always start.
+
+00:04:29.440 --> 00:04:30.999
+At first, all
+
+00:04:31.000 --> 00:04:33.679
+we're doing is just taking a few notes, then we start
+
+00:04:33.680 --> 00:04:36.039
+organizing, then we've got links, and then we're writing
+
+00:04:36.040 --> 00:04:39.519
+code blocks, and then agendas, and table, you know, we keep
+
+00:04:39.520 --> 00:04:40.999
+building up on it.
+
+00:04:41.000 --> 00:04:44.399
+I guess I haven't really added that to
+
+00:04:44.400 --> 00:04:46.978
+my workflow, but maybe I'll have to come back
+
+00:04:46.979 --> 00:04:48.839
+and report on that.
+
+NOTE Q: Is the minibuffer being deliberately hidden in this video?
+
+00:04:48.840 --> 00:04:51.599
+Is the mini buffer being deliberately hidden in my
+
+00:04:51.600 --> 00:04:57.879
+video? Not deliberately. I recorded it first and
+
+00:04:57.880 --> 00:05:03.759
+accidentally not clipped the video and turned that all off.
+
+00:05:03.760 --> 00:05:07.359
+So I went through and started fixing all of it. But yeah, so
+
+00:05:07.360 --> 00:05:10.759
+you'll notice the mini buffer kind of comes and goes in the
+
+00:05:10.760 --> 00:05:12.444
+video. Sorry about that.
+
+00:05:12.445 --> 00:05:17.340
+So yeah, it wasn't intentional at all.
+
+NOTE Q: What's your take on Emacs+Org vs. Jupyter notebooks (for interactive programming)?
+
+00:05:17.341 --> 00:05:21.839
+What's my take on Emacs Org versus Jupyter? That's a real
+
+00:05:21.840 --> 00:05:29.519
+good question. I've been toying about seeing if I could do
+
+00:05:29.520 --> 00:05:32.479
+everything that some people do with Jupyter notebooks in
+
+00:05:32.480 --> 00:05:36.079
+order. I don't need to do it as much because I'm still kind of
+
+00:05:36.080 --> 00:05:40.319
+doing a lot of list programming and a lot of my DevOps, which
+
+00:05:40.320 --> 00:05:45.559
+is a lot of shell work and a lot of Python. Most of the Jupyter
+
+00:05:45.560 --> 00:05:49.639
+notebooks, they automatically include a lot of things in
+
+00:05:49.640 --> 00:05:56.679
+from either Julia or Python, like NumPy and all the dynamic
+
+00:05:56.680 --> 00:06:01.439
+stuff that's going on there. Since it has a server,
+
+00:06:01.440 --> 00:06:07.439
+it seems like it's running a lot more stuff and then just
+
+00:06:07.440 --> 00:06:10.719
+shipping it back off into the web app. That has been the
+
+00:06:10.720 --> 00:06:16.239
+biggest challenge as I've tried to kind of duplicate that. I
+
+00:06:16.240 --> 00:06:20.439
+don't really know NumPy and all the math stuff and that sort
+
+00:06:20.440 --> 00:06:25.039
+of stuff that well. So trying to do like matrix
+
+00:06:25.040 --> 00:06:27.359
+multiplications and that kind of thing that seemed to be
+
+00:06:27.360 --> 00:06:33.119
+pretty easy in the Jupyter, it's not very easy in Org. I've
+
+00:06:33.120 --> 00:06:36.639
+attempted to kind of work with Julia and the Julia support
+
+00:06:36.640 --> 00:06:45.759
+for Org is really limited it seems. That's the, So, yeah,
+
+00:06:45.760 --> 00:06:49.199
+there's some improvements we could probably make. So, I
+
+00:06:49.200 --> 00:06:53.159
+think if somebody is comfortable with Jupiter, and that
+
+00:06:53.160 --> 00:06:59.039
+seems to work, you may have to stay there. I don't know how
+
+00:06:59.040 --> 00:07:04.679
+easy. I would be curious to try to see what we could do as a
+
+00:07:04.680 --> 00:07:07.799
+community to kind of make that transition a lot easier.
+
+NOTE Q: Do you think any programming language is more suited to literate programming than another?
+
+00:07:07.800 --> 00:07:12.416
+Do you think any programming language
+
+00:07:12.417 --> 00:07:13.559
+is more suited to literate
+
+00:07:13.560 --> 00:07:16.959
+programming than another? Hey, that's a real good
+
+00:07:16.960 --> 00:07:22.359
+question. A lot of mine is with Emacs Lisp, and obviously
+
+00:07:22.360 --> 00:07:27.639
+that's a first-class citizen in Emacs. Go figure, right? So
+
+00:07:27.640 --> 00:07:33.519
+that one certainly works. A lot depends on the support in the
+
+00:07:33.520 --> 00:07:38.199
+OB version for the Babel work. Python is really well
+
+00:07:38.200 --> 00:07:45.599
+supported, and yeah, Emacs Lisp. Others, Shell, you know,
+
+00:07:45.600 --> 00:07:50.439
+it works, but it's hard to get both the values, the variables
+
+00:07:50.440 --> 00:07:53.479
+out of the environment variables into your thing. So most
+
+00:07:53.480 --> 00:07:58.959
+everything is just with the results of output. So, you know,
+
+00:07:58.960 --> 00:08:03.079
+some languages aren't quite as good as others for sure. I
+
+00:08:03.080 --> 00:08:06.879
+would love to see better support for more interesting
+
+00:08:06.880 --> 00:08:10.439
+languages, especially ones that are compiled. I've been
+
+00:08:10.440 --> 00:08:16.639
+dabbling with Rust and like, yeah, what can we do to have Rust
+
+00:08:16.640 --> 00:08:21.559
+more iterative as well? So...
+
+NOTE Q: Do you use inline org function calls and org babel library and such?
+
+00:08:21.560 --> 00:08:29.159
+Do you use inline org function calls in Org Babel library? So
+
+00:08:29.160 --> 00:08:33.599
+I used to do a lot of Org Babel libraries to kind of share
+
+00:08:33.600 --> 00:08:35.639
+things.
+
+00:08:35.640 --> 00:08:46.399
+Yeah. What I. But yeah. Sorry, I'm just kind of thinking
+
+00:08:46.400 --> 00:08:49.839
+through here. I've done a lot of it in the past. There were a
+
+00:08:49.840 --> 00:08:54.919
+lot of bugs in it. Oh, I don't know, eight years ago when I was
+
+00:08:54.920 --> 00:08:59.359
+playing with it. I bet things have improved a lot more and it
+
+00:08:59.360 --> 00:09:04.239
+probably saved me a lot more effort. Right now, most of the
+
+00:09:04.240 --> 00:09:08.639
+literate devops, the devops kind of stuff that I'm doing, is
+
+00:09:08.640 --> 00:09:14.079
+calling a lot of back-end programs and that sort of thing. So
+
+00:09:14.080 --> 00:09:19.359
+the Org Babel kind of has limited help in that regard. And as
+
+00:09:19.360 --> 00:09:23.999
+far as my Emacs work, well, it's just part of the session. So
+
+00:09:24.000 --> 00:09:26.759
+it's going to be available or not. So that hasn't been as
+
+00:09:26.760 --> 00:09:30.559
+helpful either. So it's kind of dropped off. But I bet if
+
+00:09:30.560 --> 00:09:34.519
+you're using something like, say, Python, it might be a lot
+
+00:09:34.520 --> 00:09:36.969
+more helpful.
+
+NOTE Q: How do you handle the cases where org markup may sometimes interfere with some of the code?
+
+00:09:36.970 --> 00:09:40.159
+Another question, how do you handle the cases
+
+00:09:40.160 --> 00:09:43.999
+where markup may sometimes interfere with some of the code
+
+00:09:44.000 --> 00:09:50.559
+in places where you can't escape? Oh, okay. All right. Let me
+
+00:09:50.560 --> 00:09:54.719
+see if I understand the question correctly.
+
+00:09:54.720 --> 00:10:01.759
+When I, like, when I'm making prose, and I'm talking about a
+
+00:10:01.760 --> 00:10:04.839
+function that I've written somewhere else, like, oh, I need
+
+00:10:04.840 --> 00:10:09.439
+to work on this, or this calls this, and yeah, I'll use the
+
+00:10:09.440 --> 00:10:14.839
+tildes or the equal signs on either side to make sure it's.
+
+00:10:14.840 --> 00:10:20.399
+that it's clear that it's code. In my xref, when I'm doing a
+
+00:10:20.400 --> 00:10:27.479
+thing-at-point so it can go look for that symbol, I do look for
+
+00:10:27.480 --> 00:10:31.919
+those things at the end and strip them off so that I can mark it
+
+00:10:31.920 --> 00:10:35.039
+up and still search and it's still okay. I'm not sure if
+
+00:10:35.040 --> 00:10:39.359
+that's the answer to the question. Yeah, clarifying. I'm
+
+00:10:39.360 --> 00:10:41.759
+making prose. I'm talking about a function I've written
+
+00:10:41.760 --> 00:10:47.319
+somewhere else. Yeah, yeah, yeah, that is what I'm talking
+
+00:10:47.320 --> 00:10:53.279
+about, where a function with tildes on either end, and if I do
+
+00:10:53.280 --> 00:10:57.359
+an xref search find for that symbol, it'll strip that off and
+
+00:10:57.360 --> 00:11:01.439
+then still look for the function name, so I can still mark it
+
+00:11:01.440 --> 00:11:06.219
+correctly.
+
+NOTE Q: You said at the start that literate didn't catch on in corporate DevOps - why not?
+
+00:11:06.220 --> 00:11:08.439
+You said at the start that literate didn't catch on in
+
+00:11:08.440 --> 00:11:14.719
+corporate devops, why not? You know,
+
+00:11:14.720 --> 00:11:18.919
+I guess the big thing is not everybody's using Emacs,
+
+00:11:18.920 --> 00:11:20.610
+and I don't think anybody would be
+
+00:11:20.611 --> 00:11:23.651
+doing literate programming if you didn't
+
+00:11:23.652 --> 00:11:25.199
+have Emacs. I mean, you got to have Org, or it just
+
+00:11:25.200 --> 00:11:29.420
+doesn't work that well, right?
+
+NOTE Q: Why not that full stack on Markdown?
+
+00:11:29.421 --> 00:11:36.359
+Why not that full stack on Markdown? Yeah, so I often do a lot
+
+00:11:36.360 --> 00:11:44.279
+of Markdown. I have got, so I've gone through and make my
+
+00:11:44.280 --> 00:11:49.039
+markdown look a lot like Org. So my headers are the same size
+
+00:11:49.040 --> 00:11:54.759
+as org. When I mark, do the triple back ticks, you know, and
+
+00:11:54.760 --> 00:11:59.279
+specify your language, we can now colorize that.
+
+00:11:59.280 --> 00:12:01.521
+So you can kind of now have it
+
+00:12:01.522 --> 00:12:05.679
+syntactically marked up. It would be
+
+00:12:05.680 --> 00:12:11.199
+interesting if we kind of expanded on Markdown so that I
+
+00:12:11.200 --> 00:12:14.479
+could do a C-c twice on it and run that code block.
+
+00:12:14.480 --> 00:12:22.119
+That's a real good idea. Maybe we should work on that.
+
+NOTE Corwin's aside on orgvm
+
+00:12:22.120 --> 00:12:28.039
+How does your management of TODOs, projects, and tasks
+
+00:12:28.040 --> 00:12:31.679
+interact with this literate mindset? I can't believe I'm
+
+00:12:31.680 --> 00:12:33.879
+going to do this, but Howard, I'm going to break right in
+
+00:12:33.880 --> 00:12:37.119
+there because I just can't. I need to talk about that. So this
+
+00:12:37.120 --> 00:12:41.799
+is I bought a domain. And really what I mean is I have this
+
+00:12:41.800 --> 00:12:45.599
+domain if somebody gets some work done in this area. I'm
+
+00:12:45.600 --> 00:12:48.839
+fascinated by this. That's mostly really actually my whole
+
+00:12:48.840 --> 00:12:52.599
+comment. But I just wanted to say, indeed, that is something
+
+00:12:52.600 --> 00:12:56.599
+maybe we should work on. Well said. I think the idea of having
+
+00:12:56.600 --> 00:12:59.559
+something that's full-stack baked around Emacs is pretty
+
+00:12:59.560 --> 00:13:03.079
+fascinating, just thinking about it as some command line
+
+00:13:03.080 --> 00:13:05.639
+tool that we can run to get some work done, and then there are
+
+00:13:05.640 --> 00:13:07.969
+documents involved, and as you know coming back
+
+00:13:07.970 --> 00:13:10.511
+to the kind of corporate
+
+00:13:10.512 --> 00:13:12.759
+sense of some of the things like there...
+
+00:13:12.760 --> 00:13:15.319
+that's a little dicey the same way a free software
+
+00:13:15.320 --> 00:13:19.038
+project raising money for itself is a little dicey.
+
+00:13:19.039 --> 00:13:21.720
+It might be a necessary way to get through
+
+00:13:21.721 --> 00:13:23.882
+certain kinds of things and like
+
+00:13:23.883 --> 00:13:26.559
+what the corporate side of the world brings to the table
+
+00:13:26.560 --> 00:13:31.989
+Here in my mind is that idea of I've got a formal process,
+
+00:13:31.990 --> 00:13:33.830
+like the process itself is an asset.
+
+00:13:33.831 --> 00:13:35.239
+If I were selling my company,
+
+00:13:35.240 --> 00:13:39.399
+that would be visibly of value to outside auditors that
+
+00:13:39.400 --> 00:13:43.257
+would help us arbitrate the sale. It's just empirical.
+
+00:13:43.258 --> 00:13:48.239
+Then tie that together with free software is maybe a little
+
+00:13:48.240 --> 00:13:53.159
+unstated ethos of doing our work in the open, and you might
+
+00:13:53.160 --> 00:13:58.759
+even deal with some of the ick factor. that you know that for a
+
+00:13:58.760 --> 00:14:05.119
+handler. Maybe so, but yeah, the downside to that is you'd
+
+00:14:05.120 --> 00:14:09.679
+still need to use Emacs to run through it, right? You know,
+
+00:14:09.680 --> 00:14:13.719
+for all those cool features, yes, it would be kind of a yet
+
+00:14:13.720 --> 00:14:17.519
+another killer app that we would have. So my domain name is
+
+00:14:17.520 --> 00:14:22.239
+orgvm, and my concept is really put org into a box, build a UI
+
+00:14:22.240 --> 00:14:25.119
+around it, it executes things that manipulate files that
+
+00:14:25.120 --> 00:14:30.239
+generate, let's say, And that's just one conceptual
+
+00:14:30.240 --> 00:14:34.359
+solution. But I really do think this is a super fun topic. And
+
+00:14:34.360 --> 00:14:37.479
+that's the space. I'm not sure my idea is that wonderful. I
+
+00:14:37.480 --> 00:14:42.439
+personally haven't soaked too many weekends into it. But I
+
+00:14:42.440 --> 00:14:45.159
+just love the way you're thinking in terms of, well, we
+
+00:14:45.160 --> 00:14:49.519
+should think more about that. Gosh, that's great to hear.
+
+NOTE Org and Markdown fragmentation
+
+00:14:49.520 --> 00:14:53.399
+Yeah. Yeah, I mean, just like the talk yesterday on the
+
+00:14:53.400 --> 00:14:57.639
+future of org, it's like, let's standardize it. Because,
+
+00:14:57.640 --> 00:15:03.239
+yeah, we don't want to have org fragmented like Markdown is.
+
+00:15:03.240 --> 00:15:06.839
+Markdown is terribly fragmented. You know, everybody's
+
+00:15:06.840 --> 00:15:10.199
+got different implementations. And Yeah, what I've ended
+
+00:15:10.200 --> 00:15:15.039
+up doing, I don't know if you've seen my blog, but I often I'm
+
+00:15:15.040 --> 00:15:19.119
+always just writing an org and talking to myself and writing
+
+00:15:19.120 --> 00:15:22.919
+questions and answers and essays come out of that. And then
+
+00:15:22.920 --> 00:15:26.319
+I'll put them on my web page and easy. It's easy to publish to a
+
+00:15:26.320 --> 00:15:30.079
+web page. Well, I do the same thing at work, but I need to have
+
+00:15:30.080 --> 00:15:33.319
+it marked down. I don't start Markdown though. I'm always
+
+00:15:33.320 --> 00:15:36.479
+starting an org because that, you know, I can really work
+
+00:15:36.480 --> 00:15:40.239
+through the problem space, you know, executing code blocks
+
+00:15:40.240 --> 00:15:44.759
+and making sure they work and all of that sort of stuff. And
+
+00:15:44.760 --> 00:15:47.959
+then I just export to Markdown and then go cleaned up a little
+
+00:15:47.960 --> 00:15:51.679
+bit if I need to. And that makes sense. But I am editing
+
+00:15:51.680 --> 00:15:55.999
+Markdown afterwards. So yeah, it would be nice. It would be
+
+00:15:56.000 --> 00:16:00.359
+nice. It's just, it's all done over here as opposed to, you
+
+00:16:00.360 --> 00:16:02.879
+know, Adding it over there, but yeah, let's think about
+
+00:16:02.880 --> 00:16:06.519
+every bit as much as as that. You know, I jumped in in the
+
+00:16:06.520 --> 00:16:09.959
+spirit of yes, let's think about it. You know, your, your
+
+00:16:09.960 --> 00:16:12.599
+comments about, let's think about the workflows that work
+
+00:16:12.600 --> 00:16:17.919
+for us. Wow. Does that hit home? Right? So great. Yeah. Yeah.
+
+NOTE Q: How does your management of "TODOs" (projects/tasks) interact with this literate mindset, any insightful things you do on that front?
+
+00:16:17.920 --> 00:16:25.279
+Yeah. Okay. So, uh, on to do's and that sort of thing, um. You
+
+00:16:25.280 --> 00:16:32.199
+know, a lot is the same as it was 10 years ago. At the beginning
+
+00:16:32.200 --> 00:16:33.319
+of every sprint,
+
+00:16:33.320 --> 00:16:38.279
+my company, we're using JIRA.
+
+00:16:38.280 --> 00:16:46.159
+All jokes are valid when I say that. But I just go to its web
+
+00:16:46.160 --> 00:16:49.639
+page. I copy all the tasks that I need to do that sprint. I
+
+00:16:49.640 --> 00:16:54.119
+wrote a function that takes that code and reformats it as a
+
+00:16:54.120 --> 00:16:58.199
+bunch of org tasks for me to do that I can just now have all my
+
+00:16:58.200 --> 00:17:02.799
+to-dos. And I start to work off of that from that point on. So
+
+00:17:02.800 --> 00:17:06.479
+it'll reference all the projects, and I do symlinks to every
+
+00:17:06.480 --> 00:17:12.479
+code base that I need to use. Most of the to-dos I put inside my
+
+00:17:12.480 --> 00:17:16.639
+code block is kind of just for me, just so I can remember it.
+
+00:17:16.640 --> 00:17:21.086
+Because the work that I have to do
+
+00:17:21.087 --> 00:17:24.119
+needs to be tracked a little more
+
+00:17:24.120 --> 00:17:30.629
+fine-grained, I guess. Yeah.
+
+NOTE Q: Do you LP also on larger projects?
+
+00:17:30.630 --> 00:17:33.439
+Do I use LP also on larger
+
+00:17:33.440 --> 00:17:37.199
+projects? More files and nested directories? Yeah, I
+
+00:17:37.200 --> 00:17:43.879
+haven't really done nested directories, but I can now. Now
+
+00:17:43.880 --> 00:17:49.839
+that I've now kind of realized that I have the feature that I
+
+00:17:49.840 --> 00:17:54.439
+demonstrated where I can just jump to any projects for a
+
+00:17:54.440 --> 00:17:59.559
+particular project, all the org files and all the headings
+
+00:17:59.560 --> 00:18:02.439
+show up, that works in nested directories.
+
+00:18:02.440 --> 00:18:10.999
+Oh, okay, yeah, somebody's typing it in. Yeah, so it's
+
+00:18:11.000 --> 00:18:15.359
+definitely possible. And I have now, since I recorded the
+
+00:18:15.360 --> 00:18:20.519
+talk, I've been busy typing in and trying to extract that out
+
+00:18:20.520 --> 00:18:24.479
+of my init file and make it into a package. I'm looking for a
+
+00:18:24.480 --> 00:18:30.239
+good name right now. I'm calling it jobs, jump to project
+
+00:18:30.240 --> 00:18:36.399
+sections. Anyway, but yeah, I think that's kind of a nice,
+
+00:18:36.400 --> 00:18:38.935
+useful feature.
+
+NOTE Q: Have you used Cucumber/Gherkin/BDD and do you think it has a strong overlap to what you talked about here?
+
+00:18:38.936 --> 00:18:41.919
+Have I used Cucumber, Gherkin, and other
+
+00:18:41.920 --> 00:18:44.479
+behavior-driven development?
+
+00:18:44.480 --> 00:18:50.719
+Have I, I mean, I do a lot of...
+
+00:18:50.720 --> 00:19:00.279
+more test driven. I do a lot of unit tests and I just put it
+
+00:19:00.280 --> 00:19:04.679
+right in my code base because if it's in my pros, I can just
+
+00:19:04.680 --> 00:19:07.199
+shove it in there. I've got the test right next to the
+
+00:19:07.200 --> 00:19:11.519
+function that I'm testing. I like that so I can kind of see it.
+
+00:19:11.520 --> 00:19:15.359
+I don't tangle it out to that same source file. I tangle it
+
+00:19:15.360 --> 00:19:19.119
+somewhere else if I tangle it at all because I don't need to. I
+
+00:19:19.120 --> 00:19:23.199
+can just, you know, C-c that and run it. I like that
+
+00:19:23.200 --> 00:19:24.879
+aspect of it.
+
+00:19:24.880 --> 00:19:29.319
+Yeah, just keeping things together. That's the big problem
+
+00:19:29.320 --> 00:19:32.479
+I have with a lot of tests is the tests are somewhere else.
+
+00:19:32.480 --> 00:19:35.319
+It's separate from the code. I like seeing it all together,
+
+00:19:35.320 --> 00:19:39.879
+but a lot depends on how extensive it is. So for a lot of the,
+
+00:19:39.880 --> 00:19:43.359
+you know, the tests that we end up doing where, you know,
+
+00:19:43.360 --> 00:19:47.759
+you've got to do a lot of mocks and a lot of startup and tear
+
+00:19:47.760 --> 00:19:51.839
+down, that kind of thing. Yeah, that doesn't help as much.
+
+00:19:51.840 --> 00:19:54.599
+And you probably have to kind of go old school on that.
+
+NOTE 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?
+
+00:19:54.600 --> 00:20:01.359
+What granularity I'm looking for with my org files and my
+
+00:20:01.360 --> 00:20:03.634
+subcontent? That's a real good question
+
+00:20:03.635 --> 00:20:05.255
+and really subjective.
+
+00:20:05.256 --> 00:20:13.159
+I change that over time. I begin by just dumping.
+
+00:20:13.160 --> 00:20:16.378
+I just dump everything in my head into a file
+
+00:20:16.379 --> 00:20:19.679
+and then I go through and start to refine it.
+
+00:20:19.680 --> 00:20:26.159
+My goal at one point was to have an Emacs config file that was
+
+00:20:26.160 --> 00:20:29.919
+really small and simple. And boy, that just doesn't happen.
+
+00:20:29.920 --> 00:20:35.759
+It's just too fun to add things and try new ideas. And I found
+
+00:20:35.760 --> 00:20:41.839
+my files were just littered with good ideas that were
+
+00:20:41.840 --> 00:20:47.119
+half-baked and not finished. And so it's like, oh, I need to
+
+00:20:47.120 --> 00:20:49.959
+extract these and put them into different files so I can keep
+
+00:20:49.960 --> 00:20:54.359
+it clean. And so I think it's like with any code base, you're
+
+00:20:54.360 --> 00:20:58.999
+just going to keep refactoring. It's an iterative process.
+
+00:20:59.000 --> 00:21:04.199
+So having the ability to, like with an Org file, where you can
+
+00:21:04.200 --> 00:21:09.159
+archive a subtree. Okay, this idea didn't pan out. Archive
+
+00:21:09.160 --> 00:21:13.519
+it. I can come back to it later. Being able to just kind of
+
+00:21:13.520 --> 00:21:20.399
+shove it somewhere else is really a nice little feature. All
+
+00:21:20.400 --> 00:21:25.079
+right. Not a question, just a comment. We need more of your
+
+00:21:25.080 --> 00:21:29.239
+insightful posts and videos. Oh, thanks.
+
+00:21:29.240 --> 00:21:35.519
+I appreciate it. Yes, it's been a fun journey. And I think we
+
+00:21:35.520 --> 00:21:38.519
+are coming up on our time, actually. So that is just an
+
+00:21:38.520 --> 00:21:41.919
+amazing quiz. And it helps me from manipulating, as I said,
+
+00:21:41.920 --> 00:21:46.959
+or as I put it earlier, like my chance as an organizer, or not
+
+00:21:46.960 --> 00:21:50.679
+manipulating, monopolizing my chance as an organizer to
+
+00:21:50.680 --> 00:21:53.439
+just get a chance to pick your brain on all kinds of things,
+
+00:21:53.440 --> 00:21:58.959
+which is too kind, too kind. Appreciate it. It's been fun.
+
+00:21:58.960 --> 00:22:04.679
+All right, I'll try answering more questions online as
+
+00:22:04.680 --> 00:22:07.959
+well. All right, talk to you later. And we appreciate your
+
+00:22:07.960 --> 00:22:10.399
+being in a huge resource that you are to the community.
+
+00:22:10.400 --> 00:22:14.199
+Thanks to everyone for tuning in and we'll be coming over to
+
+00:22:14.200 --> 00:22:18.239
+our next talk in just a moment here. And so bear with us
+
+00:22:18.240 --> 00:22:23.239
+through the transition as we slip into, I think it's our, is
+
+00:22:23.240 --> 00:22:26.919
+that our penultimate or our ultimate talk? We have one or two
+
+00:22:26.920 --> 00:22:30.119
+left, I'm not sure. I think we've got a couple of talks left.
+
+00:22:30.120 --> 00:22:34.079
+I'm back. Thank you, Howard. And we will be moving to the next
+
+00:22:34.080 --> 00:22:37.159
+talk in about six minutes. So if you need to grab some coffee,
+
+00:22:37.160 --> 00:22:42.119
+some tea, use the time wisely. And to confirm, we will have
+
+00:22:42.120 --> 00:22:44.319
+one, two, three more talks this afternoon. So there's still
+
+00:22:44.320 --> 00:22:48.160
+plenty to go around. See you in a bit, folks.
diff --git a/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt
new file mode 100644
index 00000000..640735ad
--- /dev/null
+++ b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:35.252
+Introduction
+
+00:01:35.253 --> 00:03:06.331
+Do I still literate?
+
+00:03:06.332 --> 00:04:28.719
+Advantages
+
+00:04:28.720 --> 00:05:24.132
+Disadvantages
+
+00:05:24.133 --> 00:06:24.719
+Ease of typing
+
+00:06:24.720 --> 00:07:22.500
+Keep tangled code sync'd
+
+00:07:22.501 --> 00:08:19.959
+Code evaluation
+
+00:08:19.960 --> 00:09:05.238
+Has that block been eval'd?
+
+00:09:05.239 --> 00:09:26.871
+Evaluating code in a subtree
+
+00:09:26.872 --> 00:10:26.019
+Evaluating code from a distance
+
+00:10:26.020 --> 00:11:26.793
+Navigating by headers
+
+00:11:26.794 --> 00:13:40.479
+Navigating by function names
+
+00:13:40.480 --> 00:14:23.165
+Why literate programming?
+
+00:14:23.166 --> 00:14:55.799
+LP prose isn't comments
+
+00:14:55.800 --> 00:15:51.240
+Summary
diff --git a/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt
new file mode 100644
index 00000000..986320d0
--- /dev/null
+++ b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt
@@ -0,0 +1,724 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:09.359
+Can you believe it's been a decade since I started
+
+00:00:09.360 --> 00:00:12.358
+pontificating on literate programming?
+
+00:00:12.359 --> 00:00:17.542
+I am Howard Abrams. In 2015, I spoke at this EmacsConf
+
+00:00:17.543 --> 00:00:21.705
+where I described my challenges I called Literate DevOps.
+
+00:00:21.706 --> 00:00:25.634
+The conference wasn't completely virtual, even though I was.
+
+00:00:25.635 --> 00:00:29.317
+My city of Portland was suffering a citywide electrical outage
+
+00:00:29.318 --> 00:00:33.479
+and I was without power, so I gave the talk in a corner of my
+
+00:00:33.480 --> 00:00:37.439
+friend's living room. People online asking questions and
+
+00:00:37.440 --> 00:00:41.439
+wondering about literate programming... I also see comments
+
+00:00:41.440 --> 00:00:44.599
+explaining why literate programming hasn't caught on in
+
+00:00:44.600 --> 00:00:49.079
+corporate practice. I often don't engage. I mean, is the
+
+00:00:49.080 --> 00:00:51.599
+online arguments and chatter over ignorance or
+
+00:00:51.600 --> 00:00:56.719
+preference? Sure, we're wired differently. I mean, my
+
+00:00:56.720 --> 00:00:59.559
+favorite programming languages put the parentheses
+
+00:00:59.560 --> 00:01:01.939
+before the function name.
+
+00:01:01.940 --> 00:01:03.800
+Literate programming has come a long way
+
+00:01:03.801 --> 00:01:08.519
+since Knuth proposed it in the 19th century. I feel
+
+00:01:08.520 --> 00:01:12.999
+it's come a long way just in the last 10 years. Obviously,
+
+00:01:13.000 --> 00:01:16.399
+this interest is due to Org. I don't think I would bother if
+
+00:01:16.400 --> 00:01:21.359
+all I had was Knuth's original preprocessor. But since I'm
+
+00:01:21.360 --> 00:01:24.839
+talking to fellow nerds about an open source project
+
+00:01:24.840 --> 00:01:27.919
+without corporate backing, let me change the title of my
+
+00:01:27.920 --> 00:01:32.919
+talk and re-pitch Literate Programming in the 24th and a
+
+00:01:32.920 --> 00:01:35.252
+Half Century!
+
+NOTE Do I still literate?
+
+00:01:35.253 --> 00:01:36.653
+People often ask if I still program that way.
+
+00:01:36.654 --> 00:01:42.759
+I guess they want to know if there's any long-term benefits,
+
+00:01:42.760 --> 00:01:45.919
+for many of our tools and our workflows, while initially
+
+00:01:45.920 --> 00:01:51.079
+tantalizing, often don't last. But yes, when I sit down to
+
+00:01:51.080 --> 00:01:57.759
+write a program, I create a file with an extension of .org.
+
+00:01:57.760 --> 00:02:03.799
+I guess you can say I program literally.
+
+00:02:03.800 --> 00:02:07.359
+Let me be transparent. Do I use literate programming during
+
+00:02:07.360 --> 00:02:12.599
+my day job? Yes, but only for personal tools or for initial
+
+00:02:12.600 --> 00:02:16.759
+investigation. At the end of the sprint, I tangle the file
+
+00:02:16.760 --> 00:02:21.079
+and git commit that. My personal projects, on the other
+
+00:02:21.080 --> 00:02:25.679
+hand, are Org files. Since I can't show you the code from
+
+00:02:25.680 --> 00:02:27.839
+my day job, I'm afraid my example code will have a lot of
+
+00:02:27.840 --> 00:02:31.159
+parentheses.
+
+00:02:31.160 --> 00:02:33.955
+I'm sure you won't mind.
+
+00:02:33.956 --> 00:02:37.356
+I like having my Emacs configuration in Org.
+
+00:02:37.357 --> 00:02:40.359
+It's pretty bling. It has over 8,000
+
+00:02:40.360 --> 00:02:44.559
+lines of code. I know, I can hear the screams and gasps over
+
+00:02:44.560 --> 00:02:49.439
+the network. However, the surrounding prose in Org adds
+
+00:02:49.440 --> 00:02:53.410
+10,000 lines, and those lines are non-wrapped paragraphs.
+
+00:02:53.411 --> 00:02:58.119
+I mean, is that large? Sure, we've all worked on
+
+00:02:58.120 --> 00:03:03.639
+larger, so I guess it's not huge. Come on, it's still
+
+00:03:03.640 --> 00:03:06.331
+significant.
+
+NOTE Advantages
+
+00:03:06.332 --> 00:03:09.799
+Advantages? Look who I'm talking to. I'm sure
+
+00:03:09.800 --> 00:03:14.279
+you know the advantages, but indulge me. I feel that one
+
+00:03:14.280 --> 00:03:16.799
+advantage of literate programming, especially with large
+
+00:03:16.800 --> 00:03:20.279
+code bases, is how you can organize and manage the
+
+00:03:20.280 --> 00:03:24.839
+complexity. Most programming languages tame large bases
+
+00:03:24.840 --> 00:03:29.119
+by putting code in separate files. While Org can too, with
+
+00:03:29.120 --> 00:03:32.279
+Org, we can group related functions together under
+
+00:03:32.280 --> 00:03:35.043
+expandable headlines.
+
+00:03:35.044 --> 00:03:37.279
+Here's one. You can see that
+
+00:03:37.280 --> 00:03:40.706
+I've got different sections grouped together.
+
+00:03:40.707 --> 00:03:43.759
+In my original talk, I mentioned how I would attempt to organize
+
+00:03:43.760 --> 00:03:47.839
+my thoughts before coding. I appreciate how I can look back
+
+00:03:47.840 --> 00:03:53.599
+at my notes. In my Emacs configuration, I review the prose to
+
+00:03:53.600 --> 00:03:57.799
+help memorize key bindings.
+
+00:03:57.800 --> 00:04:01.039
+My section on getting email working with Emacs using
+
+00:04:01.040 --> 00:04:04.079
+notmuch means creating small collections of scripts and
+
+00:04:04.080 --> 00:04:08.199
+configuration files. I can tangle them all from one Org
+
+00:04:08.200 --> 00:04:16.799
+file. I like that I can explain each part separately.
+
+00:04:16.800 --> 00:04:20.879
+You just can't beat having links back to Stack Overflow or
+
+00:04:20.880 --> 00:04:25.519
+that GitHub repo where you stole, I mean, became inspired to
+
+00:04:25.520 --> 00:04:28.719
+write your code.
+
+NOTE Disadvantages
+
+00:04:28.720 --> 00:04:34.279
+Literate programming may push the boundaries of our
+
+00:04:34.280 --> 00:04:38.119
+workflows and revealing some abrasion, but we aren't
+
+00:04:38.120 --> 00:04:41.239
+solely working with Org. We have the flexibility of a Lisp
+
+00:04:41.240 --> 00:04:45.119
+engine to file down those rough parts. You may have your
+
+00:04:45.120 --> 00:04:48.159
+concerns. Perhaps you could reach out to me, and with
+
+00:04:48.160 --> 00:04:54.239
+particular issues, maybe we can figure something out.
+
+00:04:54.240 --> 00:04:57.439
+Here is my list of frictions, and the rest of my talk
+
+00:04:57.440 --> 00:05:02.159
+demonstrates my answers and my hacks. The goal in literate
+
+00:05:02.160 --> 00:05:05.039
+programming with Org is that it should not require more
+
+00:05:05.040 --> 00:05:08.679
+effort than non-literate programming. For instance, I
+
+00:05:08.680 --> 00:05:12.119
+shouldn't have to type much more than regular programming
+
+00:05:12.120 --> 00:05:15.719
+to get my code literate. I also shouldn't have to worry about
+
+00:05:15.720 --> 00:05:20.799
+the state between my Org file and the source code. I want
+
+00:05:20.800 --> 00:05:24.132
+to be able to jump around my code just as easily.
+
+NOTE Ease of typing
+
+00:05:24.133 --> 00:05:28.654
+Let me explain more. I've created some templates using
+
+00:05:28.655 --> 00:05:34.679
+yasnippet. Since I was used to the old org-tempo feature,
+
+00:05:34.680 --> 00:05:37.145
+my habit has all the snippets starting with a
+
+00:05:37.146 --> 00:05:40.759
+< character. I'm not sure if I should demonstrate all of them
+
+00:05:40.760 --> 00:05:45.999
+as you may be doing something similar. I like to build on top
+
+00:05:46.000 --> 00:05:49.999
+of characters to remind me that if I just enter a <s, I
+
+00:05:50.000 --> 00:05:53.519
+need to put in the language. But if I append a mnemonic, I can
+
+00:05:53.520 --> 00:05:56.839
+get a full language. Why not do that with a full function
+
+00:05:56.840 --> 00:06:01.199
+definition? In this case, I'm smooshing one yasnippet
+
+00:06:01.200 --> 00:06:11.679
+inside another one in order to save myself some typing.
+
+00:06:11.680 --> 00:06:15.159
+My point here is to pay attention to what slows you down or
+
+00:06:15.160 --> 00:06:24.719
+hinders you from getting the advantages you want.
+
+NOTE Keep tangled code sync'd
+
+00:06:24.720 --> 00:06:28.399
+Do you ever forget to tangle your code? You can append this
+
+00:06:28.400 --> 00:06:31.519
+code to the bottom of your Org file so that it gets tangled
+
+00:06:31.520 --> 00:06:36.159
+every time you save. I've written a function so I can visit
+
+00:06:36.160 --> 00:06:40.559
+that tangled file and then return. I've grouped all my
+
+00:06:40.560 --> 00:06:45.119
+functions together. I've taken a cue from Charles Choi, you
+
+00:06:45.120 --> 00:06:48.639
+know, kickingvegas, and his Casual feature set. But
+
+00:06:48.640 --> 00:06:52.374
+instead of Transient, I've just made a hydra using
+
+00:06:52.375 --> 00:06:57.399
+the major-mode-hydra package. Anyway, this allows me to use and
+
+00:06:57.400 --> 00:07:00.136
+remember my micro-optimizations.
+
+00:07:00.137 --> 00:07:03.697
+If you set the :comments property to link,
+
+00:07:03.698 --> 00:07:06.999
+the tangled output is back-connected.
+
+00:07:07.000 --> 00:07:11.479
+This allows us to edit the tangled code and have it update the
+
+00:07:11.480 --> 00:07:16.879
+Org file. Personally, I don't like this. My source of truth
+
+00:07:16.880 --> 00:07:22.500
+is the Org file, and I tangle as a one-way diode.
+
+NOTE Code evaluation
+
+00:07:22.501 --> 00:07:25.603
+Often a block of code will reference a variable
+
+00:07:25.604 --> 00:07:29.046
+or call a function to find in another block of code.
+
+00:07:29.047 --> 00:07:31.508
+In my original literate DevOps talk,
+
+00:07:31.509 --> 00:07:34.519
+I discussed how to use the output from one block into
+
+00:07:34.520 --> 00:07:37.799
+another block by naming the first block and referencing it
+
+00:07:37.800 --> 00:07:42.159
+with a :var for the second. However, if all the blocks use the
+
+00:07:42.160 --> 00:07:46.039
+same language, you can use sessions, which create a
+
+00:07:46.040 --> 00:07:51.479
+persistent REPL behind the scenes. Let's evaluate the
+
+00:07:51.480 --> 00:07:53.199
+blocks of Python code in this file.
+
+00:07:53.200 --> 00:08:00.119
+The evaluation created a Python REPL. It's available in
+
+00:08:00.120 --> 00:08:04.279
+another buffer. This buffer matches the name of the
+
+00:08:04.280 --> 00:08:07.959
+session, but with surrounding asterisks. Evaluating a
+
+00:08:07.960 --> 00:08:11.399
+code block sends it into the REPL, and now I can work with my
+
+00:08:11.400 --> 00:08:19.959
+code blocks interactively. (That's not quite right.)
+
+NOTE Has that block been eval'd?
+
+00:08:19.960 --> 00:08:24.039
+I primarily hack on Emacs Lisp, and textual changes to
+
+00:08:24.040 --> 00:08:28.199
+variables, functions, or macros--unless you habitually
+
+00:08:28.200 --> 00:08:31.679
+type C-c C-c--may not represent the state of your
+
+00:08:31.680 --> 00:08:35.439
+machine. A similar effect happens in any language that
+
+00:08:35.440 --> 00:08:39.319
+uses sessions. Sure, I can move the point to a block and
+
+00:08:39.320 --> 00:08:42.799
+evaluate, but I have three functions that allow me to
+
+00:08:42.800 --> 00:08:44.734
+evaluate all blocks in a buffer or all blocks in a subtree,
+
+00:08:44.735 --> 00:08:50.199
+or I can, without moving the point, evaluate any block I see.
+
+00:08:50.200 --> 00:08:54.919
+Now, this function here evaluates all blocks in a buffer.
+
+00:08:54.920 --> 00:08:58.279
+Someone mentioned calling this function when you first
+
+00:08:58.280 --> 00:09:02.359
+load a file. I'm not sure that's a good policy. I mean, have
+
+00:09:02.360 --> 00:09:05.238
+you not written a bug?
+
+NOTE Evaluating code in a subtree
+
+00:09:05.239 --> 00:09:08.559
+Since this function right here
+
+00:09:08.560 --> 00:09:12.039
+evaluates only visible blocks, we can limit what Emacs
+
+00:09:12.040 --> 00:09:18.799
+evaluates to a single Org mode section. For instance, with
+
+00:09:18.800 --> 00:09:23.759
+the cursor in one section, I can evaluate just the blocks in
+
+00:09:23.760 --> 00:09:26.871
+that header section.
+
+NOTE Evaluating code from a distance
+
+00:09:26.872 --> 00:09:29.399
+If I can see a block, why clumsily
+
+00:09:29.400 --> 00:09:33.079
+navigate to it when I can extend the avy project to just jump to
+
+00:09:33.080 --> 00:09:40.479
+it? For instance, let's pull this file up. I can jump to any of
+
+00:09:40.480 --> 00:09:41.639
+the four blocks.
+
+00:09:41.640 --> 00:09:50.319
+I think that's quite slick. Now why navigate to a code block
+
+00:09:50.320 --> 00:09:55.799
+solely to evaluate it? Yes, this is a terrible example, but
+
+00:09:55.800 --> 00:09:59.679
+these three blocks set a variable to different values. So
+
+00:09:59.680 --> 00:10:02.599
+without moving the point, I can evaluate any one of them.
+
+00:10:02.600 --> 00:10:09.719
+To be honest, the reason why I wrote this is because I often
+
+00:10:09.720 --> 00:10:13.999
+forget to evaluate a block after editing it. I've moved on,
+
+00:10:14.000 --> 00:10:17.839
+and I just don't want to jump back. Now, I can just evaluate
+
+00:10:17.840 --> 00:10:22.359
+from a distance. I apologize for the previous terrible
+
+00:10:22.360 --> 00:10:26.019
+examples, but I'm quite pleased with this feature.
+
+NOTE Navigating by headers
+
+00:10:26.020 --> 00:10:30.119
+As I mentioned earlier, in a large code base, we organize code by
+
+00:10:30.120 --> 00:10:33.839
+library or module, and each file contains a class composed
+
+00:10:33.840 --> 00:10:37.119
+of methods, functions, variables, fields, et cetera.
+
+00:10:37.120 --> 00:10:39.999
+Literate programming in Org files allows me to add a
+
+00:10:40.000 --> 00:10:43.159
+semantic organization layer where I can group related
+
+00:10:43.160 --> 00:10:46.919
+concepts under headlines. Now, while this isn't specific
+
+00:10:46.920 --> 00:10:50.799
+to literate programming, I wrote a little user interface to
+
+00:10:50.800 --> 00:10:54.296
+allow me to jump to any heading in any Org file
+
+00:10:54.297 --> 00:10:57.679
+in a particular project.
+
+00:10:57.680 --> 00:11:02.879
+These are the headings in my Emacs configuration project.
+
+00:11:02.880 --> 00:11:06.559
+Notice the file name beforehand, before the colon
+
+00:11:06.560 --> 00:11:09.759
+character. The header name and its parent headers are
+
+00:11:09.760 --> 00:11:14.799
+after. Let me search for the LSP sections. Maybe I only want
+
+00:11:14.800 --> 00:11:20.039
+the one for Python. Now I use ripgrep to search the files and
+
+00:11:20.040 --> 00:11:24.559
+then some Lisp to parse the output. Unless someone has
+
+00:11:24.560 --> 00:11:26.793
+already done this, I should package this up on MELPA.
+
+NOTE Navigating by function names
+
+00:11:26.794 --> 00:11:32.199
+What about jumping directly to the definition of a function,
+
+00:11:32.200 --> 00:11:36.799
+variable, or what have you? We can use Emacs's built-in xref
+
+00:11:36.800 --> 00:11:39.879
+library, but these functions don't understand that the
+
+00:11:39.880 --> 00:11:45.319
+source code is in Org files. When I started using Emacs
+
+00:11:45.320 --> 00:11:49.479
+30-something years ago, I would pre-index my source into
+
+00:11:49.480 --> 00:11:53.799
+tag files, but the dumb-jump project uses the newfangled and
+
+00:11:53.800 --> 00:11:58.319
+faster text search programs like ripgrep to find a symbol in
+
+00:11:58.320 --> 00:12:02.319
+real time. I followed this pattern and wrote an extension
+
+00:12:02.320 --> 00:12:08.119
+to the xref API. Now, I want to jump around my code from both
+
+00:12:08.120 --> 00:12:14.519
+code block or in the surrounding prose. I'm sure it
+
+00:12:14.520 --> 00:12:18.199
+comes as no surprise that my presentation is just an Org
+
+00:12:18.200 --> 00:12:23.919
+file. Let's suppose my cursor is on this symbol. I wrote this
+
+00:12:23.920 --> 00:12:28.079
+function for this demonstration. We can jump to the
+
+00:12:28.080 --> 00:12:30.759
+definition and I can jump back.
+
+00:12:30.760 --> 00:12:37.639
+Notice it jumped into an Org file and back out. References,
+
+00:12:37.640 --> 00:12:42.279
+unlike definitions, is where something is defined and
+
+00:12:42.280 --> 00:12:46.919
+where it's used. Well, you know how the xref system works.
+
+00:12:46.920 --> 00:12:52.679
+Here, I can jump to the definition or where it's
+
+00:12:52.680 --> 00:12:59.519
+used. Of course, and jump back. I think this is cool. This
+
+00:12:59.520 --> 00:13:04.319
+should be a nifty package on MELPA. But my code is specific to
+
+00:13:04.320 --> 00:13:08.799
+Lisp, and I'm not completely sure how to make it general. For
+
+00:13:08.800 --> 00:13:13.399
+instance, what is a symbol? If you know the language, this is
+
+00:13:13.400 --> 00:13:17.679
+obvious. But what should the language be when your cursor is
+
+00:13:17.680 --> 00:13:22.639
+in the prose of an Org file? Python only supports sequences
+
+00:13:22.640 --> 00:13:25.559
+of alphanumeric and underscores, but in Lisp, a symbol can
+
+00:13:25.560 --> 00:13:30.399
+be almost any character sequence. I've been stewing on how
+
+00:13:30.400 --> 00:13:34.479
+to do this. I have ideas like prompting during the first
+
+00:13:34.480 --> 00:13:37.719
+query or scanning the language based on the nearest code
+
+00:13:37.720 --> 00:13:40.479
+block. I think I'm babbling.
+
+NOTE Why literate programming?
+
+00:13:40.480 --> 00:13:47.199
+In true geek fashion, I dived into the details before
+
+00:13:47.200 --> 00:13:52.079
+answering some better questions. In my original Literate
+
+00:13:52.080 --> 00:13:55.479
+DevOps talk, I explained the advantages of initially
+
+00:13:55.480 --> 00:13:58.959
+writing down your thoughts, your plans, goals... the
+
+00:13:58.960 --> 00:14:02.879
+user requirements. But what do you do with all that luscious
+
+00:14:02.880 --> 00:14:06.359
+prose afterwards? Well, you do the same thing you do to your
+
+00:14:06.360 --> 00:14:09.279
+initial code. You refactor that prose.
+
+00:14:09.280 --> 00:14:14.759
+Just because the tech surrounding your code is now a
+
+00:14:14.760 --> 00:14:18.799
+first-class citizen doesn't excuse bad code. You want
+
+00:14:18.800 --> 00:14:23.165
+something more from both your code and your prose.
+
+NOTE LP prose isn't comments
+
+00:14:23.166 --> 00:14:25.586
+The prose of your literate program isn't
+
+00:14:25.587 --> 00:14:28.667
+just regurgitation of the code in the block.
+
+00:14:28.668 --> 00:14:31.527
+You want something more helpful.
+
+00:14:31.528 --> 00:14:35.736
+You're really writing a research paper to yourself.
+
+00:14:35.737 --> 00:14:38.577
+I know what you're thinking. You've seen my Git repos.
+
+00:14:38.578 --> 00:14:41.858
+I'm guilty and not always the best example.
+
+00:14:41.859 --> 00:14:44.559
+However, I do get great joy
+
+00:14:44.560 --> 00:14:48.680
+when I see someone ask about something in Emacs
+
+00:14:48.681 --> 00:14:51.041
+and my response is little more than a link
+
+00:14:51.042 --> 00:14:55.799
+to my online repo that I've rendered as a website.
+
+NOTE Summary
+
+00:14:55.800 --> 00:15:01.199
+I'm out of time. I hope this has been interesting
+
+00:15:01.200 --> 00:15:04.359
+philosophically as well as practically, as I think
+
+00:15:04.360 --> 00:15:08.559
+literate programming is the cat's meow. I'm afraid this
+
+00:15:08.560 --> 00:15:11.879
+summary slide is about my home-baked solutions that fit my
+
+00:15:11.880 --> 00:15:15.119
+needs, but hopefully you can recognize your pain points and
+
+00:15:15.120 --> 00:15:17.839
+address them. If you don't need my Literate
+
+00:15:17.840 --> 00:15:21.479
+DevOps-specific techniques for connecting code blocks, I
+
+00:15:21.480 --> 00:15:25.799
+suggest using sessions by default. I highly recommend
+
+00:15:25.800 --> 00:15:28.399
+looking at your workflow and writing snippets to give you
+
+00:15:28.400 --> 00:15:33.159
+less typing for Org blocks. I now jump by headlines in my
+
+00:15:33.160 --> 00:15:37.479
+projects, but extending xref to support Org files made
+
+00:15:37.480 --> 00:15:40.159
+literate programming as easy as programming the
+
+00:15:40.160 --> 00:15:44.319
+old-fashioned way. I do need to make it more general to put up
+
+00:15:44.320 --> 00:15:47.722
+on MELPA, though. Thanks for watching.
+
+00:15:47.723 --> 00:15:51.240
+Happy hacking, my friends.
diff --git a/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt b/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..b35c8610
--- /dev/null
+++ b/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt
@@ -0,0 +1,1887 @@
+WEBVTT captioned by edrx
+Kind: captions
+Language: en-GB
+
+00:00:00.000 --> 00:00:03.000
+Hi! My name is Eduardo Ochs. I'm the author of
+
+00:00:03.000 --> 00:00:07.000
+an obscure package called eev and I
+
+00:00:07.000 --> 00:00:08.000
+think that it's better to start this
+
+00:00:08.000 --> 00:00:10.000
+presentation by the middle of the story -
+
+00:00:10.000 --> 00:00:12.000
+by this word here: Maxima.
+
+00:00:12.000 --> 00:00:15.000
+Maxima is a computer algebra system
+
+00:00:15.000 --> 00:00:17.000
+that has several interfaces. One
+
+00:00:17.000 --> 00:00:20.000
+of them is WxMaxima, that looks very
+
+00:00:20.000 --> 00:00:24.000
+modern and is very pretty, and it
+
+00:00:24.000 --> 00:00:26.000
+looks like this...
+
+00:00:26.000 --> 00:00:30.000
+it's a cell based interface. We can type
+
+00:00:30.000 --> 00:00:32.000
+an expression here and execute it...
+
+00:00:32.000 --> 00:00:35.000
+here's the result.
+
+00:00:35.000 --> 00:00:38.000
+But I don't like that interface
+
+00:00:38.000 --> 00:00:40.000
+because my memory is very bad, and I type
+
+00:00:40.000 --> 00:00:42.000
+very slowly and with lots of mistakes...
+
+00:00:42.000 --> 00:00:46.000
+so for me this ugly interface that
+
+00:00:46.000 --> 00:00:49.000
+I'm going to show now is much better -
+
+00:00:49.000 --> 00:00:51.000
+and here I'm going to show how I am teaching
+
+00:00:51.000 --> 00:00:54.000
+that ugly interface to beginners.
+
+00:00:54.000 --> 00:00:58.000
+If I type f8 on these three lines here
+
+00:00:58.000 --> 00:01:00.000
+it creates a Maxima running inside Emacs -
+
+00:01:00.000 --> 00:01:04.000
+I mean, using a terminal and running inside
+
+00:01:04.000 --> 00:01:06.000
+a shell buffer in Emacs...
+
+00:01:06.000 --> 00:01:09.000
+and if I type f8 on this other the lines here
+
+00:01:09.000 --> 00:01:15.000
+the 'f8's send lines to Maxima, and, ta-daaa,
+
+00:01:15.000 --> 00:01:20.000
+this small program drew this.
+
+00:01:20.000 --> 00:01:23.000
+I live in Brazil and people in
+
+00:01:23.000 --> 00:01:26.000
+developed countries cannot imagine
+
+00:01:26.000 --> 00:01:29.000
+how are the beginners that we have here...
+
+00:01:29.000 --> 00:01:32.000
+in a sense Brazil is another planet.
+
+00:01:32.000 --> 00:01:35.000
+Let me explain why, and also let me
+
+00:01:35.000 --> 00:01:37.000
+explain why Maxima, why Emacs... because
+
+00:01:37.000 --> 00:01:39.000
+people always say "you should use
+
+00:01:39.000 --> 00:01:41.000
+programs that everyone finds intuitive,
+
+00:01:41.000 --> 00:01:43.000
+like VSCode"...
+
+00:01:43.000 --> 00:01:45.000
+well, I teach Calculus in a bad Campus
+
+00:01:45.000 --> 00:01:47.000
+of a good Federal University in Brazil.
+
+00:01:47.000 --> 00:01:50.000
+My university is called UFF, for
+
+00:01:50.000 --> 00:01:53.000
+Universidade Federal Fluminense.
+
+00:01:53.000 --> 00:01:56.000
+The main campus of UFF is in Niterói,
+
+00:01:56.000 --> 00:02:00.000
+that is a big city near Rio de Janeiro,
+
+00:02:00.000 --> 00:02:03.000
+and I work in a city called Rio das Ostras,
+
+00:02:03.000 --> 00:02:03.000
+that is is a small city 200 Kms away
+
+00:02:03.000 --> 00:02:07.000
+from Rio de Janeiro.
+
+00:02:07.000 --> 00:02:09.000
+I started working there in 2009.
+
+00:02:09.000 --> 00:02:13.000
+My campus gets very little funding -
+
+00:02:13.000 --> 00:02:16.000
+that's a long story that I don't have time
+
+00:02:16.000 --> 00:02:20.000
+to tell now - and we get the
+
+00:02:20.000 --> 00:02:22.000
+students that don't get enough marks in
+
+00:02:22.000 --> 00:02:25.000
+the admission process to go to better places.
+
+00:02:25.000 --> 00:02:30.000
+Also, my campus has two institutes -
+
+00:02:30.000 --> 00:02:33.000
+I call them The Institute of Humanities
+
+00:02:33.000 --> 00:02:35.000
+and The Institute of Inhumanities.
+
+00:02:35.000 --> 00:02:38.000
+Each of our institutes has a small building...
+
+00:02:38.000 --> 00:02:41.000
+the Humanities building has lots of plants and
+
+00:02:41.000 --> 00:02:46.000
+lots of graffittis - I call it the Good Building -
+
+00:02:46.000 --> 00:02:49.000
+and the Inhumanities building has lots
+
+00:02:49.000 --> 00:02:51.000
+of rules and prohibitions, and I call it the
+
+00:02:51.000 --> 00:02:51.000
+Evil Building.
+
+00:02:51.000 --> 00:02:56.000
+I heard that the Inhumanities building
+
+00:02:56.000 --> 00:02:58.000
+has a laboratory with computers, and that
+
+00:02:58.000 --> 00:03:00.000
+it doesn't have any machine that runs Linux...
+
+00:03:00.000 --> 00:03:05.000
+but the Inhumanities building is
+
+00:03:05.000 --> 00:03:07.000
+shrouded in mystery, and basically
+
+00:03:07.000 --> 00:03:09.000
+humans avoid it - only inhumans go there.
+
+00:03:09.000 --> 00:03:12.000
+I only discovered how much "another planet"
+
+00:03:12.000 --> 00:03:15.000
+Brazil is a few months ago. In May and June
+
+00:03:15.000 --> 00:03:18.000
+of this year the federal universities in Brazil
+
+00:03:18.000 --> 00:03:21.000
+paralyzed their activities in a nationwide
+
+00:03:21.000 --> 00:03:23.000
+strike for two months, and during the strike
+
+00:03:23.000 --> 00:03:28.000
+the humanity students occupied the
+
+00:03:28.000 --> 00:03:31.000
+Humanities Building and organized lots
+
+00:03:31.000 --> 00:03:31.000
+of activities there.
+
+00:03:31.000 --> 00:03:34.000
+They asked me if I could give some workshops
+
+00:03:34.000 --> 00:03:36.000
+and I offered two hands-on workshops
+
+00:03:36.000 --> 00:03:40.000
+on Free Software for beginners -
+
+00:03:40.000 --> 00:03:45.000
+basically on Emacs and eev, with
+
+00:03:45.000 --> 00:03:49.000
+tutorials with lots of "try this"s...
+
+00:03:49.000 --> 00:03:54.000
+and, as usual, the students of
+
+00:03:54.000 --> 00:03:56.000
+Computer Science and Engineering ignored
+
+00:03:56.000 --> 00:03:59.000
+the workshop completely, and didn't come...
+
+00:03:59.000 --> 00:04:01.000
+but some students of psychology and of
+
+00:04:01.000 --> 00:04:04.000
+Producão Cultural, which is basically
+
+00:04:04.000 --> 00:04:08.000
+techniques for producing cultural
+
+00:04:08.000 --> 00:04:11.000
+activities, came to workshop... and they LOVED
+
+00:04:11.000 --> 00:04:14.000
+the workshop - they found it FUN.
+
+00:04:14.000 --> 00:04:17.000
+And after the workshop I told the
+
+00:04:17.000 --> 00:04:19.000
+students that there are lots of things
+
+00:04:19.000 --> 00:04:22.000
+that, uh, "everyone knows and I don't",
+
+00:04:22.000 --> 00:04:24.000
+and I would like to learn them,
+
+00:04:24.000 --> 00:04:27.000
+but I find them too hard to learn by myself
+
+00:04:27.000 --> 00:04:29.000
+because I'm a dinosaur - I'm only used to
+
+00:04:29.000 --> 00:04:31.000
+interfaces that are very old,
+
+00:04:31.000 --> 00:04:35.000
+and that are not graphical... and one
+
+00:04:35.000 --> 00:04:37.000
+of the examples of the things that I
+
+00:04:37.000 --> 00:04:39.000
+would like to learn was Canva.
+
+00:04:39.000 --> 00:04:42.000
+And then the student of Produção Cultural
+
+00:04:42.000 --> 00:04:45.000
+taught me Canva in 10 minutes,
+
+00:04:45.000 --> 00:04:54.000
+AND THAT CHANGED MY LIFE.
+
+00:04:54.000 --> 00:04:58.000
+Anyway, again, I'm working in that place,
+
+00:04:58.000 --> 00:05:00.000
+Rio das Ostras, since 2009,
+
+00:05:00.000 --> 00:05:04.000
+and the Computer Science students
+
+00:05:04.000 --> 00:05:06.000
+here know lots of programs and languages
+
+00:05:06.000 --> 00:05:08.000
+that I would like to learn, but in all
+
+00:05:08.000 --> 00:05:11.000
+these 15 years the Computer Science
+
+00:05:11.000 --> 00:05:14.000
+students only helped me twice.
+
+00:05:14.000 --> 00:05:17.000
+It turns out that our Inhumanities
+
+00:05:17.000 --> 00:05:20.000
+students don't have a culture of sharing
+
+00:05:20.000 --> 00:05:26.000
+and helping - but our Humanities students do.
+
+00:05:26.000 --> 00:05:29.000
+Another detail about how much Brazil
+
+00:05:29.000 --> 00:05:30.000
+is another planet...
+
+00:05:30.000 --> 00:05:33.000
+well, I only discovered this very
+
+00:05:33.000 --> 00:05:38.000
+recently, too... my research is in Logic,
+
+00:05:38.000 --> 00:05:40.000
+I sometimes go to conferences, usually in
+
+00:05:40.000 --> 00:05:44.000
+Brazil, very rarely outside, and people
+
+00:05:44.000 --> 00:05:46.000
+here don't bring their laptops to the
+
+00:05:46.000 --> 00:05:49.000
+conferences - we don't have a culture
+
+00:05:49.000 --> 00:05:51.000
+of sitting together with friends
+
+00:05:51.000 --> 00:05:54.000
+or colleagues to learn with them how to
+
+00:05:54.000 --> 00:05:56.000
+use the programs that they use...
+
+00:05:56.000 --> 00:06:01.000
+for example, many of my friends
+
+00:06:01.000 --> 00:06:05.000
+are logicians, so they have to draw
+
+00:06:05.000 --> 00:06:08.000
+lots of diagrams, and I don't know how
+
+00:06:08.000 --> 00:06:13.000
+they use their programs to draw diagrams...
+
+00:06:13.000 --> 00:06:15.000
+I don't know how things are in
+
+00:06:15.000 --> 00:06:18.000
+universities with good computer labs but,
+
+00:06:18.000 --> 00:06:22.000
+anyway, consider these sentences
+
+00:06:22.000 --> 00:06:25.000
+sentences that sort of everybody says...
+
+00:06:25.000 --> 00:06:25.000
+"Everyone knows VSCode",
+
+00:06:25.000 --> 00:06:27.000
+"Everyone knows Jupiter Notebooks",
+
+00:06:27.000 --> 00:06:31.000
+"Everyone draws diagrams with Quiver"...
+
+00:06:31.000 --> 00:06:34.000
+Here these things are not true -
+
+00:06:34.000 --> 00:06:36.000
+and they are not relevant -
+
+00:06:36.000 --> 00:06:40.000
+here knowledge about programs does not
+
+00:06:40.000 --> 00:06:40.000
+propagate... and
+
+00:06:40.000 --> 00:06:43.000
+one of my goals in life is
+
+00:06:43.000 --> 00:06:45.000
+to become friends with some people who
+
+00:06:45.000 --> 00:06:47.000
+know how to use for example, code blocks
+
+00:06:47.000 --> 00:06:50.000
+in Org, and JavaScript, and learn some of
+
+00:06:50.000 --> 00:06:55.000
+their workflows... or, rather one of my
+
+00:06:55.000 --> 00:06:57.000
+goals is to become someone who deserves
+
+00:06:57.000 --> 00:07:02.000
+help.
+
+00:07:02.000 --> 00:07:05.000
+More on Maxima for students...
+
+00:07:05.000 --> 00:07:08.000
+remember: our inhumanities students
+
+00:07:08.000 --> 00:07:10.000
+don't have a culture of sharing and helping
+
+00:07:10.000 --> 00:07:13.000
+but our humanity students do...
+
+00:07:13.000 --> 00:07:16.000
+I've been telling my students - I teach
+
+00:07:16.000 --> 00:07:19.000
+Calculus 2 and 3 here -that they will learn
+
+00:07:19.000 --> 00:07:21.000
+much faster if they learn Maxima,
+
+00:07:21.000 --> 00:07:24.000
+and that people who learn Maxima can take
+
+00:07:24.000 --> 00:07:27.000
+an optional test and earn extra marks
+
+00:07:27.000 --> 00:07:31.000
+in the course, but if they behave
+
+00:07:31.000 --> 00:07:34.000
+as typical inhumanities students -
+
+00:07:34.000 --> 00:07:37.000
+I mean, not asking questions and
+
+00:07:37.000 --> 00:07:39.000
+not helping their colleagues -
+
+00:07:39.000 --> 00:07:42.000
+then I won't help help...
+
+00:07:42.000 --> 00:07:45.000
+Actually it's even worse. I've
+
+00:07:45.000 --> 00:07:47.000
+told my students that my documentation
+
+00:07:47.000 --> 00:07:50.000
+is not good enough yet and every
+
+00:07:50.000 --> 00:07:53.000
+question helps me a lot, so PLEASE ask
+
+00:07:53.000 --> 00:07:57.000
+questions, and I've bagged on my knees...
+
+00:07:57.000 --> 00:08:01.000
+and now I can treat students
+
+00:08:01.000 --> 00:08:02.000
+who don't ask questions as people who
+
+00:08:02.000 --> 00:08:05.000
+won't help someone that they know
+
+00:08:05.000 --> 00:08:08.000
+who is begging on his knees!
+
+00:08:08.000 --> 00:08:12.000
+Now let me explain another word of
+
+00:08:12.000 --> 00:08:15.000
+the title of this presentation.
+
+00:08:15.000 --> 00:08:17.000
+The title of this presentation is
+
+00:08:17.000 --> 00:08:17.000
+"Emacs, eev, and Maxima - Now!"
+
+00:08:17.000 --> 00:08:22.000
+The "Now!" in the title means:
+
+00:08:22.000 --> 00:08:25.000
+in less than one hour and even for people
+
+00:08:25.000 --> 00:08:27.000
+who have never seen a terminal in their lives.
+
+00:08:27.000 --> 00:08:32.000
+Well, my title is a slight exaggeration...
+
+00:08:32.000 --> 00:08:34.000
+it only took less than one hour
+
+00:08:34.000 --> 00:08:37.000
+for one person, who is a school kid
+
+00:08:37.000 --> 00:08:40.000
+from a small City in the North of Brazil,
+
+00:08:40.000 --> 00:08:42.000
+who didn't know anything about programming,
+
+00:08:42.000 --> 00:08:44.000
+but who was competing in the local
+
+00:08:44.000 --> 00:08:50.000
+Math Olympiads, so not a typical person...
+
+00:08:50.000 --> 00:08:53.000
+Now let me tell a story based on
+
+00:08:53.000 --> 00:08:55.000
+real events and based on a real student.
+
+00:08:55.000 --> 00:08:58.000
+The student said: "I have Linux on my
+
+00:08:58.000 --> 00:09:00.000
+laptop, can you help me to do blah1?"
+
+00:09:00.000 --> 00:09:04.000
+I answered: "Sure, do blah2 and blah3..."
+
+00:09:04.000 --> 00:09:10.000
+this was all by chat, I don't remember if
+
+00:09:10.000 --> 00:09:10.000
+by WhatsApp or by Telegram...
+
+00:09:10.000 --> 00:09:13.000
+then one week passes, and the student
+
+00:09:13.000 --> 00:09:16.000
+talks to me again, and the student says:
+
+00:09:16.000 --> 00:09:19.000
+"It doesn't work!", and I answer:
+
+00:09:19.000 --> 00:09:21.000
+"What happens when you do blah4 and blah5?"
+
+00:09:21.000 --> 00:09:28.000
+another week passes, then the student reappears,
+
+00:09:28.000 --> 00:09:29.000
+and he says: "It doesn't work!"
+
+00:09:29.000 --> 00:09:33.000
+and I answer: "Type blah6 and blah7 in
+
+00:09:33.000 --> 00:09:36.000
+the terminal, press ENTER, take a
+
+00:09:36.000 --> 00:09:38.000
+photo of your screen... remember, not a
+
+00:09:38.000 --> 00:09:41.000
+screenshot, it's a photo of your screen...
+
+00:09:41.000 --> 00:09:43.000
+and send it to me." Then the student
+
+00:09:43.000 --> 00:09:46.000
+disappears again, another week passes and
+
+00:09:46.000 --> 00:09:49.000
+the student reappears and says:
+
+00:09:49.000 --> 00:09:50.000
+"How do I open a terminal?"
+
+00:09:50.000 --> 00:09:52.000
+Well, then...
+
+00:09:52.000 --> 00:09:54.000
+PLONK.
+
+00:09:54.000 --> 00:09:57.000
+According to the Jargon file "plonk" is
+
+00:09:57.000 --> 00:10:00.000
+the sound of that a newbie makes as he
+
+00:10:00.000 --> 00:10:02.000
+falls to the bottom of a kill file.
+
+00:10:02.000 --> 00:10:03.000
+I prefer this simpler definition here...
+
+00:10:03.000 --> 00:10:06.000
+for me "plonk" is the sound
+
+00:10:06.000 --> 00:10:08.000
+that a person makes when he, or she, or they
+
+00:10:08.000 --> 00:10:15.000
+hits the bottom of my list of priorities.
+
+00:10:15.000 --> 00:10:19.000
+I've been using this slogan with my
+
+00:10:19.000 --> 00:10:22.000
+students - it sounds much better in
+
+00:10:22.000 --> 00:10:25.000
+Portuguese, sorry... "I am not a telepath,
+
+00:10:25.000 --> 00:10:27.000
+and for me it is 100 times harder to
+
+00:10:27.000 --> 00:10:29.000
+discover the doubts of people who don't
+
+00:10:29.000 --> 00:10:32.000
+talk to me than to discover the doubts of
+
+00:10:32.000 --> 00:10:38.000
+people who do talk to me.
+
+00:10:38.000 --> 00:10:41.000
+There's an interesting thing here in
+
+00:10:41.000 --> 00:10:47.000
+this presentation by Abelson and Sussman.
+
+00:10:47.000 --> 00:10:51.000
+Let me explain now this word of
+
+00:10:51.000 --> 00:10:53.000
+my title, "Emacs"...
+
+00:10:53.000 --> 00:10:56.000
+and the idea is that learning Emacs can
+
+00:10:56.000 --> 00:10:58.000
+mean many things, learning Lisp can mean
+
+00:10:58.000 --> 00:11:03.000
+many things, and in this presentation...
+
+00:11:03.000 --> 00:11:07.000
+oh no, one second...
+
+00:11:07.000 --> 00:11:09.000
+sorry, back.
+
+00:11:09.000 --> 00:11:12.000
+In this presentation they say...
+
+00:11:12.000 --> 00:11:16.000
+"anyone can learn Lisp in one day,
+
+00:11:16.000 --> 00:11:18.000
+except that if they already know Fortran,
+
+00:11:18.000 --> 00:11:20.000
+then it will take three days".
+
+00:11:20.000 --> 00:11:24.000
+And I would add: and if the person
+
+00:11:24.000 --> 00:11:26.000
+is starting with Doom Emacs then it would
+
+00:11:26.000 --> 00:11:28.000
+take take five years.
+
+00:11:28.000 --> 00:11:20.000
+Why? Because the person is using
+
+00:11:20.000 --> 00:11:32.000
+a different notion of Emacs,
+
+00:11:32.000 --> 00:11:35.000
+and a different notion of Lisp.
+
+00:11:35.000 --> 00:11:38.000
+The person is starting by spending five
+
+00:11:38.000 --> 00:11:41.000
+years learning how to configure Emacs, and
+
+00:11:41.000 --> 00:11:43.000
+the person is using Lisp as a very weird
+
+00:11:43.000 --> 00:11:46.000
+configuration language.
+
+00:11:46.000 --> 00:11:48.000
+Usually the people who start by Doom Emacs
+
+00:11:48.000 --> 00:11:51.000
+they start by configuring Emacs,
+
+00:11:51.000 --> 00:11:54.000
+and only then they learn things like
+
+00:11:54.000 --> 00:11:56.000
+defun, etc...
+
+00:11:56.000 --> 00:11:58.000
+and another slogan that I use a lot
+
+00:11:58.000 --> 00:12:01.000
+with my students is that there are
+
+00:12:01.000 --> 00:12:03.000
+many cases in which learning just the
+
+00:12:03.000 --> 00:12:07.000
+thing B takes 200 hours but learning
+
+00:12:07.000 --> 00:12:13.000
+A and then B takes just 20 hours.
+
+00:12:13.000 --> 00:12:16.000
+Here are some kinds of beginners
+
+00:12:16.000 --> 00:12:19.000
+that I do not want to help.
+
+00:12:19.000 --> 00:12:21.000
+First example: a person who says "I can't
+
+00:12:21.000 --> 00:12:24.000
+read that page - it has too many links".
+
+00:12:24.000 --> 00:12:27.000
+Second example: a person who says
+
+00:12:27.000 --> 00:12:29.000
+"I don't want to read anything and
+
+00:12:29.000 --> 00:12:31.000
+I don't want to learn anything,
+
+00:12:31.000 --> 00:12:32.000
+I want something that just works".
+
+00:12:32.000 --> 00:12:36.000
+And third example: "I don't want to
+
+00:12:36.000 --> 00:12:38.000
+look at examples, you need to summarize
+
+00:12:38.000 --> 00:12:40.000
+everything to me in one paragraph".
+
+00:12:40.000 --> 00:12:43.000
+There are more explanations on
+
+00:12:43.000 --> 00:12:47.000
+these kinds of beginners at my page
+
+00:12:47.000 --> 00:12:49.000
+about this presentation - here.
+
+00:12:49.000 --> 00:12:53.000
+And here is one kind of beginner
+
+00:12:53.000 --> 00:12:54.000
+that I really want to help.
+
+00:12:54.000 --> 00:12:57.000
+Beginners that are nerdy kids
+
+00:12:57.000 --> 00:13:00.000
+who are used to:
+
+00:13:00.000 --> 00:13:03.000
+reading materials that are too advanced for them,
+
+00:13:03.000 --> 00:13:05.000
+understanding only a few percent of what they read,
+
+00:13:05.000 --> 00:13:10.000
+remembering just a tiny fraction of what they read,
+
+00:13:10.000 --> 00:13:14.000
+going to back to these materials later,
+
+00:13:14.000 --> 00:13:19.000
+and taking notes about what they read...
+
+00:13:19.000 --> 00:13:22.000
+and who are also always interested in
+
+00:13:22.000 --> 00:13:25.000
+experimenting with new ways of taking notes,
+
+00:13:25.000 --> 00:13:28.000
+transcribing, summarizing and saving links
+
+00:13:28.000 --> 00:13:32.000
+to primary sources.
+
+00:13:32.000 --> 00:13:36.000
+I'd like to say something about how
+
+00:13:36.000 --> 00:13:38.000
+I've been plonking the paragraph people...
+
+00:13:38.000 --> 00:13:40.000
+who are the people who say:
+
+00:13:40.000 --> 00:13:43.000
+"I don't want to look at examples,
+
+00:13:43.000 --> 00:13:45.000
+you need to summarize everything to me
+
+00:13:45.000 --> 00:13:45.000
+in one paragraph".
+
+00:13:45.000 --> 00:13:48.000
+Well, I'm a mathematician...
+
+00:13:48.000 --> 00:13:50.000
+I work with lots of things
+
+00:13:50.000 --> 00:13:52.000
+that can only be summarized in a paragraph
+
+00:13:52.000 --> 00:13:55.000
+if we choose the level of who
+
+00:13:55.000 --> 00:13:57.000
+we are talking to...
+
+00:13:57.000 --> 00:13:59.000
+so we have many different
+
+00:13:59.000 --> 00:14:02.000
+one-paragraph summaries,
+
+00:14:02.000 --> 00:14:04.000
+one for each level...
+
+00:14:04.000 --> 00:14:06.000
+and in many cases this sentence,
+
+00:14:06.000 --> 00:14:08.000
+"you need to summarize it
+
+00:14:08.000 --> 00:14:10.000
+in one paragraph", is WRONG -
+
+00:14:10.000 --> 00:14:13.000
+the person means I want to learn a lot
+
+00:14:13.000 --> 00:14:15.000
+in 10 minutes - and this needs diagrams
+
+00:14:15.000 --> 00:14:18.000
+animations, AND EXAMPLES.
+
+00:14:18.000 --> 00:14:21.000
+This is an example of something
+
+00:14:21.000 --> 00:14:24.000
+in mathematics - in category Theory -
+
+00:14:24.000 --> 00:14:27.000
+I only understood after too many time -
+
+00:14:27.000 --> 00:14:29.000
+after zillions of years...
+
+00:14:29.000 --> 00:14:30.000
+It is called The Yoneda Lemma.
+
+00:14:30.000 --> 00:14:32.000
+This is the general case -
+
+00:14:32.000 --> 00:14:35.000
+this small thing here...
+
+00:14:35.000 --> 00:14:40.000
+but I only understood it after
+
+00:14:40.000 --> 00:14:45.000
+understanding many particular cases, and
+
+00:14:45.000 --> 00:14:49.000
+then organizing them in a way in which
+
+00:14:49.000 --> 00:14:52.000
+different figures had similar shapes...
+
+00:14:52.000 --> 00:14:56.000
+and the textual explanations
+
+00:14:56.000 --> 00:14:58.000
+for the Yoneda Lemma - the one paragraph
+
+00:14:58.000 --> 00:15:00.000
+explanations, or the many paragraph
+
+00:15:00.000 --> 00:15:04.000
+explanations - never helped the much...
+
+00:15:04.000 --> 00:15:07.000
+they contained formulas...
+
+00:15:07.000 --> 00:15:10.000
+in mathematics, but written linearly...
+
+00:15:10.000 --> 00:15:12.000
+that had too many symbols...
+
+00:15:12.000 --> 00:15:15.000
+and my mental buffer is very small...
+
+00:15:15.000 --> 00:15:18.000
+and I had to find several tricks to reduce
+
+00:15:18.000 --> 00:15:21.000
+the cognitive overload of all these ideas.
+
+00:15:21.000 --> 00:15:24.000
+For example, I had to name the symbols
+
+00:15:24.000 --> 00:15:29.000
+consecutively, like A, B, C,
+
+00:15:29.000 --> 00:15:31.000
+so there's a kind of a temporal order
+
+00:15:31.000 --> 00:15:34.000
+in which the symbols that appear first
+
+00:15:34.000 --> 00:15:37.000
+have initial letters...
+
+00:15:37.000 --> 00:15:40.000
+I had to find a way to put
+
+00:15:40.000 --> 00:15:42.000
+an archetypal case and the general case
+
+00:15:42.000 --> 00:15:43.000
+side to side -
+
+00:15:43.000 --> 00:15:45.000
+they have the same "shape"...
+
+00:15:45.000 --> 00:15:47.000
+I had to find good conventions
+
+00:15:47.000 --> 00:15:49.000
+for fonts and types...
+
+00:15:49.000 --> 00:15:51.000
+I had to choose good meanings
+
+00:15:51.000 --> 00:15:53.000
+for what it means...
+
+00:15:53.000 --> 00:15:57.000
+sorry, for what are vertical arrows,
+
+00:15:57.000 --> 00:16:01.000
+what are horizontal arrows, and so on...
+
+00:16:01.000 --> 00:16:06.000
+and what is "above without an arrow"...
+
+00:16:06.000 --> 00:16:09.000
+So, how much detail should we include
+
+00:16:09.000 --> 00:16:12.000
+in our technical explanations?
+
+00:16:12.000 --> 00:16:14.000
+Well there are many measures
+
+00:16:14.000 --> 00:16:17.000
+for cognitive (over)load...
+
+00:16:17.000 --> 00:16:20.000
+For example, I asked many technical questions
+
+00:16:20.000 --> 00:16:21.000
+on the Maxima mailing list
+
+00:16:21.000 --> 00:16:24.000
+that got answers that included
+
+00:16:24.000 --> 00:16:27.000
+snippets and names of of Lisp functions...
+
+00:16:27.000 --> 00:16:29.000
+in Common Lisp, because Maxima is written
+
+00:16:29.000 --> 00:16:32.000
+in Common Lisp... and I liked that...
+
+00:16:32.000 --> 00:16:35.000
+and I asked some some technical questions
+
+00:16:35.000 --> 00:16:35.000
+on the Org mailing list
+
+00:16:35.000 --> 00:16:37.000
+and on the Hyperbole mailing list,
+
+00:16:37.000 --> 00:16:40.000
+and usually I got answers
+
+00:16:40.000 --> 00:16:43.000
+that avoided the technical details...
+
+00:16:43.000 --> 00:16:45.000
+note that I chose the term "avoided"
+
+00:16:45.000 --> 00:16:47.000
+to denote frustration...
+
+00:16:47.000 --> 00:16:50.000
+by the way, if one of my students panics
+
+00:16:50.000 --> 00:16:54.000
+on this part here...
+
+00:16:54.000 --> 00:16:56.000
+"After setting the user and password
+
+00:16:56.000 --> 00:16:57.000
+you will get a Unix prompt"...
+
+00:16:57.000 --> 00:17:01.000
+if the student panics on this
+
+00:17:01.000 --> 00:17:05.000
+and does not know what to ask
+
+00:17:05.000 --> 00:17:07.000
+and just gives up, then...
+
+00:17:07.000 --> 00:17:09.000
+plonk.
+
+00:17:09.000 --> 00:17:13.000
+So... I was talking a lot about
+
+00:17:13.000 --> 00:17:15.000
+plonking people...
+
+00:17:15.000 --> 00:17:16.000
+What's left after plonking many people?
+
+00:17:16.000 --> 00:17:19.000
+Well, several kinds of beginners
+
+00:17:19.000 --> 00:17:21.000
+that I want to interact with...
+
+00:17:21.000 --> 00:17:26.000
+note that "kinds" is plural...
+
+00:17:26.000 --> 00:17:30.000
+Also, I get a definition for the term
+
+00:17:30.000 --> 00:17:32.000
+"beginners"... think on books...
+
+00:17:32.000 --> 00:17:37.000
+technical books, that start with
+
+00:17:37.000 --> 00:17:38.000
+"This book is written for the persons
+
+00:17:38.000 --> 00:17:40.000
+of the types such and such"...
+
+00:17:40.000 --> 00:17:43.000
+Maybe several definitions
+
+00:17:43.000 --> 00:17:47.000
+for the term "beginners"...
+
+00:17:47.000 --> 00:17:49.000
+also, a metric that lets me choose between
+
+00:17:49.000 --> 00:17:52.000
+options A, B and C when I'm trying to
+
+00:17:52.000 --> 00:17:55.000
+write material for my beginners...
+
+00:17:55.000 --> 00:18:00.000
+for example, here, again...
+
+00:18:00.000 --> 00:18:04.000
+should I explain what is a Unix prompt?
+
+00:18:04.000 --> 00:18:07.000
+No!!!
+
+00:18:07.000 --> 00:18:09.000
+Why "no"?
+
+00:18:09.000 --> 00:18:11.000
+Well, let me use another example.
+
+00:18:11.000 --> 00:18:16.000
+This one I took from a discussion on IRC...
+
+00:18:16.000 --> 00:18:18.000
+we were helping a certain beginner
+
+00:18:18.000 --> 00:18:20.000
+that was there...
+
+00:18:20.000 --> 00:18:24.000
+and one person suggested to the beginner
+
+00:18:24.000 --> 00:18:27.000
+to do this: type M-:, and then this
+
+00:18:27.000 --> 00:18:29.000
+thing here, and then ENTER.
+
+00:18:29.000 --> 00:18:33.000
+And I suggested this instead.
+
+00:18:33.000 --> 00:18:35.000
+Copy this expression to your notes,
+
+00:18:35.000 --> 00:18:38.000
+and then type C-e C-x C-e...
+
+00:18:38.000 --> 00:18:42.000
+and the mnemonic for C-e C-x C-e is
+
+00:18:42.000 --> 00:18:44.000
+C-exe, for "execute".
+
+00:18:44.000 --> 00:18:47.000
+And then... for me the option 1,
+
+00:18:47.000 --> 00:18:50.000
+this option here, is very costly,
+
+00:18:50.000 --> 00:18:53.000
+because the person has to type a lot
+
+00:18:53.000 --> 00:18:55.000
+without errors,
+
+00:18:55.000 --> 00:18:59.000
+and then after running that
+
+00:18:59.000 --> 00:19:03.000
+and reading this page here...
+
+00:19:03.000 --> 00:19:06.000
+the way of going back to that page is gone.
+
+00:19:06.000 --> 00:19:08.000
+So the person has to commit lots
+
+00:19:08.000 --> 00:19:10.000
+of information to memory -
+
+00:19:10.000 --> 00:19:13.000
+either the person learns from this page
+
+00:19:13.000 --> 00:19:16.000
+everything that she needs or the person
+
+00:19:16.000 --> 00:19:20.000
+memorizes how to go there the next time....
+
+00:19:20.000 --> 00:19:24.000
+and for me the option 2 - this one:
+
+00:19:24.000 --> 00:19:27.000
+put this in your notes and then
+
+00:19:27.000 --> 00:19:29.000
+execute it with C-exe -
+
+00:19:29.000 --> 00:19:32.000
+is much better, because the person
+
+00:19:32.000 --> 00:19:34.000
+commits information to notes,
+
+00:19:34.000 --> 00:19:36.000
+and the person learns a way to return
+
+00:19:36.000 --> 00:19:40.000
+to this node of the manual later...
+
+00:19:40.000 --> 00:19:45.000
+and with this the person learns
+
+00:19:45.000 --> 00:19:47.000
+another way to use her notes.
+
+00:19:47.000 --> 00:19:50.000
+I have a lot of material about that...
+
+00:19:50.000 --> 00:19:52.000
+see for example this page here -
+
+00:19:52.000 --> 00:19:54.000
+there's a link to it
+
+00:19:54.000 --> 00:19:56.000
+in my page for this talk...
+
+00:19:56.000 --> 00:19:58.000
+also, I live in a place in which
+
+00:19:58.000 --> 00:20:00.000
+the people who find my instructions
+
+00:20:00.000 --> 00:20:03.000
+too complex or too boring
+
+00:20:03.000 --> 00:20:06.000
+disappear - either for months or forever...
+
+00:20:06.000 --> 00:20:08.000
+So if I give an instruction
+
+00:20:08.000 --> 00:20:10.000
+that the person cannot understand
+
+00:20:10.000 --> 00:20:13.000
+and the person gives up
+
+00:20:13.000 --> 00:20:15.000
+I lose the person...
+
+00:20:15.000 --> 00:20:18.000
+Now let me do some things in a weird order.
+
+00:20:18.000 --> 00:20:20.000
+In a normal presentation this would be
+
+00:20:20.000 --> 00:20:22.000
+the conclusion, and it would be presented
+
+00:20:22.000 --> 00:20:24.000
+at the end...
+
+00:20:24.000 --> 00:20:26.000
+but I will present it now,
+
+00:20:26.000 --> 00:20:28.000
+before the technical details.
+
+00:20:28.000 --> 00:20:31.000
+So, I was teaching Emacs, eev and Maxima
+
+00:20:31.000 --> 00:20:34.000
+for students... did it work well?
+
+00:20:34.000 --> 00:20:36.000
+Well... sort of, but in a weird way.
+
+00:20:36.000 --> 00:20:39.000
+Many students decided to take my test
+
+00:20:39.000 --> 00:20:42.000
+on Emacs, eev, and Maxima...
+
+00:20:42.000 --> 00:20:45.000
+let me consider only the 35 students
+
+00:20:45.000 --> 00:20:48.000
+in the two last semesters that were able
+
+00:20:48.000 --> 00:20:51.000
+to do what I asked, that was to use a link
+
+00:20:51.000 --> 00:20:56.000
+like this one to go to my notes...
+
+00:20:56.000 --> 00:20:59.000
+they had to go to a specific small program
+
+00:20:59.000 --> 00:21:02.000
+in Maxima, copy that program to their notes,
+
+00:21:02.000 --> 00:21:04.000
+modify it a bit to make it solve
+
+00:21:04.000 --> 00:21:06.000
+a slightly different problem,
+
+00:21:06.000 --> 00:21:08.000
+and then save the new program.
+
+00:21:08.000 --> 00:21:11.000
+So it was mostly a test on the interface,
+
+00:21:11.000 --> 00:21:14.000
+and to test if they knew some
+
+00:21:14.000 --> 00:21:16.000
+very basic things on Maxima...
+
+00:21:16.000 --> 00:21:19.000
+but of these 35 students only 10 students
+
+00:21:19.000 --> 00:21:21.000
+asked questions on the Telegram group...
+
+00:21:21.000 --> 00:21:24.000
+Mostly they discussed
+
+00:21:24.000 --> 00:21:27.000
+with other students...
+
+00:21:27.000 --> 00:21:30.000
+sometimes live - they would bring
+
+00:21:30.000 --> 00:21:34.000
+their laptops to the university to discuss...
+
+00:21:34.000 --> 00:21:37.000
+they only do that very rarely,
+
+00:21:37.000 --> 00:21:40.000
+but they brought it...
+
+00:21:40.000 --> 00:21:42.000
+other times they would discuss
+
+00:21:42.000 --> 00:21:44.000
+with their colleagues on Discord...
+
+00:21:44.000 --> 00:21:47.000
+but I got very little feedback
+
+00:21:47.000 --> 00:21:50.000
+for my usability test.
+
+00:21:50.000 --> 00:21:52.000
+So my experiment failed - in the sense
+
+00:21:52.000 --> 00:21:55.000
+that I didn't get the feedback
+
+00:21:55.000 --> 00:21:57.000
+that I expected - I only got a fraction
+
+00:21:57.000 --> 00:21:59.000
+of the feedback that I expected...
+
+00:21:59.000 --> 00:22:03.000
+...but I learned lots of things.
+
+00:22:03.000 --> 00:22:06.000
+Well, I got very angry, very frustrated,
+
+00:22:06.000 --> 00:22:08.000
+but I saw that I can't invest a lot of energy
+
+00:22:08.000 --> 00:22:11.000
+on students who... how do I say?
+
+00:22:11.000 --> 00:22:13.000
+who "won't talk to me".
+
+00:22:13.000 --> 00:22:16.000
+then I decided to make contact
+
+00:22:16.000 --> 00:22:19.000
+with some schools - secondary schools -
+
+00:22:19.000 --> 00:22:21.000
+and to make a long story short...
+
+00:22:21.000 --> 00:22:25.000
+in one of the schools I was
+
+00:22:25.000 --> 00:22:27.000
+very well received...
+
+00:22:27.000 --> 00:22:29.000
+the students asked lots of questions,
+
+00:22:29.000 --> 00:22:31.000
+and in the middle of the discussion
+
+00:22:31.000 --> 00:22:35.000
+we were discussing this little program here,
+
+00:22:35.000 --> 00:22:37.000
+that splits the the frame in two windows
+
+00:22:37.000 --> 00:22:38.000
+and displays the file ~/HELP
+
+00:22:38.000 --> 00:22:41.000
+in the window at the right...
+
+00:22:41.000 --> 00:22:46.000
+and I showed them Elisp tutorial,
+
+00:22:46.000 --> 00:22:50.000
+that starts... here...
+
+00:22:50.000 --> 00:22:55.000
+and right in its third section
+
+00:22:55.000 --> 00:22:57.000
+it explains 'quote'.
+
+00:22:57.000 --> 00:23:00.000
+So, I had to explain to them
+
+00:23:00.000 --> 00:23:03.000
+how we can use quote to pass...
+
+00:23:03.000 --> 00:23:07.000
+to avoid evaluating a program...
+
+00:23:07.000 --> 00:23:09.000
+we can use quote to pass unevaluated
+
+00:23:09.000 --> 00:23:11.000
+programs as arguments...
+
+00:23:11.000 --> 00:23:13.000
+and quote blew their minds,
+
+00:23:13.000 --> 00:23:16.000
+and I was amazed by their questions,
+
+00:23:16.000 --> 00:23:18.000
+and I saw more clearly that the campus
+
+00:23:18.000 --> 00:23:20.000
+in which I work is a hole,
+
+00:23:20.000 --> 00:23:22.000
+and that I need to do more things outside.
+
+00:23:22.000 --> 00:23:25.000
+Now let's see some technical details.
+
+00:23:25.000 --> 00:23:28.000
+What exactly am I teaching to
+
+00:23:28.000 --> 00:23:20.000
+these students?
+
+00:23:20.000 --> 00:23:32.000
+Basically, my old tutorial for eev
+
+00:23:32.000 --> 00:23:36.000
+was this one... it started with a
+
+00:23:36.000 --> 00:23:39.000
+section on installing eev, and then it
+
+00:23:39.000 --> 00:23:42.000
+explained Lisp, and how to use
+
+00:23:42.000 --> 00:23:44.000
+elisp hyperlinks...
+
+00:23:44.000 --> 00:23:46.000
+and then lots of other things...
+
+00:23:46.000 --> 00:23:49.000
+but I'm using this new tutorial here,
+
+00:23:49.000 --> 00:23:51.000
+that I am not announcing in many places
+
+00:23:51.000 --> 00:23:54.000
+because I wanted to test it a lot
+
+00:23:54.000 --> 00:23:59.000
+before making it very public...
+
+00:23:59.000 --> 00:24:04.000
+and it starts with other installation
+
+00:24:04.000 --> 00:24:06.000
+instructions, that start with
+
+00:24:06.000 --> 00:24:11.000
+instructions for installing WSL
+
+00:24:11.000 --> 00:24:13.000
+on a machine with Windows,
+
+00:24:13.000 --> 00:24:16.000
+and then installing Debian there
+
+00:24:16.000 --> 00:24:19.000
+and then after that people have to install
+
+00:24:19.000 --> 00:24:26.000
+Emacs, and then they have to install eev...
+
+00:24:26.000 --> 00:24:30.000
+And I'm also using this map here,
+
+00:24:30.000 --> 00:24:32.000
+that I'm reorganizing,
+
+00:24:32.000 --> 00:24:34.000
+so it's going to change a lot
+
+00:24:34.000 --> 00:24:36.000
+in the next days...
+
+00:24:36.000 --> 00:24:40.000
+it has a 2-dimensional map here,
+
+00:24:40.000 --> 00:24:44.000
+and it has lots of things that I'm putting
+
+00:24:44.000 --> 00:24:46.000
+in a single place to make it easier
+
+00:24:46.000 --> 00:24:49.000
+to answer questions, and to show
+
+00:24:49.000 --> 00:24:51.000
+to the students that I have answers
+
+00:24:51.000 --> 00:24:56.000
+for the most common questions...
+
+00:24:56.000 --> 00:24:59.000
+Remember, my target audience
+
+00:24:59.000 --> 00:25:02.000
+is mostly composed of beginners who have
+
+00:25:02.000 --> 00:25:04.000
+never seen a terminal in their lives,
+
+00:25:04.000 --> 00:25:06.000
+and that get bored very quickly...
+
+00:25:06.000 --> 00:25:10.000
+and when they get bored they disappear.
+
+00:25:10.000 --> 00:25:15.000
+What are my main goals for the first day?
+
+00:25:15.000 --> 00:25:19.000
+I want them to "install everything",
+
+00:25:19.000 --> 00:25:22.000
+where "everything" means WSL on their
+
+00:25:22.000 --> 00:25:27.000
+Windows machines, then Debian, Emacs, eev,
+
+00:25:27.000 --> 00:25:32.000
+lots of Debian packages that they install
+
+00:25:32.000 --> 00:25:44.000
+with this block here...
+
+00:25:44.000 --> 00:25:47.000
+After that they need to run
+
+00:25:47.000 --> 00:25:51.000
+some Maxima programs, and some test blocks...
+
+00:25:51.000 --> 00:25:53.000
+and configure Emacs, and create a first set
+
+00:25:53.000 --> 00:25:57.000
+of executable notes, and I consider
+
+00:25:57.000 --> 00:25:59.000
+that after that the person is
+
+00:25:59.000 --> 00:26:01.000
+autonomous.
+
+00:26:01.000 --> 00:26:04.000
+I said that the students
+
+00:26:04.000 --> 00:26:05.000
+learn how to "Run some Maxima programs".
+
+00:26:05.000 --> 00:26:07.000
+Let me be more precise about that.
+
+00:26:07.000 --> 00:26:09.000
+The first step is something
+
+00:26:09.000 --> 00:26:14.000
+that I call "The 5-minute workshop"...
+
+00:26:14.000 --> 00:26:17.000
+it happens in the classroom,
+
+00:26:17.000 --> 00:26:20.000
+on my laptop, and I make the students
+
+00:26:20.000 --> 00:26:20.000
+run this.
+
+00:26:20.000 --> 00:26:24.000
+Actually in a first moment I run
+
+00:26:24.000 --> 00:26:27.000
+this thing here, and then I ask them
+
+00:26:27.000 --> 00:26:30.000
+to run it themselves.
+
+00:26:30.000 --> 00:26:35.000
+So: I type f8 on these three things here,
+
+00:26:35.000 --> 00:26:37.000
+we get a target buffer running Maxima,
+
+00:26:37.000 --> 00:26:40.000
+then I type f8 several other times here...
+
+00:26:40.000 --> 00:26:42.000
+when I type f8 here it opens a GNUPlot
+
+00:26:42.000 --> 00:26:46.000
+window, that I have to close
+
+00:26:46.000 --> 00:26:49.000
+by typing 'q' here...
+
+00:26:49.000 --> 00:26:51.000
+and that's it. And then I say:
+
+00:26:51.000 --> 00:26:53.000
+now it's your turn. And the students go there,
+
+00:26:53.000 --> 00:26:56.000
+they type f8 three times, and then they
+
+00:26:56.000 --> 00:27:03.000
+type f8 f8 f8 f8 f8 f8 f8 q f8 q...
+
+00:27:03.000 --> 00:27:07.000
+The second step is similar -
+
+00:27:07.000 --> 00:27:09.000
+is another individual workshop,
+
+00:27:09.000 --> 00:27:01.000
+also just a few minutes long,
+
+00:27:01.000 --> 00:27:15.000
+in which they learn how to access my notes.
+
+00:27:15.000 --> 00:27:17.000
+My notes on Maxima are here -
+
+00:27:17.000 --> 00:27:21.000
+I mean, this is the HTMLized version...
+
+00:27:21.000 --> 00:27:26.000
+it starts with a header, then a huge index,
+
+00:27:26.000 --> 00:27:29.000
+then many blocks like this...
+
+00:27:29.000 --> 00:27:31.000
+and this is a specific block that corresponds
+
+00:27:31.000 --> 00:27:33.000
+to the thing that we we ran
+
+00:27:33.000 --> 00:27:37.000
+in the first 5-minute workshop.
+
+00:27:37.000 --> 00:27:40.000
+And in this second 5-minute workshop
+
+00:27:40.000 --> 00:27:43.000
+they run the instructions in this section...
+
+00:27:43.000 --> 00:27:46.000
+usually I skip this thing in the first moment,
+
+00:27:46.000 --> 00:27:52.000
+then I explain it to them...
+
+00:27:52.000 --> 00:27:56.000
+and they run something like this,
+
+00:27:56.000 --> 00:27:58.000
+that downloads a copy
+
+00:27:58.000 --> 00:28:02.000
+of my notes on Maxima,
+
+00:28:02.000 --> 00:28:04.000
+puts that copy in a temporary buffer...
+
+00:28:04.000 --> 00:28:06.000
+and they can run the thing here
+
+00:28:06.000 --> 00:28:18.000
+exactly in the same way as before...
+
+00:28:18.000 --> 00:28:22.000
+And I also ask them to run the small
+
+00:28:22.000 --> 00:28:25.000
+Maxim programs in other blocks,
+
+00:28:25.000 --> 00:28:27.000
+like this one, for example...
+
+00:28:27.000 --> 00:28:29.000
+if we run this it calculates the solution
+
+00:28:29.000 --> 00:28:31.000
+of a question that I put in a test
+
+00:28:31.000 --> 00:28:34.000
+one or two semesters ago...
+
+00:28:34.000 --> 00:28:38.000
+it starts by calculating several integrals
+
+00:28:38.000 --> 00:28:41.000
+and then it organizes all the solutions
+
+00:28:41.000 --> 00:28:49.000
+in a big Matrix like this...
+
+00:28:49.000 --> 00:28:52.000
+I said that at one point the students
+
+00:28:52.000 --> 00:28:55.000
+have to install lots of Debian packages.
+
+00:28:55.000 --> 00:28:59.000
+This happens after they have installed
+
+00:28:59.000 --> 00:29:05.000
+Debian, then Emacs, and eev...
+
+00:29:05.000 --> 00:29:09.000
+and they already know a bit about eepitch,
+
+00:29:09.000 --> 00:29:12.000
+so they are in this section of the
+
+00:29:12.000 --> 00:29:14.000
+instructions, and they just have to type
+
+00:29:14.000 --> 00:29:20.000
+f8 here several times and watch what
+
+00:29:20.000 --> 00:29:22.000
+happens...
+
+00:29:22.000 --> 00:29:24.000
+after that we have many options,
+
+00:29:24.000 --> 00:29:26.000
+and I have this map here and I usually
+
+00:29:26.000 --> 00:29:29.000
+choose a path according to the interests
+
+00:29:29.000 --> 00:29:32.000
+and the questions of the students...
+
+00:29:32.000 --> 00:29:34.000
+and there are many things that can go wrong,
+
+00:29:34.000 --> 00:29:37.000
+so this page also works as as a place
+
+00:29:37.000 --> 00:29:41.000
+in which I put all my troubleshooting
+
+00:29:41.000 --> 00:29:43.000
+instructions...
+
+00:29:43.000 --> 00:29:43.000
+and if a student has a question...
+
+00:29:43.000 --> 00:29:47.000
+I mean, suppose that the student is
+
+00:29:47.000 --> 00:29:50.000
+talking to me by WhatsApp or Telegram,
+
+00:29:50.000 --> 00:29:52.000
+and the student is saying:
+
+00:29:52.000 --> 00:29:54.000
+okay I installed the things such and such,
+
+00:29:54.000 --> 00:29:56.000
+and I tried the thing blahblah, and
+
+00:29:56.000 --> 00:29:58.000
+something went wrong...
+
+00:29:58.000 --> 00:29:59.000
+and I say: ok, can you send me a screenshot
+
+00:29:59.000 --> 00:30:02.000
+or a photo of your screen?
+
+00:30:02.000 --> 00:30:04.000
+And then we can troubleshoot that
+
+00:30:04.000 --> 00:30:10.000
+by using a section of this page here.
+
+00:30:10.000 --> 00:30:11.000
+This is a work in progress,
+
+00:30:11.000 --> 00:30:14.000
+I'm reorganizing this thing for
+
+00:30:14.000 --> 00:30:15.000
+the 10th time...
+
+00:30:15.000 --> 00:30:19.000
+and the rest of what can happen
+
+00:30:19.000 --> 00:30:21.000
+with these students can't be explained
+
+00:30:21.000 --> 00:30:23.000
+clearly in a video... so I'm going
+
+00:30:23.000 --> 00:30:26.000
+to put the all the other stuff in the
+
+00:30:26.000 --> 00:30:28.000
+page of the video, and I'm going to stop
+
+00:30:28.000 --> 00:30:30.000
+the video here.
+
+00:30:30.000 --> 00:07:12.000
+So: thanks, and bye!
diff --git a/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt
new file mode 100644
index 00000000..812e174f
--- /dev/null
+++ b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt
@@ -0,0 +1,574 @@
+WEBVTT
+
+NOTE I would love to see the GUI interacting with the scheduling stuff
+
+00:00:00.000 --> 00:00:01.999
+...volume of code I've written that.
+
+00:00:02.000 --> 00:00:06.319
+I will do a follow-up video with the kind of synchronized
+
+00:00:06.320 --> 00:00:12.519
+elisp-mode stuff because that is the point of the talk. Sorry
+
+00:00:12.520 --> 00:00:38.599
+for talking over you. Please continue.
+
+00:00:38.600 --> 00:00:41.879
+sachac is saying (car kill-ring).
+
+00:00:41.880 --> 00:00:57.559
+Oh, yeah, so this question, they're just asking in the
+
+NOTE Q: Or any other GUI stuff you've worked on in the past that you'd be comfortable showing?
+
+00:00:57.560 --> 00:01:01.319
+Scratchpad, is there any other GUI stuff I've worked on in
+
+00:01:01.320 --> 00:01:07.319
+the past? I guess my Toobnix channel, I was doing a bunch of
+
+00:01:07.320 --> 00:01:12.639
+that, so just Common Lisp development, homed around
+
+00:01:12.640 --> 00:01:16.359
+McCLIM. What is my Toobnix channel? If you find a Toobnix
+
+00:01:16.360 --> 00:01:21.519
+channel and it has a name like Screwtape, that'll
+
+00:01:21.520 --> 00:01:28.679
+presumably be that. So Toobnix is SDF.org's PeerTube.
+
+00:01:28.680 --> 00:01:35.719
+Nope, not that one.
+
+00:01:35.720 --> 00:01:41.319
+Sacha's got it here in the IRC. I think it's
+
+00:01:41.320 --> 00:01:47.959
+screwtape_channels/videos. Yeah. So the
+
+00:01:47.960 --> 00:01:52.639
+author of mastodon.el, which hopefully lots of us are using
+
+00:01:52.640 --> 00:01:58.079
+for our mastodoning, I used the name Screwtape as my
+
+00:01:58.080 --> 00:02:01.519
+username, and I think Wintermute said some kind of
+
+00:02:01.520 --> 00:02:06.119
+exasperated Emacs theme. You know what? Screw Lisp. Then
+
+00:02:06.120 --> 00:02:09.719
+Mousebot of mastodon.el rechristened me screwlisp. So
+
+00:02:09.720 --> 00:02:12.319
+sometimes you see my name written one way, and sometimes you
+
+00:02:12.320 --> 00:02:15.039
+see my name written the other way. I quite like it. A lot of
+
+00:02:15.040 --> 00:02:19.319
+people thought that I was quitting Emacs when I changed my
+
+00:02:19.320 --> 00:02:23.399
+name to be mainly screwlisp. I love it. That's a great story.
+
+00:02:23.400 --> 00:02:27.319
+Thank you. It's so great to have a name from somebody else. I
+
+00:02:27.320 --> 00:02:29.999
+was just thrilled. So thank you, mousebot. Everyone use
+
+00:02:30.000 --> 00:02:35.199
+mousebot's mode. Welcome to Green Guest. I'm with you
+
+00:02:35.200 --> 00:02:38.399
+there. All my kids want to choose their own names, and I'm
+
+00:02:38.400 --> 00:02:41.359
+just like, more power to you. I'm very glad that my parents
+
+00:02:41.360 --> 00:02:45.479
+picked mine for me, and that's one thing I never had to think
+
+00:02:45.480 --> 00:02:50.439
+about. All right, so do we have to cut short so I can go back to
+
+00:02:50.440 --> 00:02:55.839
+watching MPV? of the other stuff. We don't have to, but you
+
+00:02:55.840 --> 00:02:58.999
+are not obligated to sit here one moment more answering our
+
+00:02:59.000 --> 00:03:02.039
+questions than, you know, but of course, you know, we've
+
+00:03:02.040 --> 00:03:07.399
+talked a little before, but I, so I have a pile of questions.
+
+NOTE Lispy Gopher Show
+
+00:03:07.400 --> 00:03:11.159
+You promised to come on the Lispy Gopher show. That's right.
+
+00:03:11.160 --> 00:03:13.239
+I have so much to say. I could, I could, I could come right on
+
+00:03:13.240 --> 00:03:16.039
+your show and just talk to you there, but I'm just curious.
+
+00:03:16.040 --> 00:03:18.559
+Talk to us a little bit about that. Tell us more about the
+
+00:03:18.560 --> 00:03:23.799
+program. Oh, the Lispy Gopher climate. What do we do? So it's
+
+00:03:23.800 --> 00:03:29.039
+hosted by the Superdimensional Fortress, SDF.org, who are
+
+00:03:29.040 --> 00:03:32.919
+a public access Unix mainly. They do their own little radio
+
+00:03:32.920 --> 00:03:38.359
+thing as well. And so I guess for a few years now, I do a weekly
+
+00:03:38.360 --> 00:03:45.559
+show every zero hundred hours UTC. We always start off with
+
+00:03:45.560 --> 00:03:49.119
+kind of climate crisis topics, because that is a climate
+
+00:03:49.120 --> 00:03:54.439
+crisis topic. But there's a sort of joy in that, because Kent
+
+00:03:54.440 --> 00:03:58.279
+Pitman, who Kent Pitman you're familiar with from the
+
+00:03:58.280 --> 00:04:03.599
+Pit Manual and so forth, writes a kind of climate crisis
+
+00:04:03.600 --> 00:04:07.599
+haiku, which we kind of lead out with, and we kind of go into
+
+00:04:07.600 --> 00:04:10.239
+the discussions there. Then obviously the show has- It's a
+
+00:04:10.240 --> 00:04:16.959
+highlight, not gonna lie. Yeah, yeah, I love it. I try and do
+
+00:04:16.960 --> 00:04:19.479
+these dramatic readings, but it's often stumble over.
+
+00:04:19.480 --> 00:04:23.719
+Actually, when Sacha was on, there was an auxiliary poem
+
+00:04:23.720 --> 00:04:27.959
+that happened, which was pretty interesting, too. What was
+
+00:04:27.960 --> 00:04:31.319
+I going to say? Then, I mean, the way we got named the Lispy
+
+00:04:31.320 --> 00:04:33.839
+Gopher Climate was because, broadly speaking, I like to
+
+00:04:33.840 --> 00:04:37.959
+talk about kind of lisp, and most of my writing for a long time
+
+00:04:37.960 --> 00:04:41.919
+was on the Gopher. Though I accidentally locked myself out
+
+00:04:41.920 --> 00:04:45.679
+of the Gopher recently, so there hasn't been an update there
+
+00:04:45.680 --> 00:04:52.159
+for a while. I'm kind of around the IRCs and Mastodon quite a
+
+00:04:52.160 --> 00:04:56.759
+bit now. Lisp, I like to use the term Lisp inclusively,
+
+00:04:56.760 --> 00:04:59.719
+basically. Obviously this talk, I was making the point that
+
+00:04:59.720 --> 00:05:05.519
+I just could go through a 1978 paper written in, and so pre-D
+
+00:05:05.520 --> 00:05:10.279
+machine inter-LISP, right? And it basically just worked in
+
+00:05:10.280 --> 00:05:13.439
+modern Emacs LISP. Somebody was pointing out to me, who
+
+00:05:13.440 --> 00:05:20.119
+pointed out where I was like, I don't know what PUT is in,
+
+00:05:20.120 --> 00:05:23.039
+in Emacs Lisp, and somebody was saying definitely there's
+
+00:05:23.040 --> 00:05:28.319
+put in Emacs Lisp. So I'm going to come back to the recording
+
+00:05:28.320 --> 00:05:31.199
+of this talk, and I'm going to just pinpoint this moment the
+
+00:05:31.200 --> 00:05:34.519
+next time somebody says, we need to modernize Lisp. I'm
+
+00:05:34.520 --> 00:05:37.799
+going to say, no, no, no, this is modern Emacs Lisp. You see,
+
+00:05:37.800 --> 00:05:42.359
+here's people talking about, yeah, I'm just tripping over,
+
+00:05:42.360 --> 00:05:45.519
+not tripping over, I'm amused by your phrase there, but
+
+00:05:45.520 --> 00:05:48.599
+that's exactly how I see it too. And I take your point utterly
+
+00:05:48.600 --> 00:05:53.359
+that, you know, this tradition of Lisp of carrying forward
+
+00:05:53.360 --> 00:05:57.799
+ideas. And, you know, we, you know, especially in Emacs, it
+
+00:05:57.800 --> 00:06:00.799
+really is like a brain trust, right? Buckets of knowledge of
+
+00:06:00.800 --> 00:06:04.399
+how to get some sort of work done, or, you know, how to work
+
+00:06:04.400 --> 00:06:08.919
+with some kind of code or some kind of data. Yeah, but I had a
+
+00:06:08.920 --> 00:06:12.079
+kind of, interesting experience with some great friends of
+
+00:06:12.080 --> 00:06:15.799
+mine, whom I love dearly. Vidak, if you're watching this,
+
+00:06:15.800 --> 00:06:21.559
+I'm gossiping about you people over in Australia there.
+
+NOTE Lisp already did it
+
+00:06:21.560 --> 00:06:25.439
+Where people come to you with really exciting ideas that
+
+00:06:25.440 --> 00:06:30.359
+seem to be very cutting edge and like, you know, very much the
+
+00:06:30.360 --> 00:06:33.559
+current talk of the day, like you can hear in other
+
+00:06:33.560 --> 00:06:36.119
+programming languages, and they're telling you how they
+
+00:06:36.120 --> 00:06:39.639
+think you might be able to do this in Lisp. And you have to say,
+
+00:06:39.640 --> 00:06:43.719
+well, you know, if we go back to the late 70s, where the Lisp
+
+00:06:43.720 --> 00:06:47.959
+community really kind of pioneered this topic already.
+
+00:06:47.960 --> 00:06:51.399
+Here's how we did it in the late 70s. And there's actually
+
+00:06:51.400 --> 00:06:56.439
+quite a kind of awkward, just kind of disjunction there. I
+
+00:06:56.440 --> 00:06:59.079
+mean, that's the thing, right? Where use of Emacs in
+
+00:06:59.080 --> 00:07:03.759
+particular use of Lisp in general will unravel somebody's
+
+00:07:03.760 --> 00:07:06.319
+whole big bag of wind that they've built up around why
+
+00:07:06.320 --> 00:07:10.439
+something has to be rebuilt and well right but that's just a
+
+00:07:10.440 --> 00:07:13.359
+function you know it's data so we'll probably just think
+
+00:07:13.360 --> 00:07:16.679
+about that as I don't know sitting in a variable.
+
+00:07:16.680 --> 00:07:21.359
+Oh, so that whole problem, like the elegance of a solution
+
+00:07:21.360 --> 00:07:25.959
+can entirely fall away once you fall back to an earlier way of
+
+00:07:25.960 --> 00:07:29.479
+thinking about it. And then, you know, look at the pieces
+
+00:07:29.480 --> 00:07:32.039
+you've carried forward the idea of the declarative
+
+00:07:32.040 --> 00:07:37.119
+language, right? Declaring user experience. Yeah. Once
+
+00:07:37.120 --> 00:07:41.999
+again, tangentially to, um, to the actual talk we've just
+
+00:07:42.000 --> 00:07:47.479
+watched, which I will try and follow up on as well. But one
+
+00:07:47.480 --> 00:07:51.919
+example was After watching me use the Common Lisp loop
+
+00:07:51.920 --> 00:07:55.999
+facility so much, Kent pointed out to me, hey, you know, why
+
+00:07:56.000 --> 00:08:01.719
+don't you try using Richard Waters' series iteration
+
+00:08:01.720 --> 00:08:05.799
+stuff, which was kind of lazy evaluation of series that
+
+00:08:05.800 --> 00:08:09.119
+Waters did. And so after criticizing Haskell for a long
+
+00:08:09.120 --> 00:08:12.879
+time, me kind of saying, hey, you know, I don't think this
+
+00:08:12.880 --> 00:08:16.519
+lazy evaluation is important. then Kent pointed out to me
+
+00:08:16.520 --> 00:08:22.399
+that, for example, the series, like what is it? AIM 1082 or
+
+00:08:22.400 --> 00:08:28.799
+something published in 1989 was Lazy Evaluation in LISP
+
+00:08:28.800 --> 00:08:33.639
+with series. And so I thought, well, once I realized that
+
+00:08:33.640 --> 00:08:37.879
+this was part of kind of almost classic LISP history to have
+
+00:08:37.880 --> 00:08:43.679
+lazy evaluation, I adopted series, I kind of had to rethink
+
+00:08:43.680 --> 00:08:47.799
+my LISP worldview to realize it did already include lazy
+
+00:08:47.800 --> 00:08:51.679
+evaluation, which I attributed to the late 80s. And then
+
+00:08:51.680 --> 00:08:55.239
+when I actually read a little bit further, lazy evaluation,
+
+00:08:55.240 --> 00:08:59.159
+depending on your research group, has been, was kind of
+
+00:08:59.160 --> 00:09:02.719
+established in the late 70s by Waters again, actually.
+
+00:09:02.720 --> 00:09:05.719
+Sorry for the anecdote, just kind of the interesting
+
+00:09:05.720 --> 00:09:11.159
+medley. Not at all.
+
+00:09:11.160 --> 00:09:17.919
+Yeah.
+
+00:09:17.920 --> 00:09:25.639
+Ellis over in the IRC has come up with a good slime about
+
+00:09:25.640 --> 00:09:33.339
+async. Oh, I see. So yeah,
+
+00:09:33.340 --> 00:09:38.199
+I guess that would work. I have to try that. OK, so you're just
+
+00:09:38.200 --> 00:09:42.679
+getting me reading this. They have had a stab at resolving
+
+00:09:42.680 --> 00:09:49.279
+our asynchronous calls thing more elegantly than me. Left
+
+00:09:49.280 --> 00:09:53.879
+as an exercise to the listener. It's one of the big virtues of
+
+00:09:53.880 --> 00:09:56.799
+something like a convention. It'll bring us together with
+
+00:09:56.800 --> 00:10:01.079
+other people that can kind of see past the boats in our eyes.
+
+00:10:01.080 --> 00:10:06.239
+Oh yeah, that's easy for me. Yeah, definitely. Hearing
+
+00:10:06.240 --> 00:10:10.279
+somebody else's kind of thought process from you and from
+
+00:10:10.280 --> 00:10:16.639
+just the past speaker who was Robin, I think, because this
+
+00:10:16.640 --> 00:10:19.519
+was in the morning for me, so I just kind of got up and caught
+
+00:10:19.520 --> 00:10:25.919
+some of Robin. Yeah, it's so great, kind of vicariously
+
+00:10:25.920 --> 00:10:30.559
+experiencing somebody else's Emacs usage and how it kind of
+
+00:10:30.560 --> 00:10:34.799
+subtly backs onto their own development flows. Yeah, so I
+
+00:10:34.800 --> 00:10:37.319
+really appreciate this talk. I'm constantly cribbing from
+
+00:10:37.320 --> 00:10:40.519
+everyone I meet. And yeah, this talk has been eye-popping,
+
+00:10:40.520 --> 00:10:43.599
+just watching you casually navigate Emacs, actually.
+
+NOTE IELM
+
+00:10:43.600 --> 00:10:51.519
+Yeah, it's cool. Yeah, I enjoyed discovering IELM mode.
+
+00:10:51.520 --> 00:10:54.959
+That was going to be my other question for people. Are there
+
+00:10:54.960 --> 00:10:59.439
+any IELM Power users around? I could really go for an
+
+00:10:59.440 --> 00:11:05.679
+EmacsConf talk on IELM mode. Aha, yes. Very good. Note
+
+00:11:05.680 --> 00:11:12.199
+taken. Yeah. So, just thoughts for next year? Oh, well, I
+
+00:11:12.200 --> 00:11:15.999
+kind of want to get back onto the MPV, but thank you so much for
+
+00:11:16.000 --> 00:11:22.039
+this. You are cmak in the IRC, right? I am Corwin, same as you.
+
+00:11:22.040 --> 00:11:26.159
+So you're Corwin. There's also cmak, and I guess there are a
+
+00:11:26.160 --> 00:11:28.719
+few other people. Sorry that I'm tripping over the
+
+00:11:28.720 --> 00:11:31.359
+different people here. But you're going to come on the Lispy
+
+00:11:31.360 --> 00:11:35.719
+Gopher Climate later. Sure, I'm happy to. That sounds
+
+00:11:35.720 --> 00:11:38.479
+like fun. I always got a million things to talk about me or an
+
+00:11:38.480 --> 00:11:42.399
+opinion on everything. But of course, my favorite thing to
+
+00:11:42.400 --> 00:11:48.359
+talk about is just the huge thanks that, you know, sharing
+
+00:11:48.360 --> 00:11:53.639
+that, the generosity or the, you know, my appreciation for
+
+00:11:53.640 --> 00:11:57.159
+you and all the other members of the Emacs community that
+
+00:11:57.160 --> 00:12:00.519
+create talks like this and make the conference and the rest
+
+00:12:00.520 --> 00:12:04.839
+of the community so rich. Well, yeah, and thank you for your
+
+00:12:04.840 --> 00:12:09.759
+work. Sacha is just saying over in Lambda that when I say I
+
+00:12:09.760 --> 00:12:13.039
+want someone to give the talk, this means I'm volunteering
+
+00:12:13.040 --> 00:12:17.079
+to give the IELM talk. That's what I wrote down. Oh, yeah. I've
+
+00:12:17.080 --> 00:12:19.479
+been working for Sacha. I mean, helping Sacha with this
+
+00:12:19.480 --> 00:12:23.919
+conference for years. I know. No, I'm kidding. That would be
+
+00:12:23.920 --> 00:12:28.559
+cool. I will absolutely go to your ielm talk. I make a lot of use
+
+00:12:28.560 --> 00:12:32.879
+of that and could do more. Yeah, we're meant to suddenly
+
+NOTE Q: Are we going to get a McCLIM LambdaMOO client?
+
+00:12:32.880 --> 00:12:36.639
+stop. But a guest over in Lambda also said, are we going to get
+
+00:12:36.640 --> 00:12:41.239
+a McCLIM LambdaMOO client? And I actually had all my kind of
+
+00:12:41.240 --> 00:12:44.519
+Moo stuff I'd written in Common Lisp, which I was thinking of
+
+00:12:44.520 --> 00:12:47.639
+just kind of jettisoning. But you're right, I should make
+
+00:12:47.640 --> 00:12:51.479
+that into a client for Common Lisp. Anyway, I'm going to hang
+
+00:12:51.480 --> 00:12:55.839
+up so I can keep watching the conference sounds good so we'll
+
+00:12:55.840 --> 00:12:58.399
+just cut away with the stream throw some music and a
+
+00:12:58.400 --> 00:13:02.799
+countdown uh back on give us just a second to make that on bbb
+
+00:13:02.800 --> 00:13:05.359
+and then i'll give you the big thumbs up thank you thank you
+
+00:13:05.360 --> 00:13:08.359
+recording here we'll get it all posted up uh right next to
+
+00:13:08.360 --> 00:13:09.839
+your awesome pre-recorded talk
+
+00:13:09.840 --> 00:13:17.159
+thanks again like it's been fun chatting and uh Yeah,
+
+00:13:17.160 --> 00:13:20.799
+definitely seeing you around in the conference channel off
+
+00:13:20.800 --> 00:13:23.879
+off season. So to speak, you're like, you're totally
+
+00:13:23.880 --> 00:13:26.679
+welcome to use our chat like it to the extent you need to IRC
+
+00:13:26.680 --> 00:13:29.039
+channel that's been working on great for me. It's fun to fun
+
+00:13:29.040 --> 00:13:30.639
+to see it.
+
+00:13:30.640 --> 00:13:39.319
+All right, I'm gonna hang up this thing. All right. Happy day
+
+00:13:39.320 --> 00:13:44.119
+flowy. Sorry, I mean, screwlisp. Oh my gosh, I have
+
+00:13:44.120 --> 00:13:54.360
+conference brain. Bye bye. All right, later, later.
diff --git a/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt
new file mode 100644
index 00000000..ecc41f76
--- /dev/null
+++ b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt
@@ -0,0 +1,14 @@
+WEBVTT
+
+
+00:00:01.750 --> 00:03:21.652
+Introduction
+
+00:03:21.702 --> 00:19:12.752
+Calendar
+
+00:19:12.802 --> 00:29:09.414
+Inferior Lisp and McCLIM
+
+00:29:10.964 --> 00:34:28.780
+Putting things together
diff --git a/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt
new file mode 100644
index 00000000..f37aea64
--- /dev/null
+++ b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt
@@ -0,0 +1,1413 @@
+WEBVTT captioned by rodrigo
+
+NOTE Introduction
+
+00:00:01.750 --> 00:00:11.969
+Welcome everyone to my EmacsConf presentation,
+
+00:00:15.370 --> 00:00:22.089
+where we're going to look at Lisp's vdemo[??] app from 1978,
+
+00:00:22.139 --> 00:00:25.659
+but done in modern Elisp.
+
+00:00:28.460 --> 00:00:33.039
+Then we're going to look at getting inferior-lisp working,
+
+00:00:33.390 --> 00:00:34.753
+my dear Common Lisp.
+
+00:00:37.003 --> 00:00:42.059
+Then we're going to use the Common Lisp interface manager,
+
+00:00:42.159 --> 00:00:45.663
+the open source child of the Common Lisp interface manager,
+
+00:00:47.813 --> 00:00:52.959
+McCLIM, from inferior-lisp in Superior Lisp,
+
+00:00:55.710 --> 00:00:58.325
+which is the opposite order that I initially thought
+
+00:00:58.375 --> 00:00:59.276
+we were going to do things in,
+
+00:00:59.326 --> 00:01:00.779
+but this is how it's kind of turned out.
+
+00:01:00.829 --> 00:01:01.795
+So it's this article,
+
+00:01:01.845 --> 00:01:05.199
+I thought, from 1978, was interesting to us today.
+
+00:01:05.999 --> 00:01:08.702
+“Programming in an Interactive Environment:
+
+00:01:08.752 --> 00:01:11.805
+the ‘Lisp’ Experience.”
+
+00:01:12.005 --> 00:01:17.678
+Explaining what all these LISP programmers were doing to
+
+00:01:19.478 --> 00:01:22.466
+people unfamiliar with LISP programming.
+
+00:01:22.566 --> 00:01:24.401
+“LISP systems have been used for
+
+00:01:24.451 --> 00:01:27.454
+highly interactive programming for more than a decade.”
+
+00:01:27.604 --> 00:01:29.790
+This was from 1978.
+
+00:01:29.990 --> 00:01:31.959
+And we're just going to go and,
+
+00:01:34.109 --> 00:01:39.717
+almost verbatim, port the demo application for LISP
+
+00:01:40.017 --> 00:01:46.119
+out of 1978 Interlisp and into Emacs Lisp.
+
+00:01:49.720 --> 00:01:51.428
+And we're going to do it without Org Mode,
+
+00:01:51.478 --> 00:01:54.231
+because I think everyone is finding out
+
+00:01:54.281 --> 00:01:56.950
+how great Org Mode is already.
+
+00:01:58.100 --> 00:02:00.787
+For inferior Lisp, I thought instead of org-mode,
+
+00:02:00.837 --> 00:02:02.823
+we'll theme it around slime-mode and then it turned out
+
+00:02:02.873 --> 00:02:06.059
+most of this presentation happens in Emacs Lisp,
+
+00:02:06.109 --> 00:02:08.929
+because this is an Emacs Lisp conference.
+
+00:02:09.379 --> 00:02:12.799
+But I found out that there's ielm-mode,
+
+00:02:12.849 --> 00:02:17.604
+which is pretty similar to slime-mode,
+
+00:02:19.054 --> 00:02:23.610
+but in our hearts, we can imagine that this is
+
+00:02:23.660 --> 00:02:27.448
+an Emacs example, homed around slime-mode,
+
+00:02:27.498 --> 00:02:33.353
+Superior Lisp Interaction Mode for Emacs, instead of org-mode.
+
+00:02:33.403 --> 00:02:36.390
+Though, you know, I do secretly use org-mode as well,
+
+00:02:36.440 --> 00:02:37.858
+not very secretly.
+
+00:02:37.958 --> 00:02:40.539
+But that means we're kind of improvising,
+
+00:02:46.790 --> 00:02:48.786
+improvising a presentation mode.
+
+00:02:49.986 --> 00:02:55.576
+So we have this big buffer of Elisp, and let's just...
+
+00:02:56.726 --> 00:02:59.164
+This is me, not Sandewall, out of interest,
+
+00:03:00.614 --> 00:03:02.616
+let's make a keyboard macro,
+
+00:03:04.216 --> 00:03:10.240
+go get the S-expression wherever the cursor is,
+
+00:03:10.290 --> 00:03:13.611
+move it to the next S-expression, paste it in here,
+
+00:03:13.661 --> 00:03:15.989
+and the keyboard macro, alright.
+
+00:03:20.190 --> 00:03:21.652
+What was basically happening...
+
+NOTE Calendar
+
+00:03:21.702 --> 00:03:25.306
+So the demo application in this case is
+
+00:03:25.356 --> 00:03:27.842
+a scheduling application.
+
+00:03:28.792 --> 00:03:34.631
+And so you can imagine improvising a calendar like this
+
+00:03:34.731 --> 00:03:36.633
+if you weren't existingly using an
+
+00:03:36.683 --> 00:03:38.952
+org-mode integrated calendar.
+
+00:03:39.252 --> 00:03:42.739
+So, you know, just have a list and maybe
+
+00:03:43.989 --> 00:03:49.479
+each list is of sublists, where the first element,
+
+00:03:49.579 --> 00:03:51.531
+the car of the sublist, I guess,
+
+00:03:51.931 --> 00:03:55.669
+is a sensible-sounding date format, like sat dec 7,
+
+00:03:56.119 --> 00:03:59.589
+this is clearly the first day of EmacsConf.
+
+00:03:59.939 --> 00:04:06.230
+Then after that, a list of basically from and to times,
+
+00:04:06.280 --> 00:04:18.592
+and then a quick written description of whatever event
+
+00:04:18.642 --> 00:04:19.576
+was at that time.
+
+00:04:19.876 --> 00:04:23.130
+So similar to what we were seeing recently
+
+00:04:23.180 --> 00:04:25.449
+as of me recording this in our Structure and
+
+00:04:25.499 --> 00:04:28.902
+Interpretation of Computer Programs study group,
+
+00:04:29.902 --> 00:04:35.709
+you have all these little methods, sorry, defuns.
+
+00:04:35.759 --> 00:04:39.513
+So hours of a time is actually just car of the time,
+
+00:04:40.763 --> 00:04:42.966
+minutes of the time, cadr of time.
+
+00:04:43.216 --> 00:04:46.719
+And so we all know these kind of little,
+
+00:04:46.720 --> 00:04:50.173
+basically turning car and cadr,
+
+00:04:50.223 --> 00:04:53.093
+which we do use into descriptive names like from and to.
+
+00:04:53.143 --> 00:04:56.329
+You can see how this lines up with the appointments.
+
+00:04:56.379 --> 00:05:01.701
+So for "reproducibly building emacs" described event,
+
+00:05:01.751 --> 00:05:05.679
+I guess from would be 16 25.
+
+00:05:05.680 --> 00:05:07.658
+Let's just grab that and literally use those,
+
+00:05:07.708 --> 00:05:11.011
+because we're in interactive programming, right?
+
+00:05:11.711 --> 00:05:18.216
+So we have this quoted form and then
+
+00:05:18.266 --> 00:05:22.240
+let's do from of that. Great.
+
+00:05:22.290 --> 00:05:24.458
+And let's do minutes.
+
+00:05:25.308 --> 00:05:31.498
+So from 16 25, 16 45 reproducibly building Emacs,
+
+00:05:31.548 --> 00:05:34.801
+so when I do from to that I get 16 25
+
+00:05:34.851 --> 00:05:40.707
+when I do minutes to 16 25, I get 25
+
+00:05:42.057 --> 00:05:45.489
+and a description of this number in octal and hexadecimal,
+
+00:05:45.590 --> 00:05:47.147
+out of interest.
+
+00:05:48.047 --> 00:05:52.953
+What was up next? Okay, getting nextday from a date.
+
+00:05:53.553 --> 00:05:57.023
+And so, what was it? Saturday, December 27th.
+
+00:05:57.073 --> 00:05:59.245
+So what happens? So this function,
+
+00:06:01.345 --> 00:06:05.932
+I guess this was part of Sandewall's personal exploration of
+
+00:06:06.032 --> 00:06:12.188
+atoms using symbols with property lists,
+
+00:06:12.238 --> 00:06:15.492
+with an attached property list to every symbol.
+
+00:06:15.942 --> 00:06:18.059
+And so you can kind of see how this works.
+
+00:06:21.510 --> 00:06:32.799
+I get whatever was keyed by the symbol nextweekday out of
+
+00:06:32.800 --> 00:06:36.529
+the day symbol, so I guess we would do...
+
+00:06:36.579 --> 00:06:46.640
+so if we had Sat December 6, I guess we get Sat
+
+00:06:48.140 --> 00:06:54.379
+Oh, it destructures that itself somehow, get nextweekday.
+
+00:06:58.429 --> 00:07:02.279
+Sorry, nextday.
+
+00:07:02.280 --> 00:07:10.170
+set December 6th
+
+00:07:10.270 --> 00:07:12.732
+But of course these weren't defined yet,
+
+00:07:12.782 --> 00:07:23.593
+so what if we (setf (get 'sat 'nextweekday) 'sun)
+
+00:07:23.793 --> 00:07:25.239
+and it's going to be sun right
+
+00:07:28.990 --> 00:07:34.369
+And then if we (nextday '(sat dec 6)),
+
+00:07:36.720 --> 00:07:38.392
+Sunday, December 7th.
+
+00:07:38.942 --> 00:07:41.628
+Yeah, so that kind of makes sense in an intuitive way.
+
+00:07:41.778 --> 00:07:43.550
+And you can see cond is being used.
+
+00:07:43.850 --> 00:07:51.538
+So if you're not a Lisp person, cond evaluates a condition.
+
+00:07:51.588 --> 00:07:54.708
+If the condition returns non-nil,
+
+00:07:54.758 --> 00:07:57.160
+it executes the code attached to that condition.
+
+00:07:57.210 --> 00:08:00.247
+It evaluates each of these conditions in terms
+
+00:08:00.297 --> 00:08:04.851
+and then stops when one returns non-nil,
+
+00:08:04.901 --> 00:08:07.420
+as you might expect as a Lisp programmer.
+
+00:08:07.670 --> 00:08:09.622
+Let's keep marching along.
+
+00:08:09.672 --> 00:08:11.691
+Okay, so we have to populate this.
+
+00:08:11.741 --> 00:08:13.493
+And this was an interesting one.
+
+00:08:13.543 --> 00:08:15.562
+As you can see, this was my attempt.
+
+00:08:15.612 --> 00:08:19.199
+let days mon tue wed, so forth.
+
+00:08:19.249 --> 00:08:23.403
+Then I used cl-loop from Emacs Lisp, you know,
+
+00:08:23.453 --> 00:08:32.359
+for day in days, for nex in cdr days, setf nextweekday.
+
+00:08:32.610 --> 00:08:35.382
+This I thought was surprisingly deep, was that
+
+00:08:36.432 --> 00:08:38.435
+Lisp programmers, Sandewall thought,
+
+00:08:38.485 --> 00:08:43.123
+are basically constantly trying to break new ground and they
+
+00:08:43.723 --> 00:08:45.325
+lose interest very quickly when
+
+00:08:45.425 --> 00:08:46.743
+that's not what they're doing.
+
+00:08:46.843 --> 00:08:50.129
+And he was making the point that breaking new ground
+
+00:08:50.229 --> 00:08:52.832
+involves solving a problem exactly once.
+
+00:08:54.232 --> 00:08:55.903
+And so you kind of should do it
+
+00:08:56.003 --> 00:08:58.572
+in the most expedient way possible
+
+00:08:58.672 --> 00:09:00.692
+to solve it kind of for the first time.
+
+00:09:00.992 --> 00:09:07.113
+And after that, it's not breaking new ground anymore.
+
+00:09:07.663 --> 00:09:10.350
+And so I thought that was a kind of fun point
+
+00:09:10.400 --> 00:09:14.521
+from Sandewall's paper that we could kind of chew on.
+
+00:09:15.121 --> 00:09:19.359
+Do something similar for months and month lengths.
+
+00:09:21.059 --> 00:09:30.120
+But as we can see, if I get Feb,
+
+00:09:32.120 --> 00:09:41.982
+nrdr days I think that characters in 1978,
+
+00:09:42.082 --> 00:09:45.418
+characters and symbols in 1978 were more precious
+
+00:09:45.468 --> 00:09:47.821
+which is why Sandewall was writing in this abbreviated way.
+
+00:09:47.871 --> 00:09:51.341
+We might write more verbosely these days.
+
+00:09:51.391 --> 00:09:54.177
+We get 28th but it is in fact a leap year,
+
+00:09:54.277 --> 00:09:58.998
+so let's just set that to be 29. Now, it's fine.
+
+00:09:59.048 --> 00:10:05.638
+Then I guess if we do, we were doing nextday.
+
+00:10:06.038 --> 00:10:10.944
+Sure, nextday. I don't know what day it was.
+
+00:10:10.994 --> 00:10:16.716
+let's assume it was Sunday Feb 28
+
+00:10:22.716 --> 00:10:26.179
+some kind of typo crept in there, but we can deal with it.
+
+00:10:26.230 --> 00:10:43.844
+Let's just setf get sun nextweekday month.
+
+00:10:43.944 --> 00:10:48.648
+So once we've solved it once, we should be fine, right?
+
+00:10:48.698 --> 00:10:51.849
+Okay, I think I have to speed up a bit.
+
+00:10:52.000 --> 00:10:55.555
+Yeah, there we go, Monday February 29th and then
+
+00:10:55.605 --> 00:11:01.194
+what if we nextday... Tuesday March 1st.
+
+00:11:01.244 --> 00:11:03.700
+Okay, it basically seems to be working.
+
+00:11:03.750 --> 00:11:06.398
+And I'd argue it's actually fun that
+
+00:11:06.448 --> 00:11:08.535
+we kind of had to do that.
+
+00:11:08.585 --> 00:11:13.473
+Then, just imagining you're kind of functioning with
+
+00:11:13.523 --> 00:11:18.311
+other people: day begins at 900, ends at 1700,
+
+00:11:18.361 --> 00:11:22.415
+so kind of a 9:00 to 5:00, imagining... though perhaps,
+
+00:11:23.915 --> 00:11:25.318
+shorter is more appropriate,
+
+00:11:25.368 --> 00:11:27.320
+but let's not quibble about that.
+
+00:11:27.420 --> 00:11:29.789
+What was happening next in this app?
+
+00:11:29.839 --> 00:11:35.562
+holesin. Oh, yeah, so get me the free slots
+
+00:11:35.712 --> 00:11:40.060
+in from start time, list of appointments,
+
+00:11:40.110 --> 00:11:45.238
+remembering characters, I guess, were more precious
+
+00:11:45.288 --> 00:11:46.556
+is my theory.
+
+00:11:46.906 --> 00:11:58.399
+And then an end time, so if I go holesin and then from 900
+
+00:11:59.050 --> 00:12:02.689
+to where I've written 9 space 0 0
+
+00:12:03.389 --> 00:12:05.959
+and what are my appointments?
+
+00:12:07.459 --> 00:12:09.930
+So I have a list of appointments that
+
+00:12:09.980 --> 00:12:12.032
+need to have start times and finish times.
+
+00:12:12.132 --> 00:12:20.080
+So let's go 12 59 to 13 01.
+
+00:12:23.580 --> 00:12:25.379
+The description, I guess, can be test.
+
+00:12:25.429 --> 00:12:28.715
+And then let's finish that at 1700,
+
+00:12:29.115 --> 00:12:30.729
+like we kind of thought.
+
+00:12:37.830 --> 00:12:41.049
+Oops, some of these were meant to be arguments.
+
+00:12:54.800 --> 00:12:55.742
+Okay, there we go.
+
+00:12:56.042 --> 00:13:01.297
+And so the available times between nine and five,
+
+00:13:01.397 --> 00:13:04.429
+if there's one appointment from 12:59 to 1:01,
+
+00:13:05.580 --> 00:13:13.092
+are from 9 to 1259 and from 1 past 1 to 5,
+
+00:13:13.792 --> 00:13:15.528
+which is kind of what we were expecting.
+
+00:13:15.728 --> 00:13:18.631
+And so our appointment app is kind of coming along.
+
+00:13:18.931 --> 00:13:20.379
+Then we have commonholes,
+
+00:13:23.430 --> 00:13:25.189
+kind of works in a sensible way.
+
+00:13:33.890 --> 00:13:36.199
+Do we have, what are some common holes from
+
+00:13:36.249 --> 00:13:40.153
+two lists of appointments, I guess? commonholes.
+
+00:13:50.903 --> 00:13:53.800
+I guess, let's have one person have an appointment
+
+00:13:53.850 --> 00:13:56.419
+from 9 to 10.
+
+00:13:59.569 --> 00:14:02.508
+That's going to be their only appointment.
+
+00:14:02.558 --> 00:14:05.946
+And let's have another person have an appointment
+
+00:14:05.996 --> 00:14:10.399
+from 9.30 to 10.30.
+
+00:14:14.450 --> 00:14:18.391
+Oh, we didn't do beforetime yet.
+
+00:14:18.441 --> 00:14:22.295
+This is the order Sandewall implemented things in there.
+
+00:14:22.345 --> 00:14:25.465
+Ok, there.
+
+00:14:25.515 --> 00:14:32.972
+So the commonholes are from 9.30 to 10.
+
+00:14:34.272 --> 00:14:42.182
+That's actually the overlapping time.
+
+00:14:42.232 --> 00:14:43.850
+I'll re-record this
+
+00:14:43.900 --> 00:14:50.799
+if some kind of gremlin has crept into my things.
+
+00:15:04.150 --> 00:15:06.839
+And then, what did we first start by doing?
+
+00:15:07.389 --> 00:15:11.444
+Emacsconf track 1 and Emacsconf track 2,
+
+00:15:11.494 --> 00:15:15.139
+and we'll do it on Saturday, December 7.
+
+00:15:21.140 --> 00:15:23.756
+commontime, and I'm being prompted, of course.
+
+00:15:23.806 --> 00:15:27.226
+emacsconf-track-1,
+
+00:15:29.676 --> 00:15:32.369
+emacsconf-track-2,
+
+00:15:33.370 --> 00:15:35.485
+the date that we grabbed.
+
+00:15:36.585 --> 00:15:39.519
+Let's say we want five minutes.
+
+00:15:49.120 --> 00:15:52.418
+And, as always, I'm forgetting to quote things.
+
+00:15:52.468 --> 00:15:56.689
+And so my opportunities for common times
+
+00:15:56.739 --> 00:16:01.326
+between emacsconf-track-1 to emacsconf-track-2
+
+00:16:01.376 --> 00:16:02.819
+on the first day of the conference,
+
+00:16:02.869 --> 00:16:05.464
+Saturday, December 7th, for five minutes.
+
+00:16:05.864 --> 00:16:08.834
+I have an opportunity between 9:20 and 9:40,
+
+00:16:08.984 --> 00:16:13.639
+11:40 and 13:00, 13:10, 13:25,
+
+00:16:14.489 --> 00:16:19.612
+13:45, 13:55, and 16:15 to 16:25.
+
+00:16:19.662 --> 00:16:21.581
+So I think that's all working.
+
+00:16:23.881 --> 00:16:29.155
+And it was done with almost exactly the same code,
+
+00:16:31.355 --> 00:16:38.965
+except for my loopy populating symbol plist bits earlier,
+
+00:16:39.015 --> 00:16:46.489
+in Interlisp in 1978 as Emacs Lisp in 2024.
+
+00:16:46.539 --> 00:16:48.625
+I thought that was pretty interesting that
+
+00:16:48.675 --> 00:16:49.492
+you could do that.
+
+00:16:49.542 --> 00:16:57.049
+I think setf get was put prop
+
+00:16:57.099 --> 00:17:02.737
+was the biggest difference in 1978 Interlisp and
+
+00:17:02.787 --> 00:17:04.690
+modern Emacs Lisp.
+
+00:17:04.740 --> 00:17:09.178
+And obviously modern Emacs Lisp has Common Lisp loop in it,
+
+00:17:09.228 --> 00:17:11.514
+kind of. It's another big difference.
+
+00:17:11.914 --> 00:17:16.099
+How are we doing for time? 17 minutes?
+
+00:17:16.450 --> 00:17:19.105
+Great, because now let's get a bit closer to what
+
+00:17:19.805 --> 00:17:21.941
+my talk title has promised.
+
+00:17:21.991 --> 00:17:24.911
+We're going to use Common Lisp from Emacs Lisp
+
+00:17:25.211 --> 00:17:28.080
+and we're going to use Common Lisp Interface Manager,
+
+00:17:28.130 --> 00:17:30.116
+the open source implementation of
+
+00:17:30.166 --> 00:17:33.786
+Common Lisp Interface Manager from
+
+00:17:33.836 --> 00:17:36.999
+Inferior Lisp from Emacs Lisp.
+
+00:17:37.300 --> 00:17:42.695
+And what we just went over in Sandewall's paper...
+
+00:17:45.550 --> 00:17:47.683
+This was the starting point, and Sandewall says,
+
+00:17:47.783 --> 00:17:51.537
+well, if you just kind of jammed these ideas using lists
+
+00:17:51.587 --> 00:17:55.341
+you just kind of made hour a synonym for car and
+
+00:17:55.391 --> 00:17:58.945
+minute a synonym for cadr and so forth,
+
+00:17:59.795 --> 00:18:03.066
+you can then make a whole bunch of improvements.
+
+00:18:04.166 --> 00:18:06.689
+Can we actually get a glimpse of the …
+
+00:18:09.239 --> 00:18:10.423
+No, I didn't really write this.
+
+00:18:10.473 --> 00:18:14.244
+Yeah, so you can see I basically just ported out of
+
+00:18:14.294 --> 00:18:17.430
+the Interlisp code in the text of this paper.
+
+00:18:17.580 --> 00:18:21.300
+Yeah, you see from lambda of appointment,
+
+00:18:21.350 --> 00:18:24.904
+car appointment, and that's defineq.
+
+00:18:24.954 --> 00:18:27.857
+I guess Interlisp in 1978 used defineq,
+
+00:18:27.907 --> 00:18:32.311
+whereas we used defun in Elisp,
+
+00:18:33.361 --> 00:18:35.264
+but I'd encourage you to explore that yourselves.
+
+00:18:35.314 --> 00:18:38.551
+But the extension that I wanted to develop today is,
+
+00:18:38.601 --> 00:18:41.187
+since Common Lisp interface manager is just Lisp,
+
+00:18:41.237 --> 00:18:43.422
+and Inferior Lisp is just Lisp,
+
+00:18:43.472 --> 00:18:45.291
+and Emacs Lisp is just Lisp,
+
+00:18:45.341 --> 00:18:48.878
+and Interlisp in 1978 is just Lisp,
+
+00:18:48.928 --> 00:18:50.112
+we could kind of use them all together
+
+00:18:50.162 --> 00:18:51.430
+in a kind of funky way.
+
+00:18:51.480 --> 00:18:57.036
+But a complaint you often hear, or a statement of confusion
+
+00:18:57.086 --> 00:19:00.373
+that you often hear as a Lisp person,
+
+00:19:00.423 --> 00:19:06.712
+people from other languages often can't kind of figure out
+
+00:19:06.762 --> 00:19:09.715
+how to get started with Lisp.
+
+00:19:09.765 --> 00:19:12.752
+So I'm just going to try and do everything here and now.
+
+NOTE Inferior Lisp and McCLIM
+
+00:19:12.802 --> 00:19:18.357
+And this is the second piece of my three pieces,
+
+00:19:18.407 --> 00:19:22.628
+so let's just get inferior lisp and McCLIM happening.
+
+00:19:22.928 --> 00:19:29.268
+We normally use slime Superior Lisp Interaction Mode
+
+00:19:29.318 --> 00:19:41.847
+for Emacs, which we could get from Emacs's package manager.
+
+00:19:41.897 --> 00:19:48.604
+If I go package-list-packages and then we wait
+
+00:19:48.954 --> 00:19:50.969
+for however fast my network is,
+
+00:19:54.270 --> 00:19:55.311
+we're going to see how long it's been
+
+00:19:55.361 --> 00:19:57.079
+since I updated something.
+
+00:19:58.629 --> 00:20:00.999
+Yeah, but you see it's in MELPA, right?
+
+00:20:15.750 --> 00:20:16.982
+It's got to be somewhere here.
+
+00:20:18.082 --> 00:20:18.501
+Yeah, all right.
+
+00:20:18.551 --> 00:20:21.420
+So there's one slime available in non-GNU,
+
+00:20:21.470 --> 00:20:25.958
+one possibly more recent one available in
+
+00:20:26.758 --> 00:20:28.678
+the MELPA package repositories.
+
+00:20:30.278 --> 00:20:30.963
+I don't know about you,
+
+00:20:31.013 --> 00:20:33.616
+but I can sympathize with people who feel confused by this
+
+00:20:33.666 --> 00:20:36.469
+because I think if you look online,
+
+00:20:36.519 --> 00:20:38.637
+if you found a search engine result,
+
+00:20:38.687 --> 00:20:44.110
+it doesn't customize these like I customize them.
+
+00:20:44.160 --> 00:20:45.945
+So let's just do this.
+
+00:20:45.995 --> 00:20:48.147
+customize-variable.
+
+00:20:48.197 --> 00:20:52.318
+package-archives.
+
+00:20:54.518 --> 00:21:00.392
+Yeah and you can see here I've ins-ed gnu, non-gnu, and melpa.
+
+00:21:00.542 --> 00:21:02.628
+It's melpa, not melpa stable.
+
+00:21:03.478 --> 00:21:04.359
+Saved and set.
+
+00:21:06.810 --> 00:21:08.334
+So that's how I do that.
+
+00:21:08.384 --> 00:21:13.279
+We're just kind of totally get an inferior lisp working.
+
+00:21:17.130 --> 00:21:20.599
+And then, like we saw before,
+
+00:21:20.949 --> 00:21:22.648
+this might occur, buffer is still open.
+
+00:21:23.148 --> 00:21:26.879
+No. occur. slime.
+
+00:21:35.330 --> 00:21:38.631
+So we could install and execute that.
+
+00:21:38.681 --> 00:21:41.734
+I cloned slime since Common Lisp people
+
+00:21:41.784 --> 00:21:48.874
+might use slime and swank, like McCLIM does outside of Emacs.
+
+00:21:48.924 --> 00:21:51.043
+I think we can secretly see
+
+00:21:51.093 --> 00:21:55.614
+I've got it here already in my ~/.emacs.d/slime,
+
+00:21:56.064 --> 00:22:00.119
+but you could install it like that. The hotkey is I,
+
+00:22:00.169 --> 00:22:02.021
+and then execute the install.
+
+00:22:02.071 --> 00:22:03.789
+I realize you all already know this,
+
+00:22:04.039 --> 00:22:06.759
+but many of you might not yet be Common Lisp programmers,
+
+00:22:06.809 --> 00:22:09.569
+and you can use both Superior and Inferior Lisp.
+
+00:22:10.370 --> 00:22:14.733
+Instead of package archives in Emacs,
+
+00:22:14.783 --> 00:22:19.705
+in Inferior Lisp, and with great controversy,
+
+00:22:19.755 --> 00:22:22.708
+we often use QuickLisp.
+
+00:22:22.758 --> 00:22:25.778
+People sometimes complain QuickLisp releases
+
+00:22:25.828 --> 00:22:27.780
+get out of date quite quickly.
+
+00:22:28.630 --> 00:22:31.717
+But there was one recently, so they're pretty in date.
+
+00:22:32.167 --> 00:22:35.321
+And so there should be a …
+
+00:22:35.371 --> 00:22:39.058
+Yeah, so basically you download quicklisp.lisp,
+
+00:22:39.158 --> 00:22:41.959
+you check its SHA-256 sum.
+
+00:22:44.910 --> 00:22:47.829
+So I guess in, ooh, over here, if I press D,
+
+00:22:51.229 --> 00:22:53.706
+~screwtape/downloads/quicklisp.lisp.
+
+00:22:53.756 --> 00:22:57.376
+Great. If we open a shell, we realize that
+
+00:22:57.426 --> 00:23:03.599
+this is just riveting for all of our experts there.
+
+00:23:06.450 --> 00:23:15.919
+sha256 ~/Downloads/quicklisp.lisp
+
+00:23:19.720 --> 00:23:22.001
+Your SHA-256 might be different to mine.
+
+00:23:22.601 --> 00:23:25.471
+Somebody please tell me during the actual conference,
+
+00:23:25.621 --> 00:23:29.125
+the right Emacs idiom to do this.
+
+00:23:29.225 --> 00:23:32.679
+I guess it will be tools decrypt something.
+
+00:23:33.930 --> 00:23:36.014
+But then once you have QuickLisp,
+
+00:23:36.214 --> 00:23:37.959
+let's go back to our shell.
+
+00:23:41.810 --> 00:23:46.625
+I'm on OpenBSD or a BSD, so I type pkg_add ecl
+
+00:23:46.675 --> 00:23:48.239
+to get embeddable Common Lisp.
+
+00:23:53.590 --> 00:23:55.090
+However, I think I already have it.
+
+00:23:58.540 --> 00:24:02.069
+And then, let's start ecl [embeddable Common Lisp].
+
+00:24:04.670 --> 00:24:07.039
+Quicklisp inserts itself already,
+
+00:24:11.290 --> 00:24:14.920
+but just loading that quicklisp.lisp file
+
+00:24:14.970 --> 00:24:16.989
+kind of would get you here anyway.
+
+00:24:17.039 --> 00:24:22.939
+Now let's (ql:quickload :mcclim)
+
+00:24:27.140 --> 00:24:28.769
+I'm actually following my plan.
+
+00:24:33.269 --> 00:24:38.294
+McCLIM is kind of like Emacs in that
+
+00:24:38.344 --> 00:24:40.713
+it handles all sorts of graphical stuff
+
+00:24:41.013 --> 00:24:42.748
+like if you have GTK Emacs,
+
+00:24:42.798 --> 00:24:44.333
+you know, it can do really a lot of stuff.
+
+00:24:44.383 --> 00:24:48.604
+That's the reason why compiling and loading
+
+00:24:50.504 --> 00:24:53.125
+the McCLIM package takes a while
+
+00:24:53.175 --> 00:24:56.962
+and I do use my old computer laptop,
+
+00:24:57.012 --> 00:25:00.299
+my old computer challenge laptop all the time,
+
+00:25:00.349 --> 00:25:02.685
+so when you do this, your computer will be
+
+00:25:02.735 --> 00:25:05.504
+substantially faster or you will be feeling
+
+00:25:06.404 --> 00:25:09.609
+smug about how slow you're running your computer,
+
+00:25:12.759 --> 00:25:15.481
+and so there's no problem.
+
+00:25:15.531 --> 00:25:17.316
+Next, we're going to start Swank
+
+00:25:17.366 --> 00:25:23.699
+which is the Lisp part of Emacs's slime-mode.
+
+00:25:27.649 --> 00:25:32.298
+If I remember, we looked at this before
+
+00:25:32.348 --> 00:25:34.700
+in my .emacs.d,
+
+00:25:35.050 --> 00:25:40.499
+and then there should be slime/start-swank.lisp.
+
+00:25:41.699 --> 00:25:44.643
+Let's just grab that and load it.
+
+00:25:46.293 --> 00:25:48.470
+You don't have to type #p.
+
+00:25:48.870 --> 00:25:51.150
+The string will work as well as the path name,
+
+00:25:51.200 --> 00:25:52.618
+but it's kind of fun to do so.
+
+00:25:52.668 --> 00:25:55.287
+Now, slime-connect.
+
+00:25:55.437 --> 00:25:56.859
+You installed slime earlier.
+
+00:25:57.559 --> 00:25:59.024
+Default values.
+
+00:25:59.074 --> 00:26:01.794
+Oh, the reason we had to do this
+
+00:26:01.844 --> 00:26:07.064
+and not use Slime, start Slime normally was that
+
+00:26:07.214 --> 00:26:10.736
+CLIM, Common Lisp Interface Manager,
+
+00:26:10.786 --> 00:26:12.204
+McCLIM, implementation of the
+
+00:26:12.254 --> 00:26:16.275
+Common Lisp Interface Manager spec, also uses Swank
+
+00:26:16.675 --> 00:26:19.912
+and McCLIM really wants to be in the driver's seat.
+
+00:26:20.162 --> 00:26:23.282
+We can have our Emacs connect
+
+00:26:23.332 --> 00:26:28.053
+to the Swank that McCLIM was already running.
+
+00:26:28.553 --> 00:26:30.823
+So (in-package :clim-user)...
+
+00:26:30.873 --> 00:26:33.575
+I don't know if this is an Emacs Lisp idiom,
+
+00:26:33.625 --> 00:26:37.112
+so you normally have user packages to absorb user code
+
+00:26:37.162 --> 00:26:38.809
+just for fooling around.
+
+00:26:42.110 --> 00:26:47.556
+Then let's just use clim at all.
+
+00:26:47.606 --> 00:26:52.544
+And so clim does lots of things around presentations
+
+00:26:53.094 --> 00:26:58.317
+but one thing it does is automatically, to a large extent,
+
+00:26:58.367 --> 00:27:03.956
+generate graphical user interfaces.
+
+00:27:04.006 --> 00:27:09.394
+So there's a lot to it that's not about graphics,
+
+00:27:09.444 --> 00:27:13.332
+kind of richer interfaces than
+
+00:27:14.082 --> 00:27:17.089
+ANSI Common Lisp's character streams.
+
+00:27:19.389 --> 00:27:23.158
+But let's use it to grab a graphical pop-up
+
+00:27:23.258 --> 00:27:24.393
+that returns a value.
+
+00:27:24.743 --> 00:27:27.413
+So we have this accepting-values tool.
+
+00:27:28.013 --> 00:27:31.950
+t is just choose whatever you think the default stream is.
+
+00:27:32.150 --> 00:27:36.088
+We're going to want our own window, t as well,
+
+00:27:36.688 --> 00:27:38.390
+so just a keyword argument.
+
+00:27:38.640 --> 00:27:43.328
+After that, we can just write things like (accept 'string).
+
+00:27:44.978 --> 00:27:47.883
+And I'm just doing this in, for people only listening,
+
+00:27:47.933 --> 00:27:50.936
+I've just done this in my ECL Slime REPL.
+
+00:27:50.986 --> 00:27:55.279
+Enter a string: foo bar baz.
+
+00:27:56.530 --> 00:27:58.849
+Alt-Enter, I think, is the shortcut to return that.
+
+00:27:59.150 --> 00:28:02.248
+As you can see, its first return was "foo bar baz",
+
+00:28:02.298 --> 00:28:04.316
+and it had second and third returns,
+
+00:28:04.366 --> 00:28:10.105
+string being the type, presentation type that it got,
+
+00:28:10.155 --> 00:28:13.739
+and t, I think, to indicate that it exited successfully.
+
+00:28:16.189 --> 00:28:20.916
+We can also do expression, might be more interesting.
+
+00:28:20.966 --> 00:28:22.189
+There are a whole bunch of these.
+
+00:28:26.140 --> 00:28:29.308
+clim's examples folder is pretty good.
+
+00:28:29.358 --> 00:28:32.294
+And the documentation, everybody's documentation,
+
+00:28:32.344 --> 00:28:34.713
+McCLIM's documentation, you know,
+
+00:28:35.413 --> 00:28:39.135
+lispworks and franz's documentation will tell you about
+
+00:28:39.385 --> 00:28:45.069
+the different default presentation types you can accept.
+
+00:28:47.969 --> 00:28:49.862
+And they're pretty intuitive and
+
+00:28:49.912 --> 00:28:52.464
+they're kind of very Lisp compatible,
+
+00:28:53.264 --> 00:28:54.266
+which everything kind of is.
+
+00:28:54.316 --> 00:29:00.399
+We could accept an expression. foo bar baz.
+
+00:29:05.350 --> 00:29:09.414
+return "foo bar baz 123" because that's what I wrote.
+
+NOTE Putting things together
+
+00:29:10.964 --> 00:29:14.570
+And now the kind of pièce de résistance
+
+00:29:14.820 --> 00:29:17.055
+of putting those things together.
+
+00:29:17.555 --> 00:29:21.326
+Let's just run over to our scratch buffer.
+
+00:29:22.226 --> 00:29:24.096
+Oh, or our ielm thing, right?
+
+00:29:24.246 --> 00:29:25.564
+That's what we're actually doing.
+
+00:29:25.964 --> 00:29:28.951
+So now, I think we're going to do, hang on,
+
+00:29:30.251 --> 00:29:32.871
+M-:.
+
+00:29:32.921 --> 00:29:41.313
+I think it's going to be slime-eval-save,
+
+00:29:41.663 --> 00:29:44.549
+because it'll eval asynchronously.
+
+00:29:45.849 --> 00:29:49.121
+There's a question of how to get the value out of
+
+00:29:49.171 --> 00:29:52.124
+the asynchronous slime evaluation.
+
+00:29:52.524 --> 00:29:55.761
+And so an obvious way is to yank it.
+
+00:29:59.661 --> 00:30:02.234
+I'm looking forward to learning from kickingvegas.
+
+00:30:02.284 --> 00:30:06.638
+He finally makes it stick in my brain how to...
+
+00:30:07.138 --> 00:30:10.559
+Options other than just starting to write a command
+
+00:30:10.959 --> 00:30:14.013
+in the minibuffer and then mashing Tab
+
+00:30:14.063 --> 00:30:16.465
+and looking at what the likely sounding results are.
+
+00:30:16.765 --> 00:30:21.720
+That's what I will be learning this conference, if anything.
+
+00:30:22.070 --> 00:30:26.558
+slime-eval-save and then, what was happening over here?
+
+00:30:26.958 --> 00:30:31.769
+(accepting-values (t :own-window t) (accept 'expression)).
+
+00:30:33.369 --> 00:30:38.319
+Kind of confusingly, slime-eval-save takes a string,
+
+00:30:39.169 --> 00:30:41.840
+but it works really well, I'd argue.
+
+00:30:41.940 --> 00:30:43.475
+I think it's about to work really well.
+
+00:30:45.825 --> 00:30:46.712
+Ok, this is great.
+
+00:30:46.762 --> 00:30:50.182
+So you can see I've used... Oh, please enter an expression.
+
+00:30:50.882 --> 00:30:52.117
+So we're doing an expression.
+
+00:30:52.167 --> 00:30:59.057
+And so let's write like (3 4/2 5/6).
+
+00:30:59.357 --> 00:31:00.609
+That's an expression, right?
+
+00:31:03.609 --> 00:31:05.797
+And now I've yanked it.
+
+00:31:05.847 --> 00:31:07.379
+I should have really been in *scratch*,
+
+00:31:07.429 --> 00:31:11.770
+because I just want to dump. Sorry, *scratch*.
+
+00:31:13.770 --> 00:31:15.290
+Dump whatever that did.
+
+00:31:16.540 --> 00:31:19.480
+Oh, yeah, and see, it kind of simplified that
+
+00:31:19.530 --> 00:31:20.712
+while it was reading it.
+
+00:31:20.762 --> 00:31:27.486
+So running in Elisp, (slime-eval-save "(accepting-values
+
+00:31:27.536 --> 00:31:32.557
+(t :own-window t), accept 'expression))").
+
+00:31:33.157 --> 00:31:36.328
+And I got the three returns all the way
+
+00:31:36.378 --> 00:31:43.235
+from McCLIM to inferior-lisp to Elisp.
+
+00:31:43.885 --> 00:31:46.471
+3, 2, 5/6.
+
+00:31:46.521 --> 00:31:50.575
+Second return, it was a presentation type of expression,
+
+00:31:50.625 --> 00:31:52.811
+returned successfully, key.
+
+00:31:53.561 --> 00:31:56.679
+Yeah, so that's pretty cool. How out of time are we?
+
+00:31:58.530 --> 00:32:00.859
+Oh, we did this in basically half an hour.
+
+00:32:04.009 --> 00:32:07.209
+Maybe we could stop and assume there will be a bit under
+
+00:32:07.259 --> 00:32:10.796
+half an hour of interactive discussion.
+
+00:32:11.646 --> 00:32:15.634
+And when I also watch this and also receive suggestions,
+
+00:32:16.934 --> 00:32:20.071
+there will be additions and changes to make, I think.
+
+00:32:21.671 --> 00:32:32.617
+But can we quickly defun accept-date?
+
+00:32:34.667 --> 00:32:36.589
+Let's not take any arguments.
+
+00:32:40.239 --> 00:32:41.709
+Let's do this.
+
+00:32:48.409 --> 00:32:49.769
+accept-date.
+
+00:32:55.519 --> 00:32:58.099
+Saturday, December 7th.
+
+00:33:02.649 --> 00:33:04.015
+Oh, it doesn't return it.
+
+00:33:04.215 --> 00:33:05.518
+But it gets pretty close to returning it.
+
+00:33:05.568 --> 00:33:06.718
+I guess it yanks it.
+
+00:33:07.818 --> 00:33:18.359
+I would have to call … I'm going to say it's slime-sync,
+
+00:33:21.160 --> 00:33:25.370
+at which point it will resolve the slime-eval-async.
+
+00:33:25.670 --> 00:33:28.757
+And then I could get the first value out of
+
+00:33:28.807 --> 00:33:32.179
+my kill-ring pop, right?
+
+00:33:33.629 --> 00:33:35.046
+Does kill ring pop what I want?
+
+00:33:36.646 --> 00:33:39.918
+You know, you tell me in the interactive feedback,
+
+00:33:39.968 --> 00:33:41.720
+which should be happening in LambdaMOO.
+
+00:33:43.020 --> 00:33:45.559
+Well, I'll record another draft of this later
+
+00:33:45.609 --> 00:33:47.709
+after getting some feedback.
+
+00:33:48.609 --> 00:33:51.580
+Or worse to worse, this is just what you'll hear.
+
+00:33:52.180 --> 00:33:58.503
+Hopefully we have some questions and constructive comments.
+
+00:33:59.303 --> 00:34:00.255
+All right, see everybody later.
+
+00:34:00.305 --> 00:34:01.359
+Thank you so much for being here.
+
+00:34:04.470 --> 00:34:08.613
+Please do drop in to my live show
+
+00:34:08.663 --> 00:34:11.266
+if you're so inclined on Wednesdays
+
+00:34:11.316 --> 00:34:14.186
+where you're not busy with cool Emacs conferences.
+
+00:34:14.936 --> 00:34:16.169
+The list be go for climate.
+
+00:34:16.219 --> 00:34:17.572
+Thank you to everyone who helped.
+
+00:34:17.772 --> 00:34:18.640
+Thank you to Sacha
+
+00:34:18.690 --> 00:34:21.660
+for really getting me into this conference
+
+00:34:21.710 --> 00:34:23.428
+and kind of getting me going and
+
+00:34:23.678 --> 00:34:26.181
+submitting this prerecorded talk.
+
+00:34:27.981 --> 00:34:28.780
+See everybody later.
diff --git a/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt
new file mode 100644
index 00000000..a1fbcf55
--- /dev/null
+++ b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:03:08.240 --> 00:05:58.719
+Vertico
+
+00:05:58.720 --> 00:06:46.079
+which-key
+
+00:06:46.080 --> 00:07:54.799
+eldoc
+
+00:07:54.800 --> 00:10:37.559
+Casual
+
+00:10:37.560 --> 00:13:33.879
+Closing remarks
+
+00:13:33.880 --> 00:19:00.279
+Graphical web browsing
+
+00:19:00.280 --> 00:20:28.239
+org-web-tools
+
+00:20:28.240 --> 00:40:13.360
+qutebrowser
diff --git a/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt
new file mode 100644
index 00000000..eca74be0
--- /dev/null
+++ b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt
@@ -0,0 +1,1751 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:08.399
+I believe we are live, so hi again folks and welcome to a
+
+00:00:08.400 --> 00:00:12.319
+little bit of an unstructured time that we wanted to have for
+
+00:00:12.320 --> 00:00:15.399
+this particular EmacsConf. We have a bit of a lighter
+
+00:00:15.400 --> 00:00:19.239
+afternoon compared to previous years and we just thought it
+
+00:00:19.240 --> 00:00:23.999
+would be a nice opportunity for us and for you to join if
+
+00:00:24.000 --> 00:00:27.279
+you've got anything to share like you wanted maybe to have a
+
+00:00:27.280 --> 00:00:29.879
+talk this year but haven't had the time to submit a
+
+00:00:29.880 --> 00:00:32.879
+presentation well now's your time think of it more like the
+
+00:00:32.880 --> 00:00:36.199
+traditional workshops that Emacs Paris or Emacs Berlin
+
+00:00:36.200 --> 00:00:39.839
+tends to run so if you've got anything to share we've made
+
+00:00:39.840 --> 00:00:43.479
+sure to publish the link to this room on IRC and perhaps as
+
+00:00:43.480 --> 00:00:49.279
+well on the website And yeah, it's just a moment for you. If
+
+00:00:49.280 --> 00:00:53.399
+it's a little slow because people do not join, we might start
+
+00:00:53.400 --> 00:00:56.239
+chatting a little bit about Emacs Conf in general, and
+
+00:00:56.240 --> 00:00:59.359
+perhaps take a little bit of advance on the closing remarks
+
+00:00:59.360 --> 00:01:04.079
+for the day, just so that I can go to bed early. But otherwise,
+
+00:01:04.080 --> 00:01:10.679
+the mic is yours.
+
+00:01:10.680 --> 00:01:14.479
+Does any of my fellow co-organizers want to maybe join in and
+
+00:01:14.480 --> 00:01:19.119
+say a word? Maybe you, Corwin?
+
+00:01:19.120 --> 00:01:23.559
+Who, me? No, I usually just sit here quietly. You know me,
+
+00:01:23.560 --> 00:01:31.759
+Leo. Nothing to say to me. I see Karthik here.
+
+00:01:31.760 --> 00:01:35.919
+Karthik has joined the chat. We can see what Karthik has been
+
+00:01:35.920 --> 00:01:44.839
+up to.
+
+00:01:44.840 --> 00:01:53.159
+Hi, everyone. Hi. Hey, I hear you.
+
+00:01:53.160 --> 00:01:57.999
+Is there anything you wanted to share, Karthik?
+
+00:01:58.000 --> 00:02:01.879
+Nothing in particular, but if people suggest topics and
+
+00:02:01.880 --> 00:02:06.839
+have something to say or show off, then I'll jump in. Right,
+
+00:02:06.840 --> 00:02:10.639
+you're coming in as someone who wants to react to stuff, not
+
+00:02:10.640 --> 00:02:12.319
+someone who wants to present, but that's completely fine
+
+00:02:12.320 --> 00:02:15.279
+too. But that means that we are still stopped for people who
+
+00:02:15.280 --> 00:02:18.599
+want to chat. We're still pointing fingers at people in the
+
+00:02:18.600 --> 00:02:36.319
+chat, otherwise.
+
+00:02:36.320 --> 00:02:40.399
+Well, and if you're watching and you want to. Yep. If you, I
+
+00:02:40.400 --> 00:02:42.799
+was just going to say, if, uh, if you're watching the stream
+
+00:02:42.800 --> 00:02:45.919
+and you'd like to get involved, uh, you can join, uh,
+
+00:02:45.920 --> 00:02:53.599
+libera.chat on IRC and join the emacsconf-gen channel. Um, uh, or,
+
+00:02:53.600 --> 00:02:57.599
+uh, just, just, uh, reach out in one of those channels and,
+
+00:02:57.600 --> 00:03:01.359
+and we'll, we'll, we'll ship you a link to join in the BBB
+
+00:03:01.360 --> 00:03:05.839
+here. I'm not sure if that got auto published. I didn't see it
+
+00:03:05.840 --> 00:03:08.239
+on the website.
+
+NOTE Vertico
+
+00:03:08.240 --> 00:03:15.239
+I can suggest a topic, since many people have demoed or used
+
+00:03:15.240 --> 00:03:20.119
+transient in this conf. I was wondering if someone has any
+
+00:03:20.120 --> 00:03:25.639
+interesting uses for transient.
+
+00:03:25.640 --> 00:03:28.479
+It's an interesting topic, sadly one in which I'm not going
+
+00:03:28.480 --> 00:03:31.839
+to be personally able to participate in because I'm still
+
+00:03:31.840 --> 00:03:37.199
+old school. It took me, you know, the VertiCo stack. Did we
+
+00:03:37.200 --> 00:03:40.359
+actually present something on vertico at EmacsConf? I'm not
+
+00:03:40.360 --> 00:03:44.439
+sure, but it's a completion engine in separate packages,
+
+00:03:44.440 --> 00:03:49.279
+very similar to what people may be more familiar with, i.e.
+
+00:03:49.280 --> 00:03:55.199
+Ivy, Helm, ido, all those tools. But I'm old school and I
+
+00:03:55.200 --> 00:03:59.919
+still use Hydra when it comes to interaction. But I've been
+
+00:03:59.920 --> 00:04:05.159
+meaning to transition into Transient at some point and I'd
+
+00:04:05.160 --> 00:04:09.159
+actually be quite interested in people sharing how they've
+
+00:04:09.160 --> 00:04:13.199
+been able to use Transient to supplement their interfaces.
+
+00:04:13.200 --> 00:04:17.959
+but I'm obviously a big user as I think most people would be in
+
+00:04:17.960 --> 00:04:25.679
+this room and on live viewers. The Git, I use it plenty and
+
+00:04:25.680 --> 00:04:29.319
+it's a wonderful interface and I wish I could develop
+
+00:04:29.320 --> 00:04:33.239
+similar interfaces for my own packages that I manage. So
+
+00:04:33.240 --> 00:04:36.159
+maybe at some point. But apparently part of the discussion I
+
+00:04:36.160 --> 00:04:40.359
+think revolves around the fact that transients might be a
+
+00:04:40.360 --> 00:04:43.999
+little hard to approach for people who are perhaps used to
+
+00:04:44.000 --> 00:04:50.639
+the simplicity of a Hydra set up with aboabo's packages. So,
+
+00:04:50.640 --> 00:04:52.919
+if anyone has got anything to say about this, you're more
+
+00:04:52.920 --> 00:04:57.639
+than welcome to join us on BBB. You can also chat it up on IRC
+
+00:04:57.640 --> 00:05:01.759
+and we'll try to give voice to the lines you write and we might
+
+00:05:01.760 --> 00:05:05.599
+be able to react. Otherwise, I suggest if we got a call in.
+
+00:05:05.600 --> 00:05:07.799
+Although that's where I was going to take it to. I think
+
+00:05:07.800 --> 00:05:11.759
+that's a perfect question. Because for once, although
+
+00:05:11.760 --> 00:05:16.959
+obviously any of us can probably talk about how interesting
+
+00:05:16.960 --> 00:05:20.039
+it is at some length, it's not something that Leo and I,
+
+00:05:20.040 --> 00:05:26.559
+normally such loquacious people, have any real insight to.
+
+00:05:26.560 --> 00:05:31.039
+So kind of pick up the phone, call in, jump on the BBB, or
+
+00:05:31.040 --> 00:05:35.399
+through your comments in IRC, exactly as Leo says. Love to,
+
+00:05:35.400 --> 00:05:38.439
+love to have, uh, invite more participation in the
+
+00:05:38.440 --> 00:05:41.759
+discussion and thinking about how to answer that. I myself,
+
+00:05:41.760 --> 00:05:44.199
+uh, you know, jump into my own workflow and I'd start
+
+00:05:44.200 --> 00:05:49.359
+thinking about, oh, well, what is working for me so well, I
+
+00:05:49.360 --> 00:05:58.719
+haven't dug into that sort of where I take the question.
+
+NOTE which-key
+
+00:05:58.720 --> 00:06:02.039
+which-key actually is the direct answer to that, right? For
+
+00:06:02.040 --> 00:06:05.999
+me, that particular package, which seems to come up a lot in
+
+00:06:06.000 --> 00:06:09.719
+sort of help-adjacent forums as being a discovery tool, a
+
+00:06:09.720 --> 00:06:15.519
+way to learn different bindings. I self-identify as being
+
+00:06:15.520 --> 00:06:19.559
+kind of on a path of memorizing all the keystrokes I'm going
+
+00:06:19.560 --> 00:06:23.959
+to care about and how to find ones that I, it would have been
+
+00:06:23.960 --> 00:06:27.559
+convenient if I cared more about before today, right? So
+
+00:06:27.560 --> 00:06:32.079
+it's, for me, a lot of Emacs's power is the, you know,
+
+00:06:32.080 --> 00:06:35.159
+whatever brings to me the knowledge of what I should have
+
+00:06:35.160 --> 00:06:39.519
+done a moment ago, need to do, you know, how to do what I need to
+
+00:06:39.520 --> 00:06:46.079
+do next and so on.
+
+NOTE eldoc
+
+00:06:46.080 --> 00:06:49.999
+I'll also be a user of which-key here and all the fancy tools
+
+00:06:50.000 --> 00:06:53.799
+like eldoc which provides you in your modeline the signature
+
+00:06:53.800 --> 00:06:56.599
+of the function you're currently writing such as if you're
+
+00:06:56.600 --> 00:06:59.959
+writing an elist function but you've suddenly forgotten
+
+00:06:59.960 --> 00:07:03.519
+which is the first argument which is the second argument
+
+00:07:03.520 --> 00:07:07.639
+usually you have if you stay inside the function it will show
+
+00:07:07.640 --> 00:07:10.839
+in the modline what the arguments are supposed to be and what
+
+00:07:10.840 --> 00:07:13.599
+their names are so that it's actually pretty useful. And you
+
+00:07:13.600 --> 00:07:16.399
+get similar things if you're writing other languages, like
+
+00:07:16.400 --> 00:07:19.999
+I write Go for a living, and it's always good to have the
+
+00:07:20.000 --> 00:07:22.599
+signature appears in the model line whenever you're
+
+00:07:22.600 --> 00:07:28.199
+writing the start of a function. So I'm seeing, I'll read out
+
+00:07:28.200 --> 00:07:34.919
+a couple comments here. I just, I note the, you know, use of
+
+00:07:34.920 --> 00:07:38.559
+transient as a bridge to Elisp, especially if you don't know
+
+00:07:38.560 --> 00:07:42.519
+it well, you're not interested in learning it, even
+
+00:07:42.520 --> 00:07:48.759
+perhaps. I've certainly run into that. You know, oh, yuck,
+
+00:07:48.760 --> 00:07:51.799
+Elisp. No, I'm doing fine with Customize or whatever works
+
+00:07:51.800 --> 00:07:54.799
+for you, right? That's a lot of the Emacs spirit. So I hear
+
+NOTE Casual
+
+00:07:54.800 --> 00:08:00.879
+that. Uh, and then, and that brings up casual, which, uh,
+
+00:08:00.880 --> 00:08:04.599
+I've seen a lot of discussion of personally, and that, that
+
+00:08:04.600 --> 00:08:09.719
+looks, uh, you know, uh, it's an, all of these types of things
+
+00:08:09.720 --> 00:08:12.879
+like org actually, which we've been talking a lot about this
+
+00:08:12.880 --> 00:08:17.919
+weekend. you know, bring together a lot of functionality
+
+00:08:17.920 --> 00:08:21.039
+kind of cross-cuttingly across Emacs, all the different
+
+00:08:21.040 --> 00:08:26.079
+languages that we can figure out how to view nicely in Emacs
+
+00:08:26.080 --> 00:08:29.519
+will, you know, fit into some sort of, you know, kind of
+
+00:08:29.520 --> 00:08:34.759
+literate format to talk about. code that needs to span a lot
+
+00:08:34.760 --> 00:08:40.639
+of languages for whatever reason, right? So I guess my bite
+
+00:08:40.640 --> 00:08:47.759
+at the apple there. Yeah, casual's neat and so is transient.
+
+00:08:47.760 --> 00:08:52.559
+I haven't... I haven't for myself... I've seen some comments in
+
+00:08:52.560 --> 00:08:56.439
+chat throughout the weekend good discussion around hey
+
+00:08:56.440 --> 00:08:59.639
+that's you know it's kind of hard to learn how to use how do I
+
+00:08:59.640 --> 00:09:01.999
+fit this into my use case how do I think about things in the
+
+00:09:02.000 --> 00:09:07.079
+same terms that transients abstractions do so that you know
+
+00:09:07.080 --> 00:09:10.359
+to the extent I need to I build my program in terms of those
+
+00:09:10.360 --> 00:09:14.759
+same abstractions or to the extent that isn't necessary or
+
+00:09:14.760 --> 00:09:18.479
+helpful just so that it's natural for me to set up my
+
+00:09:18.480 --> 00:09:22.399
+customized variables so that my saved routines just do the
+
+00:09:22.400 --> 00:09:25.639
+right thing or my read routine spectrum in the right place or
+
+00:09:25.640 --> 00:09:30.119
+whatever, tying the room together, sorts of integration. I
+
+00:09:30.120 --> 00:09:34.119
+haven't run into that because for me, I'm on this journey of
+
+00:09:34.120 --> 00:09:36.639
+learning the keys was my point. I'm not actually preaching
+
+00:09:36.640 --> 00:09:41.839
+for that's the way to use Emacs, quite the reverse.
+
+00:09:41.840 --> 00:09:42.199
+away.
+
+00:09:42.200 --> 00:09:50.839
+All right, I see that some people are joining us on the BBB, so
+
+00:09:50.840 --> 00:09:53.559
+if you've got a mic on, we're gonna assume that you want to be
+
+00:09:53.560 --> 00:09:56.879
+chatting, but don't hesitate to interrupt us if you've got
+
+00:09:56.880 --> 00:10:00.559
+anything to contribute, meaningful otherwise, if you just
+
+00:10:00.560 --> 00:10:04.999
+want to chat it up with us, we are also here for this. Yeah, and
+
+00:10:05.000 --> 00:10:07.999
+to do the radio announcer thing a little harder too. Like,
+
+00:10:08.000 --> 00:10:10.679
+you know, I guess in my mind, I'm thinking of this as a call-in
+
+00:10:10.680 --> 00:10:13.679
+format. Just come over and grab a microphone and talk about
+
+00:10:13.680 --> 00:10:16.319
+your thoughts and whether it's something that Leo or I are
+
+00:10:16.320 --> 00:10:19.959
+saying, or Sacha, that you've been pretty quiet over there,
+
+00:10:19.960 --> 00:10:24.879
+that are setting you going, or you just kind of walk into the
+
+00:10:24.880 --> 00:10:27.719
+room with, hey guys, why aren't we talking about, or let's
+
+00:10:27.720 --> 00:10:31.119
+talk more about, or thoughts from the weekend, which as Leo
+
+00:10:31.120 --> 00:10:35.079
+mentioned, is kind of where we're gonna where we in our own
+
+00:10:35.080 --> 00:10:37.559
+minds are sort of sitting, walking into the room.
+
+NOTE Closing remarks
+
+00:10:37.560 --> 00:10:49.759
+Perhaps what we could do is I mentioned that we could perhaps
+
+00:10:49.760 --> 00:10:51.999
+take a little bit of advance on the closing remark. I know it
+
+00:10:52.000 --> 00:10:54.719
+feels weird to be closing a conference that has not yet
+
+00:10:54.720 --> 00:10:57.639
+finished because we still have many talks in the afternoon.
+
+00:10:57.640 --> 00:11:01.359
+If I count, we have one, two, three, four, five talks. Well,
+
+00:11:01.360 --> 00:11:05.759
+actually, no, four. So there's still plenty to go. But
+
+00:11:05.760 --> 00:11:10.199
+since, you know, you know, I'm still in Europe and it's still
+
+00:11:10.200 --> 00:11:14.839
+pretty tough to maintain composure until 11. Might be a good
+
+00:11:14.840 --> 00:11:18.559
+time for us maybe to read over the closing remarks. How do you
+
+00:11:18.560 --> 00:11:21.079
+feel, Corwin, about this and Sacha, how do you feel about
+
+00:11:21.080 --> 00:11:27.239
+this? Yep, that'd be cool. Sacha? Fine with me. People can
+
+00:11:27.240 --> 00:11:30.919
+continue to share thoughts and ideas in the chat or in the
+
+00:11:30.920 --> 00:11:34.679
+Etherpad and we can go through the closing remarks. You want
+
+00:11:34.680 --> 00:11:40.159
+to share the sun-close? Uh, I do have them. I'm not sure. So you
+
+00:11:40.160 --> 00:11:43.199
+did copy over. Okay, good. I can kind of rotate the screen
+
+00:11:43.200 --> 00:11:47.519
+between them if that works. And I'll try to jump over to chat a
+
+00:11:47.520 --> 00:11:52.119
+little more. Uh, you know, sure. I'm putting the link on BBB
+
+00:11:52.120 --> 00:11:54.759
+just in case people in there wants to follow. And also for
+
+00:11:54.760 --> 00:11:58.079
+you, Corwin, if you want to open it up more quickly. Yeah,
+
+00:11:58.080 --> 00:12:01.359
+that's going to be easier. Thank you.
+
+00:12:01.360 --> 00:12:08.359
+Pretty sure I have the Sunday close pad here, but I'll take
+
+00:12:08.360 --> 00:12:09.679
+your link, sir.
+
+00:12:09.680 --> 00:12:37.839
+Um, I mean, I've got my org channel. Sure. I mean, Elephant
+
+00:12:37.840 --> 00:12:40.479
+Ergo, if you want to jump in, you know, we were suggesting
+
+00:12:40.480 --> 00:12:45.319
+doing the Saturday, Sunday close, sorry. Instead of having
+
+00:12:45.320 --> 00:12:47.999
+people chat, but if you have something to say right now, feel
+
+00:12:48.000 --> 00:12:50.239
+free to jump in. Although you do not have your microphone on,
+
+00:12:50.240 --> 00:12:57.599
+you would need to join the audio in order to chat. Yep, and you
+
+00:12:57.600 --> 00:13:01.919
+can also use any of the private message type of features. Did
+
+00:13:01.920 --> 00:13:05.639
+you guys want me to bring up the pad here? I did pull it up. Oh,
+
+00:13:05.640 --> 00:13:12.359
+well, I got it already. Understood. Okay, cool. So I think
+
+00:13:12.360 --> 00:13:14.839
+Elephant Ergonomics is currently switching to the
+
+00:13:14.840 --> 00:13:18.239
+microphone so that they may ask a question. So I suggest we
+
+00:13:18.240 --> 00:13:18.999
+wait a little bit.
+
+00:13:19.000 --> 00:13:24.759
+Elephant Ergonomics, yes, right now, you figured it out.
+
+00:13:24.760 --> 00:13:30.119
+Hi. Is this working? Oh, wow. Cool. Okay. Long time
+
+00:13:30.120 --> 00:13:33.879
+listener. First time on the show. Wow.
+
+NOTE Graphical web browsing
+
+00:13:33.880 --> 00:13:39.839
+Okay. Well, I shouldn't let my nerves get the best of me now
+
+00:13:39.840 --> 00:13:44.839
+because I got it all set up. So basically the thing that I've
+
+00:13:44.840 --> 00:13:50.519
+been thinking about because I've had a a handful of thoughts
+
+00:13:50.520 --> 00:13:55.719
+related to graphical web browsing. Because I know that
+
+00:13:55.720 --> 00:14:00.999
+that's a point of friction for me, for sure. I don't know how
+
+00:14:01.000 --> 00:14:04.599
+much other people experience that. I know that I've
+
+00:14:04.600 --> 00:14:08.199
+certainly heard murmurs about it. But I've been
+
+00:14:08.200 --> 00:14:14.239
+speculating about a couple of thoughts about that recently
+
+00:14:14.240 --> 00:14:18.239
+for some of the stuff that can be done in order to get like the
+
+00:14:18.240 --> 00:14:22.719
+sort of invasive graphical JavaScript, giant
+
+00:14:22.720 --> 00:14:27.639
+unmanageable spec sort of version of the browser working
+
+00:14:27.640 --> 00:14:31.359
+inside of Emacs, you know, in addition to, you know, the much
+
+00:14:31.360 --> 00:14:33.439
+more manageable EWW kind of thing.
+
+00:14:33.440 --> 00:14:42.919
+So yeah, basically as part of my rambling, I had basically
+
+00:14:42.920 --> 00:14:47.719
+two major thoughts for strategies, because God knows this is
+
+00:14:47.720 --> 00:14:52.519
+way too big of a thing for me to tackle just for me. And I have
+
+00:14:52.520 --> 00:14:55.759
+been kind of thinking, you know, where do I go about getting
+
+00:14:55.760 --> 00:14:59.559
+started? And I think maybe that would probably just look
+
+00:14:59.560 --> 00:15:03.959
+like maybe, you know, pitching ideas that have been on the
+
+00:15:03.960 --> 00:15:08.119
+back of my mind.
+
+00:15:08.120 --> 00:15:14.919
+The first of which is that I stumbled upon uh, this
+
+00:15:14.920 --> 00:15:20.119
+application while ago called browsh. Uh, it's a, I'm going to
+
+00:15:20.120 --> 00:15:25.127
+go ahead and post that in the chat. Um, and just the, uh,
+
+00:15:25.128 --> 00:15:26.479
+emacsconf-gen.
+
+00:15:26.480 --> 00:15:31.479
+So let's see here. It's not going.
+
+00:15:31.480 --> 00:15:43.079
+Oh, trying to light space. Cool. So this is a, I have no
+
+00:15:43.080 --> 00:15:46.319
+personal involvement with this project. The person that
+
+00:15:46.320 --> 00:15:50.919
+developed this does not know I exist, but I stumbled upon
+
+00:15:50.920 --> 00:15:54.479
+this in the wild. And what's really quite interesting about
+
+00:15:54.480 --> 00:15:58.879
+it is that it will run, it's effectively a headless browser
+
+00:15:58.880 --> 00:16:04.839
+in the background and then convert this into blocks of text
+
+00:16:04.840 --> 00:16:07.959
+for the sake of rendering inside a terminal. This is
+
+00:16:07.960 --> 00:16:12.479
+especially helpful in the case where you can run the daemon
+
+00:16:12.480 --> 00:16:15.159
+that's actually responsible for the headless browser
+
+00:16:15.160 --> 00:16:20.599
+instance on a completely different box than the one that
+
+00:16:20.600 --> 00:16:25.879
+you're actually running your shell on. And you have this
+
+00:16:25.880 --> 00:16:30.959
+complete separation between the I/O and the actual handling
+
+00:16:30.960 --> 00:16:36.319
+of all of the complex, kind of opaque, really unmanageable,
+
+00:16:36.320 --> 00:16:39.959
+big browser stuff. I'm thinking that there's definitely
+
+00:16:39.960 --> 00:16:44.039
+something that we could consider cannibalizing here,
+
+00:16:44.040 --> 00:16:44.599
+either for
+
+00:16:44.600 --> 00:16:51.959
+one of the different rendering paradigms that fits inside
+
+00:16:51.960 --> 00:16:57.839
+of Emacs more cleanly, especially either like the SVG
+
+00:16:57.840 --> 00:17:02.679
+renderer. Or again, trying to figure out how to break it into
+
+00:17:02.680 --> 00:17:06.479
+blocks somehow, but I feel like there's definitely.
+
+00:17:06.480 --> 00:17:11.559
+Something very Emacs-y about the strategy that I would love to
+
+00:17:11.560 --> 00:17:16.079
+consider, especially for someone more technically
+
+00:17:16.080 --> 00:17:20.359
+qualified than I. To consider, I would love to tackle this.
+
+00:17:20.360 --> 00:17:24.959
+Given that I have the time, but I didn't want to sit on this
+
+00:17:24.960 --> 00:17:29.119
+idea. On my own on the basis that, you know, there's a lot
+
+00:17:29.120 --> 00:17:33.479
+really qualified people here and I figured that. You know,
+
+00:17:33.480 --> 00:17:36.519
+someone that's a little bit more frustrated than me about
+
+00:17:36.520 --> 00:17:39.719
+this could very well. Pick this up and run with it.
+
+00:17:39.720 --> 00:17:46.599
+So I wanted to suggest that I also wanted to suggest the
+
+00:17:46.600 --> 00:17:53.759
+prospect of... I found a couple of just completely separately
+
+00:17:53.760 --> 00:17:57.899
+as a strategy to
+
+00:17:57.900 --> 00:18:07.000
+the ability to re-render outputted DOM content
+
+00:18:07.001 --> 00:18:10.417
+that would be rendered by, again, a
+
+00:18:10.418 --> 00:18:13.599
+full-fledged browser, probably in a headless,
+
+00:18:13.600 --> 00:18:15.309
+a sort of instance and then
+
+00:18:15.310 --> 00:18:20.530
+converting that DOM content to SVG,
+
+00:18:20.531 --> 00:18:22.791
+which we could then render inside of Emacs
+
+00:18:22.792 --> 00:18:25.319
+either piecewise or as
+
+00:18:25.320 --> 00:18:31.279
+the entire document. And I feel that that could be another
+
+00:18:31.280 --> 00:18:36.719
+strategy that we could perhaps consider as something that
+
+00:18:36.720 --> 00:18:41.399
+we can do for, you know, headless processing, and then
+
+00:18:41.400 --> 00:18:43.839
+having the Emacs rendering engine actually responsible
+
+00:18:43.840 --> 00:18:52.759
+for the display and the I/O. So yeah, I just wanted to suggest a
+
+00:18:52.760 --> 00:19:00.279
+couple of those sort of ideas I've been sitting on. A couple
+
+NOTE org-web-tools
+
+00:19:00.280 --> 00:19:03.479
+of things related to that stuff would be org-web-tools, I
+
+00:19:03.480 --> 00:19:07.519
+think is what it's called, from alphapapa. It'll allow you
+
+00:19:07.520 --> 00:19:12.359
+to download a webpage into an Org Mode document. Or if you
+
+00:19:12.360 --> 00:19:16.519
+wanted to use a web browser that would have key bindings,
+
+00:19:16.520 --> 00:19:20.759
+primarily, you would want to use the next browser or
+
+00:19:20.760 --> 00:19:27.719
+qutebrowser, where they're more of meant to have their settings
+
+00:19:27.720 --> 00:19:33.319
+saved in a text document. And in the case of Next, it's
+
+00:19:33.320 --> 00:19:39.839
+written in Common Lisp and is very deeply inspired by Emacs.
+
+00:19:39.840 --> 00:19:43.199
+So I'll just break in what is a great discussion briefly to
+
+00:19:43.200 --> 00:19:45.959
+say. If you're just joining us, you're watching the Emacs
+
+00:19:45.960 --> 00:19:50.479
+conference. We're doing a brief open mic session. And we've
+
+00:19:50.480 --> 00:19:56.119
+been joined, we have... Sorry, I was just going to introduce
+
+00:19:56.120 --> 00:20:13.039
+you, Plasma. Sorry. Nasty feedback from you, Sacha. Sorry.
+
+00:20:13.040 --> 00:20:17.719
+We'll definitely have to check out integration for those
+
+00:20:17.720 --> 00:20:22.559
+two browsers. You know, this is my first time taking a look at
+
+00:20:22.560 --> 00:20:28.239
+web tools. This could definitely help me.
+
+NOTE qutebrowser
+
+00:20:28.240 --> 00:20:32.879
+I've been using qutebrowser really persistently. It has
+
+00:20:32.880 --> 00:20:35.199
+dramatically improved my browser experience, but I'm
+
+00:20:35.200 --> 00:20:39.559
+still definitely having that last little bit of context
+
+00:20:39.560 --> 00:20:43.359
+switch friction that I would love to make disappear. Next
+
+00:20:43.360 --> 00:20:47.439
+might be part of the recipe, but I definitely think that, you
+
+00:20:47.440 --> 00:20:51.199
+know, certainly the goal for me is that I would love to see it
+
+00:20:51.200 --> 00:20:56.839
+inside Emacs itself. But this is, this definitely
+
+00:20:56.840 --> 00:21:00.319
+represents a big piecewise improvement I'm going to have to
+
+00:21:00.320 --> 00:21:05.679
+pursue. So thank you.
+
+00:21:05.680 --> 00:21:09.439
+So I think that that intersects some some several
+
+00:21:09.440 --> 00:21:11.679
+conversations that I think we've heard throughout the
+
+00:21:11.680 --> 00:21:17.879
+weekend kind of touching on the idea of, you know, baking our
+
+00:21:17.880 --> 00:21:22.759
+baking our thoughts into the core of Emacs right. and
+
+00:21:22.760 --> 00:21:27.519
+realizing, oh yeah, this is a pattern other people or a
+
+00:21:27.520 --> 00:21:30.159
+problem other people are running into or a way that other
+
+00:21:30.160 --> 00:21:38.199
+people work or a way that people want Emacs to look or just
+
+00:21:38.200 --> 00:21:40.479
+starts me thinking about like alternate key binding
+
+00:21:40.480 --> 00:21:43.639
+packages, which over the last few years, I feel like we've
+
+00:21:43.640 --> 00:21:47.159
+seen just a ton of options in a space that had been somewhat
+
+00:21:47.160 --> 00:21:50.439
+dormant, right? There was evil and everything else. And now
+
+00:21:50.440 --> 00:21:54.759
+there is a lot of granularity in my mind to everything else.
+
+00:21:54.760 --> 00:21:57.039
+So although I'm not using any of these things, I think I've
+
+00:21:57.040 --> 00:22:02.039
+bumped into them a lot. A couple of other related topics in
+
+00:22:02.040 --> 00:22:05.359
+case that jogs anyone's interest to jump in and join the
+
+00:22:05.360 --> 00:22:16.039
+discussion. Yeah, thanks. Thanks for the comments.
+
+00:22:16.040 --> 00:22:18.679
+Any other person wants to share something in the room
+
+00:22:18.680 --> 00:22:22.159
+currently? I'm seeing plenty of familiar names, so this is
+
+00:22:22.160 --> 00:22:26.399
+an invitation for those who I haven't heard so far to come in
+
+00:22:26.400 --> 00:22:30.479
+and chat.
+
+00:22:30.480 --> 00:22:34.839
+And I mentioned to a comment I see from wasamasa saying, I've
+
+00:22:34.840 --> 00:22:39.399
+been experimenting with using some crap to review ELIS
+
+00:22:39.400 --> 00:22:43.239
+security issues. That's something.
+
+00:22:43.240 --> 00:22:48.999
+you want to leave. I'm not sure that is. Yeah. I'm not sure if
+
+00:22:49.000 --> 00:22:52.599
+Wes and Marcel wants to deprive themselves of, well,
+
+00:22:52.600 --> 00:22:56.559
+actually unmuted yourself. So please go. What? I've only
+
+00:22:56.560 --> 00:23:00.959
+got my name, that's all. I was just reading out your comment
+
+00:23:00.960 --> 00:23:06.199
+from the chat. Yeah. Just jump in on any topic, honestly.
+
+00:23:06.200 --> 00:23:09.599
+Okay. I thought like, it's like an invitation for people to
+
+00:23:09.600 --> 00:23:12.519
+talk what, you know, they've recently started trying to do
+
+00:23:12.520 --> 00:23:15.359
+in Emacs. That's exactly right. A hundred percent. Okay.
+
+00:23:15.360 --> 00:23:22.519
+Okay. So, well, I do review security things for work. And one
+
+00:23:22.520 --> 00:23:25.839
+colleague has been like bugging me all the time about, hey,
+
+00:23:25.840 --> 00:23:28.279
+try semgrep. It's pretty cool if you have like, you know,
+
+00:23:28.280 --> 00:23:32.119
+decent rules to review stuff. And I postponed it for the
+
+00:23:32.120 --> 00:23:35.879
+longest time. And then I thought, actually, you know what,
+
+00:23:35.880 --> 00:23:38.959
+which would really make sense to like try out whether it even
+
+00:23:38.960 --> 00:23:44.039
+works for elisp source code review at all. And the answer is
+
+00:23:44.040 --> 00:23:47.119
+somewhat like apparently they've added LISP support,
+
+00:23:47.120 --> 00:23:50.439
+which is pretty cool. So it seems it's like best developed
+
+00:23:50.440 --> 00:23:55.279
+for like reviewing closure code. There are no rules to my
+
+00:23:55.280 --> 00:23:59.599
+knowledge. I started writing some and yeah, it does work. I
+
+00:23:59.600 --> 00:24:02.999
+have no idea how many, how many other people are trying to
+
+00:24:03.000 --> 00:24:05.799
+actively look into Emacs security issues. It feels to me
+
+00:24:05.800 --> 00:24:07.919
+like it's like a handful at best, like I don't know,
+
+00:24:07.920 --> 00:24:13.279
+somewhere between three and five people maybe. And yeah. If
+
+00:24:13.280 --> 00:24:17.159
+anyone knows any rule sets for making this easier, I would be
+
+00:24:17.160 --> 00:24:20.999
+very interested, because then we'd have a common place to
+
+00:24:21.000 --> 00:24:24.799
+share them. Maybe it'd be appropriate for me to jump back in
+
+00:24:24.800 --> 00:24:28.159
+here and just share that, you know, you're somebody that I
+
+00:24:28.160 --> 00:24:31.639
+definitely trust with these issues. We could talk in the
+
+00:24:31.640 --> 00:24:36.039
+abstract at least about places where, you know, Emacs, not
+
+00:24:36.040 --> 00:24:38.599
+necessarily the Emacs team, but maybe more the Free
+
+00:24:38.600 --> 00:24:41.839
+Software Society has said, oh, somebody reached out to us
+
+00:24:41.840 --> 00:24:44.879
+about this possible concern. Can you dig into that and find
+
+00:24:44.880 --> 00:24:48.279
+out if there's, you know, any reason to be concerned and then
+
+00:24:48.280 --> 00:24:52.279
+find the right people on the Emacs project team and work with
+
+00:24:52.280 --> 00:24:54.599
+that. So I know that this is something you've been working on
+
+00:24:54.600 --> 00:24:57.519
+actually for, I don't want to say several years, but more
+
+00:24:57.520 --> 00:25:05.719
+than a year.
+
+00:25:05.720 --> 00:25:08.959
+All right. Any other person wants to share something?
+
+00:25:08.960 --> 00:25:12.519
+Otherwise we have about 15 minutes until the next talk is due
+
+00:25:12.520 --> 00:25:15.239
+to go live, which would leave us some time to do the closing
+
+00:25:15.240 --> 00:25:15.559
+remarks.
+
+00:25:15.560 --> 00:25:27.359
+Let's wait just a bit, let's give people 30 seconds maybe to
+
+00:25:27.360 --> 00:25:31.359
+connect their thoughts and share them on IRC or to join the
+
+00:25:31.360 --> 00:25:36.079
+BBB. So in the spirit of, you know, get it out of the way so that
+
+00:25:36.080 --> 00:25:39.479
+we can let people go to bed and not do our usual rambling two
+
+00:25:39.480 --> 00:25:42.359
+hours of open remarks where we regret that we didn't turn
+
+00:25:42.360 --> 00:25:45.279
+them into the open mic. Right. So hopefully everyone's
+
+00:25:45.280 --> 00:25:47.959
+getting the message that, you know, we love to talk about
+
+00:25:47.960 --> 00:25:50.999
+Emacs and if you've been to prior conferences, you're
+
+00:25:51.000 --> 00:25:52.959
+probably, and you've watched through the closing
+
+00:25:52.960 --> 00:25:55.879
+ceremonies, you may have noticed that we do, you know, We
+
+00:25:55.880 --> 00:25:59.239
+have a lot of fun talking about all the different ideas that
+
+00:25:59.240 --> 00:26:03.959
+have come forward here. And so this is realizing that and
+
+00:26:03.960 --> 00:26:08.239
+also realizing that our habit of talking for several hours
+
+00:26:08.240 --> 00:26:12.879
+as part of closing the conference is maybe keeping some of us
+
+00:26:12.880 --> 00:26:19.839
+up at night and jobs and things. So in that spirit, I just want
+
+00:26:19.840 --> 00:26:23.599
+to throw out And I you know, I like to talk about this at least
+
+00:26:23.600 --> 00:26:28.679
+once a year. I mean isn't here and I tend to defer to him It's so
+
+00:26:28.680 --> 00:26:31.679
+I'll also use this opportunity to say gosh. I miss that guy
+
+00:26:31.680 --> 00:26:38.239
+and thanks so much For all of you've done over the years. Yeah
+
+00:26:38.240 --> 00:26:41.279
+I'm sorry, you can't make it this year and I'm actually have
+
+00:26:41.280 --> 00:26:44.799
+personally having a lot of fun covering for me for you It
+
+00:26:44.800 --> 00:26:48.079
+gives me a A lot of little things that I've picked up how to do,
+
+00:26:48.080 --> 00:26:50.919
+I'm actually getting to do a little bit of. So fun stuff for
+
+00:26:50.920 --> 00:26:58.879
+me, but miss you. And in that spirit and thinking of you,
+
+00:26:58.880 --> 00:27:05.599
+Amin, I'll also say that, and that's Bandali, if you know him
+
+00:27:05.600 --> 00:27:06.599
+from IRC more.
+
+00:27:06.600 --> 00:27:12.399
+He would want us to make sure that we talk about the Free
+
+00:27:12.400 --> 00:27:16.999
+Software Foundation and the fact that that is giving to the
+
+00:27:17.000 --> 00:27:19.719
+Free Software Foundation as the primary means to support
+
+00:27:19.720 --> 00:27:23.759
+development of Emacs and other GNU packages. We, as a
+
+00:27:23.760 --> 00:27:26.399
+project, are part of the giving... Somebody help me with the
+
+00:27:26.400 --> 00:27:31.199
+name of the project. It's not in the... I'll just go back to it
+
+00:27:31.200 --> 00:27:39.439
+and even show it, right? So, we are part of the giving
+
+00:27:39.440 --> 00:27:45.359
+together or working together. A program, and you can, you
+
+00:27:45.360 --> 00:27:48.399
+can get through that. There may be some matching going on.
+
+00:27:48.400 --> 00:27:52.359
+There's a fundraiser also that happens to typically run
+
+00:27:52.360 --> 00:27:57.719
+during the conference currently. and I encourage you to
+
+00:27:57.720 --> 00:28:03.039
+become a member and there's some newer, lower amount. Also,
+
+00:28:03.040 --> 00:28:06.599
+you can get directly directed through this program to the
+
+00:28:06.600 --> 00:28:09.599
+Emacs conference. For the first time this year, we're
+
+00:28:09.600 --> 00:28:13.679
+actually using those funds. Sacha went and did a bunch of
+
+00:28:13.680 --> 00:28:17.879
+work to enable us to use some more scalable purchased
+
+00:28:17.880 --> 00:28:20.719
+infrastructure that's different from what the FSF just
+
+00:28:20.720 --> 00:28:23.359
+provides us, for example. We use a lot of different things
+
+00:28:23.360 --> 00:28:27.799
+and thanks also to Pearl and others who are providing us
+
+00:28:27.800 --> 00:28:30.639
+infrastructure, as well as Sacha for just the amazing work
+
+00:28:30.640 --> 00:28:38.279
+that you do there. And as well to people that are giving in
+
+00:28:38.280 --> 00:28:41.679
+some other way, such as your time contributed to the EMAX
+
+00:28:41.680 --> 00:28:45.439
+project, to the many cool packages I myself take advantage
+
+00:28:45.440 --> 00:28:49.319
+of. And all of that, don't please feel pressured to break the
+
+00:28:49.320 --> 00:28:53.839
+piggy bank when that's a bad idea to help out, but it's help
+
+00:28:53.840 --> 00:29:02.119
+when you can. All right, how about we start from the top of the
+
+00:29:02.120 --> 00:29:04.359
+closing remarks so that we make sure that we don't forget
+
+00:29:04.360 --> 00:29:08.119
+anyone or anything. So if you could scroll just a little bit
+
+00:29:08.120 --> 00:29:10.079
+over, Corbyn, on your screen.
+
+00:29:10.080 --> 00:29:21.119
+I think you went on the right one. It's a little small for me to
+
+00:29:21.120 --> 00:29:22.719
+see which one it is.
+
+00:29:22.720 --> 00:29:29.919
+No, I think it's the other pad. You had it open right before. I
+
+00:29:29.920 --> 00:29:34.439
+think it's Sunday Close, the other tab on your browser. I
+
+00:29:34.440 --> 00:29:37.159
+managed to meet myself in BBB. That's what happened there.
+
+00:29:37.160 --> 00:29:42.879
+Okay, sorry. So here, and you wanted up or down? I wanted up,
+
+00:29:42.880 --> 00:29:47.759
+just as soon as you see the dashed line. Run through these
+
+00:29:47.760 --> 00:29:52.039
+instead of Corwin getting his stuff out of the way. Word.
+
+00:29:52.040 --> 00:29:56.599
+Yeah, but I'll make sure to skip over the stuff that you
+
+00:29:56.600 --> 00:30:00.599
+already mentioned. But yes, let's try to preempt a little
+
+00:30:00.600 --> 00:30:05.599
+bit the end of the conference for the reasons I've mentioned
+
+00:30:05.600 --> 00:30:10.359
+before. I get first to thank you all so much for being part of
+
+00:30:10.360 --> 00:30:15.759
+Emacs Conf 2024. Obviously, we still have a handful more
+
+00:30:15.760 --> 00:30:19.039
+talks to go this afternoon, but thanks again for showing up.
+
+00:30:19.040 --> 00:30:24.039
+We've had steady numbers for the last five years or so. This
+
+00:30:24.040 --> 00:30:28.199
+is my fifth year. hosting the general track and we've always
+
+00:30:28.200 --> 00:30:32.399
+averaged between 150 to 200 viewers which is amazing when
+
+00:30:32.400 --> 00:30:38.279
+you just think about it but we We are accruing plenty more
+
+00:30:38.280 --> 00:30:41.759
+views over the years because everyone is watching either on
+
+00:30:41.760 --> 00:30:44.959
+the website or on YouTube or on PeerTube. So thank you so much
+
+00:30:44.960 --> 00:30:48.079
+for everyone taking the time to, well, first come to the
+
+00:30:48.080 --> 00:30:51.879
+show. To watch the video, to share it, absolutely. Yes,
+
+00:30:51.880 --> 00:30:53.999
+because we've just talked about viewers. If you're
+
+00:30:54.000 --> 00:30:57.119
+watching this a year from now, we're thanking you for the
+
+00:30:57.120 --> 00:31:00.999
+view. We're talking to you. If you're mentioning a video of
+
+00:31:01.000 --> 00:31:06.159
+the Society Maths Conference, Thanks for doing that.
+
+00:31:06.160 --> 00:31:10.319
+That's what makes this worth it. The thing that we have to
+
+00:31:10.320 --> 00:31:14.239
+talk about for hours after it ends every year, sorry about
+
+00:31:14.240 --> 00:31:18.399
+that if it's been a disruption for your schedule, is the
+
+00:31:18.400 --> 00:31:21.199
+sense of community that we feel when we come together and
+
+00:31:21.200 --> 00:31:24.319
+watch all the different chats running on all these. I have a
+
+00:31:24.320 --> 00:31:27.959
+bunch of screens going so that I can see all the different
+
+00:31:27.960 --> 00:31:32.439
+chats and we all have a different way of connecting to all the
+
+00:31:32.440 --> 00:31:34.759
+different conversations going on. It's just a lot of
+
+00:31:34.760 --> 00:31:41.879
+energy. But at the end of the day, it's about helping people
+
+00:31:41.880 --> 00:31:46.399
+connect with the other groups and subgroups of people that
+
+00:31:46.400 --> 00:31:48.759
+are excited about the same stuff using Emacs to get there.
+
+00:31:48.760 --> 00:31:55.959
+Yeah, definitely. A word on those recordings, because we
+
+00:31:55.960 --> 00:32:00.879
+mentioned the previous year's videos, but when it comes to
+
+00:32:00.880 --> 00:32:04.439
+this conference, the videos, most of the pre-recording and
+
+00:32:04.440 --> 00:32:07.719
+most of the talk that we had except one this year, they are
+
+00:32:07.720 --> 00:32:13.079
+already available on emaxconf-.org, the website. You can
+
+00:32:13.080 --> 00:32:16.839
+also find them on the YouTube account for emaxconf, they're
+
+00:32:16.840 --> 00:32:21.159
+fairly easy to find. We'll try to get them on PeerTube at some
+
+00:32:21.160 --> 00:32:26.159
+point. We are not sure when. But the rule is, right now, we are
+
+00:32:26.160 --> 00:32:28.999
+going to take some time. Go on, Sacha, if you want. There are
+
+00:32:29.000 --> 00:32:33.959
+two things already. I should put a URL to the channel in.
+
+00:32:33.960 --> 00:32:38.959
+Okay, sure. So, Sacha will take care of this. But all the
+
+00:32:38.960 --> 00:32:41.839
+pre-recordings are already available with the subtitles
+
+00:32:41.840 --> 00:32:44.159
+when we manage to receive them sufficiently early. And if
+
+00:32:44.160 --> 00:32:47.279
+not, it'll take maybe a couple of days for us to get them out
+
+00:32:47.280 --> 00:32:50.319
+there. But yes, the pre-recordings are there. When it comes
+
+00:32:50.320 --> 00:32:53.599
+to the live Q&A, so the little sessions you've seen us do live
+
+00:32:53.600 --> 00:32:57.239
+when we were on BBB asking questions to the speakers and also
+
+00:32:57.240 --> 00:32:59.799
+having people join in the discussion, this will take a
+
+00:32:59.800 --> 00:33:02.759
+little more time for us to publish them because we like to
+
+00:33:02.760 --> 00:33:06.919
+follow a process of captioning them and making sure we take
+
+00:33:06.920 --> 00:33:09.319
+all the questions and all the answers from the pad and
+
+00:33:09.320 --> 00:33:12.999
+centralize everything on the website. So this is a process
+
+00:33:13.000 --> 00:33:16.439
+that takes about two to three weeks and we are not putting a
+
+00:33:16.440 --> 00:33:18.959
+lot of pressure on us to do this. If there is anything you're
+
+00:33:18.960 --> 00:33:21.839
+dying to see you'll have to wait a little bit but we'll try to
+
+00:33:21.840 --> 00:33:24.959
+make sure to make the information available as soon as we
+
+00:33:24.960 --> 00:33:27.999
+can. So
+
+00:33:28.000 --> 00:33:31.759
+Let me read the notes just to make sure we're not forgetting
+
+00:33:31.760 --> 00:33:36.839
+anything. Yes, when it comes to the publishing process, if
+
+00:33:36.840 --> 00:33:39.279
+you want to keep in touch and know when something is going to
+
+00:33:39.280 --> 00:33:42.199
+be released, we will announce all of this on the
+
+00:33:42.200 --> 00:33:45.959
+emacsconf-discuss mailing list, so emacsconf-discuss.
+
+00:33:45.960 --> 00:33:49.639
+You'll be able to find the link on the website as well and it's
+
+00:33:49.640 --> 00:33:53.039
+already on the pad that we are sharing currently on the
+
+00:33:53.040 --> 00:33:54.559
+screen.
+
+00:33:54.560 --> 00:33:59.679
+So obviously we'd be very happy to get some feedback from you
+
+00:33:59.680 --> 00:34:03.359
+on the conference and you can do this on this pad. We'll
+
+00:34:03.360 --> 00:34:05.519
+mention this at the end of the day again so that you get a
+
+00:34:05.520 --> 00:34:08.839
+chance to watch the last few talks of the conference and
+
+00:34:08.840 --> 00:34:11.559
+mention your thoughts on this but yeah we are very open to
+
+00:34:11.560 --> 00:34:17.319
+feedback. Part of the reason why It feels like a well-oiled
+
+00:34:17.320 --> 00:34:19.759
+machine, EmacsConf, is the fact that we've been iterating
+
+00:34:19.760 --> 00:34:25.159
+over the process for many years at this point. We'll get to
+
+00:34:25.160 --> 00:34:27.679
+the thanking to Sacha for the automation and to other
+
+00:34:27.680 --> 00:34:30.959
+volunteers for all their work, but really, it's really the
+
+00:34:30.960 --> 00:34:34.199
+feedback that you give us that allows us to refine the
+
+00:34:34.200 --> 00:34:37.439
+process of running the conference. And if it looks smooth
+
+00:34:37.440 --> 00:34:40.359
+and all this, well, it's mostly thanks to you, because what
+
+00:34:40.360 --> 00:34:43.559
+you believe was smooth, you mentioned as a feedback, and
+
+00:34:43.560 --> 00:34:47.639
+then we try to adapt our own processes so that we can match the
+
+00:34:47.640 --> 00:34:50.879
+level of smoothness that you expected. So thank you so much.
+
+00:34:50.880 --> 00:34:53.359
+Part of the success of EmacsConf is definitely on you.
+
+00:34:53.360 --> 00:34:59.879
+So again, if you've got feedback, please include them in the
+
+00:34:59.880 --> 00:35:03.279
+pad. When it comes to the stats, as I mentioned, we are
+
+00:35:03.280 --> 00:35:07.519
+usually averaging between 150 and 200 viewers. And this
+
+00:35:07.520 --> 00:35:12.079
+year, on the two tracks, we managed somehow to peak higher on
+
+00:35:12.080 --> 00:35:14.239
+the Dev track than on the Gen track, which is a first for the
+
+00:35:14.240 --> 00:35:16.839
+last five years. So that's an interesting tidbit of
+
+00:35:16.840 --> 00:35:20.959
+knowledge for you. But yeah, overall we had perhaps 300
+
+00:35:20.960 --> 00:35:22.999
+viewers total between the channels, which is amazing
+
+00:35:23.000 --> 00:35:27.039
+because you've got 300 people watching you live present and
+
+00:35:27.040 --> 00:35:32.919
+so that's a rich experience. All right, moving to the
+
+00:35:32.920 --> 00:35:36.319
+thanking section. We have plenty of people to thank without
+
+00:35:36.320 --> 00:35:42.399
+whom this conference would not be possible. First, I'd like
+
+00:35:42.400 --> 00:35:45.279
+to thank all the speakers, all the volunteers, the
+
+00:35:45.280 --> 00:35:48.399
+participants, and all the other people in our lives who make
+
+00:35:48.400 --> 00:35:50.839
+it possible through time and support to run this
+
+00:35:50.840 --> 00:35:53.199
+conference. Obviously, the speakers I've already
+
+00:35:53.200 --> 00:35:55.959
+mentioned, volunteers, you have some of them in the room
+
+00:35:55.960 --> 00:35:59.919
+right now. We've got Corwin, we've got Sacha, we also have
+
+00:35:59.920 --> 00:36:02.959
+Flowy, but we also have plenty of captioners in the
+
+00:36:02.960 --> 00:36:07.599
+background, whom I will get to in just a little while. This
+
+00:36:07.600 --> 00:36:11.239
+year's conference hosts are myself, Leo Vivier, and Corwin Brust
+
+00:36:11.240 --> 00:36:16.199
+and well not technically not FlowyCoder, not yet at least.
+
+00:36:16.200 --> 00:36:19.719
+Flowy, as you know, joined us last year and has been running
+
+00:36:19.720 --> 00:36:22.879
+check-ins in the background and we are very thankful for his
+
+00:36:22.880 --> 00:36:27.279
+contributions and maybe this afternoon he might be able to
+
+00:36:27.280 --> 00:36:31.719
+come. This is a fun process if you want to imagine what it's
+
+00:36:31.720 --> 00:36:35.359
+like for us backstage. Imagine, you know, Flowy's like
+
+00:36:35.360 --> 00:36:38.439
+getting everybody warmed up, goes in, talks to, gets a
+
+00:36:38.440 --> 00:36:41.879
+conversation going, everybody's ready, you know, the
+
+00:36:41.880 --> 00:36:45.079
+video is playing of the live stream, he's doing the warm hand
+
+00:36:45.080 --> 00:36:48.279
+up, everything ready, checking everything out. And then he
+
+00:36:48.280 --> 00:36:52.439
+hands the torch to Leo, or maybe me, and then we get to come in
+
+00:36:52.440 --> 00:36:54.959
+and have this amazing conversation based on all the buzz
+
+00:36:54.960 --> 00:36:57.079
+that's just been built up, knowing everything works out
+
+00:36:57.080 --> 00:37:00.359
+great. And one of these times, what Leo is telling you is that
+
+00:37:00.360 --> 00:37:04.159
+Flowy's just going to give Leo or me the cold shoulder and do
+
+00:37:04.160 --> 00:37:07.359
+the hosting himself. He did a great job with that last year,
+
+00:37:07.360 --> 00:37:14.119
+and we're looking forward to more of that. All right, I'll do
+
+00:37:14.120 --> 00:37:17.039
+a quick fire of thankings because we need to soon move on to
+
+00:37:17.040 --> 00:37:21.159
+the next talk of the day. I'd also like obviously to thank
+
+00:37:21.160 --> 00:37:25.239
+Sacha for managing the two streams and the one stream today
+
+00:37:25.240 --> 00:37:27.279
+because she's in the background making sure that
+
+00:37:27.280 --> 00:37:30.519
+everything goes all right for all our automation. And
+
+00:37:30.520 --> 00:37:34.759
+obviously Flowy again for the check-ins. I want also to thank,
+
+00:37:34.760 --> 00:37:40.639
+to extend my thankings, to the proposal review volunteers
+
+00:37:40.640 --> 00:37:44.839
+James Howell, Jean-Christophe Helary, and others for
+
+00:37:44.840 --> 00:37:48.119
+helping with the early acceptance process. I mentioned
+
+00:37:48.120 --> 00:37:50.839
+them, the captioning volunteers, Mark Lewin, Rodrigo
+
+00:37:50.840 --> 00:37:54.319
+Morales, Anoush, annona, and James Howell, and some speakers
+
+00:37:54.320 --> 00:37:56.799
+who captioned their own talks. I'm thinking about Eduardo
+
+00:37:56.800 --> 00:38:03.359
+especially. I guess thanks to me, be weird for me to read
+
+00:38:03.360 --> 00:38:07.399
+this, but I'm still going to do this, for fiddling with the
+
+00:38:07.400 --> 00:38:11.199
+audio and getting things nicely synced. For those who do not
+
+00:38:11.200 --> 00:38:13.759
+know, I also manage, I make sure that the audio is
+
+00:38:13.760 --> 00:38:16.079
+normalized, cleaned up, and all this for the conference,
+
+00:38:16.080 --> 00:38:18.479
+and usually it's one of the few things that Sacha doesn't
+
+00:38:18.480 --> 00:38:21.959
+like doing, and I'm very happy to pick the little crumbs to
+
+00:38:21.960 --> 00:38:26.199
+make sure that Emacs is as cool as it can get. Also thanks to
+
+00:38:26.200 --> 00:38:28.759
+Bhavin Gandhi, Christopher Howard, Joseph Turner and
+
+00:38:28.760 --> 00:38:30.959
+Screwless for quality checking the videos in the
+
+00:38:30.960 --> 00:38:34.359
+backstage. Thanks obviously to Shoshin for the music that
+
+00:38:34.360 --> 00:38:36.999
+has been accompanying us during the breaks. We've
+
+00:38:37.000 --> 00:38:41.039
+mentioned him already, but thanks to Amin Bandali for help
+
+00:38:41.040 --> 00:38:44.999
+with infrastructure and communication. Thanks to Ry P for
+
+00:38:45.000 --> 00:38:47.679
+the server that we're using for OBS streaming and for
+
+00:38:47.680 --> 00:38:50.719
+processing the videos. That's part of the reason why we are
+
+00:38:50.720 --> 00:38:55.879
+able to get the titles out so fast. And Corwin already
+
+00:38:55.880 --> 00:38:57.799
+mentioned the FSF but thanks to the Free Software
+
+00:38:57.800 --> 00:39:01.079
+Foundation for Emacs itself, the mailing list,
+
+00:39:01.080 --> 00:39:05.599
+media.emacs.org server where we host the conferences. We
+
+00:39:05.600 --> 00:39:10.799
+might have a little word about donations and funding the FSF
+
+00:39:10.800 --> 00:39:14.159
+later in the afternoon. I'll make sure that Corbyn
+
+00:39:14.160 --> 00:39:17.919
+gets to it. But finally, thanks to the many users and
+
+00:39:17.920 --> 00:39:20.479
+commuters to the project and team that create all the
+
+00:39:20.480 --> 00:39:22.879
+awesome free software that we use, especially
+
+00:39:22.880 --> 00:39:26.239
+BigBlueButton, Etherpad, IceCast, OBS, The Lounge,
+
+00:39:26.240 --> 00:39:30.359
+LiberaChat, FFmpeg, OpenAI, Whisper, WhisperX, and the
+
+00:39:30.360 --> 00:39:33.919
+Aeneas Forced Alignment Tool site transfer sub. Anyway,
+
+00:39:33.920 --> 00:39:35.559
+we're going to get started with the next talk of the day.
+
+00:39:35.560 --> 00:39:38.079
+We'll continue with the thankings later on. Enjoy the
+
+00:39:38.080 --> 00:39:43.839
+conference. Thanks for tuning in, really appreciate you.
+
+00:39:43.840 --> 00:39:45.508
+All right, we are off air.
+
+00:39:45.509 --> 00:39:45.542
+So I will go back to Mumble now.
+
+00:39:45.543 --> 00:39:51.734
+All right. That was pretty good.
+
+00:39:51.735 --> 00:39:52.875
+That was good, right?
+
+00:39:52.876 --> 00:39:55.858
+I think that was good. I'm glad we did that.
+
+00:39:55.859 --> 00:39:59.399
+Thank you for that. I'm hoping we would do.
+
+00:39:59.400 --> 00:40:02.799
+Yeah, sorry. For the people who are still in chat, right now
+
+00:40:02.800 --> 00:40:06.359
+we are moving to the next live talk, so feel free to join us
+
+00:40:06.360 --> 00:40:08.839
+later. We might stay in this room, we do not know, but we'll
+
+00:40:08.840 --> 00:40:13.360
+see you later anyway. Okay, bye-bye.
diff --git a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt
new file mode 100644
index 00000000..a32b0da2
--- /dev/null
+++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt
@@ -0,0 +1,1294 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:05.039
+And I believe we are live. Okay. Hi again, Ihor. How are you
+
+00:00:05.040 --> 00:00:09.359
+doing? Ready to answer questions, right? Yes. Ready to
+
+00:00:09.360 --> 00:00:13.039
+answer questions and all this. I mean, ready for
+
+00:00:13.040 --> 00:00:14.999
+everything. It's not just a question, it's the maintenance
+
+00:00:15.000 --> 00:00:21.679
+that is now lying in front of you. So... Oh, that's not the end
+
+00:00:21.680 --> 00:00:25.159
+of the day. I mean, it's a rare thing indeed, because you
+
+00:00:25.160 --> 00:00:27.439
+might not be able to see it on BBB. I'm checking in, but we've
+
+00:00:27.440 --> 00:00:30.599
+got Ihor, obviously, but we also have Bastien and also
+
+00:00:30.600 --> 00:00:34.199
+Carsten in the room. So, we have three maintainers of Org
+
+00:00:34.200 --> 00:00:36.119
+Mode right there in the room to answer all your questions.
+
+00:00:36.120 --> 00:00:40.759
+So, it's a rare occasion that I invite all of you to seize the
+
+00:00:40.760 --> 00:00:44.679
+day on this. Ihor, do you have anything maybe to say before we
+
+00:00:44.680 --> 00:00:49.599
+start moving into the questions? Well, I hope that I said
+
+00:00:49.600 --> 00:00:51.759
+everything I wanted. Hello, Bastien. during the
+
+00:00:51.760 --> 00:00:55.519
+presentation. Well, actually, I can say a lot more, like
+
+00:00:55.520 --> 00:01:01.439
+infinitely, because when I first recorded it, it was like
+
+00:01:01.440 --> 00:01:05.999
+one hour. So yeah. I mean, you did a, I'll just let you know,
+
+00:01:06.000 --> 00:01:08.359
+you did a fine job condensing everything in just 40 minutes.
+
+00:01:08.360 --> 00:01:14.079
+So congratulations on this. Yeah, it's, yeah, usually one
+
+00:01:14.080 --> 00:01:18.039
+minute per slide is the best way. Otherwise, it's something
+
+00:01:18.040 --> 00:01:22.319
+that's wrong with this presentation. Right, so just moving
+
+00:01:22.320 --> 00:01:25.519
+into the question, and by the way we've got 20 minutes, we
+
+00:01:25.520 --> 00:01:27.799
+might be able to chat a little more if Bastien wants to say
+
+00:01:27.800 --> 00:01:29.919
+something as well and Carsten, you know, feel free to
+
+00:01:29.920 --> 00:01:33.119
+intervene at any point during the questions if you've got
+
+00:01:33.120 --> 00:01:35.279
+anything to contribute or our voice will just show the
+
+00:01:35.280 --> 00:01:37.879
+breeze later on. So the first question is relating to
+
+00:01:37.880 --> 00:01:41.479
+something you said about 10 minutes 34 that might speak more
+
+00:01:41.480 --> 00:01:42.685
+to you than to me.
+
+NOTE Q: Is the track-changes item about the org-element parser?
+
+00:01:42.686 --> 00:01:45.159
+Is the track changes item about the org
+
+00:01:45.160 --> 00:01:51.519
+element parser Yes, the track changes is a new library that
+
+00:01:51.520 --> 00:01:58.959
+helps to receive changes in buffers incrementally. So like
+
+00:01:58.960 --> 00:02:03.079
+you can, it has API where you can request what changes
+
+00:02:03.080 --> 00:02:07.999
+happened in buffer since last request, chunk by chunk. And
+
+00:02:08.000 --> 00:02:14.119
+in org mode, in org element parser, we do pretty much the same
+
+00:02:14.120 --> 00:02:19.879
+thing, but using timers. So this track changes library
+
+00:02:19.880 --> 00:02:25.159
+should improve things, first, because it's a bit faster,
+
+00:02:25.160 --> 00:02:29.279
+because we don't need to conjure every single change, and
+
+00:02:29.280 --> 00:02:32.119
+track changes can agglomerate changes into chunks much
+
+00:02:32.120 --> 00:02:36.039
+more efficiently. And second, it's a built-in library, so
+
+00:02:36.040 --> 00:02:40.439
+it's a good idea to use built-in library when there is such an
+
+00:02:40.440 --> 00:02:45.879
+option, instead of running out our own implementation.
+
+00:02:45.880 --> 00:02:49.399
+Definitely. Moving on to the second question, although I'm
+
+00:02:49.400 --> 00:02:52.664
+not sure it refers that much to what you can do.
+
+NOTE Q: Could you please keep IRC alive? I prefer it to Matrix
+
+00:02:52.665 --> 00:02:57.759
+Could you please keep IRC alive? And I prefer it to Matrix. I mean,
+
+00:02:57.760 --> 00:03:03.239
+you did talk about IRC, right? But did we talk about phasing
+
+00:03:03.240 --> 00:03:08.799
+it out? So I try to be live on IRC, but I use mobile client for
+
+00:03:08.800 --> 00:03:12.999
+IRC to keep connected. So I usually connected, I usually see
+
+00:03:13.000 --> 00:03:15.519
+messages, except certain times when I don't have mobile
+
+00:03:15.520 --> 00:03:19.239
+internet. Right. Okay. That's why many people will tell
+
+00:03:19.240 --> 00:03:23.399
+you, you need a bouncer and all this, but the IRC crowd is very
+
+00:03:23.400 --> 00:03:33.679
+loud. I just don't know a good bouncer. I don't have a good
+
+00:03:33.680 --> 00:03:36.399
+setup for a bouncer. Okay.
+
+00:03:36.400 --> 00:03:41.239
+Personally, I use WeChat usually to stay connected to
+
+00:03:41.240 --> 00:03:44.119
+email. It's obviously a client for IRC, but it also allows
+
+00:03:44.120 --> 00:03:47.959
+you to, you know, you can keep it as a bouncer, but it's not in
+
+00:03:47.960 --> 00:03:54.159
+Emacs. It is. I don't have a computer that is running 24
+
+00:03:54.160 --> 00:03:56.839
+hours, so. I mean, that's the thing. I do have a server to run
+
+00:03:56.840 --> 00:04:02.239
+it off. All right, moving on to the third question. That is
+
+00:04:02.240 --> 00:04:06.559
+what is running 24 hours. Right. Okay. All right. Moving on
+
+00:04:06.560 --> 00:04:07.987
+to the third question.
+
+NOTE Q: Is there any plan for adding support for other modalities of notes like handwritten,  audio, etc.?
+
+00:04:07.988 --> 00:04:09.519
+Is there any plan for adding support
+
+00:04:09.520 --> 00:04:11.959
+for other modalities of note-like, handwritten, audio,
+
+00:04:11.960 --> 00:04:14.919
+and et cetera? Would that be interesting to the community?
+
+00:04:14.920 --> 00:04:20.319
+It will definitely be useful for me. I didn't. Okay. So this
+
+00:04:20.320 --> 00:04:25.399
+is not the idea I hear frequently. So there's no plan for such
+
+00:04:25.400 --> 00:04:29.959
+thing. Modalities of notes like handwritten audio. I think
+
+00:04:29.960 --> 00:04:34.519
+John Kitchin did some handwritten note.
+
+00:04:34.520 --> 00:04:46.119
+John Kitchin. Yeah. And for audio, I think as well. I. So
+
+00:04:46.120 --> 00:04:48.999
+basically you can use attachments, you can use images to
+
+00:04:49.000 --> 00:04:54.279
+paste you. I think John Kitchin even use it to automatically
+
+00:04:54.280 --> 00:04:58.519
+recognize notes.
+
+00:04:58.520 --> 00:05:05.359
+I think the previous speaker was talking about a whisper to
+
+00:05:05.360 --> 00:05:10.399
+recognize voice. Right.
+
+00:05:10.400 --> 00:05:13.959
+Otherwise there is no special workflow and I'm not even sure
+
+00:05:13.960 --> 00:05:16.919
+what we can do to support this workflow specifically.
+
+00:05:16.920 --> 00:05:22.759
+Yeah, it definitely feels like Org Mode is a good format for
+
+00:05:22.760 --> 00:05:25.719
+textual stuff, and a lot of things are textual. I mean,
+
+00:05:25.720 --> 00:05:29.679
+that's the whole philosophy behind Emacs. But when it comes
+
+00:05:29.680 --> 00:05:34.439
+to voice, it feels like it's... I think the person asking the
+
+00:05:34.440 --> 00:05:36.799
+question probably needs to specify what they mean by voice.
+
+00:05:36.800 --> 00:05:40.279
+Is it just raw note-taking, as Blaine mentioned in a
+
+00:05:40.280 --> 00:05:43.199
+previous talk, or is it something else? Feel free to add up to
+
+00:05:43.200 --> 00:05:46.759
+the question and we'll return to it later on.
+
+00:05:46.760 --> 00:05:51.919
+I think this is kind of related to drag and drop. I think you
+
+00:05:51.920 --> 00:05:57.279
+would like to be able to have an audio file and drop it in and
+
+00:05:57.280 --> 00:06:00.879
+have it translated to text. I think that would be an
+
+00:06:00.880 --> 00:06:03.959
+interesting API to do this, right? So that you can integrate
+
+00:06:03.960 --> 00:06:07.599
+it into something like drag and drop. I think I'm going to
+
+00:06:07.600 --> 00:06:12.079
+talk with supporters in since overnight. So we have, I
+
+00:06:12.080 --> 00:06:14.959
+believe what constant is alluring to is the fact that not
+
+00:06:14.960 --> 00:06:17.679
+just pictures but imagine if you were bringing in an audio
+
+00:06:17.680 --> 00:06:20.399
+file maybe you could, I mean I'm not sure it would work with
+
+00:06:20.400 --> 00:06:24.279
+whisper but. transcribing it in a way and inserting it as
+
+00:06:24.280 --> 00:06:27.079
+text. Although I'm not sure how we would be able to do this,
+
+00:06:27.080 --> 00:06:30.159
+but it's an interesting idea though. It can work if you write
+
+00:06:30.160 --> 00:06:35.359
+some kind of automatic speech recognition. It's not really
+
+00:06:35.360 --> 00:06:39.479
+a job for work. If you have some library that can transform
+
+00:06:39.480 --> 00:06:43.959
+audio to text or transform image to text in Elixir, then we
+
+00:06:43.960 --> 00:06:47.599
+can happily use that library. Definitely, but I can tell you
+
+00:06:47.600 --> 00:06:50.119
+that Whisper is not something that works very quickly. We do
+
+00:06:50.120 --> 00:06:53.479
+use Whisper AI to transcribe some of the talks that we
+
+00:06:53.480 --> 00:06:56.879
+broadcast during EmacsConf, and I can tell you it takes a
+
+00:06:56.880 --> 00:06:59.359
+fair while. If you have a video that lasts one minute, it's
+
+00:06:59.360 --> 00:07:03.439
+definitely going to take more than one minute to try to
+
+00:07:03.440 --> 00:07:09.239
+transcribe the video. We had to wait for a few years until it
+
+00:07:09.240 --> 00:07:12.679
+passed. Probably, but it's good to have the ID now so
+
+00:07:12.680 --> 00:07:17.479
+that we are ready eventually to do this. There is the new
+
+00:07:17.480 --> 00:07:23.319
+asynchronous IP. It's called org-pending. It's work in
+
+00:07:23.320 --> 00:07:29.599
+progress. And that basically allows to defer inserting
+
+00:07:29.600 --> 00:07:34.199
+text into our buffers until later. And while it's being
+
+00:07:34.200 --> 00:07:37.719
+worked on, it will basically highlight the place where it
+
+00:07:37.720 --> 00:07:43.159
+will be inserted. And you can click on it, see the progress,
+
+00:07:43.160 --> 00:07:49.519
+and stuff like that. So this is for Babylon, but I imagine for
+
+00:07:49.520 --> 00:07:56.159
+things like voice recognition, it can also work.
+
+00:07:56.160 --> 00:07:59.799
+All right, what I suggest we do, we're going to fill the two
+
+00:07:59.800 --> 00:08:02.279
+questions that we have now, and then it'd be nice if we could
+
+00:08:02.280 --> 00:08:05.399
+hear a word from Bastien and from Carsten as well, because
+
+00:08:05.400 --> 00:08:08.719
+it's rare to have all of you three in a room, and it would be
+
+00:08:08.720 --> 00:08:11.439
+nice maybe to chat a little bit about this. So quickly, with
+
+NOTE Q: WRT IETF standardization, have you looked at Karl Voit's OrgDown?
+
+00:08:11.440 --> 00:08:14.199
+the last two questions, with regards to IETF
+
+00:08:14.200 --> 00:08:17.039
+standardization, have you looked at Karl Voit's Orgdown?
+
+00:08:17.040 --> 00:08:24.919
+So, of course, there was a discussion on the mailing list,
+
+00:08:24.920 --> 00:08:28.319
+and there was a lot of pushback to this idea, especially to
+
+00:08:28.320 --> 00:08:33.399
+simplify the syntax. So, in short, the conclusion from
+
+00:08:33.400 --> 00:08:37.799
+there is we want the full syntax, we don't want to have things
+
+00:08:37.800 --> 00:08:43.079
+like different versus Org mode. But for the syntax, we may
+
+00:08:43.080 --> 00:08:49.279
+specify different like coverage. So for example, it's a
+
+00:08:49.280 --> 00:08:53.119
+minimal, it has a minimal support so people can, there's
+
+00:08:53.120 --> 00:08:59.079
+some parsers or apps can support just whatever curl calls
+
+00:08:59.080 --> 00:09:04.239
+fork down like level zero or level one or whatever. But the
+
+00:09:04.240 --> 00:09:10.079
+key point is, when it goes to IETF, we want to have the full
+
+00:09:10.080 --> 00:09:13.119
+syntax. We don't want to split it into pieces.
+
+00:09:13.120 --> 00:09:18.959
+Makes a lot of sense. All right. And the last question we have
+
+NOTE Q: About a year ago we discussed switching GNU documentation from texinfo to org. Do you still consider this?
+
+00:09:18.960 --> 00:09:22.359
+for now. About a year ago, we discussed switching new
+
+00:09:22.360 --> 00:09:26.239
+documentation from texinfo to org. Do you still consider
+
+00:09:26.240 --> 00:09:30.879
+this? definitely contributed to some of the ideas about
+
+00:09:30.880 --> 00:09:34.479
+syntax. For example, the inline special blocks, I think
+
+00:09:34.480 --> 00:09:41.639
+about them with this in mind, so that, so basically, one
+
+00:09:41.640 --> 00:09:45.999
+clarity, we don't want to complicate our syntax, we don't
+
+00:09:46.000 --> 00:09:50.319
+want to have special built-in support for variable, or I
+
+00:09:50.320 --> 00:09:54.319
+don't know, function name, or all this kind of specific
+
+00:09:54.320 --> 00:10:00.959
+markup. But instead, the idea is to have some generic custom
+
+00:10:00.960 --> 00:10:06.479
+syntax. And then when it goes to software manuals, we want
+
+00:10:06.480 --> 00:10:09.759
+some like optional library that will provide certain
+
+00:10:09.760 --> 00:10:12.439
+syntax extensions, like inline special block for
+
+00:10:12.440 --> 00:10:15.479
+variables, inline special block for acronym and stuff like
+
+00:10:15.480 --> 00:10:20.999
+that. Then people who want to use Org mode for manuals should
+
+00:10:21.000 --> 00:10:26.119
+be able to use that new markup to achieve what they want.
+
+00:10:26.120 --> 00:10:34.359
+That's a distant idea. But the key point is we want to keep org
+
+00:10:34.360 --> 00:10:39.039
+mode as generic syntax. We don't want to specialize it for
+
+00:10:39.040 --> 00:10:43.799
+software specifically. But generic in the sense that it can
+
+00:10:43.800 --> 00:10:44.759
+be used for software as well.
+
+00:10:44.760 --> 00:10:50.959
+All right, well thank you so much for your answer here and
+
+00:10:50.960 --> 00:10:56.399
+that was very enlightening but I'd first like to give the mic
+
+00:10:56.400 --> 00:11:00.359
+to Bastien who might need to leave shortly and I just want to
+
+00:11:00.360 --> 00:11:03.559
+make sure that you get to chat a little bit Bastien because
+
+00:11:03.560 --> 00:11:06.199
+it's a big thing we've had you as a maintainer for however
+
+00:11:06.200 --> 00:11:13.199
+long now? Well, officially, it was 14 years. But obviously,
+
+00:11:13.200 --> 00:11:17.999
+EHO has been doing much of the groundwork as a de facto
+
+00:11:18.000 --> 00:11:20.239
+maintainer for several years now, I believe for three or
+
+00:11:20.240 --> 00:11:28.679
+four years. And before Before IHO, there was Nicolas Goaziou,
+
+00:11:28.680 --> 00:11:33.679
+who's doing a lot of work. Also Kyle Meyer, who is still
+
+00:11:33.680 --> 00:11:40.599
+active, backporting Emacs changes. So
+
+00:11:40.600 --> 00:11:46.039
+it's a relief that we can do things properly, that I didn't
+
+00:11:46.040 --> 00:11:51.439
+give up before someone could really step up. I'm glad we're
+
+00:11:51.440 --> 00:11:57.679
+doing this. And I'm glad there was so much help during the
+
+00:11:57.680 --> 00:12:01.959
+time when I was not available enough. Well, thank you,
+
+00:12:01.960 --> 00:12:05.039
+Bastien. I think on behalf of the community, I think I'd like
+
+00:12:05.040 --> 00:12:07.719
+to extend a big thank you for all the work you've done
+
+00:12:07.720 --> 00:12:12.279
+throughout those 14 years. And if we pull the rope just a
+
+00:12:12.280 --> 00:12:15.719
+little more, before those 14 years, we had someone else
+
+00:12:15.720 --> 00:12:18.199
+maintaining Org Mode, well, not actually just maintaining
+
+00:12:18.200 --> 00:12:20.879
+Org Mode, but also inventing it. Carsten, how are you doing?
+
+00:12:20.880 --> 00:12:26.799
+I am. I'm doing fine. A really great opportunity to be here.
+
+NOTE Community
+
+00:12:26.800 --> 00:12:31.279
+First, I would like to start by indeed thanking Bastien
+
+00:12:31.280 --> 00:12:34.839
+because, I mean, he was not only maintainer after I stopped,
+
+00:12:34.840 --> 00:12:37.839
+but already during the time I was there, he was one of the key
+
+00:12:37.840 --> 00:12:40.559
+contributors who helped the project along for quite a bit.
+
+00:12:40.560 --> 00:12:44.759
+So it's an incredible investment of time and energy that
+
+00:12:44.760 --> 00:12:48.399
+Basquiat has shown, which is really fantastic. And now I see
+
+00:12:48.400 --> 00:12:52.479
+Ihor taking over with, as far as I can see, deep knowledge and
+
+00:12:52.480 --> 00:12:56.199
+all the right ideas about philosophy. So I'm really
+
+00:12:56.200 --> 00:13:00.039
+impressed. For me, this is really totally amazing because I
+
+00:13:00.040 --> 00:13:04.719
+started hacking this more than 20 years ago. And to just see
+
+00:13:04.720 --> 00:13:07.679
+that there's a community that has sustained itself with the
+
+00:13:07.680 --> 00:13:11.439
+help of new maintainers for such a long time makes me
+
+00:13:11.440 --> 00:13:13.999
+extremely grateful. So thank you very much to all of you.
+
+00:13:14.000 --> 00:13:20.679
+Okay, well, amazing. I mean, I'm a little flustered, I must
+
+00:13:20.680 --> 00:13:23.559
+admit, because I'm seeing three players of the community in
+
+00:13:23.560 --> 00:13:27.639
+a way that have kept me busy with very fun stuff to do with Org
+
+00:13:27.640 --> 00:13:30.999
+Mode, and it's really amazing to see three giants of the
+
+00:13:31.000 --> 00:13:34.239
+community being able to maintain Org Mode for so long and
+
+00:13:34.240 --> 00:13:38.199
+contribute so much to it. So, again, thanks to all of you
+
+00:13:38.200 --> 00:13:40.981
+three. I must also admit that it's really amazing for me
+
+00:13:40.982 --> 00:13:45.442
+that all of you three stress the importance of the community
+
+00:13:45.440 --> 00:13:48.479
+a whole lot, and I know that Bastien, you've talked about
+
+00:13:48.480 --> 00:13:51.359
+maintaining software last year at Emacs Confs, and even
+
+00:13:51.360 --> 00:13:55.519
+today, during the one-minute little chat that you did in
+
+00:13:55.520 --> 00:13:59.279
+Ihor's chat, you stressed the importance of maintenance and to
+
+00:13:59.280 --> 00:14:06.559
+be future-oriented about it. I'm kind of wondering, why do
+
+00:14:06.560 --> 00:14:12.679
+you think community is so important to Org Mode in general?
+
+00:14:12.680 --> 00:14:14.679
+Like, obviously we've talked about maintainers and we've
+
+00:14:14.680 --> 00:14:16.879
+talked about volunteers, but don't you think there's
+
+00:14:16.880 --> 00:14:19.159
+something more about community in general, about Org Mode
+
+00:14:19.160 --> 00:14:20.950
+and the fact that we are all taking notes
+
+00:14:20.951 --> 00:14:34.799
+and doing so much with it? Yeah, are you asking me?
+
+00:14:34.800 --> 00:14:40.640
+I remember Carsten made his point during the Google talk about
+
+00:14:40.680 --> 00:14:45.159
+the core idea of Org Mode, about mixing note taking and to-do
+
+00:14:45.160 --> 00:14:49.959
+manager. It was really powerful. And also in the same
+
+00:14:49.960 --> 00:14:53.399
+presentation that 98%
+
+00:14:53.400 --> 00:14:57.047
+of the features were organically developed as ideas
+
+00:14:57.048 --> 00:15:00.668
+by the community. And Ihor just said the same today
+
+00:15:00.669 --> 00:15:03.589
+in the presentation, like most of the features,
+
+00:15:03.590 --> 00:15:06.875
+not only the ideas, but also the code came from
+
+00:15:06.876 --> 00:15:11.350
+the communities. So that's why the community is so rich.
+
+00:15:11.351 --> 00:15:12.759
+And another thing is
+
+00:15:12.760 --> 00:15:16.919
+also that I do remember. Now everyone is having kind of an open
+
+00:15:16.920 --> 00:15:20.799
+source fatigue and questions about how is it okay to be
+
+00:15:20.800 --> 00:15:24.039
+maintainer? How do you keep open source project
+
+00:15:24.040 --> 00:15:28.199
+sustainable? And I'm saying open source on purpose with
+
+00:15:28.200 --> 00:15:33.119
+this audience to see beyond just the small GNU project and
+
+00:15:33.120 --> 00:15:36.359
+the small free software community. So at large, there is
+
+00:15:36.360 --> 00:15:40.679
+some sense of fatigue. I remember that the Org community
+
+00:15:40.680 --> 00:15:44.079
+right from the beginning had a reputation of being an
+
+00:15:44.080 --> 00:15:48.839
+amazing community and I think it
+
+00:15:48.840 --> 00:15:54.879
+continues to be one and I'm amazed that sometimes when I'm,
+
+00:15:54.880 --> 00:15:59.199
+you know, sometimes I'm, I have this fatigue of moderating
+
+00:15:59.200 --> 00:16:01.839
+emails from the mailing list, for example, and filtering
+
+00:16:01.840 --> 00:16:06.199
+out spam. And then I go on the list and I read some emails and I
+
+00:16:06.200 --> 00:16:09.536
+feel like, okay, this is still there. And it's really
+
+00:16:09.537 --> 00:16:14.559
+a boost of energy. I wish that this repetition outside Org Mode,
+
+00:16:14.560 --> 00:16:19.239
+outside Emacs, of being a nice welcoming,
+
+00:16:19.240 --> 00:16:22.559
+community of knowledgeable people talking of things
+
+00:16:22.560 --> 00:16:25.319
+and learning from each other that we can
+
+00:16:25.320 --> 00:16:30.159
+keep up with this pace. Yeah, maybe if I
+
+00:16:30.160 --> 00:16:32.919
+can just add to this, I think you're making an extremely
+
+00:16:32.920 --> 00:16:36.679
+important point, Pascal. I think that was really, from the
+
+00:16:36.680 --> 00:16:39.639
+beginning, something that was really special. And I think
+
+00:16:39.640 --> 00:16:45.639
+the reason why we all community still works is that first me,
+
+00:16:45.640 --> 00:16:49.239
+but in particular also the two of you and more people have
+
+00:16:49.240 --> 00:16:53.359
+been able to keep up the friendly spirit in this community.
+
+00:16:53.360 --> 00:16:57.239
+Because we had very few fights on the mailing list. There
+
+00:16:57.240 --> 00:17:02.879
+were a few at some point, we had a few contributors with a
+
+00:17:02.880 --> 00:17:06.719
+little bit of fights. And I remember that I, for example, had
+
+00:17:06.720 --> 00:17:10.159
+to invest a lot of time to keep that one under control, but I
+
+00:17:10.160 --> 00:17:14.199
+think it was totally worth it because as a group, as a whole, I
+
+00:17:14.200 --> 00:17:18.679
+think it was really fantastic. Our friendly people
+
+00:17:18.680 --> 00:17:21.719
+always were, and I think that has spurred all the
+
+00:17:21.720 --> 00:17:22.640
+contributions that we had. Because
+
+00:17:22.680 --> 00:17:25.542
+if you are in a toxic environment, you will
+
+00:17:25.543 --> 00:17:29.458
+not be willing to stay and to invest all their time. And if you
+
+00:17:29.708 --> 00:17:32.291
+are in an appreciative environment where people support
+
+00:17:32.292 --> 00:17:35.191
+each other, it's a completely different game. So I really
+
+00:17:35.192 --> 00:17:38.566
+think that Org Mode is a great example for open source
+
+00:17:38.567 --> 00:17:43.774
+projects that many other communities can learn from.
+
+00:17:43.775 --> 00:17:52.441
+If I may just interject for a second, because we need to go
+
+00:17:52.442 --> 00:17:55.441
+into the next chat for the live stream. But as usual, I invite
+
+00:17:55.442 --> 00:17:57.524
+you, if you're interested with the discussion, we are
+
+00:17:57.525 --> 00:18:01.482
+staying on BBB, asking questions to Bastien, to Ihor and
+
+00:18:01.483 --> 00:18:04.316
+to Carsten. So feel free to join on BBB and chat with them
+
+00:18:04.317 --> 00:18:07.857
+live. The stream will be moving on to the next chat, but we
+
+00:18:07.858 --> 00:18:10.566
+will be recording the Q&A and posting it afterwards on
+
+00:18:10.567 --> 00:18:13.441
+emacsconf. So, I'll use the opportunity to thank you again,
+
+00:18:13.442 --> 00:18:18.941
+all three, for taking part in this EmacsConf, and enjoy the
+
+00:18:18.942 --> 00:18:27.482
+discussion, and we'll see you later! Thank you, bye bye! So,
+
+00:18:27.483 --> 00:18:31.274
+yeah, what I was starting to say actually is I feel that the
+
+00:18:31.275 --> 00:18:35.024
+Org Mode community and to the big extent the Emacs community
+
+00:18:35.000 --> 00:18:38.679
+is a bit like research in the early days when there was a bunch
+
+00:18:38.680 --> 00:18:43.959
+of enthusiasts who just exchanged mails together and tried
+
+00:18:43.960 --> 00:18:49.159
+to find out something new. And there was like no feeling of
+
+00:18:49.160 --> 00:18:52.719
+competition or too much competition at that time. Unlike
+
+00:18:52.720 --> 00:18:58.759
+now when we like we all rise for funding and stuff. So it's,
+
+00:18:58.760 --> 00:19:02.199
+it's really, it's really nice to, to, to have communities
+
+00:19:02.200 --> 00:19:05.919
+that has the spirit and they hope it can keep the spirit in
+
+00:19:05.920 --> 00:19:08.279
+future as well.
+
+00:19:08.280 --> 00:19:14.599
+Yeah. Yeah. I thought I'm very optimistic after. So I mean,
+
+00:19:14.600 --> 00:19:18.679
+actually had not been reading the mailing list for quite a
+
+00:19:18.680 --> 00:19:23.039
+while, but I started to read it again a little while ago and I
+
+00:19:23.040 --> 00:19:26.719
+could just see you also working on it and see how everything
+
+00:19:26.720 --> 00:19:30.919
+was going. That made me extremely happy to see that and made
+
+00:19:30.920 --> 00:19:37.679
+me very proud that this is still ongoing.
+
+00:19:37.680 --> 00:19:42.799
+I was interested about your point about the tables with
+
+00:19:42.800 --> 00:19:49.079
+multi-lines. My unsolicited advice is don't do it, because
+
+00:19:49.080 --> 00:19:52.639
+I think it's going to be a mess. Which I think is reflected
+
+00:19:52.640 --> 00:19:56.039
+also by you saying that nobody has a good idea on how to do
+
+00:19:56.040 --> 00:20:01.079
+this. I have certainly thought about it. It is requested so
+
+00:20:01.080 --> 00:20:04.599
+often. It's requested so often that it feels like it would be
+
+00:20:04.600 --> 00:20:07.959
+nice to come out with something. The question is, it is what?
+
+00:20:07.960 --> 00:20:11.399
+Yeah, that's a big question. Because I don't always ask
+
+00:20:11.400 --> 00:20:15.919
+eDocs, for example, and they do have multi line cells in
+
+00:20:15.920 --> 00:20:21.279
+tables, but that syntax is so ugly. Yes. Yeah, no, exactly. I
+
+00:20:21.280 --> 00:20:28.719
+think this is a problem and the question is, how far do you
+
+00:20:28.720 --> 00:20:33.639
+want to develop or want to be a completely full authoring
+
+00:20:33.640 --> 00:20:35.839
+system in the sense that you have all these options there
+
+00:20:35.840 --> 00:20:39.999
+because I think to me, the Org Mode tables have a specific
+
+00:20:40.000 --> 00:20:42.759
+application. They have this fast way of building
+
+00:20:42.760 --> 00:20:46.079
+something. And if I would have to go and build a hugely
+
+00:20:46.080 --> 00:20:50.279
+complicated table with different numbers of columns and
+
+00:20:50.280 --> 00:20:53.959
+columns going away and appearing further down the table, so
+
+00:20:53.960 --> 00:20:56.639
+I would probably go somewhere else. So for me, this seems to
+
+00:20:56.640 --> 00:21:00.319
+be overkill. So I don't want to curb anybody's enthusiasm.
+
+00:21:00.320 --> 00:21:04.919
+But I think it's really important to keep to keep the kind of
+
+00:21:04.920 --> 00:21:11.199
+functionality that it has. It's a very easy use and quick
+
+00:21:11.200 --> 00:21:15.879
+ability to do something interesting that I think is more
+
+00:21:15.880 --> 00:21:23.319
+important. There could be reasons to not do something. So
+
+00:21:23.320 --> 00:21:28.399
+again, the thing is, we don't have a good idea. But what I know
+
+00:21:28.400 --> 00:21:32.319
+100% is that we are not going to give up the existing syntax.
+
+00:21:32.320 --> 00:21:38.839
+Yeah, for sure. So even if you come up with something good,
+
+00:21:38.840 --> 00:21:42.279
+the existing syntax will remain working. And if people who
+
+00:21:42.280 --> 00:21:46.159
+need to use simple tables, they should remain possible in
+
+00:21:46.160 --> 00:21:52.759
+exactly the same way. But I know many people struggle and try
+
+00:21:52.760 --> 00:21:55.839
+in LaTeX and other workarounds just to create more complex
+
+00:21:55.840 --> 00:22:01.039
+tables. So there's clearly a demand. I think this is related
+
+00:22:01.040 --> 00:22:04.439
+to the other question that you asked earlier. I think it's
+
+00:22:04.440 --> 00:22:06.639
+related to the question about the different parsers. And
+
+00:22:06.640 --> 00:22:09.999
+then, of course, the way the tables are implemented now is by
+
+00:22:10.000 --> 00:22:11.944
+basically just looking at what's around you
+
+00:22:11.945 --> 00:22:13.484
+and doing the right things with
+
+00:22:13.485 --> 00:22:20.479
+this regular expression-based part of
+
+00:22:20.480 --> 00:22:24.279
+the parser. And you probably would have to fully use the
+
+00:22:24.280 --> 00:22:28.839
+other parts and to do all the changes in the formal structure
+
+00:22:28.840 --> 00:22:31.559
+in order to do something like this. So I have to be honest that
+
+00:22:31.560 --> 00:22:35.559
+I don't understand this well enough to really have a
+
+00:22:35.560 --> 00:22:39.679
+meaningful idea about it. Not only that, we'll also need to
+
+00:22:39.680 --> 00:22:42.799
+rewrite the spreadsheet functionality because it is
+
+00:22:42.800 --> 00:22:47.679
+completely using regular expressions. Exactly. Not only
+
+00:22:47.680 --> 00:22:50.639
+idea is missing that the roadmap will be very complicated if
+
+00:22:50.640 --> 00:22:57.519
+you get there. Yeah. I mean, I do remember. Yeah, go ahead.
+
+00:22:57.520 --> 00:23:03.359
+Yeah, sorry. I do remember Richard Stallman saying that
+
+00:23:03.360 --> 00:23:09.759
+Org Mode was doing too much. So my answer was just, coming from
+
+00:23:09.760 --> 00:23:14.159
+the inventor of Emacs, I took it as a compliment for Org Mode.
+
+00:23:14.160 --> 00:23:19.319
+But of course, that was just humor. And I agree that the
+
+00:23:19.320 --> 00:23:24.279
+simple things should keep being simple. And I like the
+
+00:23:24.280 --> 00:23:30.039
+custom syntax idea of Juan because it goes in the direction
+
+00:23:30.040 --> 00:23:34.159
+of flexibility while keeping things simple.
+
+00:23:34.160 --> 00:23:40.319
+And looking forward to what people will come up with. I like
+
+00:23:40.320 --> 00:23:44.839
+the idea that you want to formalize the syntax. I think that
+
+00:23:44.840 --> 00:23:48.479
+is really very good. I'd like to also submit it. I think that
+
+00:23:48.480 --> 00:23:52.359
+would be excellent. I'm also... I think it was proposed by
+
+00:23:52.360 --> 00:23:57.239
+Timothy, yeah. Initially. Okay. Yeah, that's really
+
+00:23:57.240 --> 00:24:02.839
+helpful. Pascal, are you still talking, I think? No, yeah, I
+
+00:24:02.840 --> 00:24:08.399
+just wanted to say also for the younger Emacs users, there is
+
+00:24:08.400 --> 00:24:12.839
+a lot of new things in Emacs the last five years. It has been so
+
+00:24:12.840 --> 00:24:17.719
+exciting. And I believe it's exciting for Org Mode too, the
+
+00:24:17.720 --> 00:24:22.439
+things you mentioned about track changes. uh native
+
+00:24:22.440 --> 00:24:25.639
+compilation and all that stuff that that's really good like
+
+00:24:25.640 --> 00:24:29.879
+some some performance problems that we had for org mode for
+
+00:24:29.880 --> 00:24:33.759
+the agenda and stuff like that were suddenly solved by uh the
+
+00:24:33.760 --> 00:24:38.159
+the crazy amazing work by Eli and emacs maintainers so
+
+00:24:38.160 --> 00:24:40.457
+it's really exciting for org as well.
+
+00:24:40.458 --> 00:24:43.566
+I don't know how you feel, Ihor, about this,
+
+00:24:43.567 --> 00:24:45.482
+but I know you are reading the Emacs
+
+00:24:45.483 --> 00:24:50.732
+development mailing list and keeping this is a job in
+
+00:24:50.733 --> 00:24:54.774
+itself, but it's really exciting for everyone, I guess. Not
+
+00:24:54.775 --> 00:24:58.274
+only that, I hope we can upstream org-ql, which will speed up
+
+00:24:58.275 --> 00:25:00.566
+agenda specifically even more.
+
+00:25:00.567 --> 00:25:06.982
+Okay. I need to fly away, but it was really nice connecting
+
+00:25:06.983 --> 00:25:13.899
+and I hope everyone has a great conference. Bye-bye. It was
+
+00:25:13.900 --> 00:25:16.107
+so good to see you. Thank you again for everything that you
+
+00:25:16.108 --> 00:25:21.399
+have done. Thanks to you both. Thank you. Bye-bye. Bye-bye.
+
+NOTE Off-stream Q&A
+
+00:25:28.520 --> 00:25:35.959
+All right. Is it only the two of us now? I don't really know who
+
+00:25:35.960 --> 00:25:40.239
+else. Can you see if there's anybody else in this room? I
+
+00:25:40.240 --> 00:25:45.079
+don't know. There are like two, four, six people and Sacha is
+
+00:25:45.080 --> 00:25:48.159
+one of them, so probably five people. Oh, Sacha is here.
+
+00:25:48.160 --> 00:25:51.999
+Okay. I haven't heard her say anything, but I see her in the
+
+00:25:52.000 --> 00:25:58.479
+chat. Okay. It's the same room, basically. Hi, Sacha. Oh,
+
+00:25:58.480 --> 00:26:02.199
+okay. They're also at her pad, so we may want to finish other
+
+00:26:02.200 --> 00:26:08.839
+questions, maybe, if there are some. This is just a circle.
+
+NOTE microemacs
+
+00:26:08.840 --> 00:26:12.079
+This is just a historical question, but Carsten, I think you
+
+00:26:12.080 --> 00:26:14.359
+used microemacs back in the day.
+
+00:26:14.360 --> 00:26:17.839
+Did that have any influence
+
+00:26:17.840 --> 00:26:23.879
+on Org? That is a really interesting question. I used
+
+00:26:23.880 --> 00:26:27.359
+microemacs as my first version of emacs, and then I stepped
+
+00:26:27.360 --> 00:26:33.359
+over to Emacs. I actually did two things at the same time. I
+
+00:26:33.360 --> 00:26:39.119
+also was working with so Awk basically, that language. I ran
+
+00:26:39.120 --> 00:26:45.599
+against walls with both Micro-Emacs and with Awk, where I had
+
+00:26:45.600 --> 00:26:48.639
+the feeling I don't have enough freedom to do everything
+
+00:26:48.640 --> 00:26:52.839
+that I wanted, so I switched to Perl on one side and to Emacs on
+
+00:26:52.840 --> 00:26:58.679
+the other side. That's what it was. Micro-Emacs absolutely
+
+00:26:58.680 --> 00:27:02.679
+had the function to pull me into Emacs, But it's not that I
+
+00:27:02.680 --> 00:27:04.759
+have specific microemacs features that would have
+
+00:27:04.760 --> 00:27:08.119
+triggered me to do something for Org Mode. I think that would be
+
+00:27:08.120 --> 00:27:14.207
+the answer to your question. All right, thanks.
+
+00:27:14.200 --> 00:27:21.639
+Are you a user of microemacs, George? I posted the source to
+
+00:27:21.640 --> 00:27:26.719
+CompSource's Amiga in 86, and I was somewhat responsible
+
+00:27:26.720 --> 00:27:31.959
+for it being in the wild. Oh, I'm so sorry that I didn't,
+
+00:27:31.960 --> 00:27:35.199
+wasn't really aware that I made the connection to your name.
+
+00:27:35.200 --> 00:27:39.719
+No, no, no, no. We all moved on and the world is a better place.
+
+00:27:39.720 --> 00:27:44.799
+Yeah. No, I actually did use it for something like, I think
+
+00:27:44.800 --> 00:27:47.440
+six years as my only admin at the time before I made the
+
+00:27:47.440 --> 00:27:51.359
+switch. No, I put it out to the list. David Lawrence ran with
+
+00:27:51.360 --> 00:27:55.399
+it and you know, that was about, that was the end of it. And I
+
+00:27:55.400 --> 00:27:57.599
+actually implemented something like fly spell for
+
+00:27:57.600 --> 00:28:02.359
+microemacs. I remember doing that at some point. Yeah, no, I
+
+00:28:02.360 --> 00:28:05.319
+don't want us to get stuck on that. I don't want us to get stuck
+
+00:28:05.320 --> 00:28:10.279
+on that, so. Yeah, yeah. Good. Thank you. Thank you for
+
+00:28:10.280 --> 00:28:17.679
+Org Mode. Yeah, you're most welcome.
+
+00:28:17.680 --> 00:28:22.199
+For microemacs, actually, I also tried it once. It feels
+
+00:28:22.200 --> 00:28:27.959
+like at home after Emacs, of course, the major downside was at
+
+00:28:27.960 --> 00:28:33.599
+this point is that there is no UTF support. I think that was
+
+00:28:33.600 --> 00:28:40.039
+like, unfortunately, that that's not going to work. I
+
+00:28:40.040 --> 00:28:43.959
+think I'm also going to disconnect now. But it was really
+
+00:28:43.960 --> 00:28:49.119
+fantastic to listen to your talk. I wish you all the best. I'm
+
+00:28:49.120 --> 00:28:53.479
+sure that is a good answer. Thank you for joining, and nice to
+
+00:28:53.480 --> 00:29:00.159
+meet you. Yeah, bye. Bye.
+
+00:29:00.160 --> 00:29:02.799
+Okay, so there are still people in the room, so if you want to
+
+00:29:02.800 --> 00:29:10.440
+ask questions, feel free to do it. I
+
+00:29:10.440 --> 00:29:12.679
+think there's one unanswered question in the etherpad
+
+00:29:12.680 --> 00:29:18.119
+also. Let me see.
+
+00:29:18.120 --> 00:29:21.639
+It's probably awkward to answer. Okay, I can answer and then
+
+00:29:21.640 --> 00:29:24.039
+probably answering the answer for this one. So there's a
+
+00:29:24.040 --> 00:29:28.519
+question about, from a person, I spent some time writing a
+
+00:29:28.520 --> 00:29:31.919
+library for myself, which involved working with Org files.
+
+NOTE Q: Is there/could there be a resource with which to recommend particularly well written codebases for review by others?
+
+00:29:31.920 --> 00:29:34.359
+One thing I struggled with was finding a good source of
+
+00:29:34.360 --> 00:29:41.599
+reference code which demonstrated idiomatic usage.
+
+00:29:41.600 --> 00:29:46.319
+particularly well-written code bases for review by
+
+00:29:46.320 --> 00:29:52.599
+others? That's a good question. We have some wiki pages.
+
+00:29:52.600 --> 00:29:57.039
+I'll put it in the answer later. You can also check Org Mode's
+
+00:29:57.040 --> 00:30:02.399
+code, but usually in org-element there are good usages, and
+
+00:30:02.400 --> 00:30:06.919
+in Org export.
+
+00:30:06.920 --> 00:30:10.279
+Otherwise, maybe something from Alphapapa, but I need to
+
+00:30:10.280 --> 00:30:13.320
+check that and probably reply later.
+
+00:30:16.167 --> 00:30:23.875
+Otherwise, that's all. So I'm going to end this.
+
+00:30:52.400 --> 00:32:09.720
+Bye bye.
diff --git a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt
new file mode 100644
index 00000000..0e543be3
--- /dev/null
+++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt
@@ -0,0 +1,86 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:14.279
+Introduction
+
+00:01:14.280 --> 00:03:15.919
+Message from Bastien Guerry
+
+00:03:15.920 --> 00:05:09.240
+My step-by-step journey to Org maintenance
+
+00:05:09.241 --> 00:08:11.766
+Priorities for Org maintenance
+
+00:08:11.767 --> 00:08:41.589
+Modular Org
+
+00:08:41.590 --> 00:09:59.999
+Slim down large Org libraries
+
+00:10:00.000 --> 00:11:25.399
+Upstream generic Org libraries
+
+00:11:25.400 --> 00:13:13.256
+Use modern Emacs APIs and libraries
+
+00:13:13.257 --> 00:14:45.730
+Improve Org parser APIs
+
+00:14:45.731 --> 00:15:57.379
+Improve Org babel APIs
+
+00:15:57.380 --> 00:16:31.199
+Beyond Org code and Emacs: third-party packages, apps, parsers
+
+00:16:31.200 --> 00:17:37.819
+org-contrib
+
+00:17:37.820 --> 00:18:25.839
+Org orphanage
+
+00:18:25.840 --> 00:20:23.868
+Mobile apps and parsers
+
+00:20:23.869 --> 00:21:56.239
+Long-standing syntax problems
+
+00:21:56.240 --> 00:23:30.502
+New syntax features
+
+00:23:30.503 --> 00:25:54.072
+New features I hope to see in Org
+
+00:25:54.073 --> 00:26:01.357
+Org community
+
+00:26:01.358 --> 00:27:17.159
+Org community forums - Org mailing list
+
+00:27:17.160 --> 00:30:05.579
+Org mailing list - world
+
+00:30:05.580 --> 00:31:01.519
+Contribute ideas!
+
+00:31:01.520 --> 00:31:34.999
+How much can a single person do?
+
+00:31:35.000 --> 00:33:02.079
+Contribute code!
+
+00:33:02.080 --> 00:35:40.239
+Why contribute?
+
+00:35:40.240 --> 00:37:41.419
+Benefits for code contributors
+
+00:37:41.420 --> 00:38:30.439
+Contributing as non-programmer
+
+00:38:30.440 --> 00:39:12.996
+Got no free time, but still want to help?
+
+00:39:12.997 --> 00:39:34.440
+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
new file mode 100644
index 00000000..9a13366b
--- /dev/null
+++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt
@@ -0,0 +1,2046 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.039
+Hello, everyone. My name is Ihor Radchenko,
+
+00:00:03.040 --> 00:00:07.319
+and I'm the new official Org Mode maintainer.
+
+00:00:07.320 --> 00:00:09.679
+Today, I'll briefly introduce myself
+
+00:00:09.680 --> 00:00:12.319
+and then share my ideas about the future of
+
+00:00:12.320 --> 00:00:16.039
+Org Mode development. I will start by passing
+
+00:00:16.040 --> 00:00:18.759
+the word from Bastien, the previous maintainer.
+
+00:00:18.760 --> 00:00:22.239
+Then I will tell you a little bit about my story,
+
+00:00:22.240 --> 00:00:24.119
+starting from ordinary Org Mode user
+
+00:00:24.120 --> 00:00:26.039
+all the way to the maintainer.
+
+00:00:26.040 --> 00:00:30.839
+Then I will detail the new directions of development
+
+00:00:30.840 --> 00:00:33.599
+and specific features which I want to see
+
+00:00:33.600 --> 00:00:35.799
+in Org Mode in the coming years.
+
+00:00:35.800 --> 00:00:39.659
+And I will conclude by asking you, Org Mode users,
+
+00:00:39.660 --> 00:00:42.399
+to contribute to Org Mode
+
+00:00:42.400 --> 00:00:46.759
+because all the features which are too many
+
+00:00:46.760 --> 00:00:49.259
+can only be implemented with the help of the community,
+
+00:00:49.260 --> 00:00:51.879
+with the help of more contributors.
+
+00:00:51.880 --> 00:00:53.579
+And for that, of course, I will also talk
+
+00:00:53.580 --> 00:00:59.479
+about Org community and how I see it evolve
+
+00:00:59.480 --> 00:01:01.199
+so that we have a good communication
+
+00:01:01.200 --> 00:01:03.039
+between the development of Org Mode
+
+00:01:03.040 --> 00:01:07.559
+and the community ideas.
+
+00:01:07.560 --> 00:01:14.279
+Let me first pass the word to Bastien.
+
+NOTE Message from Bastien Guerry
+
+00:01:14.280 --> 00:01:17.599
+Hello, everyone. Ihor Radchenko is the new Org Mode
+
+00:01:17.600 --> 00:01:18.519
+maintainer.
+
+00:01:18.520 --> 00:01:21.039
+He's been acting as such for a couple of years now,
+
+00:01:21.040 --> 00:01:23.479
+and I'm really glad he's finally agreed to take on the
+
+00:01:23.480 --> 00:01:26.439
+role officially. As a maintainer, I've probably done
+
+00:01:26.440 --> 00:01:29.439
+a few things right and certainly made many mistakes.
+
+00:01:29.440 --> 00:01:32.319
+Here are 4 lessons I've learned in 14 years.
+
+00:01:32.320 --> 00:01:34.319
+The first is that maintaining Org Mode
+
+00:01:34.320 --> 00:01:36.439
+isn't just about code, it's mostly
+
+00:01:36.440 --> 00:01:40.679
+about users. Of course, some of them will never learn how to
+
+00:01:40.680 --> 00:01:43.159
+report a bug, some of them will behave like spoiled
+
+00:01:43.160 --> 00:01:46.319
+children, and most of them will expect you to work for free
+
+00:01:46.320 --> 00:01:50.439
+forever. Nevertheless, the time is as valuable as yours.
+
+00:01:50.440 --> 00:01:53.639
+Whatever they request, there is always something that can
+
+00:01:53.640 --> 00:01:57.879
+lead to a positive outcome for Org Mode or its community.
+
+00:01:57.880 --> 00:02:00.719
+The second lesson is that maintenance isn't just about
+
+00:02:00.720 --> 00:02:04.239
+technical choices. It's also about predictability.
+
+00:02:04.240 --> 00:02:07.879
+Be very clear and very loud about what users and contributors
+
+00:02:07.880 --> 00:02:11.159
+can expect of your time, skills, and motivations.
+
+00:02:11.160 --> 00:02:12.879
+Stick to the robustness principle
+
+00:02:12.880 --> 00:02:15.719
+by being liberal in what you accept
+
+00:02:15.720 --> 00:02:19.319
+and strict in what you produce. Thirdly, it's all
+
+00:02:19.320 --> 00:02:22.319
+about learning. Let's build a culture together where it's
+
+00:02:22.320 --> 00:02:25.719
+okay to ask stupid questions. No one is born knowing how to
+
+00:02:25.720 --> 00:02:28.639
+write in English, how to report a bug, or how to maintain a
+
+00:02:28.640 --> 00:02:32.059
+large piece of code. Remember that old-timers were newbies
+
+00:02:32.060 --> 00:02:35.199
+and that newbies could become maintainers. We all have a lot
+
+00:02:35.200 --> 00:02:38.759
+to learn, even if it's just how to respect each other.
+
+00:02:38.760 --> 00:02:42.239
+Finally, as a maintainer, think about the next one. Who will
+
+00:02:42.240 --> 00:02:45.519
+be in your shoes next? What kind of maintainer do you want for
+
+00:02:45.520 --> 00:02:48.839
+a software you will be using for decades? It's also a
+
+00:02:48.840 --> 00:02:52.159
+responsibility of the Org Mode community. How can we
+
+00:02:52.160 --> 00:02:55.999
+collectively attract maintainers that want to help us use
+
+00:02:56.000 --> 00:02:59.359
+and enhance this wonderful little tool? How can we,
+
+00:02:59.360 --> 00:03:02.199
+as Org Mode users, help Ihor pave the way
+
+00:03:02.200 --> 00:03:04.399
+for the next maintainers?
+
+00:03:04.400 --> 00:03:08.279
+Enough said. I'm confident Org Mode is in good hands and I'm a very
+
+00:03:08.280 --> 00:03:11.559
+happy user. Thanks everyone for all these years of fun and
+
+00:03:11.560 --> 00:03:15.919
+learning.
+
+NOTE My step-by-step journey to Org maintenance
+
+00:03:15.920 --> 00:03:20.279
+Now back to my talk. Let me start by briefly introducing
+
+00:03:20.280 --> 00:03:23.959
+myself. I'm actually not a programmer. By training, I'm a
+
+00:03:23.960 --> 00:03:27.519
+material scientist. and I only started using Emacs and
+
+00:03:27.520 --> 00:03:30.719
+Org Mode and naturally doing programming (because that's
+
+00:03:30.720 --> 00:03:36.799
+Emacs) when I was doing my PhD and I wanted to use Org Mode to
+
+00:03:36.800 --> 00:03:40.479
+tame my research work. A couple of years I was just an
+
+00:03:40.480 --> 00:03:44.599
+ordinary user, until I learned enough and
+
+00:03:44.600 --> 00:03:48.463
+got enough courage to report my first bug.
+
+00:03:48.464 --> 00:03:51.639
+Then it all evolved over the years.
+
+00:03:51.640 --> 00:03:53.959
+I started participating in the mailing list,
+
+00:03:53.960 --> 00:03:56.559
+I started learning more about Elisp,
+
+00:03:56.560 --> 00:03:59.839
+I reported more complex bugs,
+
+00:03:59.840 --> 00:04:08.879
+I eventually got around to go and fix the tricky bugs.
+
+00:04:08.880 --> 00:04:11.719
+Then I started participating more in Org mailing list
+
+00:04:11.720 --> 00:04:16.919
+in helping fixing bugs in selected areas of Org
+
+00:04:16.920 --> 00:04:22.839
+mode and eventually switching to all parts of Org.
+
+00:04:22.840 --> 00:04:27.639
+At some point I ended up doing the de facto maintenance job
+
+00:04:27.640 --> 00:04:32.679
+together with Bastien and got an actual maintenance offer
+
+00:04:32.680 --> 00:04:38.599
+which I accepted recently. The key takeaway I want you to get
+
+00:04:38.600 --> 00:04:40.999
+from here is that you don't have to be a programmer, you don't
+
+00:04:41.000 --> 00:04:47.239
+have to know Elisp to contribute, and you don't even have to
+
+00:04:47.240 --> 00:04:51.439
+be like that to become a maintainer. All it takes is
+
+00:04:51.440 --> 00:04:55.279
+slow, methodical, persistent learning over the years,
+
+00:04:55.280 --> 00:04:58.499
+participating in the community, and eventually
+
+00:04:58.500 --> 00:05:02.399
+submitting your patches upstream. And eventually you can
+
+00:05:02.400 --> 00:05:07.679
+become a maintainer, or not a maintainer as you wish.
+
+00:05:07.680 --> 00:05:09.240
+Enough about me.
+
+NOTE Priorities for Org maintenance
+
+00:05:09.241 --> 00:05:13.359
+Let's talk about what I think should happen with
+
+00:05:13.360 --> 00:05:18.859
+Org Mode and what my goals on Org Mode is. The first and top
+
+00:05:18.860 --> 00:05:25.199
+priority for me is the basics. The basics, the
+
+00:05:25.200 --> 00:05:26.069
+code-based stability.
+
+00:05:26.070 --> 00:05:29.719
+Basically, all the foundations, all the APIs in
+
+00:05:29.720 --> 00:05:34.959
+Org Mode, all the basic libraries, which everything builds
+
+00:05:34.960 --> 00:05:39.079
+upon so that we have fewer bugs and we have more
+
+00:05:39.080 --> 00:05:42.599
+understandable code so that others who want to contribute
+
+00:05:42.600 --> 00:05:44.651
+have easier time understanding
+
+00:05:44.652 --> 00:05:46.371
+what is going on in the code base and
+
+00:05:46.372 --> 00:05:52.259
+contribute without much of a problem or confusion.
+
+00:05:52.260 --> 00:05:56.339
+Second equally important direction is the Org community,
+
+00:05:56.340 --> 00:06:00.579
+because a single person, even a couple of people, cannot
+
+00:06:00.580 --> 00:06:05.599
+really develop such a big project as Org Mode. And we always
+
+00:06:05.600 --> 00:06:08.439
+want new contributors, which are not coming from nowhere.
+
+00:06:08.440 --> 00:06:10.228
+We need to have the community of users.
+
+00:06:10.229 --> 00:06:12.199
+We have a community of
+
+00:06:12.200 --> 00:06:15.679
+people who participate in discussions, who later submit
+
+00:06:15.680 --> 00:06:19.719
+patches and code, and that's where we get most of the new
+
+00:06:19.720 --> 00:06:24.919
+features. So I would like to improve the communication
+
+00:06:24.920 --> 00:06:29.879
+between Org community and the development. The third
+
+00:06:29.880 --> 00:06:34.259
+direction I want to pursue is making life easier for
+
+00:06:34.260 --> 00:06:38.639
+third-party packages. Because we don't only have org-mode
+
+00:06:38.640 --> 00:06:41.319
+as it's distributed with Emacs. We have a lot of
+
+00:06:41.320 --> 00:06:45.196
+ELPA packages. We have a lot of MELPA packages.
+
+00:06:45.197 --> 00:06:47.917
+People who want some specific features
+
+00:06:47.918 --> 00:06:49.839
+on top of org-mode do develop
+
+00:06:49.840 --> 00:06:54.279
+these packages which are widely used or not so widely used.
+
+00:06:54.280 --> 00:06:57.639
+It's not only about Emacs. We have a lot of mobile apps
+
+00:06:57.640 --> 00:07:01.879
+that can work with Org files, have a lot of parsers which
+
+00:07:01.880 --> 00:07:06.039
+enable this mobile apps, or in general, programs outside
+
+00:07:06.040 --> 00:07:11.019
+Elisp to understand Org files.
+
+00:07:11.020 --> 00:07:14.959
+Fourth direction is the Org markup as a foundation of
+
+00:07:14.960 --> 00:07:18.319
+org-mode as a major mode, because we have a lot of
+
+00:07:18.320 --> 00:07:20.573
+functionality in org-mode itself inside Emacs,
+
+00:07:20.574 --> 00:07:23.674
+but it's all based on the underlying markup,
+
+00:07:23.675 --> 00:07:27.435
+and markup should have enough features
+
+00:07:27.436 --> 00:07:32.479
+to support the functions we want to see there.
+
+00:07:32.480 --> 00:07:34.919
+Last direction, which is somewhat less
+
+00:07:34.920 --> 00:07:37.834
+important, mostly because I don't have
+
+00:07:37.835 --> 00:07:40.136
+that much time to focus on everything,
+
+00:07:40.137 --> 00:07:44.159
+is the new features. I do want to see
+
+00:07:44.160 --> 00:07:46.840
+certain important features in Org mode,
+
+00:07:46.841 --> 00:07:50.262
+but I usually cannot spend too much time on them
+
+00:07:50.263 --> 00:07:53.084
+because of the previous more important parts.
+
+00:07:53.085 --> 00:07:54.999
+I do rely on the org community and
+
+00:07:55.000 --> 00:07:57.456
+the contributors to implement these new features.
+
+00:07:57.457 --> 00:08:01.915
+My idea is that I want to direct which features
+
+00:08:01.916 --> 00:08:03.757
+and how they should be implemented,
+
+00:08:03.758 --> 00:08:05.299
+but the actual people who implement
+
+00:08:05.300 --> 00:08:09.463
+them should come from the community.
+
+00:08:09.464 --> 00:08:11.766
+Now let's go into the details.
+
+NOTE Modular Org
+
+00:08:11.767 --> 00:08:15.719
+The code base. As a bit of motivation, I would like
+
+00:08:15.720 --> 00:08:19.279
+to share this email from Richard Stallman, who a couple of
+
+00:08:19.280 --> 00:08:27.039
+years ago asked about improving Org mode by making it
+
+00:08:27.040 --> 00:08:32.839
+more modular. That's directly asking about improving the
+
+00:08:32.840 --> 00:08:35.639
+foundations of the code. That's what I think is
+
+00:08:35.640 --> 00:08:41.589
+an important direction as well. Here's an example.
+
+NOTE Slim down large Org libraries
+
+00:08:41.590 --> 00:08:45.312
+We have a lot of really, really large org libraries,
+
+00:08:45.313 --> 00:08:49.376
+like org.el, which is like one megabyte or something large,
+
+00:08:49.377 --> 00:08:51.558
+org-agenda, org-table, org-list,
+
+00:08:51.559 --> 00:08:52.879
+a number of files which are really,
+
+00:08:52.880 --> 00:08:56.599
+really, really large. What is worse is they are hard to
+
+00:08:56.600 --> 00:09:00.906
+understand sometimes. I even have an example,
+
+00:09:00.907 --> 00:09:04.505
+alphapapa complained that part of his motivation
+
+00:09:04.506 --> 00:09:07.867
+to write org-ql and specifically his agenda part,
+
+00:09:07.868 --> 00:09:08.879
+agenda-like part, was
+
+00:09:08.880 --> 00:09:13.119
+because org-agenda is so hard to understand that it's
+
+00:09:13.120 --> 00:09:15.572
+easier to start from scratch.
+
+00:09:15.573 --> 00:09:17.079
+I don't want such situations
+
+00:09:17.080 --> 00:09:20.374
+to happen in future, if possible at all.
+
+00:09:20.375 --> 00:09:21.879
+One of the projects
+
+00:09:21.880 --> 00:09:23.116
+I'm currently working on,
+
+00:09:23.117 --> 00:09:25.100
+it's work in progress now,
+
+00:09:25.101 --> 00:09:28.437
+is splitting Org libraries into smaller parts,
+
+00:09:28.438 --> 00:09:31.808
+into more documented parts,
+
+00:09:31.809 --> 00:09:34.239
+into the APIs which are actually
+
+00:09:34.240 --> 00:09:38.470
+documented and explained in the code at least,
+
+00:09:38.471 --> 00:09:42.571
+so that people who just open org-mode code
+
+00:09:42.572 --> 00:09:45.239
+cannot be scared away and go and
+
+00:09:45.240 --> 00:09:47.999
+read the comments and understand what is happening there
+
+00:09:48.000 --> 00:09:52.039
+easier. At this point, I have almost doubled the number of
+
+00:09:52.040 --> 00:09:54.839
+libraries. It's still work in progress, so there's a lot of
+
+00:09:54.840 --> 00:09:59.999
+room for improvement in this area.
+
+NOTE Upstream generic Org libraries
+
+00:10:00.000 --> 00:10:04.599
+Another direction which is
+
+00:10:04.600 --> 00:10:09.799
+somewhat reasonable in relation to splitting things down
+
+00:10:09.800 --> 00:10:15.159
+is that some libraries are really generic in Org Mode,
+
+00:10:15.160 --> 00:10:18.239
+because Org Mode often has a functionality
+
+00:10:18.240 --> 00:10:20.100
+which is really new, and for that,
+
+00:10:20.101 --> 00:10:22.239
+it had to implement some very generic
+
+00:10:22.240 --> 00:10:24.222
+functionality that doesn't have to be used
+
+00:10:24.223 --> 00:10:24.903
+just for Org Mode.
+
+00:10:24.904 --> 00:10:27.924
+This can be generalized for Emacs in general.
+
+00:10:27.925 --> 00:10:29.645
+There is a number of libraries
+
+00:10:29.646 --> 00:10:32.999
+which we may or may not upstream to
+
+00:10:33.000 --> 00:10:37.559
+Emacs, depending on what Emacs maintain, I think. As one
+
+00:10:37.560 --> 00:10:40.719
+example is org-capture, because it's a very obvious
+
+00:10:40.720 --> 00:10:43.679
+example. org-capture started as support from remember.el,
+
+00:10:43.680 --> 00:10:46.759
+which is still a part of Emacs. It has more features than
+
+00:10:46.760 --> 00:10:50.039
+remember.el, which we required for Org. But, you know,
+
+00:10:50.040 --> 00:10:55.139
+these features can be backported. Why not? And then
+
+00:10:55.140 --> 00:10:58.679
+not only Org-mode, but other Emacs libraries can benefit
+
+00:10:58.680 --> 00:11:01.957
+from these features we have in Org-mode only.
+
+00:11:01.958 --> 00:11:04.739
+Similarly, I have a long list of
+
+00:11:04.740 --> 00:11:12.039
+different libraries that can be shared.
+
+00:11:12.040 --> 00:11:14.004
+Yeah, for some I'm not sure,
+
+00:11:14.005 --> 00:11:18.959
+but in general, there is a lot of
+
+00:11:18.960 --> 00:11:25.399
+work that may be done and may be discussed in the future.
+
+NOTE Use modern Emacs APIs and libraries
+
+00:11:25.400 --> 00:11:31.479
+The third part about the basics is making use of the new Emacs
+
+00:11:31.480 --> 00:11:36.039
+libraries. Org Mode in general is quite well written in terms
+
+00:11:36.040 --> 00:11:40.039
+of Emacs integration. We do support many of the Emacs
+
+00:11:40.040 --> 00:11:44.359
+features and libraries which are generic. However, in more
+
+00:11:44.360 --> 00:11:47.999
+recent Emacs versions, we started getting some new
+
+00:11:48.000 --> 00:11:50.799
+features, and we do want to make use of them in Org.
+
+00:11:50.800 --> 00:11:55.879
+For example, recently we contributed yank-media support for
+
+00:11:55.880 --> 00:12:00.359
+clipboard pasting and drag and drop. Now it is supported
+
+00:12:00.360 --> 00:12:04.399
+in Org mode already in the released version. Eventually
+
+00:12:04.400 --> 00:12:08.359
+we want to support transient.el, because now Org uses ad hoc
+
+00:12:08.360 --> 00:12:11.999
+system. It's of course much better to use existing and
+
+00:12:12.000 --> 00:12:14.839
+more powerful menus, which are implemented in
+
+00:12:14.840 --> 00:12:18.159
+transient. It even has some initial work-in-progress
+
+00:12:18.160 --> 00:12:20.028
+implementation. I hope it can be eventually
+
+00:12:20.029 --> 00:12:23.960
+extended to the whole Org Mode
+
+00:12:23.961 --> 00:12:29.359
+There are other things like compatibility, which there is
+
+00:12:29.360 --> 00:12:33.519
+an excellent Emacs library, compat.el, that provides
+
+00:12:33.520 --> 00:12:37.599
+backwards compatibility and Org also has something like this
+
+00:12:37.600 --> 00:12:39.439
+in org-compat. We don't have to write it ourself again.
+
+00:12:39.440 --> 00:12:43.741
+We can make use of the existing library.
+
+00:12:43.742 --> 00:12:46.043
+Similarly, there's a very, very new library
+
+00:12:46.044 --> 00:12:48.759
+track-changes for tracking changes
+
+00:12:48.760 --> 00:12:53.159
+in real time. Eventually, if you want to support
+
+00:12:53.160 --> 00:12:56.359
+context-menu mode, maybe touchscreen, Android
+
+00:12:56.360 --> 00:13:00.999
+support, I don't know, but I hope it can be done by someone.
+
+00:13:01.000 --> 00:13:09.319
+And some more generic library: select thingatpt.
+
+00:13:09.320 --> 00:13:13.256
+That's about using external APIs.
+
+NOTE Improve Org parser APIs
+
+00:13:13.257 --> 00:13:18.557
+Now about the internal Org APIs.
+
+00:13:18.558 --> 00:13:19.439
+One important, probably one of the most important
+
+00:13:19.440 --> 00:13:23.259
+parts of Org is the parser, how Org itself understands the
+
+00:13:23.260 --> 00:13:27.159
+Org files. The situation is that we have two parsers in
+
+00:13:27.160 --> 00:13:30.999
+Org mode. One is the Org element, the proper parser, which we
+
+00:13:31.000 --> 00:13:34.519
+use as a reference, but many parts of Org still use regular
+
+00:13:34.520 --> 00:13:38.079
+expressions, which are approximate. These two parsers
+
+00:13:38.080 --> 00:13:41.839
+are not exactly consistent, which is really bad, and I hope
+
+00:13:41.840 --> 00:13:47.999
+to solve this. I already started doing some work by
+
+00:13:48.000 --> 00:13:54.140
+factoring out some part of abstract syntax tree and working
+
+00:13:54.141 --> 00:13:57.519
+on real-time parser, incremental parser, which is enabled
+
+00:13:57.520 --> 00:14:00.039
+by default in Org 9.6, but there are still parts which I need
+
+00:14:00.040 --> 00:14:02.999
+to work on. Eventually I want to get rid of regular
+
+00:14:03.000 --> 00:14:05.439
+expression-based parser completely, so that we don't have
+
+00:14:05.440 --> 00:14:10.199
+any inconsistencies inside Org Mode. One of the examples of
+
+00:14:10.200 --> 00:14:13.159
+these parts that are still using regular expression is
+
+00:14:13.160 --> 00:14:16.719
+fontification, which is often simply wrong, especially in
+
+00:14:16.720 --> 00:14:21.639
+some edge cases, and we really want to use the proper parser
+
+00:14:21.640 --> 00:14:27.559
+in this area. Maybe even editing org files using the parser
+
+00:14:27.560 --> 00:14:31.799
+syntax tree, but that might be tricky, although there is an
+
+00:14:31.800 --> 00:14:38.119
+existing library that implements some ideas for this.
+
+00:14:38.120 --> 00:14:41.519
+The key point is that org-element-api, the parser, should
+
+00:14:41.520 --> 00:14:42.749
+eventually be used everywhere
+
+00:14:42.750 --> 00:14:45.730
+so that everything is consistent.
+
+NOTE Improve Org babel APIs
+
+00:14:45.731 --> 00:14:50.359
+The second important API is the Org babel.
+
+00:14:50.360 --> 00:14:54.414
+Currently, Org babel does have some API,
+
+00:14:54.415 --> 00:14:56.195
+but first, it's not well documented.
+
+00:14:56.196 --> 00:14:59.039
+Second, it's sometimes awkwardly
+
+00:14:59.040 --> 00:15:04.819
+designed, especially compared with the exporter.
+
+00:15:04.820 --> 00:15:11.419
+I do want Org Babel APIs to be more consistent.
+
+00:15:11.420 --> 00:15:14.879
+Another thing about Org Babel, it's not exactly API, but you
+
+00:15:14.880 --> 00:15:18.259
+know that documentation for most of the Babel backends are
+
+00:15:18.260 --> 00:15:20.879
+not even in the Org manual, even though the backends are
+
+00:15:20.880 --> 00:15:25.559
+built-in. They are on Org Wiki, and we do want to move them to
+
+00:15:25.560 --> 00:15:29.919
+the manual eventually. That's the important part, and it
+
+00:15:29.920 --> 00:15:34.519
+should be done. Those are some obstacles, like not all the
+
+00:15:34.520 --> 00:15:39.399
+features are properly implemented, and that's a bit of an
+
+00:15:39.400 --> 00:15:43.159
+extra job that should be done. Another small thing which
+
+00:15:43.160 --> 00:15:48.079
+thanks to Bruno Barbier is being done, in progress: we
+
+00:15:48.080 --> 00:15:51.599
+should have a more robust asynchronous API for babel.
+
+00:15:51.600 --> 00:15:53.600
+I hope it can progress further.
+
+00:15:53.601 --> 00:15:57.379
+For now, it already progressed quite far.
+
+NOTE Beyond Org code and Emacs: third-party packages, apps, parsers
+
+00:15:57.380 --> 00:15:59.959
+That's all about the basics, the underlying
+
+00:15:59.960 --> 00:16:04.799
+backbone of the Org codebase. Let's move to the second
+
+00:16:04.800 --> 00:16:09.519
+important direction which is
+
+00:16:09.520 --> 00:16:13.739
+the third-party packages and basically the parsers
+
+00:16:13.740 --> 00:16:18.279
+for mobile apps. I will postpone the community to the end
+
+00:16:18.280 --> 00:16:23.919
+because I want to have a call for contribution at the end.
+
+00:16:23.920 --> 00:16:31.199
+For third-party packages, I would like to remind you that
+
+NOTE org-contrib
+
+00:16:31.200 --> 00:16:34.239
+Org mode used to have something called org-contrib as a
+
+00:16:34.240 --> 00:16:39.799
+part of Org mode, which is a collection of small libraries,
+
+00:16:39.800 --> 00:16:44.079
+small packages that didn't have a proper
+
+00:16:44.080 --> 00:16:45.495
+copyright assignment basically,
+
+00:16:45.496 --> 00:16:49.359
+but more or less a part of Org mode. This is
+
+00:16:49.360 --> 00:16:52.119
+no longer the case. Now what we did is
+
+00:16:52.120 --> 00:16:56.641
+we moved a number of very rarely used libraries
+
+00:16:56.642 --> 00:16:58.759
+from Org core itself to org-contrib,
+
+00:16:58.760 --> 00:17:03.779
+and now we treat org-contrib as basically the libraries
+
+00:17:03.780 --> 00:17:08.020
+that we really want someone to take responsibility for.
+
+00:17:08.021 --> 00:17:10.580
+We want to maintain this for everything that is in
+
+00:17:10.581 --> 00:17:18.079
+org-contrib, and from me and other Org team, we
+
+00:17:18.080 --> 00:17:21.162
+do not spend too much time maintaining this package,
+
+00:17:21.163 --> 00:17:25.286
+just do some most basic bug fixing, and that's all.
+
+00:17:25.287 --> 00:17:27.359
+If you know, if you see
+
+00:17:27.360 --> 00:17:30.031
+some libraries from org-contrib and you use them,
+
+00:17:30.032 --> 00:17:31.991
+and you know Elisp, please volunteer to be
+
+00:17:31.992 --> 00:17:34.454
+the maintainer, because otherwise
+
+00:17:34.455 --> 00:17:37.819
+there will be not much progress in these libraries.
+
+NOTE Org orphanage
+
+00:17:37.820 --> 00:17:40.719
+As a natural extension of this and inspired by
+
+00:17:40.720 --> 00:17:46.199
+Tarsius's Emacs Orphanage idea, we also maintain a small
+
+00:17:46.200 --> 00:17:50.359
+page basically listing the libraries, some others like
+
+00:17:50.360 --> 00:17:55.439
+packages, Emacs packages that are not really maintained.
+
+00:17:55.440 --> 00:17:59.239
+If you are a maintainer of a library and you don't have time
+
+00:17:59.240 --> 00:18:02.507
+to do it, you can write to Org mailing list
+
+00:18:02.508 --> 00:18:05.209
+and we can add the library to this page
+
+00:18:05.210 --> 00:18:09.918
+so that we can search for new maintainers
+
+00:18:09.919 --> 00:18:12.839
+in a more centralized way. If you are an
+
+00:18:12.840 --> 00:18:18.119
+Elisp hacker and you want to help something for Org Mode,
+
+00:18:18.120 --> 00:18:25.839
+you can check that page and see where you can help.
+
+NOTE Mobile apps and parsers
+
+00:18:25.840 --> 00:18:29.879
+Now away from Emacs, or mobile apps.
+
+00:18:29.880 --> 00:18:33.948
+We have quite a lot of mobile apps at this point.
+
+00:18:33.949 --> 00:18:35.759
+Unfortunately, it's very hard
+
+00:18:35.760 --> 00:18:42.459
+for me and many other Elisp contributors to contribute to
+
+00:18:42.460 --> 00:18:46.759
+these apps because they are not using Elisp naturally. But
+
+00:18:46.760 --> 00:18:52.359
+these applications heavily rely on Org markup. I do hope
+
+00:18:52.360 --> 00:18:55.799
+that we can keep Org markup consistent enough and rich
+
+00:18:55.800 --> 00:19:00.599
+enough so that people don't have to invent extensions to Org
+
+00:19:00.600 --> 00:19:06.020
+like what happened to Markdown.
+
+00:19:06.021 --> 00:19:09.542
+I really want to emphasize that
+
+00:19:09.543 --> 00:19:12.359
+I want to see more Org parsers in different
+
+00:19:12.360 --> 00:19:13.739
+languages so that they can be used by developers.
+
+00:19:13.740 --> 00:19:24.185
+For people who are writing these parsers,
+
+00:19:24.186 --> 00:19:27.267
+I want to share this link. It is the org-syntax reference.
+
+00:19:27.268 --> 00:19:29.368
+It is the official Org syntax,
+
+00:19:29.369 --> 00:19:33.631
+which is what we think it should be.
+
+00:19:33.632 --> 00:19:36.212
+It's described in plain human language.
+
+00:19:36.213 --> 00:19:39.855
+It's not a code. All details should be listed there.
+
+00:19:39.856 --> 00:19:43.557
+Please use it as a reference if you are writing a parser.
+
+00:19:43.558 --> 00:19:45.118
+Eventually, this document will be
+
+00:19:45.119 --> 00:19:51.672
+submitted to IETF, I hope. In the future
+
+00:19:51.673 --> 00:19:56.059
+I hope to write a set of tests which will work as benchmarks.
+
+00:19:56.060 --> 00:19:58.839
+basically we have some existing tests for our internal
+
+00:19:58.840 --> 00:20:04.319
+parser and I want to factor out these tests so they can be used
+
+00:20:04.320 --> 00:20:07.359
+by any parser, so that we can compare the performance and
+
+00:20:07.360 --> 00:20:14.579
+which parts of Org mode are parsed and which parts are not.
+
+00:20:14.580 --> 00:20:18.999
+I mentioned that we want to submit to IETF, which means that
+
+00:20:19.000 --> 00:20:23.868
+Org markup will become the actual registered format.
+
+NOTE Long-standing syntax problems
+
+00:20:23.869 --> 00:20:31.279
+But before we do that and thus fix Org markup in stone,
+
+00:20:31.280 --> 00:20:34.614
+because it's very hard to change things in the IETF,
+
+00:20:34.615 --> 00:20:38.836
+it's important to address important problems,
+
+00:20:38.837 --> 00:20:41.217
+existing problems with Org syntax.
+
+00:20:41.218 --> 00:20:43.639
+There are some problems, like I mentioned the
+
+00:20:43.640 --> 00:20:46.941
+inconsistencies between the two existing parsers
+
+00:20:46.942 --> 00:20:51.407
+in Org mode. There are also some parts,
+
+00:20:51.408 --> 00:20:53.149
+there are some examples, like there are
+
+00:20:53.150 --> 00:20:54.799
+problems with numeric priorities, for
+
+00:20:54.800 --> 00:20:58.719
+example, which are not treated consistently. There are
+
+00:20:58.720 --> 00:21:02.599
+problems, more general problems with syntax when people
+
+00:21:02.600 --> 00:21:07.239
+request some edge cases which should be addressed. Like,
+
+00:21:07.240 --> 00:21:10.101
+it's very hard to do interword markup.
+
+00:21:10.102 --> 00:21:13.701
+We have zero-width space workaround, but many people dislike it,
+
+00:21:13.702 --> 00:21:16.262
+so maybe we want to do something about it.
+
+00:21:16.263 --> 00:21:18.079
+We have some edge cases when we
+
+00:21:18.080 --> 00:21:22.119
+combine emphasis with links. We have some edge cases when we
+
+00:21:22.120 --> 00:21:24.959
+have double blank lines inside some source blocks, for
+
+00:21:24.960 --> 00:21:30.079
+example, and combination in the list. I hope we can
+
+00:21:30.080 --> 00:21:33.399
+somehow address it. It's not impossible to do it, it just
+
+00:21:33.400 --> 00:21:38.919
+requires time. One annoying part is the inline task syntax.
+
+00:21:38.920 --> 00:21:41.479
+It's annoying both from the programming perspective,
+
+00:21:41.480 --> 00:21:43.919
+internally as implementation, and from the UI
+
+00:21:43.920 --> 00:21:47.519
+perspective, because there are too many stars. We
+
+00:21:47.520 --> 00:21:50.479
+probably should redesign it eventually, maybe in
+
+00:21:50.480 --> 00:21:56.239
+backwards-compatible way, but we will see how it goes.
+
+NOTE New syntax features
+
+00:21:56.240 --> 00:22:00.639
+Another part is not just fixing the edge cases or problems,
+
+00:22:00.640 --> 00:22:04.039
+it's the completely new syntax features. That's probably
+
+00:22:04.040 --> 00:22:07.959
+done after we submit to IETF. But there are important things
+
+00:22:07.960 --> 00:22:11.119
+that people often request, like time zone support in
+
+00:22:11.120 --> 00:22:15.919
+timestamps. Better repeaters, like more flexible
+
+00:22:15.920 --> 00:22:21.799
+repeaters, that's really a frequent request also.
+
+00:22:21.800 --> 00:22:28.919
+Another idea is some custom markup, which is
+
+00:22:28.920 --> 00:22:31.939
+coming to various requests, like, for example, people
+
+00:22:31.940 --> 00:22:37.887
+often ask to highlight some words with a color,
+
+00:22:37.888 --> 00:22:40.890
+for example, or with some other special way
+
+00:22:40.891 --> 00:22:43.333
+and then export it in a special way,
+
+00:22:43.334 --> 00:22:47.239
+just as we do with special blocks, basically.
+
+00:22:47.240 --> 00:22:51.061
+What I want to introduce is the ability to do it
+
+00:22:51.062 --> 00:22:54.601
+on a macro level or inline.
+
+00:22:54.602 --> 00:22:57.879
+Of course, a new syntax feature which I wish we could
+
+00:22:57.880 --> 00:23:01.064
+have is the multi-line cells in tables.
+
+00:23:01.065 --> 00:23:02.545
+It's very frequently requested as well,
+
+00:23:02.546 --> 00:23:07.007
+but I really have no clue how to do it.
+
+00:23:07.008 --> 00:23:09.239
+We had a discussion about this in previous
+
+00:23:09.240 --> 00:23:13.359
+discussions, but there was no conclusion. We don't see a
+
+00:23:13.360 --> 00:23:16.155
+good way how to implement it syntax-wise.
+
+00:23:16.156 --> 00:23:19.140
+Unlike time zones where we decided exactly the syntax,
+
+00:23:19.141 --> 00:23:22.665
+how it could be and we just need patches to be submitted,
+
+00:23:22.666 --> 00:23:25.610
+here even the idea of syntax is not clear.
+
+00:23:25.611 --> 00:23:26.771
+Please do participate in these discussions
+
+00:23:26.772 --> 00:23:30.502
+if you have ideas.
+
+NOTE New features I hope to see in Org
+
+00:23:30.503 --> 00:23:32.519
+The last direction is the
+
+00:23:32.520 --> 00:23:36.319
+new features. In general, I welcome all kinds of good
+
+00:23:36.320 --> 00:23:39.559
+features, but there are certain things which I explicitly
+
+00:23:39.560 --> 00:23:43.919
+want to see and I hope to see submitted. If you are
+
+00:23:43.920 --> 00:23:48.559
+interested, please do submit patches. One, and probably
+
+00:23:48.560 --> 00:23:50.799
+many people are aware about it, is the asynchronous LaTeX
+
+00:23:50.800 --> 00:23:55.319
+preview, developed by Timothy and Karthik. I hope it can be
+
+00:23:55.320 --> 00:23:59.279
+finalized eventually and upstreamed. It's pretty much in
+
+00:23:59.280 --> 00:24:02.319
+ready state, but on the technical level it should be
+
+00:24:02.320 --> 00:24:09.879
+discussed further and revised. The second is org-ql by Adam.
+
+00:24:09.880 --> 00:24:17.239
+I hope it can be upstreamed. It's also a work in progress.
+
+00:24:17.240 --> 00:24:20.519
+It's just a question of free time for Adam mostly, I think,
+
+00:24:20.520 --> 00:24:26.199
+and me. That's another important part, new feature. The
+
+00:24:26.200 --> 00:24:30.239
+third is the so-called multi-page export. The idea is the
+
+00:24:30.240 --> 00:24:34.319
+same as many packages for blog posts, so that you have a
+
+00:24:34.320 --> 00:24:39.479
+single Org file and then you can export multiple HTML pages,
+
+00:24:39.480 --> 00:24:42.599
+for example, or PDF pages, anything like that. This work in
+
+00:24:42.600 --> 00:24:46.687
+progress by Orm, thanks to him,
+
+00:24:46.688 --> 00:24:49.349
+although it was a little bit stuck because
+
+00:24:49.350 --> 00:24:52.079
+I am not exactly sure how to best integrate it
+
+00:24:52.080 --> 00:24:56.879
+into the existing APIs. If you are a developer of one of the
+
+00:24:56.880 --> 00:25:01.079
+blogging packages, I would appreciate if you can chime in
+
+00:25:01.080 --> 00:25:06.479
+and probably share some ideas here. Next are just some
+
+00:25:06.480 --> 00:25:09.839
+wishes I wish we could have, but
+
+00:25:09.840 --> 00:25:11.949
+it's not very detailed. One is
+
+00:25:11.950 --> 00:25:14.159
+the multi-language support, so that we can have Org
+
+00:25:14.160 --> 00:25:16.879
+documents in multiple languages, or maybe even
+
+00:25:16.880 --> 00:25:21.159
+translations. The collaborative editing that many
+
+00:25:21.160 --> 00:25:25.359
+people would wish to have, I think. Things like tracking
+
+00:25:25.360 --> 00:25:28.999
+changes, adding comments, importing from
+
+00:25:29.000 --> 00:25:30.874
+some other Org formats with
+
+00:25:30.875 --> 00:25:32.035
+the comments and changes
+
+00:25:32.036 --> 00:25:34.018
+so that we can actually participate
+
+00:25:34.019 --> 00:25:36.962
+with all those Microsoft Word users
+
+00:25:36.963 --> 00:25:39.743
+and stuff like that.
+
+00:25:39.744 --> 00:25:43.719
+But that's really too much for me alone to handle.
+
+00:25:43.720 --> 00:25:47.839
+If you want to see one of these features, please consider
+
+00:25:47.840 --> 00:25:50.039
+contributing. Just write the mailing list about your
+
+00:25:50.040 --> 00:25:54.072
+interest and we can start from there.
+
+NOTE Org community
+
+00:25:54.073 --> 00:25:57.455
+Now, the important part is, you see,
+
+00:25:57.456 --> 00:25:58.635
+I keep asking people like,
+
+00:25:58.636 --> 00:25:59.799
+please contribute, please contribute,
+
+00:25:59.800 --> 00:26:01.357
+but who should contribute?
+
+NOTE Org community forums - Org mailing list
+
+00:26:01.358 --> 00:26:03.799
+So I want to improve communication between the
+
+00:26:03.800 --> 00:26:12.479
+community and the mailing list. Now, people often
+
+00:26:12.480 --> 00:26:16.799
+discuss new features or ideas on all kinds of places like
+
+00:26:16.800 --> 00:26:20.239
+Reddit, Mastodon, like all kinds of Matrix/IRC chats,
+
+00:26:20.240 --> 00:26:25.439
+even on meetups, some non-English language. That's very
+
+00:26:25.440 --> 00:26:29.479
+nice that we have this community, but not all the ideas are
+
+00:26:29.480 --> 00:26:34.499
+visible to the developers. I do wish that the most
+
+00:26:34.500 --> 00:26:38.279
+important things that people want to see should end up on the
+
+00:26:38.280 --> 00:26:42.331
+mailing list, one way or another.
+
+00:26:42.332 --> 00:26:43.519
+I'll later talk about some
+
+00:26:43.520 --> 00:26:48.839
+ideas how I think it can be done. Another part is
+
+00:26:48.840 --> 00:26:52.554
+we have org-wiki and I hope that
+
+00:26:52.555 --> 00:26:55.239
+we can make it more centralized
+
+00:26:55.240 --> 00:26:58.476
+space for interesting Org mode articles,
+
+00:26:58.477 --> 00:27:00.617
+for tutorials, for blog posts,
+
+00:27:00.618 --> 00:27:03.679
+at least linked to blog posts. If you have
+
+00:27:03.680 --> 00:27:08.119
+some idea about good blog posts, it would be nice if you
+
+00:27:08.120 --> 00:27:13.025
+submit a patch to work or at least email about this link
+
+00:27:13.026 --> 00:27:17.159
+to the mailing list.
+
+NOTE Org mailing list - world
+
+00:27:17.160 --> 00:27:21.054
+Of course, not everyone likes to use mailing lists
+
+00:27:21.055 --> 00:27:23.809
+or don't have a good setup to do it,
+
+00:27:23.810 --> 00:27:25.559
+or even don't want to read
+
+00:27:25.560 --> 00:27:27.599
+everything on Org mailing list, because there are things
+
+00:27:27.600 --> 00:27:31.359
+like bug reports, people don't really want to see that. So
+
+00:27:31.360 --> 00:27:35.439
+Bastien actually developed a tool that can help with this.
+
+00:27:35.440 --> 00:27:39.239
+If you want to monitor Org mailing list, but want to see
+
+00:27:39.240 --> 00:27:42.799
+only the most important discussions, and maybe
+
+00:27:42.800 --> 00:27:45.479
+participate if you decide to, you don't have to register. We
+
+00:27:45.480 --> 00:27:51.919
+have Woof, which is basically a web page that monitors our
+
+00:27:51.920 --> 00:27:55.639
+main list, but not every email. That's the most important
+
+00:27:55.640 --> 00:27:58.719
+announcements, some blog-like posts, or feature
+
+00:27:58.720 --> 00:28:02.799
+requests, or some discussions. Then on this webpage,
+
+00:28:02.800 --> 00:28:06.119
+you can see it as HTML, or you can subscribe as RSS, or even
+
+00:28:06.120 --> 00:28:11.119
+download in Org or MD format.
+
+00:28:11.120 --> 00:28:15.359
+Thanks to Sacha Chua, also weekly news about Emacs in
+
+00:28:15.360 --> 00:28:23.199
+general, but Org Mode as well. It also includes the
+
+00:28:23.200 --> 00:28:26.639
+new features in Org Mode on the development branch and the
+
+00:28:27.100 --> 00:28:30.199
+interesting new blog posts and discussions on various
+
+00:28:30.200 --> 00:28:35.879
+Reddit forums or mailing lists everywhere. I did this
+
+00:28:35.880 --> 00:28:39.519
+little bit of experimental integration so that many lists
+
+00:28:39.520 --> 00:28:45.159
+can also be read, kind of announced on the chats.
+
+00:28:45.160 --> 00:28:48.319
+For example, in #org-mode Matrix room, we have a bot that
+
+00:28:48.320 --> 00:28:53.239
+connects to Woof RSS so that all the news and discussions are
+
+00:28:53.240 --> 00:28:55.923
+notified in the chat so that people
+
+00:28:55.924 --> 00:28:58.764
+can see if they are interested
+
+00:28:58.765 --> 00:29:02.519
+and maybe, hopefully, participate. I wish
+
+00:29:02.520 --> 00:29:05.599
+we could also have similar kind of both for Reddit, Mastodon
+
+00:29:05.600 --> 00:29:10.879
+and maybe IRC. That way we have mailing list connected to
+
+00:29:10.880 --> 00:29:17.719
+more active and more modern forums and chats.
+
+00:29:17.720 --> 00:29:19.959
+More people exposed to what is happening.
+
+00:29:19.960 --> 00:29:26.719
+Another part is that we actually have a web interface to Org
+
+00:29:26.720 --> 00:29:29.048
+mailing list and you can even reply from there,
+
+00:29:29.049 --> 00:29:31.400
+but it's not always obvious, unfortunately.
+
+00:29:31.401 --> 00:29:37.745
+We have this public inbox software
+
+00:29:37.746 --> 00:29:39.999
+to transform the mailing list into
+
+00:29:40.000 --> 00:29:45.719
+HTML pages. That's a decent interface, but it could be
+
+00:29:45.720 --> 00:29:49.199
+improved to look more forum-like, so that people can easily
+
+00:29:49.200 --> 00:29:53.079
+find the reply button or basically participate without
+
+00:29:53.080 --> 00:29:56.119
+too much effort, even if they are not subscribed or they are just
+
+00:29:56.120 --> 00:29:59.079
+casually reading. That would be nice if someone
+
+00:29:59.080 --> 00:30:05.579
+knowledgeable of CSS could help with this.
+
+NOTE Contribute ideas!
+
+00:30:05.580 --> 00:30:12.199
+Again, I cannot emphasize more that most of the Org ideas of
+
+00:30:12.200 --> 00:30:16.974
+the new features are coming from people,
+
+00:30:16.975 --> 00:30:23.221
+but often they are known either by someone
+
+00:30:23.222 --> 00:30:24.479
+submitting a patch to the mailing list or
+
+00:30:24.480 --> 00:30:28.239
+submitting an idea to the mailing list. Rarely, it happens when
+
+00:30:28.240 --> 00:30:31.999
+someone is reading posts from Reddit that don't share to the
+
+00:30:32.000 --> 00:30:35.639
+mailing list. If you think that there is some important
+
+00:30:35.640 --> 00:30:38.599
+discussion happening on the forum,
+
+00:30:38.600 --> 00:30:42.415
+it would be nice that you can go ahead and share it
+
+00:30:42.416 --> 00:30:46.519
+with Org mailing list. We don't care about
+
+00:30:46.520 --> 00:30:49.500
+on-topic, off-topic, because unlike
+
+00:30:49.501 --> 00:30:51.385
+emacs-devel, we don't focus on development.
+
+00:30:51.386 --> 00:30:54.929
+We can discuss some related to Org mode topics
+
+00:30:54.930 --> 00:31:01.519
+in open-end list, just like on an ordinary forum.
+
+NOTE How much can a single person do?
+
+00:31:01.520 --> 00:31:08.439
+I would like to end my talk with the call for contributions.
+
+00:31:08.440 --> 00:31:13.639
+Let me explain a little bit, because you saw now I shared many
+
+00:31:13.640 --> 00:31:19.319
+many ideas and I do spend a lot of time on Org Mode. In fact,
+
+00:31:19.320 --> 00:31:21.322
+for the last year, I was spending like
+
+00:31:21.323 --> 00:31:23.437
+30 hours per week or something.
+
+00:31:23.438 --> 00:31:27.319
+Until recently, I can spend a bit less, but still
+
+00:31:27.320 --> 00:31:29.900
+even with that much of commitment,
+
+00:31:29.901 --> 00:31:31.479
+there is no way I can handle
+
+00:31:31.480 --> 00:31:34.999
+everything by myself.
+
+NOTE Contribute code!
+
+00:31:35.000 --> 00:31:38.551
+We really, really need more people to contribute
+
+00:31:38.552 --> 00:31:43.633
+so that Org mode keeps moving forward.
+
+00:31:43.634 --> 00:31:45.079
+Again, I just shared ideas,
+
+00:31:45.080 --> 00:31:46.394
+but I have so many more.
+
+00:31:46.395 --> 00:31:48.734
+I have more than a thousand ideas noted down.
+
+00:31:48.735 --> 00:31:52.636
+Yeah, there's no way I can do it myself.
+
+00:31:52.637 --> 00:31:57.350
+I do need help for new contributions, for new features.
+
+00:31:57.351 --> 00:31:57.617
+If someone can help fixing bugs, it would be really great.
+
+00:31:57.618 --> 00:32:04.291
+If someone knows specialized things,
+
+00:32:04.292 --> 00:32:06.873
+like for example Open Document Format,
+
+00:32:06.874 --> 00:32:08.759
+which I don't know very well, it would be
+
+00:32:08.760 --> 00:32:12.999
+really nice, because things like ODT export requires
+
+00:32:13.000 --> 00:32:14.089
+knowing that, and if someone already has the knowledge,
+
+00:32:14.090 --> 00:32:18.081
+it would be much easier
+
+00:32:18.082 --> 00:32:23.480
+if that person can help with such things.
+
+00:32:23.481 --> 00:32:26.868
+Although in the coming years,
+
+00:32:26.869 --> 00:32:28.159
+it's very important to have
+
+00:32:28.160 --> 00:32:28.830
+regular contributors
+
+00:32:28.831 --> 00:32:31.921
+because my life is my life
+
+00:32:31.922 --> 00:32:34.363
+and things may happen,
+
+00:32:34.364 --> 00:32:37.244
+so it would be nice to have some kind of backup
+
+00:32:37.245 --> 00:32:40.245
+so that bugs keep being fixed
+
+00:32:40.245 --> 00:32:40.245
+and things like patches being accepted
+
+00:32:40.246 --> 00:32:44.567
+and stuff like that,
+
+00:32:44.568 --> 00:32:46.168
+so that some person can at least
+
+00:32:46.169 --> 00:32:49.879
+temporarily take on my job.
+
+00:32:49.880 --> 00:32:51.510
+I would like to emphasize
+
+00:32:51.511 --> 00:32:53.319
+that the code contributors are the most
+
+00:32:53.320 --> 00:32:56.212
+important contributions for Org Mode.
+
+00:32:56.213 --> 00:33:02.079
+All other types are less important, really.
+
+NOTE Why contribute?
+
+00:33:02.080 --> 00:33:03.959
+I want to spend a couple of slides
+
+00:33:03.960 --> 00:33:07.719
+trying to motivate you to contribute.
+
+00:33:07.720 --> 00:33:11.128
+If you ever considered contributing
+
+00:33:11.129 --> 00:33:13.359
+or if you ever wished to have some
+
+00:33:13.360 --> 00:33:16.879
+feature in Org Mode, really don't wait, because
+
+00:33:16.880 --> 00:33:18.239
+most new features are contributed by people.
+
+00:33:18.240 --> 00:33:23.736
+They are not contributed by me.
+
+00:33:23.737 --> 00:33:25.199
+I contribute a few things, but I am alone.
+
+00:33:25.200 --> 00:33:27.038
+I cannot contribute many things.
+
+00:33:27.039 --> 00:33:30.300
+Most of the things are contributed by users
+
+00:33:30.301 --> 00:33:33.441
+who go ahead and submit patches.
+
+00:33:33.442 --> 00:33:37.323
+And even in very commonly requested features,
+
+00:33:37.324 --> 00:33:40.344
+it's usually someone who steps up.
+
+00:33:40.345 --> 00:33:42.199
+If you want something, don't wait.
+
+00:33:42.200 --> 00:33:44.206
+Just go ahead and write to mailing list.
+
+00:33:44.207 --> 00:33:46.207
+You don't have to submit a patch immediately.
+
+00:33:46.208 --> 00:33:48.729
+You can just say, I am interested.
+
+00:33:48.730 --> 00:33:53.819
+We will start from there.
+
+00:33:53.820 --> 00:33:56.043
+We'll start because that's my job
+
+00:33:56.044 --> 00:33:57.644
+and I will guide you through.
+
+00:33:57.645 --> 00:33:58.990
+If you have problems with Org in general,
+
+00:33:58.991 --> 00:34:02.308
+I'll explain, because that's what I know.
+
+00:34:02.309 --> 00:34:05.030
+I will explain how to implement things better,
+
+00:34:05.031 --> 00:34:06.999
+but I need someone to actually do
+
+00:34:07.000 --> 00:34:10.070
+the job and write the code.
+
+00:34:10.071 --> 00:34:19.057
+Even if you don't have 10 years experience with Elisp,
+
+00:34:19.058 --> 00:34:21.178
+it doesn't matter. You can learn on the way.
+
+00:34:21.179 --> 00:34:22.519
+There are many examples of this in the
+
+00:34:22.520 --> 00:34:25.642
+mailing list when we start slowly,
+
+00:34:25.643 --> 00:34:27.759
+fix things one by one, and
+
+00:34:27.760 --> 00:34:29.225
+eventually arrive to a good quality
+
+00:34:29.226 --> 00:34:31.707
+when the person is not experienced.
+
+00:34:31.708 --> 00:34:34.759
+You just need to be ready to learn things,
+
+00:34:34.760 --> 00:34:37.992
+Spend your free time (that's as usual, right?),
+
+00:34:37.993 --> 00:34:41.214
+and have the interest in specific thing
+
+00:34:41.215 --> 00:34:43.499
+you are contributing.
+
+00:34:43.500 --> 00:34:44.475
+Don't be afraid to be wrong.
+
+00:34:44.476 --> 00:34:47.578
+I will be there to assist.
+
+00:34:47.579 --> 00:34:48.937
+If you don't like emails,
+
+00:34:48.938 --> 00:34:51.239
+if you don't like patches, it doesn't matter.
+
+00:34:51.240 --> 00:34:55.361
+Again, you can share GitHub link. It's okay.
+
+00:34:55.362 --> 00:34:57.684
+You can go and modify some workflow directly.
+
+00:34:57.685 --> 00:34:59.565
+You submit the modified version. It's also okay.
+
+00:34:59.566 --> 00:35:05.119
+It's easy for me to create patches if I need to.
+
+00:35:05.120 --> 00:35:07.279
+If you don't like emails at all, you don't want to
+
+00:35:07.280 --> 00:35:11.879
+participate in the mailing list, it's not ideal, but I can
+
+00:35:11.880 --> 00:35:16.005
+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 yantar92.
+
+00:35:19.800 --> 00:35:22.347
+We also have monthly meetup,
+
+00:35:22.348 --> 00:35:23.987
+so you can go and ask by voice,
+
+00:35:23.988 --> 00:35:27.088
+we can just talk in person, discuss your ideas,
+
+00:35:27.089 --> 00:35:29.299
+it's also fine.
+
+00:35:29.300 --> 00:35:35.159
+The key point is that we always welcome new contributors.
+
+00:35:35.160 --> 00:35:40.239
+The more contributions to Org Mode is better.
+
+NOTE Benefits for code contributors
+
+00:35:40.240 --> 00:35:41.519
+To increase the motivation,
+
+00:35:41.520 --> 00:35:44.919
+I'll just try to show some benefits
+
+00:35:44.920 --> 00:35:49.479
+of contributing to Org Mode and free software in general.
+
+00:35:49.480 --> 00:35:52.079
+It can be actually useful for your CV if you're a programmer.
+
+00:35:52.080 --> 00:35:54.999
+It doesn't matter if it's Lisp, because you can have a pet
+
+00:35:55.000 --> 00:35:59.039
+project that demonstrates your skills, that you can finish
+
+00:35:59.040 --> 00:36:04.359
+something to a usable state.
+
+00:36:04.360 --> 00:36:06.800
+A pet project usually demonstrates
+
+00:36:06.801 --> 00:36:08.839
+that you can work alone, but it doesn't
+
+00:36:08.840 --> 00:36:12.119
+demonstrate anything about you working in a team, in the
+
+00:36:12.120 --> 00:36:15.519
+production team. When you contribute to
+
+00:36:15.520 --> 00:36:17.629
+Libre software, look,
+
+00:36:17.630 --> 00:36:20.759
+you will work with a number of people
+
+00:36:20.760 --> 00:36:24.352
+who contribute and comment on your work.
+
+00:36:24.353 --> 00:36:27.073
+You'll have to learn a new code base.
+
+00:36:27.074 --> 00:36:30.075
+You will have to follow certain standards.
+
+00:36:30.076 --> 00:36:33.239
+All these things, by having a public record
+
+00:36:33.240 --> 00:36:37.559
+of contribution, will be a valid point that proves your
+
+00:36:37.560 --> 00:36:42.087
+knowledge in your CV. I put a small quote
+
+00:36:42.088 --> 00:36:44.869
+(which I'm not going to read in the interest of time)
+
+00:36:44.870 --> 00:36:46.279
+from Rudolf Adamkovič,
+
+00:36:46.280 --> 00:36:50.159
+who is describing these three points in probably a
+
+00:36:50.160 --> 00:36:56.519
+more expressive way.
+
+00:36:56.520 --> 00:36:59.939
+Another benefit is you can actually get money from this.
+
+00:36:59.940 --> 00:37:03.999
+Thanks to a number of Org Mode users who kindly contribute to
+
+00:37:04.000 --> 00:37:07.199
+Org development, we have some amount of money
+
+00:37:07.200 --> 00:37:11.009
+coming in, and we don't hold on this money.
+
+00:37:11.010 --> 00:37:13.550
+If we get another person who contributes
+
+00:37:13.551 --> 00:37:17.511
+to Org regularly, we are happy to share this money,
+
+00:37:17.512 --> 00:37:22.539
+because we do know that
+
+00:37:22.540 --> 00:37:24.599
+getting some extra money, even a little bit,
+
+00:37:24.600 --> 00:37:27.216
+does improve motivation.
+
+00:37:27.217 --> 00:37:29.158
+We are really ready to share this.
+
+00:37:29.159 --> 00:37:33.523
+If you are serious about contributing,
+
+00:37:33.524 --> 00:37:34.919
+you can just request this
+
+00:37:34.920 --> 00:37:41.419
+and we can share a part of the donations to you.
+
+NOTE Contributing as non-programmer
+
+00:37:41.420 --> 00:37:45.199
+For non-programmers, we also have a lot of work to do.
+
+00:37:45.200 --> 00:37:47.092
+There's a lot of stuff we can do on the Org wiki,
+
+00:37:47.093 --> 00:37:48.754
+especially with CSS styles,
+
+00:37:48.755 --> 00:37:53.178
+with updating articles,
+
+00:37:53.179 --> 00:37:54.880
+with adding links to tutorials,
+
+00:37:54.881 --> 00:37:56.222
+or even writing tutorials about Org Mode.
+
+00:37:56.223 --> 00:38:01.081
+It would be nice to have more screencasts.
+
+00:38:01.082 --> 00:38:02.702
+It would be nice to improve Org manual,
+
+00:38:02.703 --> 00:38:05.283
+because that's the most difficult part for me
+
+00:38:05.284 --> 00:38:07.325
+because I'm too familiar with the code.
+
+00:38:07.326 --> 00:38:11.226
+Writing the manual when you know things internally
+
+00:38:11.227 --> 00:38:13.727
+is very hard. I just know too many things.
+
+00:38:13.728 --> 00:38:16.809
+I can assume that people know too much,
+
+00:38:16.810 --> 00:38:20.911
+that new users have no idea about certain things.
+
+00:38:20.912 --> 00:38:30.439
+I can just omit those without being aware.
+
+NOTE Got no free time, but still want to help?
+
+00:38:30.440 --> 00:38:33.319
+The final slide I would go to come back is about
+
+00:38:33.320 --> 00:38:37.919
+donations. Again, most important is contributing code,
+
+00:38:37.920 --> 00:38:42.879
+but I do hope that donations can
+
+00:38:42.880 --> 00:38:45.445
+increase the number of contributors.
+
+00:38:45.446 --> 00:38:47.999
+I don't know. I know for sure because some
+
+00:38:48.000 --> 00:38:52.439
+people like Timothy, who is participating in this, he did
+
+00:38:52.440 --> 00:38:55.319
+find the donations helpful, especially for more boring
+
+00:38:55.320 --> 00:39:00.079
+tasks like bug fixing and to move things
+
+00:39:00.080 --> 00:39:07.835
+over the long time. If you cannot contribute by other means,
+
+00:39:07.836 --> 00:39:12.996
+it would be appreciated to contribute money.
+
+NOTE Thank you
+
+00:39:12.997 --> 00:39:14.817
+We came to the end of my talk.
+
+00:39:14.818 --> 00:39:16.277
+Thank you for your attention.
+
+00:39:16.278 --> 00:39:19.698
+If you have any questions, please feel free to ask.
+
+00:39:19.699 --> 00:39:22.898
+I think we can even discuss further
+
+00:39:22.899 --> 00:39:28.180
+during the next Org Meetup in the coming week.
+
+00:39:28.181 --> 00:39:30.320
+There, if you have more detailed questions,
+
+00:39:30.321 --> 00:39:31.640
+we can continue discussing
+
+00:39:31.641 --> 00:39:34.440
+apart from what happens after this presentation.
diff --git a/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt
new file mode 100644
index 00000000..cd09d3cb
--- /dev/null
+++ b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt
@@ -0,0 +1,2017 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.559
+...starting the recording here in the chat, and I see some
+
+00:00:03.560 --> 00:00:06.039
+questions already coming in. So thank you so much for your
+
+00:00:06.040 --> 00:00:09.359
+talk, Zac, and I'll step out of your way and let you field
+
+00:00:09.360 --> 00:00:10.279
+some of these questions.
+
+00:00:10.280 --> 00:00:21.999
+Sounds good. All right, so let's see. I'm going off of the
+
+00:00:22.000 --> 00:00:22.969
+question list.
+
+NOTE Q: Do you think a reduced version of this functionality could be integrated into isearch?
+
+00:00:22.970 --> 00:00:25.839
+So the first one is about having reduced
+
+00:00:25.840 --> 00:00:31.999
+version of the functionality integrated into iSearch. So
+
+00:00:32.000 --> 00:00:37.919
+yeah, with the way things are set up, it is essentially a
+
+00:00:37.920 --> 00:00:42.679
+framework. So
+
+00:00:42.680 --> 00:00:46.279
+you can create a candidate. So just a review from the talk. So
+
+00:00:46.280 --> 00:00:49.919
+you have these candidate generators which generate search
+
+00:00:49.920 --> 00:00:54.559
+candidates. So you can have a file system candidate which
+
+00:00:54.560 --> 00:00:58.519
+generates these file documents, which have text content in
+
+00:00:58.520 --> 00:01:01.799
+them. In theory, you could have like a website candidate
+
+00:01:01.800 --> 00:01:06.399
+generator, and it could be like a web crawler. I mean, so
+
+00:01:06.400 --> 00:01:10.519
+there's a lot of different options. So one option, it's on my
+
+00:01:10.520 --> 00:01:15.039
+mind, and I hope to get to this soon, is create a defun, like a
+
+00:01:15.040 --> 00:01:18.599
+defun candidate generator. So basically it takes a file,
+
+00:01:18.600 --> 00:01:22.279
+splits it up into like defunds, kind of like just like what
+
+00:01:22.280 --> 00:01:26.279
+iSearch would do. and then use each of those, the body of
+
+00:01:26.280 --> 00:01:30.959
+those, as a content for the search session. So, I mean,
+
+00:01:30.960 --> 00:01:35.359
+essentially you could just, you could start up a session,
+
+00:01:35.360 --> 00:01:39.479
+and there's like programmatic ways to start these up too. So
+
+00:01:39.480 --> 00:01:42.599
+you could, if such a candidate generator was created, you
+
+00:01:42.600 --> 00:01:49.559
+could easily, and just like, you know, one command. Get the
+
+00:01:49.560 --> 00:01:54.599
+defunds, create a search session with it, and then just go
+
+00:01:54.600 --> 00:02:01.439
+straight to your query. So, definitely, something
+
+00:02:01.440 --> 00:02:06.919
+just like this is in the works. And I guess another thing is
+
+00:02:06.920 --> 00:02:08.239
+interface.
+
+00:02:08.240 --> 00:02:17.079
+The whole dedicated buffer is helpful for searching, but
+
+00:02:17.080 --> 00:02:21.919
+with this isearch case, there's currently not a way to have a
+
+00:02:21.920 --> 00:02:27.839
+reduced UI, where it's just like, OK, I have these function
+
+00:02:27.840 --> 00:02:32.239
+defuns for the current file. I just want them to pop up at the
+
+00:02:32.240 --> 00:02:35.799
+bottom so I can quickly go through it. So currently, I don't
+
+00:02:35.800 --> 00:02:41.199
+have that. But such a UI is definitely, yeah, thinking about
+
+00:02:41.200 --> 00:02:45.359
+how that could be done.
+
+NOTE Q: Any idea how this would work with personal information like Zettlekastens?
+
+00:02:45.360 --> 00:02:50.359
+Alright, so yeah. So next question. Any idea how this
+
+00:02:50.360 --> 00:02:52.599
+will work with personal information like Zettelkasten?
+
+00:02:52.600 --> 00:02:58.319
+So this is, this is like, I mean, it's essentially usable as
+
+00:02:58.320 --> 00:03:04.559
+is with Zettelkasten method. So, I mean, that I mean
+
+00:03:04.560 --> 00:03:08.279
+basically what like for example org-roam, and I think other
+
+00:03:08.280 --> 00:03:12.159
+ones like Denote, they put all these files in the
+
+00:03:12.160 --> 00:03:15.919
+directory, and so with the already existing file system
+
+00:03:15.920 --> 00:03:19.679
+candidate generator all you'd have to do is set that to be the
+
+00:03:19.680 --> 00:03:23.199
+directory of your Zettelkasten system and then it would
+
+00:03:23.200 --> 00:03:26.799
+just pick up all the files in there and
+
+00:03:26.800 --> 00:03:28.799
+then add those as search candidates. So you could easily
+
+00:03:28.800 --> 00:03:33.279
+just search whatever system you have.
+
+00:03:33.280 --> 00:03:36.039
+Based off of the ways it's set up, if you had maybe your
+
+00:03:36.040 --> 00:03:40.999
+dailies you didn't want to search, it's just as easy to add a
+
+00:03:41.000 --> 00:03:44.519
+criteria saying, I don't want dailies to be searched. Like
+
+00:03:44.520 --> 00:03:47.599
+give, like just eliminate the date, like the things from the
+
+00:03:47.600 --> 00:03:51.679
+daily from the sub directory. And then there you go. you have
+
+00:03:51.680 --> 00:03:57.799
+your Zettelkasten search engine, and you could just copy
+
+00:03:57.800 --> 00:03:59.999
+the, you know, there's, I mean, I need, I'm working on
+
+00:04:00.000 --> 00:04:03.519
+documentation for this to kind of set this up easily, but,
+
+00:04:03.520 --> 00:04:06.679
+you know, you could just create your simple command, just
+
+00:04:06.680 --> 00:04:10.679
+like, your simple command, just like, just take in a text
+
+00:04:10.680 --> 00:04:14.359
+query, run it through the system, and then just get your
+
+00:04:14.360 --> 00:04:19.599
+search results right there. So yeah, definitely that is a
+
+00:04:19.600 --> 00:04:22.040
+use case that's on top of my mind.
+
+NOTE Q: How good does the search work for synonyms especially if you use different languages?
+
+00:04:22.041 --> 00:04:23.239
+So next one, how good does a
+
+00:04:23.240 --> 00:04:26.439
+search work for synonyms, especially if you use different
+
+00:04:26.440 --> 00:04:30.719
+languages? Okay, this is a good question because with the
+
+00:04:30.720 --> 00:04:34.719
+way that VM25 works, it's essentially just like trying to
+
+00:04:34.720 --> 00:04:41.119
+find where terms occur and just counts them up.
+
+00:04:41.120 --> 00:04:43.999
+I mean, this is something I couldn't get into. There's just
+
+00:04:44.000 --> 00:04:46.919
+too much on the topic of information retrieval to kind of go
+
+00:04:46.920 --> 00:04:52.879
+into this, but there is a whole kind of field of just like, how
+
+00:04:52.880 --> 00:04:58.279
+do you, given a search term, how do you know what you should
+
+00:04:58.280 --> 00:05:02.519
+search for? So like popular kind of industrial search
+
+00:05:02.520 --> 00:05:07.519
+engines, like they have kind of this feature where you can
+
+00:05:07.520 --> 00:05:11.039
+like define synonyms, define, term replacement. So
+
+00:05:11.040 --> 00:05:14.079
+whenever you see this term, it should be this. And it even
+
+00:05:14.080 --> 00:05:15.091
+gets even further.
+
+NOTE Plurals
+
+00:05:15.092 --> 00:05:19.439
+If someone searches for a plural string,
+
+00:05:19.440 --> 00:05:22.279
+how do you get the singular from that and search for that? So
+
+00:05:22.280 --> 00:05:27.559
+this is a huge topic that currently p-search doesn't
+
+00:05:27.560 --> 00:05:33.519
+address, but it's on the top of my mind as to how. So that's one
+
+00:05:33.520 --> 00:05:33.882
+part.
+
+NOTE Different languages
+
+00:05:33.883 --> 00:05:38.999
+The next part is for different languages, one thing
+
+00:05:39.000 --> 00:05:42.839
+that kind of seems like it's promising is vector search,
+
+00:05:42.840 --> 00:05:47.399
+which, I mean, with the way p-search is set up, you could
+
+00:05:47.400 --> 00:05:51.159
+easily just create a vector search prior, plug it into the
+
+00:05:51.160 --> 00:05:54.599
+system, and start using it. The only problem is that kind of
+
+00:05:54.600 --> 00:05:58.879
+the vector search functions, like you have to do like cosine
+
+00:05:58.880 --> 00:06:03.639
+similarity, like if you have like 10,000 documents, If
+
+00:06:03.640 --> 00:06:06.679
+you're writing Elisp to calculate the cosine similarity
+
+00:06:06.680 --> 00:06:09.879
+between the vectors, that's going to be very slow. And so now
+
+00:06:09.880 --> 00:06:14.159
+the whole can of worms of indexing comes up. And how do you do
+
+00:06:14.160 --> 00:06:17.479
+that? And is that going to be native elisp? And so that's a
+
+00:06:17.480 --> 00:06:21.839
+whole other can of worms. So yeah, vector search seems
+
+00:06:21.840 --> 00:06:25.959
+promising. And then hopefully maybe other traditional
+
+00:06:25.960 --> 00:06:33.439
+synonyms, stemming, that kind of stuff for alternate
+
+00:06:33.440 --> 00:06:40.199
+terms, that could also be incorporated.
+
+NOTE Q: When searching by author I know authors may setup a new machine and not put the exact same information. Is this doing anything to combine those into one author?
+
+00:06:40.200 --> 00:06:43.719
+Okay, next one. When searching by author, I know authors may
+
+00:06:43.720 --> 00:06:47.119
+set up a new machine and not put the exact same information.
+
+00:06:47.120 --> 00:06:49.519
+Is this doing anything to combine these two in one author?
+
+00:06:49.520 --> 00:06:54.399
+Okay, so for this one, it's not. So it's like the way the get
+
+00:06:54.400 --> 00:06:58.119
+prior is currently set up is that it just does like a get
+
+00:06:58.120 --> 00:07:01.999
+command to get all the get authors. You select one and then it
+
+00:07:02.000 --> 00:07:07.959
+just uses that. But the thing is, is if you knew the two emails
+
+00:07:07.960 --> 00:07:12.519
+that user might have used, the two usernames, you could just
+
+00:07:12.520 --> 00:07:14.279
+set up the
+
+00:07:14.280 --> 00:07:19.799
+two priors. One for the old user's email, and then just add
+
+00:07:19.800 --> 00:07:24.079
+another prior for the new user's email. And then that would
+
+00:07:24.080 --> 00:07:29.279
+be a way to just get both of those set up. So that's kind of a
+
+00:07:29.280 --> 00:07:32.959
+running theme throughout p-search is that It's made to be
+
+00:07:32.960 --> 00:07:36.239
+very flexible and very kind of like Lego block ish kind of
+
+00:07:36.240 --> 00:07:39.959
+like you can just, you know, if you need, you know, if
+
+00:07:39.960 --> 00:07:41.919
+something doesn't meet your needs, you know, it's easy to
+
+00:07:41.920 --> 00:07:45.959
+put pieces in, create new components of the search
+
+00:07:45.960 --> 00:07:51.799
+engine. Let's see, a cool powerful grep "Rak" to maybe have
+
+00:07:51.800 --> 00:07:58.839
+some good ideas. I have searches record code while
+
+00:07:58.840 --> 00:08:04.039
+searching. Okay. So. Okay, that's interesting. I'll have
+
+00:08:04.040 --> 00:08:05.239
+to look into this
+
+00:08:05.240 --> 00:08:15.279
+tool. I haven't seen that. I do kind of keep my eyes out for
+
+00:08:15.280 --> 00:08:18.199
+these kind of things. One thing I have seen that was kind of
+
+00:08:18.200 --> 00:08:24.439
+that, I mean, looked interesting was kind of like AST, like
+
+00:08:24.440 --> 00:08:29.519
+the treesitter, the treesitter grep tools. But like, you
+
+00:08:29.520 --> 00:08:35.359
+can grep for a string in the language itself. So that's
+
+00:08:35.360 --> 00:08:37.959
+something I think would be cool to implement either,
+
+00:08:37.960 --> 00:08:41.359
+because I mean, there's treesitter in Emacs, so it's
+
+00:08:41.360 --> 00:08:44.519
+possible to do a new list. If not, there are those kind of like
+
+00:08:44.520 --> 00:08:47.719
+treesitter. So that's, that's something that I think would
+
+00:08:47.720 --> 00:08:50.719
+be cool to incorporate.
+
+NOTE Q: Have you thought about integrating results from using cosine similarity with a deep-learning based vector embedding?
+
+00:08:50.720 --> 00:08:58.279
+Let's see. Have you thought about integrating results from
+
+00:08:58.280 --> 00:09:00.999
+using cosine similarity with a deep learning based vector
+
+00:09:01.000 --> 00:09:06.679
+embedding? Yeah, exactly. So yeah, this kind of goes back to
+
+00:09:06.680 --> 00:09:09.759
+the topic before it. Definitely the whole semantic search
+
+00:09:09.760 --> 00:09:12.679
+with vector embeddings, that's something that, I mean, it
+
+00:09:12.680 --> 00:09:15.479
+would be actually kind of trivial to implement that in
+
+00:09:15.480 --> 00:09:20.239
+p-search. But like I said, computing the cosine similarity
+
+00:09:20.240 --> 00:09:25.959
+in elisp, it's probably too slow.
+
+00:09:25.960 --> 00:09:34.879
+And then also there's a whole question of how do you get the embeddings?
+
+00:09:34.880 --> 00:09:36.919
+Like, how do you get the system running locally on your
+
+00:09:36.920 --> 00:09:41.239
+machine if you want to run it that or, I mean, so that's
+
+00:09:41.240 --> 00:09:48.879
+actually another kind of aspect that I need to look into.
+
+00:09:48.880 --> 00:10:01.939
+Okay, so let's see.
+
+NOTE Q: Is it possible to save/bookmark searches or search templates so they can be used again and again?
+
+00:10:01.940 --> 00:10:06.319
+Okay, next question. Let's see. I'm sorry if this has been
+
+00:10:06.320 --> 00:10:09.079
+covered. Is it possible to save/bookmark searches or search
+
+00:10:09.080 --> 00:10:14.559
+templates so they can be used again and again? Exactly. So
+
+00:10:14.560 --> 00:10:18.199
+just recently I added bookmarking capabilities. So
+
+00:10:18.200 --> 00:10:21.119
+you can essentially just bookmark whatever search session you
+
+00:10:21.120 --> 00:10:26.359
+have. And yeah, and it's just, it was just a bookmark. You can
+
+00:10:26.360 --> 00:10:29.839
+just open and just like reopen that, rerun that search from
+
+00:10:29.840 --> 00:10:36.119
+where you left off. So there's that. And then also, I tried to
+
+00:10:36.120 --> 00:10:40.559
+set this up so that there is a one-to-one mapping of a Lisp
+
+00:10:40.560 --> 00:10:44.759
+object to the search session. So from every search session
+
+00:10:44.760 --> 00:10:49.519
+you make, you should be able to get a, there's a command to do
+
+00:10:49.520 --> 00:10:55.199
+this, to get a data representation of the search. So it would
+
+00:10:55.200 --> 00:11:00.079
+just be like some plist. All you have to do is just take that
+
+00:11:00.080 --> 00:11:04.479
+plist, call this function p-search-setup-buffer with that
+
+00:11:04.480 --> 00:11:09.119
+data. And then that function should set up the session as you
+
+00:11:09.120 --> 00:11:12.599
+left off. So then like, you know, you could make your
+
+00:11:12.600 --> 00:11:15.359
+commands easy. You can make custom search commands super
+
+00:11:15.360 --> 00:11:18.919
+easy. You just get the data representation of that search,
+
+00:11:18.920 --> 00:11:22.519
+find what pieces you want the user to be able to, you know, the
+
+00:11:22.520 --> 00:11:26.333
+search term, make that a parameter in the
+
+00:11:26.334 --> 00:11:29.079
+command, in the interactive code. So you'd have like
+
+00:11:29.080 --> 00:11:31.906
+print on top and then there you go. You have,
+
+00:11:31.907 --> 00:11:34.327
+you have a command to do the search
+
+00:11:34.328 --> 00:11:35.759
+just like just right there. So, so
+
+00:11:35.760 --> 00:11:38.519
+there's a lot of those things and there's a lot more that
+
+00:11:38.520 --> 00:11:40.999
+could be done. Like maybe having, you know, there's kind of
+
+00:11:41.000 --> 00:11:45.479
+in the works and like thinking about having groups of groups
+
+00:11:45.480 --> 00:11:48.959
+of these things, like maybe you can set up like, Oh, I always
+
+00:11:48.960 --> 00:11:51.919
+add these three criteria together. So I, you know, maybe I
+
+00:11:51.920 --> 00:11:54.559
+can make a preset out of these and make them easy, easily
+
+00:11:54.560 --> 00:11:58.079
+addable. So yeah. A lot of things like that are, you know, I'm
+
+00:11:58.080 --> 00:12:02.799
+thinking about a lot of things about that, so.
+
+NOTE Q: You mentioned about candidate generators. Could you explain about to what the score is assigned to?
+
+00:12:02.800 --> 00:12:06.079
+Okay, so next question. You mentioned about candidate
+
+00:12:06.080 --> 00:12:08.479
+generators. Could you explain about what the score is
+
+00:12:08.480 --> 00:12:12.199
+assigned to? Is this to a line or whatever the candidate
+
+00:12:12.200 --> 00:12:17.079
+generates? How does it work with our junior demo? Okay,
+
+00:12:17.080 --> 00:12:21.799
+yeah, so this is a, this is, so actually I had to implement, I
+
+00:12:21.800 --> 00:12:26.719
+had to rewrite p-search just to get this part right. So the
+
+00:12:26.720 --> 00:12:31.159
+candidate generator generates documents. Documents have
+
+00:12:31.160 --> 00:12:36.919
+properties. So the most notable property is the content
+
+00:12:36.920 --> 00:12:40.599
+property. So essentially what happens is that when you
+
+00:12:40.600 --> 00:12:42.879
+create a file system candidate generator and give it a
+
+00:12:42.880 --> 00:12:45.919
+directory, the code goes into the directory, kind of
+
+00:12:45.920 --> 00:12:49.079
+recursively goes through all the directories, and
+
+00:12:49.080 --> 00:12:51.559
+generates a candidate, which is just like a simple list
+
+00:12:51.560 --> 00:12:55.679
+form. It's saying, this is a file, the file path is this. So
+
+00:12:55.680 --> 00:13:00.799
+that's the document ID. So this is saying, this is a file,
+
+00:13:00.800 --> 00:13:05.559
+it's a file, and its file path is this. And so from that, you
+
+00:13:05.560 --> 00:13:09.279
+get all of the different properties, the sub properties. If
+
+00:13:09.280 --> 00:13:11.719
+you're given that, you know how to get the content. If you're
+
+00:13:11.720 --> 00:13:15.439
+given that, you know how to... So all these properties come
+
+00:13:15.440 --> 00:13:18.839
+out. And then also the candidate generator is the thing that
+
+00:13:18.840 --> 00:13:25.439
+knows how best to search for the terms. So for example, there
+
+00:13:25.440 --> 00:13:29.159
+is a buffer candidate generator. What that does is it just
+
+00:13:29.160 --> 00:13:34.759
+puts all your buffers as search candidates. So obviously
+
+00:13:34.760 --> 00:13:37.879
+you can't, you can't run ripgrep on buffers like you can't you
+
+00:13:37.880 --> 00:13:41.759
+can't do that, you can't run ripgrep on just like yeah just
+
+00:13:41.760 --> 00:13:44.319
+just like buffers that don't have files attached or, for
+
+00:13:44.320 --> 00:13:47.559
+example, maybe there's like an internet search candidate
+
+00:13:47.560 --> 00:13:51.279
+generator, like a web crawler thing. You just imagine it
+
+00:13:51.280 --> 00:13:55.759
+goes to a website, kind of crawls all the links and all that,
+
+00:13:55.760 --> 00:13:58.119
+and then just gets your web pages for the candidates.
+
+00:13:58.120 --> 00:14:01.159
+Obviously, you can't use ripgrep for that either. So, every
+
+00:14:01.160 --> 00:14:04.679
+candidate generator knows how best to search for the terms
+
+00:14:04.680 --> 00:14:08.919
+of what candidate it's generating. So, the file system
+
+00:14:08.920 --> 00:14:12.359
+candidate generator will say, okay, I have a base
+
+00:14:12.360 --> 00:14:17.239
+directory. So, if you ask me, the file system candidate
+
+00:14:17.240 --> 00:14:21.239
+generator, how to get the terms, it knows it's set up to use
+
+00:14:21.240 --> 00:14:25.199
+ripgrep. And so, it runs ripgrep, and so then it goes
+
+00:14:25.200 --> 00:14:29.439
+through, it runs the command, gets the counts, and then
+
+00:14:29.440 --> 00:14:32.359
+store those counts. So, the lines have nothing. At this
+
+00:14:32.360 --> 00:14:35.999
+point, the lines have nothing. There's no notion of lines at
+
+00:14:36.000 --> 00:14:40.559
+all. It's just document, document ID with the amount of
+
+00:14:40.560 --> 00:14:43.839
+times it matched. And that's all you need to run this BM25
+
+00:14:43.840 --> 00:14:47.519
+algorithm. But then when you get the top results, you
+
+00:14:47.520 --> 00:14:51.359
+obviously want to see the lines that matched. And so there's
+
+00:14:51.360 --> 00:14:56.399
+another thing, another method to kind of get the exact
+
+00:14:56.400 --> 00:15:00.559
+thing, to kind of match out the particular lines. And so
+
+00:15:00.560 --> 00:15:03.159
+that's a separate mechanism. And that can be done in Elist,
+
+00:15:03.160 --> 00:15:05.719
+because if you're not displaying, that's kind of a design
+
+00:15:05.720 --> 00:15:09.319
+decision of P-Search, is that it only displays like maybe 10
+
+00:15:09.320 --> 00:15:12.519
+or 20. It doesn't display all the results. So you can have
+
+00:15:12.520 --> 00:15:16.679
+Elist just go crazy with just like highlighting things,
+
+00:15:16.680 --> 00:15:22.719
+picking the best kind of pieces to show. So yeah, that's how
+
+00:15:22.720 --> 00:15:27.359
+that's set up.
+
+00:15:27.360 --> 00:15:38.279
+So, here's perhaps a good moment for me to just jump in and
+
+00:15:38.280 --> 00:15:42.079
+comment that in a minute or so we will break away with the live
+
+00:15:42.080 --> 00:15:47.439
+stream to give people an hour of less content to make sure
+
+00:15:47.440 --> 00:15:50.639
+everybody goes and takes their lunch and break a little bit.
+
+00:15:50.640 --> 00:15:55.039
+But if you would like to keep going in here, Love to love to
+
+00:15:55.040 --> 00:15:59.839
+take as many questions. And, of course, we will include
+
+00:15:59.840 --> 00:16:06.159
+that all when we publish the Q and A. Sounds good. Yeah, I'll go
+
+00:16:06.160 --> 00:16:12.199
+and stick around on the stream as we cut away, as we've got a
+
+00:16:12.200 --> 00:16:15.999
+little video surprise we've all prepared to play, just some
+
+00:16:16.000 --> 00:16:19.359
+comments from an Emacs user dated in 2020 or something like
+
+00:16:19.360 --> 00:16:29.679
+this. I forget the detail. Thank you again so much, Zac, for
+
+00:16:29.680 --> 00:16:30.959
+your fascinating talk.
+
+00:16:30.960 --> 00:16:32.301
+Yeah, so, okay.
+
+NOTE Q: easy filtering with orderless - did this or something like this help or infulce the design of psearch?
+
+00:16:32.302 --> 00:16:33.359
+This makes me really think about the
+
+00:16:33.360 --> 00:16:35.999
+emergent workflows with Denote and easy filtering with
+
+00:16:36.000 --> 00:16:36.639
+orderless.
+
+00:16:36.640 --> 00:16:42.039
+Did this or something like this help influence the design of
+
+00:16:42.040 --> 00:16:47.359
+p-search? Yeah, exactly. So, I mean, yeah, I mean, there's
+
+00:16:47.360 --> 00:16:49.919
+just so many different searches. Like, it's just kind of
+
+00:16:49.920 --> 00:16:52.519
+mind-boggling. Like, you could search for whatever you want
+
+00:16:52.520 --> 00:16:54.599
+on your computer. Like, there's just so much, like, you
+
+00:16:54.600 --> 00:17:01.199
+can't, yeah, you can't just like, you can't just like hard
+
+00:17:01.200 --> 00:17:04.159
+code any of these things. It's all malleable. Like maybe
+
+00:17:04.160 --> 00:17:09.279
+somebody wants to search these directories. And so, yeah,
+
+00:17:09.280 --> 00:17:10.639
+like
+
+00:17:10.640 --> 00:17:18.399
+exactly like that use case of having a directory of files
+
+00:17:18.400 --> 00:17:18.959
+where
+
+00:17:18.960 --> 00:17:25.919
+they contain your personal knowledge management system.
+
+00:17:25.920 --> 00:17:33.479
+Yeah, that use case definitely was at the top of my mind.
+
+00:17:33.480 --> 00:17:35.879
+Let's see.
+
+00:17:35.880 --> 00:17:56.959
+Let's see, so Git covers the multiple names thing itself.
+
+NOTE Q: Notmuch with the p-search UI
+
+00:17:56.960 --> 00:18:00.359
+Okay, yeah,
+
+00:18:00.360 --> 00:18:09.599
+so something about notmuch with p-search UI. Actually,
+
+00:18:09.600 --> 00:18:16.399
+interestingly, I think notmuch is, I haven't used it
+
+00:18:16.400 --> 00:18:22.759
+myself, but that's the, email something about yeah so i mean
+
+00:18:22.760 --> 00:18:25.679
+this is like these things are just like these these kind of
+
+00:18:25.680 --> 00:18:30.479
+extensions could kind of go go forever but one thing i
+
+00:18:30.480 --> 00:18:33.369
+thought about is like i use mu4e for email
+
+00:18:33.370 --> 00:18:41.119
+and that uses a full-fledged index. And so having
+
+00:18:41.120 --> 00:18:44.879
+some method to kind of reach into these different systems
+
+00:18:44.880 --> 00:18:47.938
+and kind of be kind of like a front end for this.
+
+00:18:47.939 --> 00:18:52.000
+Another thing is maybe SQL database.
+
+00:18:52.001 --> 00:18:55.823
+You can create a candidate generator from a SQLite query
+
+00:18:55.824 --> 00:19:01.919
+and then... yeah...
+
+00:19:02.583 --> 00:19:05.519
+I've had tons of ideas of different things you could
+
+00:19:05.520 --> 00:19:09.559
+incorporate into the system. Slowly,
+
+00:19:09.560 --> 00:19:13.599
+they're being implemented. Just recently, I implemented
+
+NOTE Info
+
+00:19:13.600 --> 00:19:17.039
+an info file candidate generator. So it lists out all the
+
+00:19:17.040 --> 00:19:21.559
+info files, and then it creates a candidate for each of the
+
+00:19:21.560 --> 00:19:26.759
+info nodes. So it turns out, yeah, I mean, it works pretty, I
+
+00:19:26.760 --> 00:19:32.559
+mean, just as well as Google. So I'm up for my own testing.
+
+00:19:32.560 --> 00:19:39.999
+Let's see, you can search a buffer using ripgrep feeding in
+
+00:19:40.000 --> 00:19:44.759
+as standard in to the ripgrep process, can't you? Yep, yeah,
+
+00:19:44.760 --> 00:19:50.039
+you can definitely search a buffer that way. So, yeah, I
+
+00:19:50.040 --> 00:19:56.359
+mean, based off of I mean, if this, yeah, so one thing that
+
+00:19:56.360 --> 00:19:59.039
+came up is that the system wants, I mean, I wanted the system
+
+00:19:59.040 --> 00:20:03.559
+to be able to search a lot of different things. And so it came
+
+00:20:03.560 --> 00:20:05.999
+up that I had, you know, implementing,
+
+00:20:06.000 --> 00:20:10.159
+doing these search things, having an Elist
+
+00:20:10.160 --> 00:20:13.079
+implementation, despite it being slow, would be
+
+00:20:13.080 --> 00:20:17.399
+necessary. So like anything that isn't represented as a
+
+00:20:17.400 --> 00:20:21.639
+file, Elisp, there's a mechanism in p-search to search for
+
+00:20:21.640 --> 00:20:23.319
+it.
+
+00:20:23.320 --> 00:20:29.719
+So, yeah, so having that redundancy kind of lets you get into
+
+00:20:29.720 --> 00:20:32.799
+the, you know, using kind of ripgrep for the big scale
+
+00:20:32.800 --> 00:20:37.759
+things. But then when you get to the individual file, you
+
+00:20:37.760 --> 00:20:40.999
+know, just going back to Elisp to kind of get the finer
+
+00:20:41.000 --> 00:20:47.199
+details seems to, you know, seems to end up working pretty
+
+00:20:47.200 --> 00:21:04.239
+well.
+
+00:21:04.240 --> 00:21:27.399
+Thank you all for listening. Yeah, sounds like we're about
+
+00:21:27.400 --> 00:21:31.279
+out of questions. Hi, Zacc. I have a question or still a
+
+00:21:31.280 --> 00:21:34.119
+question. I just want to thank everybody one more time for
+
+00:21:34.120 --> 00:21:37.719
+their participation, especially you for speaking, Zack. I
+
+00:21:37.720 --> 00:21:41.239
+look forward to playing with p-search myself. Thank you.
+
+00:21:41.240 --> 00:21:44.039
+Yeah, there might be one last question. Is there someone?
+
+00:21:44.040 --> 00:21:48.519
+Yes, there is. I don't know if you can understand me, but
+
+00:21:48.520 --> 00:21:50.359
+thank you for making this lovely thing
+
+00:21:50.360 --> 00:21:57.919
+I feel inspired to try it out and I'm thinking about how to
+
+00:21:57.920 --> 00:22:04.199
+integrate it because it sounds modular and nicely thought
+
+00:22:04.200 --> 00:22:09.799
+out. One small question. Have you thought about Project L
+
+00:22:09.800 --> 00:22:13.719
+integration? And then I have a little bigger question about
+
+00:22:13.720 --> 00:22:14.879
+the interface.
+
+NOTE project.el integration
+
+00:22:14.880 --> 00:22:20.799
+Yeah, project.el integration, it's used in a couple of ways.
+
+00:22:20.800 --> 00:22:25.719
+It's kind of used to kind of as like kind of like a default.
+
+00:22:25.720 --> 00:22:31.279
+This is the directory I want to search for the default
+
+00:22:31.280 --> 00:22:33.639
+p-search command. It does, yeah, it kind of goes off of
+
+00:22:33.640 --> 00:22:37.119
+project.el. If there is a project, it kind of says, okay, this,
+
+00:22:37.120 --> 00:22:40.319
+I want to search this project. And so it kind of, it used that
+
+00:22:40.320 --> 00:22:46.119
+as a default. So there's that. Because I use the project-grep
+
+00:22:46.120 --> 00:22:50.679
+or git-grep search a lot and maybe this is a better solution to
+
+00:22:50.680 --> 00:22:55.319
+the search and the interface you have right now for the
+
+00:22:55.320 --> 00:22:56.476
+search results.
+
+NOTE Q: How happy are you with the interface?
+
+00:22:56.477 --> 00:22:58.719
+How happy are you with it and have you
+
+00:22:58.720 --> 00:23:02.599
+thought about improving or have you ideas for
+
+00:23:02.600 --> 00:23:06.639
+improvements? Yeah, well actually what you see in the demo
+
+00:23:06.640 --> 00:23:09.199
+in the video isn't... There's actually, there is an
+
+00:23:09.200 --> 00:23:13.959
+improvement in the current code. Basically, what it
+
+00:23:13.960 --> 00:23:17.239
+does is it scans there's the current default as it scans
+
+00:23:17.240 --> 00:23:20.054
+the entire file for all of the searches.
+
+00:23:20.055 --> 00:23:25.959
+It finds the window that that has the highest score. So it kind
+
+00:23:25.960 --> 00:23:29.599
+of goes through entire file and just says... And it kind of finds
+
+00:23:29.600 --> 00:23:33.479
+like the piece of the section of text that has the most
+
+00:23:33.480 --> 00:23:37.919
+matches with the terms that score the best. So it's, I mean,
+
+00:23:37.920 --> 00:23:40.119
+that section is pretty good. I mean, that, so yeah, that,
+
+00:23:40.120 --> 00:23:44.519
+that ends up working pretty well. So I mean, in terms of other
+
+00:23:44.520 --> 00:23:46.879
+UI stuff, there's, there's tons, there's tons more that
+
+00:23:46.880 --> 00:23:50.159
+could be done, like, especially like debug ability or like
+
+00:23:50.160 --> 00:23:53.799
+introspection. Like, so this, this result, like, for
+
+00:23:53.800 --> 00:23:57.119
+example, this result ranks really high. Maybe you don't
+
+00:23:57.120 --> 00:24:01.719
+know why though. It's like, because of this, this text query
+
+00:24:01.720 --> 00:24:04.479
+arrow, was it because of this criteria? I think
+
+00:24:04.480 --> 00:24:09.039
+there's some UI elements that could kind of help the user
+
+00:24:09.040 --> 00:24:12.519
+understand why results are scoring high or low. So that's
+
+00:24:12.520 --> 00:24:15.639
+definitely... And that makes a lot of sense to me. You know, a
+
+00:24:15.640 --> 00:24:19.039
+lot of it is demystifying, like understanding what you're
+
+00:24:19.040 --> 00:24:22.719
+learning better and not just finding the right thing. A lot
+
+00:24:22.720 --> 00:24:26.519
+of it is, you know, kind of exploring your data. I love that.
+
+00:24:26.520 --> 00:24:31.639
+Thanks. Okay. I'm not trying to hurry us through either by
+
+00:24:31.640 --> 00:24:36.599
+any stretch. I would be happy to see this be a conversation.
+
+00:24:36.600 --> 00:24:42.359
+I also want to be considerate of your time. And I also wanted to
+
+00:24:42.360 --> 00:24:45.479
+make a quick shout out to everybody who's been updating and
+
+00:24:45.480 --> 00:24:50.479
+helping us capture the questions and the comments and the
+
+00:24:50.480 --> 00:24:53.639
+etherpad. That's just a big help to the extent that people
+
+00:24:53.640 --> 00:24:57.199
+are jumping in there and you know, revising and extending
+
+00:24:57.200 --> 00:24:59.799
+and just doing the best job we can to capture all the
+
+00:24:59.800 --> 00:25:00.799
+thoughtful remarks.
+
+00:25:00.800 --> 00:25:14.839
+Yeah, thank you, Zac. I'm not too sure what to ask anymore,
+
+00:25:14.840 --> 00:25:20.559
+but yes, would love to try it out now. Yeah, I mean,
+
+00:25:20.560 --> 00:25:22.076
+definitely feel free to...
+
+00:25:22.077 --> 00:25:25.679
+any feedback, here's my mail, or issues...
+
+00:25:25.680 --> 00:25:29.039
+I mean I'm happy to get any any feedback. It's
+
+00:25:29.040 --> 00:25:31.679
+still in the early stages, so still kind of a lot of
+
+00:25:31.680 --> 00:25:35.599
+documentation that needs to be writing. There's a lot.
+
+00:25:35.600 --> 00:25:38.439
+There's a lot on the roadmap, but yeah, I mean, hopefully, I
+
+00:25:38.440 --> 00:25:42.759
+could even publish this to ELPA and have a nice
+
+00:25:42.760 --> 00:25:47.727
+manual so yeah hopefully yeah those come soon. Epic.
+
+00:25:47.728 --> 00:25:50.279
+That sounds great, yes.
+
+NOTE gptel
+
+00:25:50.280 --> 00:25:59.359
+The ability to save your searches kind of reminds me of like
+
+00:25:59.360 --> 00:26:05.119
+the gptel package for the AI, where you can save searches,
+
+00:26:05.120 --> 00:26:10.799
+which makes it feel a lot more different. And yeah, we don't
+
+00:26:10.800 --> 00:26:14.839
+have something for that with search, but yeah, that's a
+
+00:26:14.840 --> 00:26:19.279
+whole different dynamic where it's like, okay, yeah, and
+
+00:26:19.280 --> 00:26:24.679
+makes it a unique tool that is, I guess would be unique to
+
+00:26:24.680 --> 00:26:28.079
+Emacs where you don't see that with like this AI package
+
+00:26:28.080 --> 00:26:31.119
+where the gptel is kind of unique because it's not just throw
+
+00:26:31.120 --> 00:26:37.039
+away. It's how did I get this? How did I search for it? And be an
+
+00:26:37.040 --> 00:26:40.319
+organic search, kind of like the orderless and vertico
+
+00:26:40.320 --> 00:26:43.039
+and...
+
+00:26:43.040 --> 00:26:46.279
+Yeah, that's a good, I mean, that brings me to another thing
+
+00:26:46.280 --> 00:26:48.239
+in that, so,
+
+00:26:48.240 --> 00:26:53.199
+I mean, you could easily...
+
+00:26:53.200 --> 00:26:57.399
+you could create bridges from p-search to these different
+
+00:26:57.400 --> 00:27:01.519
+other packages, like, for example, kind of a RAG search,
+
+00:27:01.520 --> 00:27:04.679
+like there's this RAG, there's this thing called a RAG
+
+00:27:04.680 --> 00:27:06.879
+workflow, which is kind of popular these days. It's like
+
+00:27:06.880 --> 00:27:11.639
+retrieval augmented generation. So, you do a search and
+
+00:27:11.640 --> 00:27:14.199
+then based off the search results you get, then you pass
+
+00:27:14.200 --> 00:27:20.359
+those into LLM. So, the cool thing is that like you could use
+
+00:27:20.360 --> 00:27:25.119
+p-search for the retrieval. And so you could even like, I
+
+00:27:25.120 --> 00:27:28.799
+mean, you could even ask an LM to come up with the search terms
+
+00:27:28.800 --> 00:27:32.079
+and then have it search. There's no
+
+00:27:32.080 --> 00:27:35.439
+programmatical interface now to do this exact workflow.
+
+00:27:35.440 --> 00:27:39.039
+But I mean, there's another kind of direction I'm starting
+
+00:27:39.040 --> 00:27:43.199
+to think about. So like you could have maybe
+
+00:27:43.200 --> 00:27:47.759
+a question answer kind of workflow where it does
+
+00:27:47.760 --> 00:27:51.639
+like an initial search for the terms and then you get the top
+
+00:27:51.640 --> 00:27:57.199
+results and then you can put that through maybe gptel or all
+
+00:27:57.200 --> 00:27:59.759
+these other different systems. So that's, and that seems
+
+00:27:59.760 --> 00:28:01.479
+like a promising thing. And then another thing is like,
+
+NOTE Saving a search
+
+00:28:01.480 --> 00:28:10.594
+well, you mentioned the ability to save a search.
+
+00:28:10.595 --> 00:28:11.479
+One thing I've noticed
+
+00:28:11.480 --> 00:28:15.359
+kind of like with the DevOps workflows is, I'll write a
+
+00:28:15.360 --> 00:28:20.519
+CLI command that I do, or like a calculator command. Then I end
+
+00:28:20.520 --> 00:28:23.999
+up in the org mode document, write what I wrote, had the
+
+00:28:24.000 --> 00:28:26.943
+results in there, and then I'll go back to that.
+
+00:28:26.944 --> 00:28:31.966
+It's like, oh, this is why, this is that calculation I did
+
+00:28:31.967 --> 00:28:34.007
+and this is why I did it.
+
+00:28:34.008 --> 00:28:36.959
+I'll have run the same tool three different
+
+00:28:36.960 --> 00:28:40.519
+times to get three different answers, if it was like a
+
+00:28:40.520 --> 00:28:41.799
+calculator, for example.
+
+NOTE Workflows
+
+00:28:41.800 --> 00:28:49.319
+But yeah, that's a very unique feature that isn't seen and
+
+00:28:49.320 --> 00:28:53.959
+will make me look at it and see about integrating it into my
+
+00:28:53.960 --> 00:28:59.079
+workflow. Yeah, I think you get on some interesting, you
+
+00:28:59.080 --> 00:29:03.159
+know, kind of what makes Emacs really unique there and how
+
+00:29:03.160 --> 00:29:07.399
+to... interesting kind of ways to exploit
+
+00:29:07.400 --> 00:29:12.439
+Emacs to learn in the problem. I'm seeing a number of
+
+00:29:12.440 --> 00:29:15.799
+ways you're getting at that. For example, if I think about
+
+00:29:15.800 --> 00:29:18.999
+like an automation workflow, and there's just a million
+
+00:29:19.000 --> 00:29:22.719
+we'll say, assumptions that are baked into a search
+
+00:29:22.720 --> 00:29:26.719
+product, so to speak, like represented by a Google search or
+
+00:29:26.720 --> 00:29:31.639
+Bing or what have you. And then as I unpack that and repack it
+
+00:29:31.640 --> 00:29:35.159
+from an Emacs workflow standpoint, thinking about, well,
+
+00:29:35.160 --> 00:29:39.079
+first of all, what is the yak I'm shaving? And then also, what
+
+00:29:39.080 --> 00:29:43.759
+does doing it right mean? How would I reuse this? How would I
+
+00:29:43.760 --> 00:29:47.679
+make the code accessible to others for their own purposes in
+
+00:29:47.680 --> 00:29:52.439
+a free software world kind of way? and all of the different
+
+00:29:52.440 --> 00:29:57.479
+sort of say like orthogonal headspacey kind of things,
+
+00:29:57.480 --> 00:30:00.079
+right? Emacs brings a lot to the table from a search
+
+00:30:00.080 --> 00:30:03.719
+standpoint because I'm going to want to think about. I'm
+
+00:30:03.720 --> 00:30:07.799
+going to want to think about where does the UI come in? Where
+
+00:30:07.800 --> 00:30:11.399
+might the user want to get involved interactively? Where
+
+00:30:11.400 --> 00:30:14.359
+might the user want to get involved declaratively with
+
+00:30:14.360 --> 00:30:16.919
+their configuration, perhaps based on the particular
+
+00:30:16.920 --> 00:30:21.359
+environment where this Emacs is running? And there's just a
+
+00:30:21.360 --> 00:30:24.879
+lot of what Emacs users think about that really applies.
+
+00:30:24.880 --> 00:30:28.359
+I'll use the word again, orthogonally across all my many
+
+00:30:28.360 --> 00:30:33.239
+workflows as an Emacs user. You know, the search is just such
+
+00:30:33.240 --> 00:30:38.519
+a big word. Yeah, that's actually, this exact point I was
+
+00:30:38.520 --> 00:30:43.159
+thinking about with this. It's like, I mean, it seems kind of
+
+00:30:43.160 --> 00:30:46.319
+obvious, like just like using grep or something, just like to
+
+00:30:46.320 --> 00:30:49.359
+get search counts, like, okay, you can just run the command,
+
+00:30:49.360 --> 00:30:51.439
+get the term counts and you could just run it through a
+
+00:30:51.440 --> 00:30:55.959
+relatively simple algorithm. to get your search score. So
+
+00:30:55.960 --> 00:31:01.759
+if it's this easy, though, why don't we see this in other... And
+
+00:31:01.760 --> 00:31:06.919
+the results are actually surprisingly good. So why don't we
+
+00:31:06.920 --> 00:31:10.559
+see this anywhere, really? And it occurred to me that just
+
+00:31:10.560 --> 00:31:16.399
+the amount of configuration... The amount of setup you have to
+
+00:31:16.400 --> 00:31:20.039
+do to get it right.
+
+00:31:20.040 --> 00:31:24.599
+It's above this threshold that you need something like
+
+00:31:24.600 --> 00:31:27.856
+Emacs to kind of get pushed through that configuration.
+
+NOTE Transient and configuration
+
+00:31:27.857 --> 00:31:30.799
+So for example, that's why I rely heavily on transient
+
+00:31:30.800 --> 00:31:34.119
+to set up the system. 'Cause like, if you want to get good
+
+00:31:34.120 --> 00:31:36.079
+search results, you're going to have to configure a lot
+
+00:31:36.080 --> 00:31:38.519
+of stuff. I want this directory. I want this, I don't
+
+00:31:38.520 --> 00:31:41.559
+want this directory. I want these search terms, you know,
+
+00:31:41.560 --> 00:31:48.159
+there's a lot to set up. And in most programs, I mean, they
+
+00:31:48.160 --> 00:31:52.079
+don't have an easy way to, I mean, they'll often try and try to
+
+00:31:52.080 --> 00:31:55.039
+hide all this complexity. Like they say, okay, our users
+
+00:31:55.040 --> 00:31:59.199
+too, you know, we don't want to, you know, we don't wanna, you
+
+00:31:59.200 --> 00:32:02.719
+know, make our users, we don't wanna scare our users with
+
+00:32:02.720 --> 00:32:06.879
+like, complicated search engine configuration. So we're
+
+00:32:06.880 --> 00:32:09.079
+just going to do it all in the background and we're just not
+
+00:32:09.080 --> 00:32:12.599
+going to let the user even know that it's happening. I mean,
+
+00:32:12.600 --> 00:32:15.119
+that's the third time you've made me laugh out loud. Sorry
+
+00:32:15.120 --> 00:32:17.879
+for interrupting you, but yeah, you're just spot on there.
+
+00:32:17.880 --> 00:32:22.999
+You're some people's users. Am I right? like, you know, and
+
+00:32:23.000 --> 00:32:25.390
+also some people's workflows.
+
+NOTE Problem space
+
+00:32:25.391 --> 00:32:27.719
+And, you know, another case
+
+00:32:27.720 --> 00:32:30.799
+where just like, if you're thinking about Emacs, you either
+
+00:32:30.800 --> 00:32:33.279
+have to pick a tunnel to dive into and be like, no, this is
+
+00:32:33.280 --> 00:32:37.759
+going to be right for my work, or your problem space is never
+
+00:32:37.760 --> 00:32:40.879
+ending in terms of discovering the ways other people are
+
+00:32:40.880 --> 00:32:45.839
+using Emacs and how that breaks your feature. and how that
+
+00:32:45.840 --> 00:32:49.679
+breaks your conceptualization of the problem space,
+
+00:32:49.680 --> 00:32:53.559
+right? Or you just have to get so narrowed down that can
+
+00:32:53.560 --> 00:32:57.119
+actually be hard to find people that are quite understand
+
+00:32:57.120 --> 00:33:00.279
+you, right? You get into the particular, well, it solves
+
+00:33:00.280 --> 00:33:03.039
+these three problems for me. Well, what are these three
+
+00:33:03.040 --> 00:33:08.639
+problems again? And this is a month to unpack. You have Emacs
+
+00:33:08.640 --> 00:33:12.639
+and I don't know, it's like you got a lot of, they all agree is
+
+00:33:12.640 --> 00:33:16.559
+like we're going to use elisp to set variables every emacs
+
+00:33:16.560 --> 00:33:21.199
+package is going to do that we're going to use elisp and have a
+
+00:33:21.200 --> 00:33:25.479
+search in place to put our documentation and like it does
+
+00:33:25.480 --> 00:33:32.559
+also eliminate a lot of confusion and gives a lot of
+
+00:33:32.560 --> 00:33:37.719
+expectations of what they want. One thing that I'm
+
+00:33:37.720 --> 00:33:39.855
+surprised I haven't seen elsewhere is you have the
+
+NOTE consult-omni
+
+00:33:39.856 --> 00:33:44.239
+consult-omni package which allows you to search multiple websites
+
+00:33:44.240 --> 00:33:49.799
+simultaneously for multiple web search engines. and put
+
+00:33:49.800 --> 00:33:52.799
+them in one thing and it's like, and then you use orderless.
+
+NOTE orderless
+
+00:33:52.800 --> 00:33:55.159
+Why would you use orderless? Because that's what you
+
+00:33:55.160 --> 00:33:57.799
+configured and you know exactly what you wanna use and you
+
+00:33:57.800 --> 00:34:01.679
+use the same font and your same mini buffer and you use all
+
+00:34:01.680 --> 00:34:04.079
+that existing configuration because, well, you're an
+
+00:34:04.080 --> 00:34:07.599
+Emacs user or like you're a command line user. You know how
+
+00:34:07.600 --> 00:34:11.559
+you want these applications to go. You don't want them to be
+
+00:34:11.560 --> 00:34:17.399
+reinvented the wheel 1600 times in 1,600 different ways,
+
+00:34:17.400 --> 00:34:23.079
+you want it to use your mini buffer, your font, your et
+
+00:34:23.080 --> 00:34:28.159
+cetera, et cetera, et cetera. But I haven't
+
+00:34:28.160 --> 00:34:32.479
+seen a website where I can search multiple websites at the
+
+00:34:32.480 --> 00:34:35.159
+same time in something like Emacs before. And it's like,
+
+00:34:35.160 --> 00:34:38.319
+yeah, with my sorting algorithm,
+
+00:34:38.320 --> 00:34:49.359
+Yeah, exactly. Yeah. Yeah. Yeah. I mean, just setting the
+
+00:34:49.360 --> 00:34:57.079
+bar for configuration and set up just like, yeah, you have to
+
+00:34:57.080 --> 00:35:02.839
+have a list. Yeah. I mean, it, it does, obviously it's not,
+
+00:35:02.840 --> 00:35:05.839
+it's not most beginner beginner friendly, but I mean, it,
+
+00:35:05.840 --> 00:35:10.319
+yeah, it definitely widens the amount of the solution space
+
+00:35:10.320 --> 00:35:14.679
+you can have to such problems. Oh my gosh, you used the word
+
+00:35:14.680 --> 00:35:18.759
+solution space. I love it. But on the flip side, it's like,
+
+00:35:18.760 --> 00:35:25.119
+why does Emacs get this consult-omni package? Or let's see,
+
+00:35:25.120 --> 00:35:30.719
+you have elfeed-youtube where it will put a flowing
+
+00:35:30.720 --> 00:35:34.479
+transcript on a YouTube video or you got your package. Why
+
+00:35:34.480 --> 00:35:39.879
+does it get all these applications? And I don't see
+
+00:35:39.880 --> 00:35:45.679
+applications like this as much outside of Emacs. So there's
+
+00:35:45.680 --> 00:35:46.267
+a way that it just makes it easier.
+
+NOTE User interface
+
+00:35:46.268 --> 00:35:47.479
+It's because user
+
+00:35:47.480 --> 00:35:51.439
+interface is the, you know, it's the economy stupid of
+
+00:35:51.440 --> 00:35:58.119
+technology, right? If you grab people by the UX, you can sell
+
+00:35:58.120 --> 00:36:01.679
+a million of any product that solves problem that I didn't
+
+00:36:01.680 --> 00:36:04.639
+think technology could solve, or that I didn't think I had
+
+00:36:04.640 --> 00:36:08.319
+the patience to use technology to solve, which is a lot of
+
+00:36:08.320 --> 00:36:12.159
+times what it comes down to. And here exactly is the, you
+
+00:36:12.160 --> 00:36:16.799
+know, the the Emacs sort of conundrum, right? How much time
+
+00:36:16.800 --> 00:36:20.759
+should I spend today updating my Emacs so that tomorrow I can
+
+00:36:20.760 --> 00:36:26.319
+just work more, right? And, you know, I love that little
+
+00:36:26.320 --> 00:36:29.839
+graph of the Emacs learning curve, right? Where it's this
+
+00:36:29.840 --> 00:36:33.399
+concentric, it becomes this concentric spiral, right? The
+
+00:36:33.400 --> 00:36:38.759
+Vim learning curve is like a ladder, right? Or, you know, and
+
+00:36:38.760 --> 00:36:44.119
+And the nano learning curve is like just a flat plane, you
+
+00:36:44.120 --> 00:36:49.279
+know, or a ladder, a vertical ladder or a horizontal ladder.
+
+00:36:49.280 --> 00:36:56.719
+There we go. And the Emacs learning curve is this kind of
+
+00:36:56.720 --> 00:36:59.799
+straight up line until it curves back on itself and
+
+00:36:59.800 --> 00:37:03.079
+eventually spirals. And the more you learn, the harder it is
+
+00:37:03.080 --> 00:37:05.839
+to learn the next thing. And are you really moving forward at
+
+00:37:05.840 --> 00:37:09.039
+all? Like, it just works for me. What a great analogy. And
+
+00:37:09.040 --> 00:37:15.279
+that's my answer, I think. Yeah. You know, it's because
+
+00:37:15.280 --> 00:37:20.199
+we... The spiral is great. Sorry. There are each of these
+
+00:37:20.200 --> 00:37:26.639
+weird little packages that some of us, you know, it solves
+
+00:37:26.640 --> 00:37:29.279
+that one problem and lets us get back to work. And for others,
+
+00:37:29.280 --> 00:37:32.439
+it makes us go, gosh, now that makes me rethink a whole bunch
+
+00:37:32.440 --> 00:37:35.239
+of things because there's... Like I don't even know what
+
+00:37:35.240 --> 00:37:37.719
+you're talking about with some of your conceptualizations
+
+00:37:37.720 --> 00:37:41.039
+of UI. Maybe it comes from Visual Studio, and I've not
+
+00:37:41.040 --> 00:37:44.679
+used that or something. So for you, it's a perfectly normal UX
+
+00:37:44.680 --> 00:37:48.799
+paradigm that you kind of lean on for others. It's like you
+
+00:37:48.800 --> 00:37:51.999
+know occupying some screen space and I don't know what the
+
+00:37:52.000 --> 00:37:57.759
+gadgets do and when I open them up... They're thinking
+
+00:37:57.760 --> 00:38:00.999
+about... they have... they imply their own
+
+00:38:01.000 --> 00:38:03.639
+abstractions let's say logically against a programming
+
+00:38:03.640 --> 00:38:06.999
+language. This would be tree sitter, right. If i'm not used to
+
+00:38:07.000 --> 00:38:11.719
+thinking in terms of an abstract abstract syntax tree, some
+
+00:38:11.720 --> 00:38:14.799
+of the concepts just aren't as natural for me. If i'm used to
+
+00:38:14.800 --> 00:38:19.039
+like emacs at a more fundamental level is, or the old modes
+
+00:38:19.040 --> 00:38:23.479
+right, we're used to them thinking in terms of progressing
+
+00:38:23.480 --> 00:38:26.959
+forward through some text, managing a stack of markers into
+
+00:38:26.960 --> 00:38:29.239
+the text, right? It's a different paradigm. The world
+
+00:38:29.240 --> 00:38:33.559
+changes. Emacs kind of supports it all. That's why all the
+
+00:38:33.560 --> 00:38:37.039
+apps are built there. That's why when you're talking about
+
+00:38:37.040 --> 00:38:40.759
+that spiral. what that hints at is that this is really just a
+
+00:38:40.760 --> 00:38:44.239
+different algorithm that you're transferring out that
+
+00:38:44.240 --> 00:38:47.319
+makes some things a lot easier and some things a lot harder.
+
+00:38:47.320 --> 00:38:51.719
+That's why I was bringing in those three packages, because
+
+00:38:51.720 --> 00:38:59.708
+in some way it's making these search terms with reusable...
+
+00:38:59.709 --> 00:39:07.083
+Let's see... saveable buffers or interactive buffers in a way
+
+00:39:07.084 --> 00:39:10.359
+that... in a way, that is bigger than what I think it should have,
+
+00:39:10.360 --> 00:39:15.479
+especially in comparison to like how many people use
+
+00:39:15.480 --> 00:39:20.319
+YouTube, but I don't see very many YouTube apps that will
+
+00:39:20.320 --> 00:39:26.279
+show Rolling subtitle list that you can click on to move up
+
+00:39:26.280 --> 00:39:27.315
+and down the video
+
+00:39:27.316 --> 00:39:30.139
+even though YouTube's been around for years.
+
+00:39:30.140 --> 00:39:33.359
+Why does Emacs have a very good implementation
+
+00:39:33.360 --> 00:39:37.159
+that was duct taped together? So before I let you respond to
+
+00:39:37.160 --> 00:39:40.439
+that, Zac, let me just say we're coming up on eating up a
+
+00:39:40.440 --> 00:39:43.879
+whole half hour of your lunchtime and thank you for giving us
+
+00:39:43.880 --> 00:39:47.879
+that extra time. But let me just say, let's, you know, if I
+
+00:39:47.880 --> 00:39:50.879
+could ask you to take like up to another five minutes and then
+
+00:39:50.880 --> 00:39:53.759
+I'll try to kick us off here and make sure everybody does
+
+00:39:53.760 --> 00:39:54.999
+remember to eat.
+
+00:39:55.000 --> 00:40:04.119
+Yeah, so yeah, it looks like there's one other question. So
+
+NOTE Q: Do you think the Emacs being kinda slow will get in the way of being able to run a lot of scoring algorithms?
+
+00:40:04.120 --> 00:40:06.679
+yeah, do you think Emacs being kind of slow will get in the way
+
+00:40:06.680 --> 00:40:11.319
+of being able to run a lot of scoring algorithms? So this is
+
+00:40:11.320 --> 00:40:15.039
+actually a thought I had. Yeah, Emacs, because the code
+
+00:40:15.040 --> 00:40:19.919
+currently kind of does, I mean, it kind of does, it's kind of
+
+00:40:19.920 --> 00:40:24.039
+dumb in a lot of places. a lot of times it just, it does just go
+
+00:40:24.040 --> 00:40:27.599
+through all the files and then just compute some score for
+
+00:40:27.600 --> 00:40:30.679
+them. But I'm surprised that it's, that part actually isn't
+
+00:40:30.680 --> 00:40:34.799
+that slow. Like, like it turns out like, okay, like if you
+
+00:40:34.800 --> 00:40:40.759
+take, for example, Emacs, like the Emacs directory or the
+
+00:40:40.760 --> 00:40:44.879
+Emacs Git repository, or maybe another big Git repository,
+
+00:40:44.880 --> 00:40:49.079
+like you could have an Elisp function enumerate those, and
+
+00:40:49.080 --> 00:40:52.599
+multiply some numbers, maybe multiply 10 numbers
+
+00:40:52.600 --> 00:41:01.039
+together. And that isn't that slow. And that's the bulk of
+
+00:41:01.040 --> 00:41:05.799
+what the only thing that Elisp has to do is just like multiply
+
+00:41:05.800 --> 00:41:11.599
+these numbers. Obviously, if you have to resort to Elisp to
+
+00:41:11.600 --> 00:41:15.519
+search all the files and you have like 10 or 100,000 files,
+
+00:41:15.520 --> 00:41:18.759
+then yeah, Emacs will be slow
+
+00:41:18.760 --> 00:41:23.959
+to manually search, like if you're not using ripgrep or any
+
+00:41:23.960 --> 00:41:26.839
+faster tool and you have, and you have millions of files and
+
+00:41:26.840 --> 00:41:30.959
+yeah, it will be slow. But what I noticed though is like, for
+
+00:41:30.960 --> 00:41:35.119
+example, let's say you want to search for, let's say you want
+
+00:41:35.120 --> 00:41:40.199
+to search like info directory, like info files for Emacs and
+
+00:41:40.200 --> 00:41:46.039
+the Emacs info file and the Elisp info file. So those are two
+
+00:41:46.040 --> 00:41:49.279
+decently sized kind of books, kind of like reference
+
+00:41:49.280 --> 00:41:50.199
+material on Emacs.
+
+00:41:50.200 --> 00:41:55.999
+Relying on Elisp to search both of those together, it's
+
+00:41:56.000 --> 00:41:58.079
+actually pretty, it's actually like almost instant. I
+
+00:41:58.080 --> 00:42:00.639
+mean, it's not slow enough. So I think that's
+
+00:42:00.640 --> 00:42:03.679
+another thing is like scale. Like I think on, on kind of like
+
+00:42:03.680 --> 00:42:09.679
+individual human level scales, I think Elisp can be good
+
+00:42:09.680 --> 00:42:14.359
+enough. if you're going on the scale of like enterprise,
+
+00:42:14.360 --> 00:42:18.399
+like all the repositories, all the Git repositories of an
+
+00:42:18.400 --> 00:42:21.199
+enterprise, then yeah, that scale might, it might, it might
+
+00:42:21.200 --> 00:42:26.039
+be too much. But I think on, on the scale of what most
+
+00:42:26.040 --> 00:42:30.519
+individuals have to deal with on a daily basis, like for
+
+00:42:30.520 --> 00:42:34.719
+example, maybe somebody has some, yeah, I mean, I think it
+
+00:42:34.720 --> 00:42:36.959
+should, I think it hopefully should be enough. And if not,
+
+00:42:36.960 --> 00:42:39.639
+there's always room for optimizations.
+
+00:42:39.640 --> 00:42:55.999
+Yeah, so so I'll redirect you a little bit because based on a
+
+00:42:56.000 --> 00:43:00.279
+couple of things I got into, you know, or if you want to be done
+
+00:43:00.280 --> 00:43:04.759
+be like, you know, give me the hi sign by all means and we can
+
+00:43:04.760 --> 00:43:08.639
+we can shut up shop, but I'm curious, you know, what are what
+
+NOTE Boundary conditions
+
+00:43:08.640 --> 00:43:13.079
+are your boundary conditions? What what tends to cause you
+
+00:43:13.080 --> 00:43:16.679
+to to to write something more complicated and what what
+
+00:43:16.680 --> 00:43:20.959
+causes you to? So to work around it with more complex
+
+00:43:20.960 --> 00:43:23.559
+workflow in Emacs terms, like where do you break out the big
+
+00:43:23.560 --> 00:43:27.919
+guns? Just thinking about, like search, we talked about,
+
+00:43:27.920 --> 00:43:31.439
+maybe that's too abstract a question, but just general
+
+00:43:31.440 --> 00:43:36.679
+usage. Search is an example where almost all of us have
+
+00:43:36.680 --> 00:43:39.599
+probably written something to go find something, right?
+
+00:43:39.600 --> 00:43:43.519
+Yeah, I mean, this is a good question. I'm actually of the
+
+00:43:43.520 --> 00:43:51.999
+idea, at my work, for example, I tried to get rid of all, I
+
+00:43:52.000 --> 00:43:54.879
+mean, this is probably a typical Emacs user thing, but like,
+
+00:43:54.880 --> 00:43:59.319
+I mean, I think that just like getting, just like having
+
+00:43:59.320 --> 00:44:02.559
+Emacs expand to whatever it can get into and whatever it can
+
+00:44:02.560 --> 00:44:08.839
+automate, like any task, any, like, just like the more you
+
+00:44:08.840 --> 00:44:13.719
+can kind of get that coded, I actually find that kind of like,
+
+00:44:13.720 --> 00:44:20.439
+I mean, it is kind of like a meme. Like, yeah, I have to
+
+00:44:20.440 --> 00:44:24.199
+configure my Emacs until it's fun, and then I'll do it. But I
+
+00:44:24.200 --> 00:44:27.959
+actually I actually think that maybe for like a normal
+
+00:44:27.960 --> 00:44:31.999
+software developer, if you invest, if you invest, maybe,
+
+00:44:32.000 --> 00:44:34.839
+maybe you have like some spare time after you've done all
+
+00:44:34.840 --> 00:44:39.679
+your tasks, if you invest all that time in, in just like kind
+
+00:44:39.680 --> 00:44:42.359
+of going through all the workflows, all the, you know, just,
+
+00:44:42.360 --> 00:44:46.279
+just getting all of that in, in Emacs, then I think that that,
+
+00:44:46.280 --> 00:44:52.039
+that acts as kind of like a, it kind of like a productivity
+
+00:44:52.040 --> 00:44:56.759
+multiplier. And so. So I found that, I mean, I found to not
+
+00:44:56.760 --> 00:44:59.519
+have those boundaries. I mean, obviously there's things
+
+00:44:59.520 --> 00:45:04.599
+you can't do, like web-based things. I mean, that's a hard
+
+00:45:04.600 --> 00:45:10.199
+boundary, but that's more because... Yeah, there's really
+
+00:45:10.200 --> 00:45:13.719
+not much to do about that. Nobody's written a front-end
+
+00:45:13.720 --> 00:45:18.759
+engine, and too much of the forebrain is occupied with
+
+00:45:18.760 --> 00:45:22.559
+things that should happen on the "end-users
+
+00:45:22.560 --> 00:45:29.839
+infrastructure", so to speak. So with like 40 seconds left, I
+
+00:45:29.840 --> 00:45:33.519
+was going to say a minute, but I guess, any final thoughts?
+
+00:45:33.520 --> 00:45:40.159
+Yeah, I mean, just thank you for listening, and And thank you
+
+00:45:40.160 --> 00:45:45.559
+for putting this on. It's a really nice conference to have,
+
+00:45:45.560 --> 00:45:50.679
+and I'm glad things like this exist. So thank you. Yeah, it's
+
+00:45:50.680 --> 00:45:54.639
+you and the other folks on this call. Thank you so much,
+
+00:45:54.640 --> 00:45:58.639
+PlasmaStrike, and all the rest of you for hopping on the BBB
+
+00:45:58.640 --> 00:46:03.119
+and having such an interesting discussion. Keeps it really
+
+00:46:03.120 --> 00:46:08.239
+fun for us as organizers. And thanks, everybody, for being
+
+00:46:08.240 --> 00:46:21.320
+here.
diff --git a/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt
new file mode 100644
index 00000000..3c81657f
--- /dev/null
+++ b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:24.199
+Search in daily workflows
+
+00:01:24.200 --> 00:03:58.232
+Problems with editor search tools
+
+00:03:58.233 --> 00:04:34.295
+Information retrieval
+
+00:04:34.296 --> 00:06:21.756
+Search engine in Emacs: the index
+
+00:06:21.757 --> 00:06:43.552
+Search engine in Emacs: Ranking
+
+00:06:43.553 --> 00:07:41.159
+tf-idf: term-frequency x inverse-document-frequency
+
+00:07:41.160 --> 00:08:41.199
+BM25
+
+00:08:41.200 --> 00:10:41.456
+Searching with p-search
+
+00:10:41.457 --> 00:16:06.770
+Flight AF 447
+
+00:16:06.771 --> 00:20:40.404
+Modifying priors
+
+00:20:40.405 --> 00:21:38.559
+Importance
+
+00:21:38.560 --> 00:22:42.240
+Complement or inverse
diff --git a/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt
new file mode 100644
index 00000000..111f2728
--- /dev/null
+++ b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt
@@ -0,0 +1,970 @@
+WEBVTT captioned by sachac
+
+NOTE Search in daily workflows
+
+00:00:00.000 --> 00:00:03.399
+Hello, my name is Zachary Romero, and today I'll be going
+
+00:00:03.400 --> 00:00:08.115
+over p-search, a local search engine in Emacs.
+
+00:00:08.116 --> 00:00:12.398
+Search these days is everywhere in software, from text editors,
+
+00:00:12.399 --> 00:00:18.359
+to IDEs, to most online websites. These tools tend to fall
+
+00:00:18.360 --> 00:00:25.839
+into one of two categories. One are tools that run locally,
+
+00:00:25.840 --> 00:00:31.279
+and work by matching string to text. The most common
+
+00:00:31.280 --> 00:00:35.639
+example of this is grep. In Emacs, there are a lot of
+
+00:00:35.640 --> 00:00:38.959
+extensions which provide functionality on top of these
+
+00:00:38.960 --> 00:00:42.388
+tools, such as projectile-grep, deadgrep,
+
+00:00:42.389 --> 00:00:46.849
+consult-ripgrep. Most editors have some sort of
+
+00:00:46.850 --> 00:00:52.691
+search current project feature. Most of the time,
+
+00:00:52.692 --> 00:00:56.393
+some of these tools have features like regular expressions,
+
+00:00:56.394 --> 00:00:59.215
+or you can specify file extension,
+
+00:00:59.216 --> 00:01:01.636
+or a directory you want to search in,
+
+00:01:01.637 --> 00:01:03.957
+but features are pretty limited.
+
+00:01:03.958 --> 00:01:07.919
+The other kind of search we use are usually hosted online,
+
+00:01:07.920 --> 00:01:12.302
+and they usually search a vast corpus of data.
+
+00:01:12.303 --> 00:01:15.639
+These are usually proprietary
+
+00:01:15.640 --> 00:01:18.765
+online services such as Google, GitHub,
+
+00:01:18.766 --> 00:01:24.199
+SourceGraph for code.
+
+NOTE Problems with editor search tools
+
+00:01:24.200 --> 00:01:28.839
+The kind of search feature that editors
+
+00:01:28.840 --> 00:01:36.719
+usually have have a lot of downsides to them. For one, a lot
+
+00:01:36.720 --> 00:01:38.839
+of times you don't know the exact search string you're
+
+00:01:38.840 --> 00:01:42.783
+searching for. Some complicated term like this
+
+00:01:42.784 --> 00:01:46.860
+high volume demand partner, you know, do you know if...
+
+00:01:46.861 --> 00:01:49.708
+Are some words abbreviated, is it capitalized,
+
+00:01:49.709 --> 00:01:53.089
+is it in kebab case, camel case, snake case?
+
+00:01:53.090 --> 00:01:57.571
+You often have to search all these variations.
+
+00:01:57.572 --> 00:02:05.434
+Another downside is that the search results returned
+
+00:02:05.435 --> 00:02:07.769
+contain a lot of noise. For example,
+
+00:02:07.770 --> 00:02:10.816
+you may get a lot of test files.
+
+00:02:10.817 --> 00:02:13.537
+If the tool hits your vendor directory,
+
+00:02:13.538 --> 00:02:17.199
+it may get a bunch of results from libraries
+
+00:02:17.200 --> 00:02:22.879
+you're using, which most are not helpful. Another downside
+
+00:02:22.880 --> 00:02:26.679
+is that the order given is, well, there's no meaning to the
+
+00:02:26.680 --> 00:02:30.319
+order. It's usually just the search order that the tool
+
+00:02:30.320 --> 00:02:34.639
+happens to look in first.
+
+00:02:34.640 --> 00:02:38.639
+Another thing is, so when you're searching, you oftentimes
+
+00:02:38.640 --> 00:02:41.639
+have to keep the state of the searches in your head. For
+
+00:02:41.640 --> 00:02:46.639
+example, you try one search, you see the results, find the
+
+00:02:46.640 --> 00:02:49.639
+results you think are relevant, keep them in your head, run
+
+00:02:49.640 --> 00:02:52.519
+search number two, look through the results, kind of
+
+00:02:52.520 --> 00:02:56.119
+combine these different search results in your head until
+
+00:02:56.120 --> 00:02:59.970
+you get an idea of which ones might be relevant.
+
+00:02:59.971 --> 00:03:04.515
+Another thing is that the search primitives are fairly limited.
+
+00:03:04.516 --> 00:03:10.599
+So yeah, you can search regular expressions, but you can't
+
+00:03:10.600 --> 00:03:14.719
+really define complex things like, I want to search files in
+
+00:03:14.720 --> 00:03:18.439
+this directory, and this directory, and this directory,
+
+00:03:18.440 --> 00:03:22.319
+except these subdirectories, and accept test files, and I
+
+00:03:22.320 --> 00:03:25.559
+only want files with this file extension. Criteria like
+
+00:03:25.560 --> 00:03:28.919
+that are really hard to... I'm sure they're possible in tools
+
+00:03:28.920 --> 00:03:34.479
+like grep, but they're pretty hard to construct.
+
+00:03:34.480 --> 00:03:38.199
+And lastly, there's no notion of any relevance. All the
+
+00:03:38.200 --> 00:03:42.039
+results you get back, I mean, you don't know, is the search
+
+00:03:42.040 --> 00:03:43.095
+more relevant? Is it twice as relevant? Is it
+
+00:03:43.096 --> 00:03:52.279
+100 times more relevant? These tools usually don't provide
+
+00:03:52.280 --> 00:03:58.232
+such information.
+
+NOTE Information retrieval
+
+00:03:58.233 --> 00:04:00.394
+There's a field called information retrieval,
+
+00:04:00.395 --> 00:04:02.616
+and this deals with this exact problem.
+
+00:04:02.617 --> 00:04:04.718
+You have lots of data you're searching for.
+
+00:04:04.719 --> 00:04:09.261
+How do you construct a search query?
+
+00:04:09.262 --> 00:04:09.839
+How do you get results back fast? How do you
+
+00:04:09.840 --> 00:04:14.519
+rank which ones are most relevant? How do you evaluate
+
+00:04:14.520 --> 00:04:20.079
+your search system to see if it's getting better or worse?
+
+00:04:20.080 --> 00:04:23.119
+There's a lot of work, a lot of books written on the topic of
+
+00:04:23.120 --> 00:04:28.159
+information retrieval. If one wants to improve
+
+00:04:28.160 --> 00:04:31.879
+searching in Emacs, then drawing inspiration from this
+
+00:04:31.880 --> 00:04:34.295
+field is necessary.
+
+NOTE Search engine in Emacs: the index
+
+00:04:34.296 --> 00:04:41.383
+The first aspect of information retrieval is the index.
+
+00:04:41.384 --> 00:04:46.608
+The reverse index is what search engines use to find results really fast.
+
+00:04:46.609 --> 00:04:51.454
+Essentially, it's a map of search term
+
+00:04:51.455 --> 00:04:54.738
+to locations where that term is located.
+
+00:04:54.739 --> 00:04:57.079
+You'll have all the terms or maybe even parts of
+
+00:04:57.080 --> 00:04:59.159
+the terms, and then you'll have all the locations where
+
+00:04:59.160 --> 00:05:02.119
+they're located. Any query could easily look up
+
+00:05:02.120 --> 00:05:05.919
+where things are located, join results together, and
+
+00:05:05.920 --> 00:05:12.879
+that's how they get the results to be really fast. For this
+
+00:05:12.880 --> 00:05:19.159
+project, I decided to forgo creating an index altogether.
+
+00:05:19.160 --> 00:05:23.759
+An index is pretty complicated to maintain because
+
+00:05:23.760 --> 00:05:27.319
+it always has to be in sync. Any time you open a file and save
+
+00:05:27.320 --> 00:05:29.959
+it, you would have to re-index, you would have to make sure
+
+00:05:29.960 --> 00:05:32.559
+that file is re-indexed properly. Then you have the
+
+00:05:32.560 --> 00:05:36.119
+whole issue of, well, if you're searching in Emacs,
+
+00:05:36.120 --> 00:05:38.799
+you have all these projects, this directory,
+
+00:05:38.800 --> 00:05:42.479
+that directory, how do you know which? Do you always have to
+
+00:05:42.480 --> 00:05:47.399
+keep them in sync? It's quite a hard task to handle
+
+00:05:47.400 --> 00:05:53.079
+that. Then on the other end, tools like ripgrep can
+
+00:05:53.080 --> 00:05:59.119
+search very fast. Even though they can't search maybe on the
+
+00:05:59.120 --> 00:06:03.919
+order of tens of thousands of repositories, for a local
+
+00:06:03.920 --> 00:06:06.039
+setting, they should be plenty fast enough.
+
+00:06:06.040 --> 00:06:12.239
+I benchmarked. Ripgrep, for example, is
+
+00:06:12.240 --> 00:06:15.959
+on the order of gigabytes per second.
+
+00:06:15.960 --> 00:06:19.239
+Definitely, it can search a few pretty big size
+
+00:06:19.240 --> 00:06:21.756
+repositories.
+
+NOTE Search engine in Emacs: Ranking
+
+00:06:21.757 --> 00:06:24.799
+Next main task. We decided not to use an
+
+00:06:24.800 --> 00:06:29.959
+index. Next task is how do we rank search results? So there's
+
+00:06:29.960 --> 00:06:33.439
+two main algorithms that are used these days. The first
+
+00:06:33.440 --> 00:06:36.519
+one is tf-idf, which stands for term frequency, inverse
+
+00:06:36.520 --> 00:06:43.039
+target frequency. Then there's BM25, which is sort of a
+
+00:06:43.040 --> 00:06:43.552
+modified tf-idf algorithm.
+
+NOTE tf-idf: term-frequency x inverse-document-frequency
+
+00:06:43.553 --> 00:06:45.679
+tf-idf, without going into
+
+00:06:45.680 --> 00:06:49.159
+too much detail, essentially multiplies two terms. One
+
+00:06:49.160 --> 00:06:51.879
+is the term frequency, and then you multiply it by the
+
+00:06:51.880 --> 00:06:54.559
+inverse document frequency. The term frequency is a
+
+00:06:54.560 --> 00:06:58.519
+measure of how often that search term occurs. The
+
+00:06:58.520 --> 00:07:00.799
+inverse document frequency is a measure of how much
+
+00:07:00.800 --> 00:07:06.199
+information that term provides. If the term occurs a lot,
+
+00:07:06.200 --> 00:07:08.719
+then it gets a higher score in the term frequency section.
+
+00:07:08.720 --> 00:07:12.399
+But if it's a common word that exists in a lot of documents,
+
+00:07:12.400 --> 00:07:13.900
+then its inverse document frequency goes down.
+
+00:07:13.901 --> 00:07:20.879
+It kind of scores it less. You'll find that words like the,
+
+00:07:20.880 --> 00:07:25.959
+in, is, these really common words, since they occur
+
+00:07:25.960 --> 00:07:29.199
+everywhere, their inverse document frequency is
+
+00:07:29.200 --> 00:07:32.479
+essentially zero. They don't really count towards a
+
+00:07:32.480 --> 00:07:35.679
+score. But when you have rare words that only occur in a
+
+00:07:35.680 --> 00:07:37.679
+few documents, they're weighted a lot more. So the more
+
+00:07:37.680 --> 00:07:41.159
+those rare words occur, they boost the score higher.
+
+NOTE BM25
+
+00:07:41.160 --> 00:07:48.839
+BM25 is a modification of this. It's essentially TF, it's
+
+00:07:48.840 --> 00:07:53.119
+essentially the previous one, except it dampens out terms
+
+00:07:53.120 --> 00:07:55.439
+that occur more often. Imagine you have a bunch of
+
+00:07:55.440 --> 00:07:59.359
+documents. One has a term 10 times, one has a term, that same
+
+00:07:59.360 --> 00:08:02.439
+term a hundred times, another has a thousand times.
+
+00:08:02.440 --> 00:08:06.799
+You'll see the score dampens off as the number of
+
+00:08:06.800 --> 00:08:10.639
+occurrences increases. That prevents any one term from
+
+00:08:10.640 --> 00:08:16.559
+overpowering the score. This is the algorithm I ended up
+
+00:08:16.560 --> 00:08:21.039
+choosing for my implementation. So with a plan of using a
+
+00:08:21.040 --> 00:08:29.559
+command line tool like ripgrep to get term occurrences, and
+
+00:08:29.560 --> 00:08:36.799
+then using a scoring algorithm like BM25 to rank the terms,
+
+00:08:36.800 --> 00:08:40.079
+we can combine this together and create a simple search
+
+00:08:40.080 --> 00:08:41.199
+mechanism.
+
+NOTE Searching with p-search
+
+00:08:41.200 --> 00:08:47.439
+Here we're in the directory for the Emacs source code.
+
+00:08:47.440 --> 00:08:53.479
+Let's say we want to search for the display code. We
+
+00:08:53.480 --> 00:08:58.679
+run the p-search command, starting the search engine. It
+
+00:08:58.680 --> 00:09:01.159
+opens up. We notice it has three sections, the candidate
+
+00:09:01.160 --> 00:09:05.199
+generators, the priors, and the search results. The
+
+00:09:05.200 --> 00:09:09.999
+candidate generators generates the search space we're
+
+00:09:10.000 --> 00:09:14.719
+looking on. These are all composable and you can add as
+
+00:09:14.720 --> 00:09:19.719
+many as you want. So with this, it specifies that here
+
+00:09:19.720 --> 00:09:25.239
+we're searching on the file system and we're searching in
+
+00:09:25.240 --> 00:09:30.799
+this directory. We're using the ripgrep tool to search
+
+00:09:30.800 --> 00:09:33.359
+with, and we want to make sure that we're searching only on
+
+00:09:33.360 --> 00:09:40.479
+files committed to Git. Here we see the search results.
+
+00:09:40.480 --> 00:09:45.159
+Notice here is their final probability. Here, notice
+
+00:09:45.160 --> 00:09:47.079
+that they're all the same, and they're the same because we
+
+00:09:47.080 --> 00:09:50.719
+don't have any search criteria specified here. Suppose
+
+00:09:50.720 --> 00:09:55.679
+we want to search for display-related code. We add a
+
+00:09:55.680 --> 00:09:57.359
+query: display.
+
+00:09:57.360 --> 00:10:06.559
+So then it spins off the processes, gets the search term
+
+00:10:06.560 --> 00:10:10.879
+counts and calculates the new scores. Notice here that
+
+00:10:10.880 --> 00:10:15.759
+the results that come on top are just at first glance appear
+
+00:10:15.760 --> 00:10:19.919
+to be relevant to display. Remember, if we compare
+
+00:10:19.920 --> 00:10:25.079
+that to just running a ripgrep raw, notice here we're
+
+00:10:25.080 --> 00:10:31.279
+getting 53,000 results and it's pretty hard to go through
+
+00:10:31.280 --> 00:10:34.319
+these results and make sense of it.
+
+00:10:34.320 --> 00:10:41.456
+So that's p-search in a nutshell.
+
+NOTE Flight AF 447
+
+00:10:41.457 --> 00:10:45.982
+Next, I wanted to talk about the story of Flight 447.
+
+00:10:45.983 --> 00:10:49.326
+Flight 447 going from Rio de Janeiro to Paris
+
+00:10:49.327 --> 00:10:51.509
+crashed somewhere in the Atlantic Ocean
+
+00:10:51.510 --> 00:10:54.713
+on June 1st, 2009, killing everyone on board.
+
+00:10:54.714 --> 00:10:56.894
+Four search attempts were made to find the wreckage.
+
+00:10:56.895 --> 00:11:01.075
+None of them were successful, except the finding of some debris
+
+00:11:01.076 --> 00:11:05.479
+and a dead body. It was decided that they really wanted
+
+00:11:05.480 --> 00:11:09.519
+to find the wreckage to retrieve data as to why the search
+
+00:11:09.520 --> 00:11:14.639
+occurred. This occurred two years after the
+
+00:11:14.640 --> 00:11:19.959
+initial crash. With this next search attempt, they
+
+00:11:19.960 --> 00:11:23.199
+wanted to create a probability distribution of where the
+
+00:11:23.200 --> 00:11:26.759
+crash could be. The only piece of concrete data they had
+
+00:11:26.760 --> 00:11:35.079
+was a GPS signal from the ship at 210 containing the GPS
+
+00:11:35.080 --> 00:11:40.239
+location of the plane was at 2.98 degrees north, 30.59
+
+00:11:40.240 --> 00:11:44.719
+degrees west. That was the only data they had to go off of.
+
+00:11:44.720 --> 00:11:50.079
+So they drew a circle around that point
+
+00:11:50.080 --> 00:11:54.679
+with a radius of 40 nautical miles. They assumed that
+
+00:11:54.680 --> 00:11:57.479
+anything outside the circle would have been impossible for
+
+00:11:57.480 --> 00:12:01.239
+the ship to reach. This was the starting point for
+
+00:12:01.240 --> 00:12:04.799
+creating the probability distribution of where the
+
+00:12:04.800 --> 00:12:08.119
+wreckage occurred. Anything outside the circle, they
+
+00:12:08.120 --> 00:12:09.639
+assumed it was impossible to reach.
+
+00:12:09.640 --> 00:12:16.479
+The only other pieces of data were the four failed search
+
+00:12:16.480 --> 00:12:21.719
+attempts and then some of the debris found. One thing they
+
+00:12:21.720 --> 00:12:26.159
+did decide was to look at similar crashes where control was
+
+00:12:26.160 --> 00:12:30.319
+lost to analyze where the crashes landed, compared to where
+
+00:12:30.320 --> 00:12:37.399
+the loss of control started. This probability
+
+00:12:37.400 --> 00:12:43.479
+distribution, the circular normal distribution was
+
+00:12:43.480 --> 00:12:47.919
+decided upon. Here you can see that the center has a lot
+
+00:12:47.920 --> 00:12:51.879
+higher chance of finding the wreckage. As you go away
+
+00:12:51.880 --> 00:12:55.399
+from the center, the probability of finding the wreckage
+
+00:12:55.400 --> 00:13:02.319
+decreases a lot. The next thing they looked at was, well,
+
+00:13:02.320 --> 00:13:05.959
+they noticed they had retrieved some dead bodies from the
+
+00:13:05.960 --> 00:13:12.959
+wreckage. So they thought that they could calculate the
+
+00:13:12.960 --> 00:13:18.439
+backward drift on that particular day to find where the
+
+00:13:18.440 --> 00:13:21.479
+crash might've occurred. If they found bodies at a
+
+00:13:21.480 --> 00:13:25.119
+particular location, they can kind of work backwards from
+
+00:13:25.120 --> 00:13:30.665
+that in order to find where the initial crash occurred.
+
+00:13:30.666 --> 00:13:34.719
+So here you can see the probability distribution based off of
+
+00:13:34.720 --> 00:13:40.279
+the backward drift model. Here you see the darker colors
+
+00:13:40.280 --> 00:13:46.159
+have a higher probability of finding the location. So
+
+00:13:46.160 --> 00:13:50.679
+with all these pieces of data, so with that circular 40
+
+00:13:50.680 --> 00:13:54.959
+nautical mile uniform distribution, with that circular
+
+00:13:54.960 --> 00:14:02.199
+normal distribution of comparing similar crashes, as well
+
+00:14:02.200 --> 00:14:07.439
+as with the backward drift, they were able to combine all
+
+00:14:07.440 --> 00:14:08.559
+three of these pieces
+
+00:14:08.560 --> 00:14:14.599
+in order to come up with a final prior distribution of where
+
+00:14:14.600 --> 00:14:19.519
+the wreckage occurred. So this is what the final model
+
+00:14:19.520 --> 00:14:24.719
+they came upon. Here you can see it has that 40 nautical
+
+00:14:24.720 --> 00:14:29.679
+mile radius circle. It has that darker center, which
+
+00:14:29.680 --> 00:14:32.039
+indicates a higher probability because of the
+
+00:14:32.040 --> 00:14:38.959
+crash similarity. Then here you also see along this line
+
+00:14:38.960 --> 00:14:50.799
+has a slightly higher probability due to the backward drift
+
+00:14:50.800 --> 00:14:52.119
+distribution.
+
+00:14:52.120 --> 00:14:56.559
+So the next thing is, since they had performed searches,
+
+00:14:56.560 --> 00:15:00.559
+they decided to incorporate the data from those searches
+
+00:15:00.560 --> 00:15:04.759
+into their new distribution. Here you can see places
+
+00:15:04.760 --> 00:15:08.879
+where they searched initially. If you think about it,
+
+00:15:08.880 --> 00:15:11.399
+you can assume that, well, if you search for something,
+
+00:15:11.400 --> 00:15:14.199
+there's a good chance you'll find it, but not necessarily.
+
+00:15:14.200 --> 00:15:18.439
+Anywhere where they searched, the probability of it
+
+00:15:18.440 --> 00:15:22.839
+finding it there is greatly reduced. It's not zero because
+
+00:15:22.840 --> 00:15:26.879
+obviously you can look for something and miss it, but it kind
+
+00:15:26.880 --> 00:15:31.119
+of reduces the probability that we would expect to find it in
+
+00:15:31.120 --> 00:15:36.679
+those already searched locations. This is the
+
+00:15:36.680 --> 00:15:41.919
+posterior distribution or distribution after counting
+
+00:15:41.920 --> 00:15:44.559
+observations made.
+
+00:15:44.560 --> 00:15:48.759
+Here we can see kind of these cutouts of where the
+
+00:15:48.760 --> 00:15:53.959
+previous searches occurred. This is the final
+
+00:15:53.960 --> 00:15:56.999
+distribution they went off of to perform the subsequent
+
+00:15:57.000 --> 00:16:01.999
+search. In the end, the wreckage was found at a point close to
+
+00:16:02.000 --> 00:16:06.770
+the center here, thus validating this methodology.
+
+NOTE Modifying priors
+
+00:16:06.771 --> 00:16:10.332
+We can see the power of this Bayesian search methodology
+
+00:16:10.333 --> 00:16:13.999
+in the way that we could take information from all the sources we had.
+
+00:16:14.000 --> 00:16:19.237
+We could draw analogies to similar situations.
+
+00:16:19.238 --> 00:16:22.479
+We can quantify these, combine them into a model,
+
+00:16:22.480 --> 00:16:27.893
+and then also update our model according to each observation we make.
+
+00:16:27.894 --> 00:16:30.359
+I think there's a lot of similarities to be drawn with
+
+00:16:30.360 --> 00:16:35.159
+searching on a computer in the sense that when we search for
+
+00:16:35.160 --> 00:16:39.399
+something, there's oftentimes a story we kind of have as to
+
+00:16:39.400 --> 00:16:43.959
+what search terms exist, where we expect to find the file.
+
+00:16:43.960 --> 00:16:46.719
+For example, if you're implementing a new feature, you'll
+
+00:16:46.720 --> 00:16:49.919
+often have some search terms in mind that you think will be
+
+00:16:49.920 --> 00:16:54.719
+relevant. Some search terms, you might think they have a
+
+00:16:54.720 --> 00:16:57.599
+possibility of being relevant, but maybe you're not sure.
+
+00:16:57.600 --> 00:17:02.879
+There's some directories where you know that they're not
+
+00:17:02.880 --> 00:17:07.759
+relevant. There's other criteria like, well, you know that
+
+00:17:07.760 --> 00:17:11.399
+maybe somebody in particular worked on this code.
+
+00:17:11.400 --> 00:17:16.319
+What if you could incorporate that information? Like, I know
+
+00:17:16.320 --> 00:17:21.399
+this author, he's always working on this feature. What if
+
+00:17:21.400 --> 00:17:25.519
+I just give the files that this person works on a higher
+
+00:17:25.520 --> 00:17:32.599
+probability than ones he doesn't work on? Or maybe you think
+
+00:17:32.600 --> 00:17:38.599
+that this is a file that's committed too often. You think
+
+00:17:38.600 --> 00:17:43.439
+that maybe the amount of times of commits it receives
+
+00:17:43.440 --> 00:17:47.719
+should change your probability of this file being
+
+00:17:47.720 --> 00:17:52.839
+relevant. That's where p-search comes in.
+
+00:17:52.840 --> 00:17:57.679
+Its aim is to be a framework in order to incorporate all these
+
+00:17:57.680 --> 00:18:01.359
+sorts of different prior information into your searching
+
+00:18:01.360 --> 00:18:05.999
+process. You're able to say things like, I want files
+
+00:18:06.000 --> 00:18:11.119
+authored by this user to be given higher probability. I want
+
+00:18:11.120 --> 00:18:13.919
+this author to be given a lower priority. I know this author
+
+00:18:13.920 --> 00:18:18.759
+never works on this code. If he has a commit, then lower its
+
+00:18:18.760 --> 00:18:24.679
+probability, or you can specify specific paths, or you can
+
+00:18:24.680 --> 00:18:30.199
+specify multiple search terms, weighing different ones
+
+00:18:30.200 --> 00:18:38.919
+according to how you think those terms should be relevant.
+
+00:18:38.920 --> 00:18:42.079
+So with p-search, we're able to incorporate information
+
+00:18:42.080 --> 00:18:46.279
+from multiple sources. Here, for example, we have a prior
+
+00:18:46.280 --> 00:18:52.079
+of type git author, and we're looking for all of the files
+
+00:18:52.080 --> 00:18:56.719
+that are committed to by Lars. So the more commits he has,
+
+00:18:56.720 --> 00:19:01.399
+the higher probability is given to that file. Suppose
+
+00:19:01.400 --> 00:19:04.559
+there's a feature I know he worked on, but I don't know the
+
+00:19:04.560 --> 00:19:09.159
+file or necessarily even key terms of it. Well, with this, I
+
+00:19:09.160 --> 00:19:12.140
+can incorporate that information.
+
+00:19:12.141 --> 00:19:15.999
+So let's search again. Let's add display.
+
+00:19:16.000 --> 00:19:22.959
+Let's see what responses we get back here. We can add
+
+00:19:22.960 --> 00:19:27.199
+as many of these criteria as we want. We can even specify that
+
+00:19:27.200 --> 00:19:31.519
+the title of the file name should be a certain type. Let's
+
+00:19:31.520 --> 00:19:36.599
+say we're only concerned about C files. We add the file
+
+00:19:36.600 --> 00:19:45.399
+name should contain .c in it. With this, now we
+
+00:19:45.400 --> 00:19:51.319
+notice that all of the C files containing display authored
+
+00:19:51.320 --> 00:19:56.279
+by Lars should be given higher probability. We can
+
+00:19:56.280 --> 00:20:02.719
+continue to add these priors as we feel fit. The workflow
+
+00:20:02.720 --> 00:20:07.519
+that I found helps when searching is that you'll add
+
+00:20:07.520 --> 00:20:11.359
+criteria, you'll see some good results come up and some bad
+
+00:20:11.360 --> 00:20:15.319
+results come up. So you'll often find a pattern in those
+
+00:20:15.320 --> 00:20:18.839
+bad results, like, oh, I don't want test files, or this
+
+00:20:18.840 --> 00:20:22.679
+directory isn't relevant, or something like that. Then
+
+00:20:22.680 --> 00:20:27.199
+you can update your prior distribution, adding its
+
+00:20:27.200 --> 00:20:31.119
+criteria, and then rerun it, and then it will get different
+
+00:20:31.120 --> 00:20:35.159
+probabilities for the files. So in the end, you'll have a
+
+00:20:35.160 --> 00:20:37.639
+list of results that's tailor-made to the thing you're
+
+00:20:37.640 --> 00:20:40.404
+searching for.
+
+NOTE Importance
+
+00:20:40.405 --> 00:20:41.639
+There's a couple of other features I
+
+00:20:41.640 --> 00:20:49.079
+want to go through. One thing is that each of these priors,
+
+00:20:49.080 --> 00:20:55.839
+you can specify the importance. In other words, how
+
+00:20:55.840 --> 00:21:01.119
+important is this particular piece of information to your
+
+00:21:01.120 --> 00:21:05.199
+search? So here, everything is of importance medium. But
+
+00:21:05.200 --> 00:21:07.879
+let's say I really care about something having the word
+
+00:21:07.880 --> 00:21:12.679
+display in it. I'm going to change its importance.
+
+00:21:12.680 --> 00:21:18.599
+Instead of medium, I'll change its importance to high.
+
+00:21:18.600 --> 00:21:23.279
+What that does essentially is things that don't have
+
+00:21:23.280 --> 00:21:28.079
+display in it are given a much bigger penalty and things with
+
+00:21:28.080 --> 00:21:28.128
+the word display in it are rated much higher.
+
+00:21:28.129 --> 00:21:38.559
+With this, we're able to fine-tune the results that we get.
+
+NOTE Complement or inverse
+
+00:21:38.560 --> 00:21:45.639
+Another thing you can do is that you can add the complement or
+
+00:21:45.640 --> 00:21:49.759
+the inverse of certain queries. Let's say you want to
+
+00:21:49.760 --> 00:21:53.239
+search for display, but you don't want it to contain the word
+
+00:21:53.240 --> 00:21:58.039
+frame. With the complement option on, when we create this
+
+00:21:58.040 --> 00:22:01.839
+search prior, now it's going to be searching for frame, but
+
+00:22:01.840 --> 00:22:04.959
+instead of increasing the search score, it's going to
+
+00:22:04.960 --> 00:22:06.999
+decrease it if it contains the word frame.
+
+00:22:07.000 --> 00:22:14.319
+So here, things related to frame are kind of
+
+00:22:14.320 --> 00:22:18.079
+deprioritized. We can also say that we really don't want
+
+00:22:18.080 --> 00:22:21.599
+the search to contain the word frame by increasing its
+
+00:22:21.600 --> 00:22:27.199
+importance. So with all these composable pieces, we can
+
+00:22:27.200 --> 00:22:33.412
+create kind of a search that's tailor-made to our needs.
+
+00:22:33.413 --> 00:22:35.759
+That concludes this talk. There's a lot more I could talk
+
+00:22:35.760 --> 00:22:37.799
+about with regards to research, so definitely follow the
+
+00:22:37.800 --> 00:22:40.639
+project if you're interested. Thanks for watching, and I
+
+00:22:40.640 --> 00:22:42.240
+hope you enjoy the rest of the conference.
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
new file mode 100644
index 00000000..1ab5dd02
--- /dev/null
+++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt
@@ -0,0 +1,842 @@
+WEBVTT indexed by sachac
+
+00:00:00.000 --> 00:00:03.667
+... mentally over the next couple of days, but I can assure you
+
+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:12.775
+without further ado, I want to say hi to Vincent.
+
+00:00:12.776 --> 00:00:15.417
+Hi, Vincent.
+
+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.942 --> 00:00:25.704
+to go first. It's mostly the time zone for you which decided
+
+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
+exactly. So I'm living there now and it's very late. It's
+
+00:00:33.040 --> 00:00:37.319
+really funny to see everyone saying good morning in the
+
+00:00:37.320 --> 00:00:39.959
+chat. It's always the same for me. So personally, I'm in
+
+00:00:39.960 --> 00:00:43.959
+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: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:55.182 --> 00:00:56.521
+because you've just presented something
+
+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
+
+00:01:01.960 --> 00:01:05.279
+record, how I got started with Org Roam and stuff like this.
+
+00:01:05.280 --> 00:01:08.799
+So, unless you've got anything else to add on top of your
+
+00:01:08.800 --> 00:01:11.839
+presentation that wasn't able to fit in, I suggest we just
+
+00:01:11.840 --> 00:01:16.559
+start taking questions. All right. So yeah, right now I'm
+
+00:01:16.560 --> 00:01:19.439
+reading the question from IRC and also from the pad. So I
+
+00:01:19.440 --> 00:01:23.159
+guess I'm gonna take what's already written there.
+
+NOTE 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!
+
+00:01:23.160 --> 00:01:27.359
+So the first one is asking, I'd be interested in how to start this
+
+00:01:27.360 --> 00:01:30.239
+journey to write academic paper in org-roam when not having
+
+00:01:30.240 --> 00:01:36.639
+used Emacs org mode yet. So I saw this one before and I guess it
+
+00:01:36.640 --> 00:01:43.039
+would be possible to do that, to use Org documents only
+
+00:01:43.040 --> 00:01:46.759
+as the way that you are writing papers. Maybe you can
+
+00:01:46.760 --> 00:01:51.959
+just use that as a template that you're going to export.
+
+00:01:51.960 --> 00:01:54.959
+If you are familiar with LaTeX, it's going to be more useful,
+
+00:01:54.960 --> 00:01:59.599
+and maybe more convenient to work with inside of
+
+00:01:59.600 --> 00:02:04.999
+Emacs. But then I'm not 100% sure if that's... How do you say
+
+00:02:05.000 --> 00:02:10.799
+that? Maybe, in my opinion, the benefits of using
+
+00:02:10.800 --> 00:02:14.679
+org-roam in that setup is that you can link the things. For
+
+00:02:14.680 --> 00:02:18.839
+me, I'm using the search function for org-roam to just
+
+00:02:18.840 --> 00:02:21.959
+navigate between the files. So that's really some, a good
+
+00:02:21.960 --> 00:02:26.119
+advantage, but like, yeah, that could be, like Leo said in
+
+00:02:26.120 --> 00:02:28.039
+the presentation, that's some, maybe that's something you
+
+00:02:28.040 --> 00:02:35.839
+can start using org-mode with to write papers. So yeah.
+
+NOTE Q: How about connecting Emacs Org-Roam to Zotero? Is that something you have experience with?
+
+00:02:35.840 --> 00:02:38.879
+Second question. So how about connecting Emacs or Roam
+
+00:02:38.880 --> 00:02:42.079
+to Zotero? Is that something that you have experience with?
+
+00:02:42.080 --> 00:02:47.119
+Not at all. Actually, I used briefly Zotero in the past and I
+
+00:02:47.120 --> 00:02:51.439
+really didn't like it or didn't really get into that. I don't
+
+00:02:51.440 --> 00:02:55.599
+know. But right now,
+
+NOTE Q: Out of curiosity, how do you manage your bibliography? Do you do it from inside Emacs, or using a separate program like Zotero?
+
+00:02:55.600 --> 00:03:00.319
+I don't connect that at all. The question after, out of
+
+00:03:00.320 --> 00:03:03.559
+curiosity, how do you manage your bibliography? Do you do it
+
+00:03:03.560 --> 00:03:06.519
+from inside Emacs or using a separate program, ex: Zotero?
+
+00:03:06.520 --> 00:03:09.119
+Because personally, I have struggled to do it from Emacs,
+
+00:03:09.120 --> 00:03:13.879
+though I have wanted to for some time. So the way I manage that
+
+00:03:13.880 --> 00:03:20.799
+is I just have a couple of .bib files that I edit by hand, where
+
+00:03:20.800 --> 00:03:25.359
+I put the reference when I find them.
+
+00:03:25.360 --> 00:03:28.599
+And yeah, I just showed very briefly in the presentation,
+
+00:03:28.600 --> 00:03:34.119
+but the way.
+
+00:03:34.120 --> 00:03:39.519
+One of the great thing with the org reference system is that
+
+00:03:39.520 --> 00:03:43.239
+if you have your bibliographic files that are connected to
+
+00:03:43.240 --> 00:03:47.959
+that system, you can just like, you can put the link, the
+
+00:03:47.960 --> 00:03:51.879
+reference to the paper, like click on it from your org note,
+
+00:03:51.880 --> 00:03:56.479
+and then you can open the PDF. You can open the DOI link to open
+
+00:03:56.480 --> 00:04:00.719
+the whatever publisher page.
+
+00:04:00.720 --> 00:04:10.159
+So no, I don't use Zotero and I just edit bib or bib files by
+
+00:04:10.160 --> 00:04:12.959
+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:19.024
+org-roam-bibtex is actually one of the packages that I
+
+00:04:19.025 --> 00:04:25.399
+developed and I got it working with Zotero because for me it
+
+00:04:25.400 --> 00:04:28.524
+was convenient. I was studying humanities and for me it was
+
+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
+Zotero and just post-processing them a little bit but it is
+
+00:04:36.800 --> 00:04:40.279
+possible to make org-roam, org-roam-bibtex and Zotero
+
+00:04:40.280 --> 00:04:44.959
+work together. But it's a little bit of an involved process to
+
+00:04:44.960 --> 00:04:49.439
+get everything working in Emacs.
+
+00:04:49.440 --> 00:04:54.519
+Yeah, for sure. And
+
+00:04:54.520 --> 00:05:01.999
+yeah, I guess the way I'm doing it, I understand the appeal
+
+00:05:02.000 --> 00:05:03.839
+for having it integrated in the browser. Maybe
+
+00:05:03.840 --> 00:05:06.279
+that's something I should look up, actually, because right
+
+00:05:06.280 --> 00:05:09.359
+now I just like doing it very much by hand, like going on the
+
+00:05:09.360 --> 00:05:15.199
+publisher page and copying the bibtex block and
+
+00:05:15.200 --> 00:05:20.039
+just using putting that in my file. Yes, it can be not a very
+
+00:05:20.040 --> 00:05:23.359
+efficient workflow on that side. But after that, you're
+
+00:05:23.360 --> 00:05:26.599
+having the PDF and having it inside the note.
+
+00:05:26.600 --> 00:05:30.759
+Yeah, it's great. Yeah. To some extent, it kind of depends on
+
+00:05:30.760 --> 00:05:33.319
+the reference system that is used by the field in which you
+
+00:05:33.320 --> 00:05:36.279
+are or the university in which you're publishing. Because
+
+00:05:36.280 --> 00:05:39.519
+sometimes, you know, you're going to have some basic BibTeX
+
+00:05:39.520 --> 00:05:41.479
+file and sometimes you're going to have better BibTeX
+
+00:05:41.480 --> 00:05:44.959
+files. And those are very different metadata that you need
+
+00:05:44.960 --> 00:05:49.119
+to reconcile. And depending on which LaTeX compiler you're
+
+00:05:49.120 --> 00:05:52.439
+using, be it zLaTeX[??], be it regular LaTeX, lualatex, it's
+
+00:05:52.440 --> 00:05:55.439
+going to be all different. So it's a whole can of worms that
+
+00:05:55.440 --> 00:05:57.799
+I'm not sure we want to be opening now. But if you are
+
+00:05:57.800 --> 00:06:00.999
+interested and if you're not too attached about getting
+
+00:06:01.000 --> 00:06:03.679
+everything right, it's really easy to get started with
+
+00:06:03.680 --> 00:06:06.319
+stuff like org-roam-bibtex. It's supposed to get you
+
+00:06:06.320 --> 00:06:11.319
+most of the way down to a working setup. And if you need to get
+
+00:06:11.320 --> 00:06:14.359
+everything working down to the comma based on your
+
+00:06:14.360 --> 00:06:16.479
+reference system, that's going to be a little harder. But
+
+00:06:16.480 --> 00:06:19.439
+it's possible. I managed to do it and many people actually
+
+00:06:19.440 --> 00:06:22.599
+managed to do it. Okay, anyway, so let's move on to the next
+
+NOTE Q: How do you start a new document?
+
+00:06:22.600 --> 00:06:26.679
+question. All right, so the next question asking how do you
+
+00:06:26.680 --> 00:06:30.999
+start a new document? There are a lot of headers you have to
+
+00:06:31.000 --> 00:06:34.639
+set up. Do you use a template? I'm curious if you use your
+
+00:06:34.640 --> 00:06:38.839
+snippets to deal with all of these LaTeX org metacommands.
+
+00:06:38.840 --> 00:06:44.759
+So I don't use a snippets template of any kind for that.
+
+00:06:44.760 --> 00:06:47.279
+Probably I should. That's actually a good idea. I'm
+
+00:06:47.280 --> 00:06:51.279
+probably going to look into that. No, the way I do actually is
+
+00:06:51.280 --> 00:06:56.199
+I just reuse some previous documents. I copy it, delete all
+
+00:06:56.200 --> 00:07:01.439
+the contents and adjust it until it works the way I like.
+
+00:07:01.440 --> 00:07:09.679
+The main issue in general after that step is to make it work
+
+00:07:09.680 --> 00:07:13.999
+with the template I receive and Let's say if I have some
+
+00:07:14.000 --> 00:07:20.839
+template that needs to work with another LaTeX compiler,
+
+00:07:20.840 --> 00:07:26.599
+I'm probably going to try to copy an existing file that I have
+
+00:07:26.600 --> 00:07:30.959
+that uses the same compiler to save me some work. But yeah,
+
+00:07:30.960 --> 00:07:37.119
+no, I don't use any snippet or something. Probably I should,
+
+00:07:37.120 --> 00:07:40.879
+but I'm just doing it the quick and dirty way to just copy some
+
+00:07:40.880 --> 00:07:41.719
+existing thing.
+
+NOTE Q: What do you think of using citar with org-roam-bibtex?
+
+00:07:41.720 --> 00:07:48.319
+Then what do you think of citar with org-roam-bibtex? It seems
+
+00:07:48.320 --> 00:07:55.999
+that bibtex completion is tied to org-roam-bibtex. I don't
+
+00:07:56.000 --> 00:08:02.079
+know. I never really looked into citar that much. I
+
+00:08:02.080 --> 00:08:06.799
+don't know about that. I don't know either, so I'm not going
+
+00:08:06.800 --> 00:08:07.759
+to be able to help on this one.
+
+00:08:07.760 --> 00:08:17.119
+Because yeah, the bibtex completion is tied to the overall
+
+00:08:17.120 --> 00:08:24.799
+bibtex. I guess so. So what I'm interpreting, because I do,
+
+00:08:24.800 --> 00:08:30.039
+so BibTeX completion is the single motor that drives helm
+
+00:08:30.040 --> 00:08:32.719
+BibTeX and Ivy BibTeX. Perhaps there's another
+
+00:08:32.720 --> 00:08:35.679
+alternative now that is using the Vertico stack for
+
+00:08:35.680 --> 00:08:40.399
+completion. But org-roam-bibtex was interfacing with BibTeX
+
+00:08:40.400 --> 00:08:46.679
+completion to retrieve all the references from a bib file.
+
+00:08:46.680 --> 00:08:50.599
+and I assume citar would be something very similar in a way
+
+00:08:50.600 --> 00:08:54.039
+that it interfaces with a bib file, but I couldn't tell you
+
+00:08:54.040 --> 00:08:57.439
+more. I need to explore a little more and sadly I haven't
+
+00:08:57.440 --> 00:09:00.759
+touched any of this stack in like three years, so I'm a little
+
+00:09:00.760 --> 00:09:03.199
+out of touch. I guess this is what comes with leaving
+
+00:09:03.200 --> 00:09:07.519
+academia to go work as a corporate developer. I'm no longer
+
+00:09:07.520 --> 00:09:10.319
+so interested in the publishing process, even though I'm
+
+00:09:10.320 --> 00:09:12.799
+obviously very appreciative of people who still do, and
+
+00:09:12.800 --> 00:09:13.679
+especially people who use
+
+00:09:13.680 --> 00:09:20.239
+Yeah, same here. I definitely going to look into the citar
+
+00:09:20.240 --> 00:09:23.399
+package to see what's possible. Maybe can be using in some
+
+00:09:23.400 --> 00:09:26.319
+way that is useful for me. Yeah.
+
+NOTE Q: Most academic journals insist that papers are formatted in their own custom LaTeX documentclass.  Does org-roam make it easy to do that?
+
+00:09:26.320 --> 00:09:30.919
+And if I go to the next question, so most academic journal
+
+00:09:30.920 --> 00:09:33.639
+insist that paper are formatted in their own custom LaTeX
+
+00:09:33.640 --> 00:09:38.199
+document class. Does org-roam make it easy to do that? The
+
+00:09:38.200 --> 00:09:43.239
+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:48.000
+Actually, that's also why I made the presentation, because
+
+00:09:48.001 --> 00:09:51.940
+if someone has a solution, I would gladly take it. No, the way
+
+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:09:57.501 --> 00:10:09.582
+plus. Yeah, exactly. So I just make a custom org-latex class with the
+
+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
+that to redefine like stuff like section and subsection,
+
+00:10:19.360 --> 00:10:24.279
+but for me, I just, it shows in the slide where I just map the
+
+00:10:24.280 --> 00:10:27.239
+section to the same section. I just changed the name of the
+
+00:10:27.240 --> 00:10:33.719
+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 TeX template that is
+
+00:10:39.080 --> 00:10:48.519
+provided either in headers, in LaTeX headers at the top or
+
+00:10:48.520 --> 00:10:56.079
+Yeah, or just on a LaTeX block in the body of the document if
+
+00:10:56.080 --> 00:11:02.039
+that's needed, for example, for the acknowledgement.
+
+00:11:02.040 --> 00:11:05.759
+Sometimes they need some different formatting, but no,
+
+00:11:05.760 --> 00:11:09.079
+it's not really easy because it needs to modify some
+
+00:11:09.080 --> 00:11:12.359
+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.
+
+00:11:15.720 --> 00:11:18.799
+So that's a little bit some upfront work to do. But once it's
+
+00:11:18.800 --> 00:11:22.159
+done, your notes are going to be exported exactly like the
+
+00:11:22.160 --> 00:11:27.319
+template and you don't have to worry about it. Yeah, it's an
+
+00:11:27.320 --> 00:11:32.679
+interesting topic because the thing about, on one side, you
+
+00:11:32.680 --> 00:11:36.159
+know, you want to have, when you're using LaTeX, it kind of
+
+00:11:36.160 --> 00:11:39.359
+translates into you caring a lot about the document that you
+
+00:11:39.360 --> 00:11:42.879
+produce. Either you care about how quickly you can turn a
+
+00:11:42.880 --> 00:11:46.719
+plain text document into a very nicely formatted PDF at the
+
+00:11:46.720 --> 00:11:52.239
+end, or, you know, you just care about the output of your
+
+00:11:52.240 --> 00:11:54.439
+documents, making sure that everything is properly
+
+00:11:54.440 --> 00:11:57.039
+formatted. We were talking about references just before,
+
+00:11:57.040 --> 00:12:00.239
+you know, the formatting rule for references are highly
+
+00:12:00.240 --> 00:12:04.319
+dependent upon the manual that you're using and, you know,
+
+00:12:04.320 --> 00:12:07.159
+some people really care about this. And what I found in my
+
+00:12:07.160 --> 00:12:09.799
+particular experience, my own personal experience
+
+00:12:09.800 --> 00:12:15.199
+writing for academia, was that I was more in the latter crowd
+
+00:12:15.200 --> 00:12:17.839
+that really cared about the output format and making sure
+
+00:12:17.840 --> 00:12:20.599
+everything was correct and it's really a struggle to get
+
+00:12:20.600 --> 00:12:23.519
+everything working especially when you're transpiling
+
+00:12:23.520 --> 00:12:27.199
+from Org Mode documents straight into LaTeX. You're
+
+00:12:27.200 --> 00:12:30.119
+obviously going to be resorting to a number of hacks to get
+
+00:12:30.120 --> 00:12:32.439
+everything working like Vincent just mentioned with the
+
+00:12:32.440 --> 00:12:36.519
+class or you're going to end up with many imported files just
+
+00:12:36.520 --> 00:12:39.999
+to get everything working, but really you're fighting
+
+00:12:40.000 --> 00:12:42.839
+against the tide if you want to get something a little
+
+00:12:42.840 --> 00:12:45.759
+different from what is shipping with Walmart. Maybe
+
+00:12:45.760 --> 00:12:48.479
+everything has gotten better since I was writing my papers,
+
+00:12:48.480 --> 00:12:53.879
+but generally... Kindly disagree. Yeah, go on. I kindly
+
+00:12:53.880 --> 00:12:57.159
+disagree. I actually, I'm surprised that a lot of template
+
+00:12:57.160 --> 00:13:00.679
+is so complex that you don't just change the document class,
+
+00:13:00.680 --> 00:13:03.359
+but also need to do something else. I'd say it's rather
+
+00:13:03.360 --> 00:13:05.919
+uncommon. I guess it depends on the area of your search.
+
+00:13:05.920 --> 00:13:12.599
+Yeah, exactly. I mean, that's it. It just needs CLS and
+
+00:13:12.600 --> 00:13:17.559
+that's all. Yeah, but it really depends on, as you said, on
+
+00:13:17.560 --> 00:13:19.639
+the field in which you're publishing. Some fields are a
+
+00:13:19.640 --> 00:13:22.599
+little more lax with their rules. And just the fact that you
+
+00:13:22.600 --> 00:13:26.479
+can introduce mathematic formulas kind of makes LaTeX the
+
+00:13:26.480 --> 00:13:29.919
+de facto for publishing math documents. But when you're
+
+00:13:29.920 --> 00:13:33.599
+doing humanities, they're more attached to other kinds of
+
+00:13:33.600 --> 00:13:36.879
+formatting. So I think things are much better, anyway,
+
+00:13:36.880 --> 00:13:42.919
+since I started five years ago. Oh, yeah. I have heard from
+
+00:13:42.920 --> 00:13:46.639
+humanities people Microsoft Word. Yes. Sadly, that's the
+
+00:13:46.640 --> 00:13:51.879
+format we're fighting against. Yeah. As for document,
+
+00:13:51.880 --> 00:13:57.079
+yeah, for LaTeX classes, it is a customization and it is the
+
+00:13:57.080 --> 00:14:00.319
+right way to customize this thing, that's all. I'm not sure
+
+00:14:00.320 --> 00:14:03.999
+why it's a hack. It's not a hack. It's an actual user
+
+00:14:04.000 --> 00:14:08.959
+customization. Right. So, we've got about four more
+
+00:14:08.960 --> 00:14:13.559
+minutes of question. Vincent, we've got a couple of Yeah. So
+
+00:14:13.560 --> 00:14:15.319
+I've got a little voice talking in my ear telling me that
+
+00:14:15.320 --> 00:14:17.839
+exactly the same thing. So we've got about two more
+
+00:14:17.840 --> 00:14:21.159
+questions. Vincent, do you want to field them? Sure. So, are
+
+NOTE Q: Are you using zotra or org-ref?
+
+00:14:21.160 --> 00:14:27.799
+you using Zotra (sending some link) or org-ref? No, I don't.
+
+00:14:27.800 --> 00:14:31.879
+I've never heard of Zotra, actually. Looking that very
+
+00:14:31.880 --> 00:14:34.639
+briefly. That's something I'm going to have to look into.
+
+00:14:34.640 --> 00:14:38.519
+Apparently, the short for Zotero translator, so that might
+
+00:14:38.520 --> 00:14:41.759
+be something useful for me since I'm not using Zotero yet,
+
+00:14:41.760 --> 00:14:45.119
+maybe trying to combine. But no, I've never really tried
+
+NOTE Q: How much of this is tied to org-roam specifically?
+
+00:14:45.120 --> 00:14:52.519
+these, but I will. Then the last question, how much of this is
+
+00:14:52.520 --> 00:14:59.479
+tied to Org-roam specifically? Not a lot. Actually apart
+
+00:14:59.480 --> 00:15:02.959
+from the org-roam-bibtex, I think.
+
+00:15:02.960 --> 00:15:11.919
+Maybe I'm mixing up stuff there. But no, not a lot actually.
+
+00:15:11.920 --> 00:15:14.999
+It's just the fact that I'm using that as a in my org-roam
+
+00:15:15.000 --> 00:15:22.159
+system. But apart from that, most of, I mean, actually all of
+
+00:15:22.160 --> 00:15:27.519
+the exports can be done from a normal org-note or any other
+
+00:15:27.520 --> 00:15:31.799
+knowledge management system that you do with org-notes. So
+
+00:15:31.800 --> 00:15:34.119
+no, it's not specifically tied to org-roam, just that
+
+00:15:34.120 --> 00:15:38.399
+that's the way I'm using it. And I'm showing it this way, but
+
+00:15:38.400 --> 00:15:41.759
+yeah, actually the export process can be, can be done with,
+
+00:15:41.760 --> 00:15:49.839
+Yes, specifically tight work room. Yeah, just confirming
+
+00:15:49.840 --> 00:15:54.519
+this, the only way Org Roam intervenes into this process is
+
+00:15:54.520 --> 00:15:57.439
+just referencing
+
+00:15:57.440 --> 00:16:00.319
+bibliography elements. It just kind of intercedes a little
+
+00:16:00.320 --> 00:16:03.319
+bit between what Org Roam usually does. But when it comes to
+
+00:16:03.320 --> 00:16:08.759
+the exports to LaTeX and PDF eventually, that's completely
+
+00:16:08.760 --> 00:16:13.279
+deferring to org exports. So, ox-latex and all of this. So,
+
+00:16:13.280 --> 00:16:16.039
+we are not intervening in any way into this transpiling
+
+00:16:16.040 --> 00:16:20.719
+format. One comment. Yeah, I don't know if I imagine it is,
+
+00:16:20.720 --> 00:16:25.759
+but it looked from the slides that it was our graph was it.
+
+00:16:25.760 --> 00:16:35.439
+Sorry, that it was? org-ref, org-ref.
+
+00:16:35.440 --> 00:16:42.719
+Yes. Because it is a link system for citations. Built-in
+
+00:16:42.720 --> 00:16:46.359
+citations, which is, there is a built-in citation system in
+
+00:16:46.360 --> 00:16:50.639
+art mode. It uses, it doesn't use links. It has a special way
+
+00:16:50.640 --> 00:16:57.359
+to cite things. Yeah, because I believe, yeah, go on please,
+
+00:16:57.360 --> 00:17:01.519
+Vincent. No, I just wanted to say, in that case, I'm using the
+
+00:17:01.520 --> 00:17:10.119
+link with the cite command. I'm not using the org-roam link
+
+00:17:10.120 --> 00:17:14.079
+for the reference. I didn't really show that very
+
+00:17:14.080 --> 00:17:17.679
+carefully. But then, yeah, it's a site element that is
+
+00:17:17.680 --> 00:17:21.639
+exported. So the roam part is just like, you can access the
+
+00:17:21.640 --> 00:17:26.519
+org notes that you have attached to a reference paper. But
+
+00:17:26.520 --> 00:17:31.879
+that's it. Okay, because I was confused by why the
+
+00:17:31.880 --> 00:17:35.919
+bibliography is a link, why style is a link, because it is the
+
+00:17:35.920 --> 00:17:37.239
+approach org-ref uses.
+
+00:17:37.240 --> 00:17:47.839
+Ah, right. Okay, I see. Yeah, the thing is, actually I don't
+
+00:17:47.840 --> 00:17:52.159
+know why, but In my experience, using the org-roam,
+
+00:17:52.160 --> 00:17:57.599
+org-roam-bibtex links doesn't export or doesn't export
+
+00:17:57.600 --> 00:18:01.999
+properly. So like adding them with the org-ref-cite worked
+
+00:18:02.000 --> 00:18:05.359
+better. So that's, that's why I'm using these. If I may
+
+00:18:05.360 --> 00:18:07.439
+interject. If you're using org-ref-cite, you're using
+
+00:18:07.440 --> 00:18:11.319
+org-ref-for-export, which is slightly different. I'm
+
+00:18:11.320 --> 00:18:14.039
+going to interject very quickly because sadly we are a
+
+00:18:14.040 --> 00:18:15.919
+little pressed for time because we are heading into the next
+
+00:18:15.920 --> 00:18:18.559
+discussion. So just very quickly, if you want to continue
+
+00:18:18.560 --> 00:18:21.279
+the discussion, the BBB room is available at
+
+00:18:21.280 --> 00:18:24.319
+emacsconf-org. You can go to the talk and get the link to join
+
+00:18:24.320 --> 00:18:27.319
+the BBB. And the stream will be moving on to the next stream in
+
+00:18:27.320 --> 00:18:30.239
+about 5 to 10 seconds. So I'll see you on the other side. And
+
+00:18:30.240 --> 00:18:36.439
+thank you, Vincent. Thank you. All right, sorry for cutting
+
+00:18:36.440 --> 00:18:38.839
+a little abruptly. It's because we use crontabs to move to
+
+00:18:38.840 --> 00:18:42.519
+the next talk. And sadly, I don't have any leeway on this. So
+
+00:18:42.520 --> 00:18:45.279
+feel free to continue the discussion. I'll be moving on to
+
+00:18:45.280 --> 00:18:48.639
+make sure everything is working. So enjoy the discussion.
+
+00:18:48.640 --> 00:19:00.720
+Thank you very much. Bye-bye.
diff --git a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt
new file mode 100644
index 00000000..03e28951
--- /dev/null
+++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:20.129
+Introduction
+
+00:00:20.130 --> 00:01:21.376
+What?
+
+00:01:21.377 --> 00:02:16.214
+Why?
+
+00:02:16.215 --> 00:03:35.319
+Challenges
+
+00:03:35.320 --> 00:04:08.060
+Basic Org to PDF
+
+00:04:08.061 --> 00:04:32.303
+How to LaTeX properly, though?
+
+00:04:32.304 --> 00:04:54.624
+LaTeX-specific headers
+
+00:04:54.625 --> 00:05:31.394
+Using a formatting class file
+
+00:05:31.395 --> 00:06:13.137
+Using a different LaTeX command
+
+00:06:13.138 --> 00:07:09.719
+References links for bibliography
+
+00:07:09.720 --> 00:07:41.239
+Examples
+
+00:07:41.240 --> 00:10:07.400
+Tags
diff --git a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt
new file mode 100644
index 00000000..11fcffad
--- /dev/null
+++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt
@@ -0,0 +1,490 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.799
+Okay. Hi, everyone. My name is Vincent. I'm a PhD student in
+
+00:00:04.800 --> 00:00:07.439
+Nanzan University, Japan. Today I'm going to present to
+
+00:00:07.440 --> 00:00:11.799
+you how I'm using Org notes and Org Roam to write academic
+
+00:00:11.800 --> 00:00:14.999
+papers. The slides I'm going to present here are available
+
+00:00:15.000 --> 00:00:17.305
+in the Git repository, so you can check them later
+
+00:00:17.306 --> 00:00:20.129
+if you want to.
+
+NOTE What?
+
+00:00:20.130 --> 00:00:21.910
+Firstly what are we talking about here?
+
+00:00:21.911 --> 00:00:26.692
+So in general, it's possible, if you have any Org nodes,
+
+00:00:26.693 --> 00:00:31.315
+to export them as LaTeX. Given some extra configuration,
+
+00:00:31.316 --> 00:00:34.956
+it's possible, basically, to reproduce any LaTeX setup
+
+00:00:34.957 --> 00:00:42.031
+that you would use to create documents with an Org file.
+
+00:00:42.032 --> 00:00:46.753
+In my case, I'm using that system to take some notes
+
+00:00:46.754 --> 00:00:48.453
+that I have in my org-roam system
+
+00:00:48.454 --> 00:00:52.239
+and to export that into finished academic papers
+
+00:00:52.240 --> 00:00:56.279
+that you can submit eventually to a conference and so on.
+
+00:00:56.280 --> 00:00:59.439
+Actually, before I submit that proposal, after I submit
+
+00:00:59.440 --> 00:01:03.559
+that proposal, I just noticed that Mike Hamrick in last
+
+00:01:03.560 --> 00:01:07.879
+year's EmacsConf made a very extensive presentation about
+
+00:01:07.880 --> 00:01:13.039
+org export. But in here, I just want to showcase my usage of
+
+00:01:13.040 --> 00:01:16.959
+org-roam and to present what are the configuration I'm
+
+00:01:16.960 --> 00:01:21.376
+using to be able to achieve that. Why do that?
+
+NOTE Why?
+
+00:01:21.377 --> 00:01:23.037
+In general, like I said, I'm using that
+
+00:01:23.038 --> 00:01:26.639
+as part of my writing system, so in
+
+00:01:26.640 --> 00:01:30.239
+having org-roam notes that can be exported as a document
+
+00:01:30.240 --> 00:01:34.159
+make for a great workflow in my opinion. It makes Org even
+
+00:01:34.160 --> 00:01:38.839
+more versatile, so if you use that for maybe writing code in
+
+00:01:38.840 --> 00:01:41.599
+the literate programming, now you're going to be also able
+
+00:01:41.600 --> 00:01:47.559
+to export that into any format you want.
+
+00:01:47.560 --> 00:01:49.879
+The Org notes are very clean. In my opinion, it looks
+
+00:01:49.880 --> 00:01:53.799
+better to work in Org rather than editing LaTeX code
+
+00:01:53.800 --> 00:01:58.959
+directly. The centralized bibliography system is also
+
+00:01:58.960 --> 00:02:02.559
+great because it allows to have just a few notes that you can
+
+00:02:02.560 --> 00:02:06.599
+reference everywhere and have links to them. Of course
+
+00:02:06.600 --> 00:02:09.479
+everything is happening inside of Emacs so you have access
+
+00:02:09.480 --> 00:02:13.359
+to all the tools you are used to like Magit or Projectile and
+
+00:02:13.360 --> 00:02:16.214
+whatnot.
+
+NOTE Challenges
+
+00:02:16.215 --> 00:02:18.599
+However, to quote one of the funniest recent
+
+00:02:18.600 --> 00:02:22.999
+video about Emacs: "[With LaTeX,] I used to spend hours trying to
+
+00:02:23.000 --> 00:02:25.599
+get the image on the right page. Now I use Org Mode LaTeX and
+
+00:02:25.600 --> 00:02:28.759
+just accept it's impossible." Like all the jokes in that
+
+00:02:28.760 --> 00:02:32.799
+video, it lands in very well because there is some truth to
+
+00:02:32.800 --> 00:02:38.239
+that in that with that system you are not getting rid of
+
+00:02:38.240 --> 00:02:41.239
+the complexity of LaTeX, so if you have problems, you're going to
+
+00:02:41.240 --> 00:02:45.959
+have to deal with the very long logs. It's a layer on top of
+
+00:02:45.960 --> 00:02:50.519
+LaTeX, so if you need to debug your configuration, if you
+
+00:02:50.520 --> 00:02:52.999
+want to adjust something specific, you would need to be
+
+00:02:53.000 --> 00:02:58.879
+proficient in LaTeX and also in being very at ease with
+
+00:02:58.880 --> 00:03:03.119
+your Emacs configuration. The way to use the Org export is
+
+00:03:03.120 --> 00:03:06.639
+less documented than using LaTeX so if you want to implement
+
+00:03:06.640 --> 00:03:09.959
+something, probably it's going to be described in pure LaTeX,
+
+00:03:09.960 --> 00:03:13.599
+and then you're going to need to adjust that to make it work
+
+00:03:13.600 --> 00:03:17.679
+inside your Org files. I explained before that the
+
+00:03:17.680 --> 00:03:20.959
+bibliography system is great, although it's very picky
+
+00:03:20.960 --> 00:03:26.359
+on the way it works, especially to be exported. Depending
+
+00:03:26.360 --> 00:03:29.239
+on the template you are using, you might run into issues
+
+00:03:29.240 --> 00:03:33.199
+with some packages that are in conflict, so there is
+
+00:03:33.200 --> 00:03:35.319
+that to be taken in mind.
+
+NOTE Basic Org to PDF
+
+00:03:35.320 --> 00:03:41.519
+In general, if you have a Org note, you can simply export it
+
+00:03:41.520 --> 00:03:46.199
+with a C-c C-e and l o with the menu that appears. I can
+
+00:03:46.200 --> 00:03:49.479
+show that briefly: C-e, then you have the menu. You can select
+
+00:03:49.480 --> 00:03:53.519
+l and o to export. That works very well. In general,
+
+00:03:53.520 --> 00:03:56.959
+with that, you are able to deal with everything that you have
+
+00:03:56.960 --> 00:03:59.959
+in your normal Org notes. If you have images, tables,
+
+00:03:59.960 --> 00:04:03.559
+links, it's going to be exported in a way that looks decent.
+
+00:04:03.560 --> 00:04:08.060
+That's what we are starting with.
+
+NOTE How to LaTeX properly, though?
+
+00:04:08.061 --> 00:04:11.543
+However, if you want to make a publication,
+
+00:04:11.544 --> 00:04:13.479
+if you have a template that you receive
+
+00:04:13.480 --> 00:04:17.479
+from a conference or whatnot, you want to be able to adapt
+
+00:04:17.480 --> 00:04:20.519
+your Org notes to be able to export it exactly the way you
+
+00:04:20.520 --> 00:04:23.039
+want. I'm going to present the four points that I'm
+
+00:04:23.040 --> 00:04:25.919
+showing here that are, for me, the elements that you need to
+
+00:04:25.920 --> 00:04:29.879
+be careful with when you try to work with templates and
+
+00:04:29.880 --> 00:04:32.303
+exporting to LaTeX.
+
+NOTE LaTeX-specific headers
+
+00:04:32.304 --> 00:04:34.525
+Firstly, you have headers. So basically,
+
+00:04:34.526 --> 00:04:37.119
+this allows to add LaTeX elements that are going
+
+00:04:37.120 --> 00:04:41.559
+to be at the top of the file. You're going to have the title.
+
+00:04:41.560 --> 00:04:44.119
+You're going to have your extra packages here. You're going
+
+00:04:44.120 --> 00:04:46.959
+to have your class. I'm going to present that later. That's
+
+00:04:46.960 --> 00:04:50.479
+the part that you're going to adjust to make it look like the
+
+00:04:50.480 --> 00:04:54.624
+.tex template that you receive.
+
+NOTE Using a formatting class file
+
+00:04:54.625 --> 00:04:58.625
+Then you have the formatting class file. That's a .cls file
+
+00:04:58.626 --> 00:05:01.786
+that you would receive as a part of the template.
+
+00:05:01.787 --> 00:05:08.147
+This one is used instead of the typical doc class like article.
+
+00:05:08.148 --> 00:05:10.588
+The way I'm using them is to add an entry,
+
+00:05:10.589 --> 00:05:12.759
+like add an element to the list or get a
+
+00:05:12.760 --> 00:05:18.599
+class in my Emacs init. This way I can use the CLS file
+
+00:05:18.600 --> 00:05:22.719
+directly and also give the parameters that I want. In that
+
+00:05:22.720 --> 00:05:26.402
+case, I'm going to have a apris.cls next to my Org note,
+
+00:05:26.403 --> 00:05:31.394
+and it's going to be able to to use it.
+
+NOTE Using a different LaTeX command
+
+00:05:31.395 --> 00:05:33.599
+A third element is, in some cases,
+
+00:05:33.600 --> 00:05:38.359
+you might want to use a different LaTeX compiler to build
+
+00:05:38.360 --> 00:05:41.719
+your project, to build your notes. That can be done per
+
+00:05:41.720 --> 00:05:45.319
+file, per note, in my opinion, that's the most flexible way,
+
+00:05:45.320 --> 00:05:48.519
+by editing, by adding this line as the very first line of your
+
+00:05:48.520 --> 00:05:52.599
+file and thus changing the LaTeX PDF process variable. And
+
+00:05:52.600 --> 00:06:00.461
+in there, you can put multiple commands in a row.
+
+00:06:00.462 --> 00:06:01.959
+For example you can have the shell
+
+00:06:01.960 --> 00:06:06.079
+escape to have the minted note block, the BibTeX element, so
+
+00:06:06.080 --> 00:06:08.959
+that works very well. When you add that, you need to
+
+00:06:08.960 --> 00:06:13.137
+reload your file, though. Something to keep in mind.
+
+NOTE References links for bibliography
+
+00:06:13.138 --> 00:06:16.999
+Lastly, you have the bibliography. When you have a reference,
+
+00:06:17.000 --> 00:06:19.879
+when you want to put a reference, you can use the
+
+00:06:19.880 --> 00:06:23.719
+org-roam-bibtex package that needs to be installed. Then you
+
+00:06:23.720 --> 00:06:27.759
+have some configuration to to be set so you have the bibtex
+
+00:06:27.760 --> 00:06:31.199
+compilation bibliography, where you explain where is your
+
+00:06:31.200 --> 00:06:35.959
+your reference file, your bib file. You can also give a path
+
+00:06:35.960 --> 00:06:40.079
+for where to search for PDFs. If you have matching names
+
+00:06:40.080 --> 00:06:44.039
+with your BibTeX entries and some PDF files in there,
+
+00:06:44.040 --> 00:06:46.479
+they're going to be linked. I'm going to show that later. So
+
+00:06:46.480 --> 00:06:49.199
+that's something that's going to be part of your init
+
+00:06:49.200 --> 00:06:53.039
+configuration as part of the org-roam-bibtex package
+
+00:06:53.040 --> 00:06:56.479
+configuration. Then in the node you are exporting, you want
+
+00:06:56.480 --> 00:07:01.319
+to add a section called reference. Here you can set a style
+
+00:07:01.320 --> 00:07:06.479
+for the bibliography. Again you put which of the
+
+00:07:06.480 --> 00:07:09.719
+reference file you want to use.
+
+NOTE Examples
+
+00:07:09.720 --> 00:07:15.559
+With all of that, I'm going to show some examples. Here I
+
+00:07:15.560 --> 00:07:21.759
+have an Org note that I used as the file to be exported into a
+
+00:07:21.760 --> 00:07:26.719
+publication. You can see up front, I set all my headers
+
+00:07:26.720 --> 00:07:30.519
+package. I have some extra package I put. I have the class
+
+00:07:30.520 --> 00:07:35.839
+that is something that is next to it. You can see in the
+
+00:07:35.840 --> 00:07:41.239
+files, I have the apris.cls just here.
+
+NOTE Tags
+
+00:07:41.240 --> 00:07:47.119
+Also, with all of that, you can also add tags. I
+
+00:07:47.120 --> 00:07:49.399
+didn't explain that, but you can also ignore some
+
+00:07:49.400 --> 00:07:52.719
+sections. That's quite convenient as well. Here we
+
+00:07:52.720 --> 00:07:57.359
+have some section, and if you want to add a bibliography,
+
+00:07:57.360 --> 00:08:04.999
+you're going to do c l cite:, you can put some cite entry, put
+
+00:08:05.000 --> 00:08:08.199
+any file in there, no description, and you're going to put
+
+00:08:08.200 --> 00:08:11.919
+some link like that. It's very convenient because, firstly,
+
+00:08:11.920 --> 00:08:14.519
+it's going to be exported as a reference like I'm going to
+
+00:08:14.520 --> 00:08:18.079
+show later, but also it gives you access to it directly from
+
+00:08:18.080 --> 00:08:22.679
+the note. If I click the thing here, I have some menu, I can
+
+00:08:22.680 --> 00:08:31.039
+open the bibliography page.
+
+00:08:31.040 --> 00:08:34.799
+I can also open the PDF that was linked to it. If I do
+
+00:08:34.800 --> 00:08:38.919
+that, here is the file that pops up that was linked to the
+
+00:08:38.920 --> 00:08:44.959
+bibliography. That's great. Otherwise, within
+
+00:08:44.960 --> 00:08:47.759
+that document, you're going to have other things you can
+
+00:08:47.760 --> 00:08:53.279
+have. Figures with parameters set on top, footnotes as well if
+
+00:08:53.280 --> 00:08:57.279
+that's something that you need. For example, here it's a
+
+00:08:57.280 --> 00:09:00.959
+section that's not exported, but you can have your
+
+00:09:00.960 --> 00:09:04.079
+normal footnotes. We can go back and forth. If they are in
+
+00:09:04.080 --> 00:09:07.759
+the exported section, they're going to be
+
+00:09:07.760 --> 00:09:11.919
+managed. So with that, you can export the notes. You're going to
+
+00:09:11.920 --> 00:09:16.879
+C-c C-e so you have that menu for exporting
+
+00:09:16.880 --> 00:09:23.479
+Org files. You do l for LaTeX and then o for running directly as
+
+00:09:23.480 --> 00:09:27.399
+PDF and opening it. It takes a little while to build. Here we
+
+00:09:27.400 --> 00:09:31.359
+are. The templates have been used, so there is a
+
+00:09:31.360 --> 00:09:34.879
+two-column situation happening, we have a specific header
+
+00:09:34.880 --> 00:09:41.519
+format and figures and the citation that we put. It's
+
+00:09:41.520 --> 00:09:45.079
+happening, it's shown here, and it's also going to be
+
+00:09:45.080 --> 00:09:49.879
+visible at the end in the reference section. Like I
+
+00:09:49.880 --> 00:09:55.479
+said, a fully ready, finished paper can be
+
+00:09:55.480 --> 00:10:01.119
+produced this way. That's all that I had for today.
+
+00:10:01.120 --> 00:10:03.199
+Thank you very much for your attention. I am
+
+00:10:03.200 --> 00:10:06.232
+available for questions on IRC or in the video chat.
+
+00:10:06.233 --> 00:10:07.400
+Thank you.
diff --git a/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt
new file mode 100644
index 00000000..c361ae62
--- /dev/null
+++ b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt
@@ -0,0 +1,873 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:10.839
+And I believe we are live. Hi, Eric, how are you doing? Very
+
+00:00:10.840 --> 00:00:15.599
+well, thanks. It's a pleasure to have you as one of our
+
+00:00:15.600 --> 00:00:19.639
+speakers but it's also very nice to see you present about
+
+00:00:19.640 --> 00:00:24.239
+pgmacs because I found your talk to be very didactic and very
+
+00:00:24.240 --> 00:00:26.479
+visual. So thank you for taking the time to do a very nice
+
+00:00:26.480 --> 00:00:31.079
+presentation. I wanted to give the opportunity as I do with
+
+00:00:31.080 --> 00:00:36.279
+other speakers to maybe talk about some stuff that you could
+
+00:00:36.280 --> 00:00:39.279
+not include into the talk because of the format. So is there
+
+00:00:39.280 --> 00:00:41.319
+anything you'd like to share with the viewers that you
+
+00:00:41.320 --> 00:00:45.439
+weren't able to include?
+
+00:00:45.440 --> 00:00:50.719
+Oh, I think I gave most of the most of the relevant
+
+00:00:50.720 --> 00:00:54.759
+information. This is a fairly young application. I've been
+
+00:00:54.760 --> 00:00:58.159
+developing this since roughly the beginning of the year. So
+
+00:00:58.160 --> 00:01:02.879
+there are probably some rough edges that people will run
+
+00:01:02.880 --> 00:01:07.479
+into if they use Postgres differently from what I do. Or they
+
+00:01:07.480 --> 00:01:10.919
+hear maybe conflicts with some other Emacs packages that
+
+00:01:10.920 --> 00:01:14.959
+people use that I don't use. So I would really welcome people
+
+00:01:14.960 --> 00:01:19.359
+trying it out and sending out bug reports if they do
+
+00:01:19.360 --> 00:01:23.479
+encounter some. Yeah, I mean, it's usually... Go on,
+
+00:01:23.480 --> 00:01:29.079
+please. Yeah, that would certainly help to make sure it's
+
+00:01:29.080 --> 00:01:31.599
+nice and robust. And of course, if you're letting this loose
+
+00:01:31.600 --> 00:01:35.959
+on some production database that you might have, you want
+
+00:01:35.960 --> 00:01:41.239
+this to be quite robust, obviously. Yeah, indeed. Because
+
+00:01:41.240 --> 00:01:43.879
+usually, you know, when you start publishing packages like
+
+00:01:43.880 --> 00:01:46.599
+this, that's when you realize that it has bad interaction
+
+00:01:46.600 --> 00:01:49.759
+with other modes in the Emacs of other persons. But
+
+00:01:49.760 --> 00:01:52.039
+especially when you're dealing with databases, you also
+
+00:01:52.040 --> 00:01:54.639
+realize that the domain space of what you're trying to do
+
+00:01:54.640 --> 00:01:58.999
+with your mode also is hugely dependent on what people have
+
+00:01:59.000 --> 00:02:03.839
+in their database, which schema they have. So, indeed, if
+
+00:02:03.840 --> 00:02:05.839
+you have been interested, and I think plenty of people have
+
+00:02:05.840 --> 00:02:09.039
+been interested by what you've presented, part of the
+
+00:02:09.040 --> 00:02:11.679
+reason a software becomes great is that you've got plenty of
+
+00:02:11.680 --> 00:02:14.759
+people making bug reports and making sure that all the
+
+00:02:14.760 --> 00:02:18.799
+faults have been ironed out. So, you know what your task is. I
+
+00:02:18.800 --> 00:02:21.319
+will also ask you, particularly right now, people
+
+00:02:21.320 --> 00:02:24.519
+currently viewing, to add your questions on the pad as
+
+00:02:24.520 --> 00:02:27.639
+usual, because you've had plenty of nice reactions, but I'm
+
+00:02:27.640 --> 00:02:30.799
+sure you have plenty of questions as well. So Eric, what I'll
+
+00:02:30.800 --> 00:02:33.759
+be doing, I'll be reading you the questions so that it's a
+
+00:02:33.760 --> 00:02:37.439
+little more didactic. Starting with the first one. This is
+
+NOTE Q: Do you know if PGmacs works with TRAMP?
+
+00:02:37.440 --> 00:02:41.079
+brilliant, thank you. Do you know if pgmacs works with TRAMP?
+
+00:02:41.080 --> 00:02:44.119
+I often use TRAMP multi-hop to access databases both
+
+00:02:44.120 --> 00:02:46.959
+remotely when accessing via bastion server and locally
+
+00:02:46.960 --> 00:02:49.639
+when using OCI containers. I believe you've already
+
+00:02:49.640 --> 00:02:53.079
+answered but if you could just perhaps read your answer as
+
+00:02:53.080 --> 00:02:58.799
+well for everyone to benefit from it. Yep, sure, that's my
+
+00:02:58.800 --> 00:03:02.319
+comment indeed. So I haven't currently implemented any
+
+00:03:02.320 --> 00:03:07.559
+TRAMP support. I'm not sure that TRAMP is really useful for
+
+00:03:07.560 --> 00:03:11.439
+this type of situation, because as I understand it, TRAMP is
+
+00:03:11.440 --> 00:03:17.159
+establishing SSH connections itself to remote servers.
+
+00:03:17.160 --> 00:03:22.519
+pgmacs is doing the same thing, so it doesn't currently have
+
+00:03:22.520 --> 00:03:27.399
+any support for hooking in with the TRAMP support. Right.
+
+00:03:27.400 --> 00:03:31.439
+Pardon me if I missed the presentation. Oh, go on, please. I
+
+00:03:31.440 --> 00:03:34.359
+guess you could set up an SSH tunnel. It does work with an SSH
+
+00:03:34.360 --> 00:03:39.919
+tunnel, obviously, but there's no support for hooking into
+
+00:03:39.920 --> 00:03:43.799
+an SSH tunnel that TRAMP might be able to create. I'm not sure
+
+00:03:43.800 --> 00:03:46.959
+TRAMP actually uses SSH tunnels rather than direct
+
+00:03:46.960 --> 00:03:51.439
+commands, but anyway. Yeah, I think that might be useful.
+
+00:03:51.440 --> 00:03:54.759
+Yeah, I don't know either. I don't have the answer whether
+
+00:03:54.760 --> 00:03:59.039
+TRAMP actually can create tunnels like this. I'm usually
+
+00:03:59.040 --> 00:04:02.039
+used to TRAMP connecting to an endpoint, be it a directory or
+
+00:04:02.040 --> 00:04:06.239
+a file, and the tunnel is just you accessing the file. But
+
+00:04:06.240 --> 00:04:08.959
+usually, if you're trying to access a remote Postgres
+
+00:04:08.960 --> 00:04:12.039
+database, you would probably manage the port forwarding in
+
+00:04:12.040 --> 00:04:15.199
+a separate terminal just to be able to make sure that
+
+00:04:15.200 --> 00:04:17.759
+everything maps correctly to your machine, and then you
+
+00:04:17.760 --> 00:04:21.959
+would launch pgmacs with the forward port information.
+
+00:04:21.960 --> 00:04:25.519
+That's, I assume, how you would do it anyway. But yeah, I
+
+00:04:25.520 --> 00:04:29.119
+mean, if you could specify what you mean by TRAMP support and
+
+00:04:29.120 --> 00:04:31.839
+if you have something specific in mind, I'm talking to the
+
+00:04:31.840 --> 00:04:35.119
+questioner, feel free to specify and we'll see if you can
+
+00:04:35.120 --> 00:04:38.239
+answer it. But in the meantime, moving to the next question.
+
+NOTE Q: How did you come up with this brilliant idea?
+
+00:04:38.240 --> 00:04:41.999
+Great work, I'm impressed. How did you come up with this
+
+00:04:42.000 --> 00:04:49.079
+brilliant idea, I assume, to create pgmacs? Well, thanks for
+
+00:04:49.080 --> 00:04:52.839
+the compliment. It's a lot of fun developing something
+
+00:04:52.840 --> 00:04:57.799
+which is, as I said, such a small amount of code and which
+
+00:04:57.800 --> 00:05:02.359
+provides quite a bit of useful functionality. In
+
+00:05:02.360 --> 00:05:06.839
+particular, if you compare it with existing Terminal mode
+
+00:05:06.840 --> 00:05:12.799
+applications for manipulating Postgres data, they are
+
+00:05:12.800 --> 00:05:19.279
+not as extensible as Emacs is naturally. So I actually got
+
+00:05:19.280 --> 00:05:23.439
+the idea for developing this when I first tested out the
+
+00:05:23.440 --> 00:05:27.439
+SQLite mode, which is available in Emacs 29.1.
+
+00:05:27.440 --> 00:05:31.879
+And I thought, well, that's really quite impressive. And it
+
+00:05:31.880 --> 00:05:37.359
+allows you to delete rows and insert content and so on. And I
+
+00:05:37.360 --> 00:05:42.359
+was thinking, yeah, Emacs is a, is a useful environment to do
+
+00:05:42.360 --> 00:05:50.079
+that. And since several years ago, when I was doing my PhD, so
+
+00:05:50.080 --> 00:05:53.999
+to avoid doing my PhD, I was developing Emacs, I was
+
+00:05:54.000 --> 00:05:58.399
+developing stuff in Emacs Lisp and one of the libraries I
+
+00:05:58.400 --> 00:06:02.959
+developed was an interface to Postgres over the network. So
+
+00:06:02.960 --> 00:06:08.039
+that's the library called pg.el, which is used by pgmacs to
+
+00:06:08.040 --> 00:06:14.239
+access Postgres and to do all the parsing of data which
+
+00:06:14.240 --> 00:06:19.279
+arrives in Postgres formats into the Emacs Lisp into the
+
+00:06:19.280 --> 00:06:22.999
+Emacs corresponding versions. So, for example, integers
+
+00:06:23.000 --> 00:06:25.399
+are passed as Emacs integers, floating point numbers as
+
+00:06:25.400 --> 00:06:30.839
+floating point numbers, and so on. Right, yeah. I mean, it's
+
+00:06:30.840 --> 00:06:34.439
+pretty needed, obviously, when you have such a tooling like
+
+00:06:34.440 --> 00:06:37.359
+this, to make sure that the type conversion works properly,
+
+00:06:37.360 --> 00:06:39.879
+because the types that you have in Postgres do not
+
+00:06:39.880 --> 00:06:43.879
+necessarily map over to what we have in Emacs. Like, I'm
+
+00:06:43.880 --> 00:06:49.239
+interested, how would you handle g's and b columns in pgmacs?
+
+00:06:49.240 --> 00:06:55.039
+JSON is mapped to an edis dict, a dictionary.
+
+00:06:55.040 --> 00:07:03.759
+It depends on the top level object type for your JSON column.
+
+00:07:03.760 --> 00:07:07.599
+If it's an array, it's mapped to an Emacs Lisp array. If it's a
+
+00:07:07.600 --> 00:07:12.639
+dict, which is most common, it's mapped to an Emacs Lisp
+
+00:07:12.640 --> 00:07:17.679
+dictionary. All right, well it makes perfect sense. So I can
+
+00:07:17.680 --> 00:07:21.839
+break in with a question. Thanks, I just helped myself to the
+
+00:07:21.840 --> 00:07:26.159
+BBB privilege of kind of running around backstage, being a
+
+00:07:26.160 --> 00:07:31.679
+helper backstage. So thanks for your awesome talk, Eric. I
+
+00:07:31.680 --> 00:07:36.719
+super appreciated it. You know, I noticed that you that
+
+00:07:36.720 --> 00:07:43.159
+you're on a slightly older version of Emacs that I deal with
+
+00:07:43.160 --> 00:07:49.519
+in helping with producing the Windows binaries I run into
+
+00:07:49.520 --> 00:07:53.839
+and with some other stuff I do. I'm dealing with that
+
+00:07:53.840 --> 00:07:56.919
+friction of sometimes I've got some work of my own that
+
+00:07:56.920 --> 00:07:59.719
+applies against a specific version of Emacs and it's a bunch
+
+00:07:59.720 --> 00:08:02.519
+of work to think about moving it forward. Just curious if you
+
+00:08:02.520 --> 00:08:06.479
+started thinking about that or if you routine, if that's a
+
+00:08:06.480 --> 00:08:09.919
+routine that you haven't done or there's something maybe
+
+00:08:09.920 --> 00:08:14.599
+specifically going on with, you know, with trunk
+
+00:08:14.600 --> 00:08:20.599
+development that looks intimidating to deal with. Thanks
+
+00:08:20.600 --> 00:08:24.959
+for the comment. I'm not sure I'm using a really old version
+
+00:08:24.960 --> 00:08:29.239
+for Windows. I don't really develop often on Windows, but I I
+
+00:08:29.240 --> 00:08:32.639
+occasionally check that it works, and I took a screenshot
+
+00:08:32.640 --> 00:08:34.799
+that I included in the slides here, but I think I'm using
+
+00:08:34.800 --> 00:08:40.559
+29.4, the current version on Windows. I thought I saw 29.1,
+
+00:08:40.560 --> 00:08:48.839
+so that's probably my, I probably missed it when it went by.
+
+00:08:48.840 --> 00:08:54.879
+My bad. No, no, I use it via the choco package updater so that
+
+00:08:54.880 --> 00:08:58.479
+updates the Emacs version quite easily on Windows. So
+
+00:08:58.480 --> 00:09:03.079
+thanks for your work on maintaining Windows binaries. I
+
+00:09:03.080 --> 00:09:07.519
+realize that was- I sit downstream at the end of a lot of other
+
+00:09:07.520 --> 00:09:11.399
+people's hard work and then just focus on trying to QA well
+
+00:09:11.400 --> 00:09:15.559
+and help catch problems early. It's really fun. But of
+
+00:09:15.560 --> 00:09:16.399
+course, my pleasure.
+
+00:09:16.400 --> 00:09:21.799
+Coming back to the previous question, so the the
+
+00:09:21.800 --> 00:09:26.919
+questionnaire actually provided a little more context. So
+
+NOTE TRAMP continued
+
+00:09:26.920 --> 00:09:30.599
+with docker.el, kubel, etc, it's often possible to, for
+
+00:09:30.600 --> 00:09:33.919
+example, select a container pod or whatever that is hosted
+
+00:09:33.920 --> 00:09:36.639
+on the machine you've connected to via TRAMP, such as
+
+00:09:36.640 --> 00:09:41.799
+Podman, colon image colon path and trigger a terminal shell
+
+00:09:41.800 --> 00:09:44.959
+as well as pull forward on other similar things. It'd be nice
+
+00:09:44.960 --> 00:09:47.679
+to be able to use this tool in a similar way since it would open
+
+00:09:47.680 --> 00:09:49.919
+up the ability to use it with complex connection
+
+00:09:49.920 --> 00:09:53.679
+configuration. Doing SSH tunnel manually is of course
+
+00:09:53.680 --> 00:09:56.879
+totally fine in practice and if it is actually the case
+
+00:09:56.880 --> 00:10:01.319
+personally when I need to remote into a kubernetes machine I
+
+00:10:01.320 --> 00:10:05.239
+use POSIX script that I use on most of my machines but I don't
+
+00:10:05.240 --> 00:10:08.599
+do it inside Emacs. But yeah, if such a thing is possible via
+
+00:10:08.600 --> 00:10:11.039
+TRAMP, it definitely feels like it would be possible to do
+
+00:10:11.040 --> 00:10:14.919
+something similar in pgmacs. So perhaps that's a path of
+
+00:10:14.920 --> 00:10:19.559
+investigation for you that has opened up. Yeah, thanks for
+
+00:10:19.560 --> 00:10:22.759
+these comments. I'll look into that indeed if people have
+
+00:10:22.760 --> 00:10:26.159
+some shortcuts registered in TRAMP. So not for a terminal,
+
+00:10:26.160 --> 00:10:29.599
+because pgmacs won't work through a terminal, but through a
+
+00:10:29.600 --> 00:10:33.439
+port forward, then that would be convenient. I'll see how
+
+00:10:33.440 --> 00:10:38.639
+easy that is to set up. Yeah, I'm pretty sure the way it works
+
+00:10:38.640 --> 00:10:41.279
+is that it starts some processes in the background in Emacs
+
+00:10:41.280 --> 00:10:45.359
+just to either maintain the port forward or to maybe remap
+
+00:10:45.360 --> 00:10:49.239
+some kubecon things or whatever. So with pgmacs,
+
+00:10:49.240 --> 00:10:51.879
+considering complex pipelines to get to the end
+
+00:10:51.880 --> 00:10:54.679
+destination, it feels like it would be possible to do
+
+00:10:54.680 --> 00:10:57.439
+something. But perhaps it's not the responsibility of
+
+00:10:57.440 --> 00:11:00.199
+pgmacs, perhaps it's the responsibility of another,
+
+00:11:00.200 --> 00:11:03.639
+perhaps something that would target TRAMP more so than
+
+00:11:03.640 --> 00:11:08.399
+pgmacs. But it's nice to see again how the beauty of Emacs
+
+00:11:08.400 --> 00:11:12.119
+is that everything is Elisp at the end, and the way they
+
+00:11:12.120 --> 00:11:16.079
+interact, you might want to question yourself whether this
+
+00:11:16.080 --> 00:11:18.919
+belongs more to pgmacs or more to TRAMP, but at the end of the
+
+00:11:18.920 --> 00:11:22.439
+day, both applications will be able to benefit from the
+
+00:11:22.440 --> 00:11:24.759
+functions of the other. So that's the beauty of the
+
+00:11:24.760 --> 00:11:29.159
+philosophy right here. I do see... Absolutely, I agree.
+
+00:11:29.160 --> 00:11:32.279
+Sorry, before we move to different questions, an
+
+00:11:32.280 --> 00:11:36.759
+additional point. I should point out that to warn people
+
+00:11:36.760 --> 00:11:41.159
+that probably running over an SSH tunnel is going to be a bit
+
+00:11:41.160 --> 00:11:46.839
+slow. I mostly use it on my own machine via a local Unix
+
+00:11:46.840 --> 00:11:50.439
+connection. And for some reason that I haven't understood,
+
+00:11:50.440 --> 00:11:55.119
+pgmacs is quite a bit slower when it's even connecting to the
+
+00:11:55.120 --> 00:12:00.359
+same database on the local machine, but via Emacs' network
+
+00:12:00.360 --> 00:12:05.039
+support instead of via the Unix socket support. There is
+
+00:12:05.040 --> 00:12:11.639
+like a factor 10 difference in throughput and in latency. I
+
+00:12:11.640 --> 00:12:15.839
+don't really understand why currently, because it's using
+
+00:12:15.840 --> 00:12:21.919
+exactly the same Emacs Lisp level primitives. And when you
+
+00:12:21.920 --> 00:12:24.799
+do this using other libraries like libpq, which is the
+
+00:12:24.800 --> 00:12:30.639
+Postgres standard official library for connecting to
+
+00:12:30.640 --> 00:12:34.319
+Postgres, there's not such a performance difference. So
+
+00:12:34.320 --> 00:12:39.759
+there's probably something that is not working perfectly
+
+00:12:39.760 --> 00:12:43.879
+in the Emacs network support. I'll have to see whether I can
+
+00:12:43.880 --> 00:12:48.679
+investigate how to improve that performance. Yeah, I'm
+
+00:12:48.680 --> 00:12:52.999
+going to say it sounds like a great bug to have because it
+
+00:12:53.000 --> 00:12:57.319
+feels like it will allow you to dig deeper into Emacs to
+
+00:12:57.320 --> 00:12:59.679
+understand what is going on here. Because as you said,
+
+00:12:59.680 --> 00:13:01.519
+normally it's supposed to work exactly the same,
+
+00:13:01.520 --> 00:13:04.319
+especially if it's still in your local machine, but it
+
+00:13:04.320 --> 00:13:07.919
+doesn't. Personally, that's the kind of bug that I really
+
+00:13:07.920 --> 00:13:11.199
+like and that I'd like to spend more time investigating. So
+
+00:13:11.200 --> 00:13:14.759
+perhaps you might think otherwise, but I wish you luck on the
+
+00:13:14.760 --> 00:13:18.599
+debugging with this particular matter. All right, moving
+
+00:13:18.600 --> 00:13:21.519
+to the last question that we have and then we'll probably go
+
+00:13:21.520 --> 00:13:22.965
+on a little bit of a break.
+
+NOTE Q: Is sqlite-mode also capable of all of this functionality (table relations, etc)? If not, will it be possible to abstract out this functionality from pgmacs somehow?
+
+00:13:22.966 --> 00:13:25.399
+Question. Is SQLite mode also
+
+00:13:25.400 --> 00:13:28.439
+capable of all of this functionality, table relations,
+
+00:13:28.440 --> 00:13:31.559
+etc.? If not, would it be possible to abstract out this
+
+00:13:31.560 --> 00:13:33.279
+functionality from pgmacs somehow?
+
+00:13:33.280 --> 00:13:41.319
+So I'm not very familiar with SQLite because I don't really
+
+00:13:41.320 --> 00:13:46.439
+use it very much myself. I'm not sure I can answer that
+
+00:13:46.440 --> 00:13:53.079
+question. Sorry about that. I think it is probably a bit more
+
+00:13:53.080 --> 00:13:56.639
+basic because SQLite itself is quite a bit more basic in
+
+00:13:56.640 --> 00:14:01.639
+terms of the types of indexes it's able to support and the
+
+00:14:01.640 --> 00:14:09.199
+types of constraints it's able to support. Is it relevant to
+
+00:14:09.200 --> 00:14:13.799
+create an abstract API for connecting to databases? I think
+
+00:14:13.800 --> 00:14:19.639
+there is already actually a library that abstracts out from
+
+00:14:19.640 --> 00:14:25.439
+SQLite and Postgres. Postgres, when you connect to it via a
+
+00:14:25.440 --> 00:14:29.159
+PSQL subsystem,
+
+00:14:29.160 --> 00:14:38.439
+it might be worthwhile doing that, but there are often a few
+
+00:14:38.440 --> 00:14:42.279
+minor differences in SQL syntax and so on between
+
+00:14:42.280 --> 00:14:45.879
+databases. So it might be difficult to have something that
+
+00:14:45.880 --> 00:14:53.159
+really works with generic queries in an effective way. All
+
+00:14:53.160 --> 00:14:58.239
+these SQL dialects are a little bit different,
+
+00:14:58.240 --> 00:15:02.319
+unfortunately. So there was another question about I was
+
+00:15:02.320 --> 00:15:06.510
+just going to read out the next question.
+
+NOTE Q: Would it be possible to move it into Emacs tree? Are the maintainers interested in it?
+
+00:15:06.511 --> 00:15:07.519
+So have you thought
+
+00:15:07.520 --> 00:15:12.559
+about integrating your work into the Emacs tree? Do you know
+
+00:15:12.560 --> 00:15:17.599
+if people are interested? This was a question from the past.
+
+00:15:17.600 --> 00:15:24.639
+Yeah, I think it's probably a bit young to do so, so far.
+
+00:15:24.640 --> 00:15:30.119
+I'm updating it quite regularly. Maybe once it's more
+
+00:15:30.120 --> 00:15:35.399
+stabilized, I wouldn't necessarily object to this. I have
+
+00:15:35.400 --> 00:15:38.559
+some sort of philosophical objections to giving away my
+
+00:15:38.560 --> 00:15:42.519
+copyright, so I'm not sure that will actually be possible.
+
+00:15:42.520 --> 00:15:48.079
+Oh, that'd be interesting. I'd love to get you on maybe a
+
+00:15:48.080 --> 00:15:51.639
+panel talk about that sometime. Something I'd think about.
+
+00:15:51.640 --> 00:15:55.999
+Well, from a very simple point of view, I think that the
+
+00:15:56.000 --> 00:16:01.159
+copyright and the system works well with the existing
+
+00:16:01.160 --> 00:16:05.319
+license and without a license transfer, so I don't feel that
+
+00:16:05.320 --> 00:16:07.766
+the, sorry, without a copyright transfer,
+
+00:16:07.767 --> 00:16:14.679
+I don't feel that the copyright transfer is really a necessary step for
+
+00:16:14.680 --> 00:16:21.639
+taking things away from maintainers. It feels like asking
+
+00:16:21.640 --> 00:16:26.559
+the maintainers to give up on some of their copyright...
+
+00:16:26.560 --> 00:16:29.999
+Indeed. Yeah, I see where that's a little beyond our scope,
+
+00:16:30.000 --> 00:16:33.519
+but it's a fascinating topic and I appreciate your sharing
+
+00:16:33.520 --> 00:16:36.959
+your views there. I mean, that sounds like a whole topic of
+
+00:16:36.960 --> 00:16:41.599
+its own, frankly.
+
+00:16:41.600 --> 00:16:47.039
+Yeah. Corwin, do you want to fill the last question? Sure. So
+
+00:16:47.040 --> 00:16:52.039
+the question was, I almost missed this one, so glad I didn't.
+
+00:16:52.040 --> 00:16:53.849
+This may have been answered already.
+
+NOTE Q: What do you use for the in-buffer tables? Vtable?
+
+00:16:53.850 --> 00:16:55.159
+What do you use for
+
+00:16:55.160 --> 00:17:00.039
+in-buffer tables? Do you use vtable? Yep. Thanks for the
+
+00:17:00.040 --> 00:17:04.599
+question. It is indeed vtable. However, it's not really
+
+00:17:04.600 --> 00:17:10.919
+vtable. It's a fork that I made, which is called pgmix table.
+
+00:17:10.920 --> 00:17:17.199
+because Vtable doesn't have exactly the right
+
+00:17:17.200 --> 00:17:22.119
+functionality in particular for recoloring rows when you
+
+00:17:22.120 --> 00:17:28.239
+add a row. So I've currently forked this. I'm thinking about
+
+00:17:28.240 --> 00:17:36.359
+giving those back as patches to Vtable, plausibly.
+
+00:17:36.360 --> 00:17:40.719
+I know that there is some ongoing work also on vTable in the
+
+00:17:40.720 --> 00:17:45.839
+core. So I'll have to look at what is plausible to feed back
+
+00:17:45.840 --> 00:17:46.719
+into the main version.
+
+00:17:46.720 --> 00:17:55.199
+All right, great. I think we are nearing the end of the Q&A. We
+
+00:17:55.200 --> 00:17:59.079
+are due to move to the next talk in about three minutes now. I
+
+00:17:59.080 --> 00:18:02.719
+can fill 30 seconds or a minute of that with I guess one more
+
+00:18:02.720 --> 00:18:05.079
+maybe back and forth and I'll try to be quicker this time.
+
+00:18:05.080 --> 00:18:08.879
+First of all, thanks for your kind remarks. But my question
+
+00:18:08.880 --> 00:18:11.839
+wasn't really about Windows so much, it was just how I'm
+
+00:18:11.840 --> 00:18:16.639
+relating... So have you, let me put it more simply, have you
+
+NOTE Integrating with Emacs 30?
+
+00:18:16.640 --> 00:18:20.639
+started looking at integrating with Emacs 30 or with the
+
+00:18:20.640 --> 00:18:24.679
+master branch at all? Do you have any sense of how much work
+
+00:18:24.680 --> 00:18:27.079
+it's going to be for you to carry things forward there? I've
+
+00:18:27.080 --> 00:18:31.039
+tested it with the pre-release, yes. I mean, just a very
+
+00:18:31.040 --> 00:18:35.079
+basic testing and everything works perfectly. There's
+
+00:18:35.080 --> 00:18:39.799
+really no... There was no difference that I have noticed
+
+00:18:39.800 --> 00:18:46.279
+between 29.4 and the 30 pre-release on the aspects that I use
+
+00:18:46.280 --> 00:18:48.959
+at least in Emacs. Neato.
+
+00:18:48.960 --> 00:18:56.439
+That was it, Leo. Thanks for letting me back in for one more
+
+00:18:56.440 --> 00:18:58.799
+bite at the apple there. And I appreciate everybody tuning
+
+00:18:58.800 --> 00:19:03.479
+in and participating in the Q&A and this awesome talk.
+
+00:19:03.480 --> 00:19:06.879
+Thanks for your questions. That was great. Yeah, and thank
+
+00:19:06.880 --> 00:19:10.319
+you for answering them and for the presentation as well. So
+
+00:19:10.320 --> 00:19:14.199
+we'll be moving in about two minutes to the next talk, which
+
+00:19:14.200 --> 00:19:20.159
+is pre-recorded as well. Well, we didn't really give you the
+
+00:19:20.160 --> 00:19:29.399
+chance, Eric, to have the last word. So do you have any last
+
+00:19:29.400 --> 00:19:29.799
+word?
+
+00:19:29.800 --> 00:19:34.479
+please try it out, try out pgmacs and send some feedback
+
+00:19:34.480 --> 00:19:39.279
+that'll help improve it over time. Sure, great. Well, thank
+
+00:19:39.280 --> 00:19:41.559
+you so much, Eric, for taking the time to come to the
+
+00:19:41.560 --> 00:19:45.999
+conference, and we'll see you soon. Thank you. Bye,
+
+00:19:46.000 --> 00:19:50.279
+everyone. Bye. And we'll be live with the next talk in about 1
+
+00:19:50.280 --> 00:19:53.119
+minute 30. So we'll take a little bit of a breather, go make
+
+00:19:53.120 --> 00:19:56.599
+some coffee, go take a bio break. We'll be back soon. See you
+
+00:19:56.600 --> 00:20:01.880
+in a bit.
diff --git a/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt
new file mode 100644
index 00000000..9ecf670d
--- /dev/null
+++ b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:01.260 --> 00:01:24.380
+Introduction
+
+00:01:26.710 --> 00:03:53.280
+Demo
+
+00:03:53.960 --> 00:05:11.160
+Deletion
+
+00:05:12.880 --> 00:05:41.190
+Export
+
+00:05:42.250 --> 00:06:10.790
+HStore
+
+00:06:11.510 --> 00:06:30.390
+Connecting to a different database
+
+00:06:31.110 --> 00:07:31.800
+SchemaSpy
+
+00:07:32.620 --> 00:08:17.790
+Convenience queries
+
+00:08:18.850 --> 00:09:35.590
+Emacs as an application development platform
+
+00:09:36.250 --> 00:11:48.580
+Extending pgmacs
+
+00:11:49.400 --> 00:13:15.420
+Conclusion
diff --git a/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt
new file mode 100644
index 00000000..3ce11b67
--- /dev/null
+++ b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt
@@ -0,0 +1,1151 @@
+WEBVTT captioned by eric
+
+NOTE Introduction
+
+1
+00:00:01.260 --> 00:00:03.980
+Hi, this is a short presentation about PGmacs,
+
+2
+00:00:04.180 --> 00:00:07.100
+which is a browsing and editing interface for
+
+3
+00:00:07.100 --> 00:00:08.360
+Postgres databases.
+
+4
+00:00:08.920 --> 00:00:11.320
+My name is Eric Marsden, and I'm the
+
+5
+00:00:11.320 --> 00:00:13.540
+developer of this Emacs Lisp library.
+
+6
+00:00:14.800 --> 00:00:17.420
+PGmacs was inspired by sqlite-mode, which is a
+
+7
+00:00:17.420 --> 00:00:20.600
+great feature available from Emacs 29 onwards.
+
+8
+00:00:21.060 --> 00:00:24.560
+It allows you to view and modify SQLite
+
+9
+00:00:24.560 --> 00:00:26.220
+databases you might have lying around.
+
+10
+00:00:26.760 --> 00:00:28.140
+It's a really great feature.
+
+11
+00:00:28.140 --> 00:00:30.840
+It would be even better, however, if it
+
+12
+00:00:30.840 --> 00:00:32.900
+were able to use a real database.
+
+13
+00:00:34.540 --> 00:00:36.200
+And I happen to know that was possible
+
+14
+00:00:36.200 --> 00:00:38.120
+because a few years ago, I wrote an
+
+15
+00:00:38.120 --> 00:00:42.920
+Emacs Lisp library, pg.el, which implements the wire
+
+16
+00:00:42.920 --> 00:00:46.280
+protocol used for communication over the network between
+
+17
+00:00:46.280 --> 00:00:49.600
+a Postgres client and the Postgres backend, the
+
+18
+00:00:49.600 --> 00:00:50.440
+Postgres server.
+
+19
+00:00:51.580 --> 00:00:53.560
+I've included here an example of what it
+
+20
+00:00:53.560 --> 00:00:54.820
+looks like to use this library.
+
+21
+00:00:54.820 --> 00:00:58.240
+You connect to the database by specifying the
+
+22
+00:00:58.240 --> 00:01:01.520
+database name, your username, your password, potentially the
+
+23
+00:01:01.520 --> 00:01:03.099
+hostname that you're connecting to.
+
+24
+00:01:03.800 --> 00:01:06.680
+Once you're connected, you can then execute SQL
+
+25
+00:01:06.680 --> 00:01:09.640
+statements, for example, to create a new table,
+
+26
+00:01:10.180 --> 00:01:13.860
+to insert values into that table, and to
+
+27
+00:01:13.860 --> 00:01:16.140
+count the number of rows in a table.
+
+28
+00:01:17.100 --> 00:01:20.300
+And pg.el does automatic type conversion to
+
+29
+00:01:20.300 --> 00:01:24.180
+and from Emacs Lisp types and Postgres types for
+
+30
+00:01:24.180 --> 00:01:24.380
+you.
+
+NOTE Demo
+
+31
+00:01:26.710 --> 00:01:29.170
+Probably the best is to jump straight into
+
+32
+00:01:29.170 --> 00:01:30.690
+a demo of PGmacs.
+
+33
+00:01:31.210 --> 00:01:34.130
+When we connect to a database, we see
+
+34
+00:01:34.130 --> 00:01:36.330
+up the top of the buffer, some information
+
+35
+00:01:36.330 --> 00:01:39.070
+about the backend that we're connected to, some
+
+36
+00:01:39.070 --> 00:01:42.010
+version information and the total database size on
+
+37
+00:01:42.010 --> 00:01:42.230
+disk.
+
+38
+00:01:43.090 --> 00:01:45.170
+There are some shortcuts to some commands we
+
+39
+00:01:45.170 --> 00:01:47.370
+can run on the database, and there's a
+
+40
+00:01:47.370 --> 00:01:49.490
+list of tables that we have access to,
+
+41
+00:01:50.230 --> 00:01:52.650
+with again, metainformation about their size on
+
+42
+00:01:52.650 --> 00:01:53.650
+disk and their owner.
+
+43
+00:01:53.650 --> 00:01:56.490
+Now, we can enter a table by pressing
+
+44
+00:01:56.490 --> 00:01:57.090
+return.
+
+45
+00:01:58.510 --> 00:02:01.230
+Here we again see some metainformation about
+
+46
+00:02:01.230 --> 00:02:04.210
+the table, such as the list of columns,
+
+47
+00:02:05.510 --> 00:02:08.490
+the SQL type of each column, any defaults
+
+48
+00:02:08.490 --> 00:02:11.170
+that might be present and any SQL constraints.
+
+49
+00:02:11.970 --> 00:02:14.370
+We see any indexes that might be present
+
+50
+00:02:14.370 --> 00:02:16.790
+on this table, and then we see the
+
+51
+00:02:16.790 --> 00:02:19.070
+list of rows of data in the table.
+
+52
+00:02:19.830 --> 00:02:22.870
+If we see any information which is incorrect
+
+53
+00:02:22.870 --> 00:02:26.710
+or incomplete, we can easily fix it by
+
+54
+00:02:26.710 --> 00:02:36.300
+pressing enter again, and this updates the information
+
+55
+00:02:36.300 --> 00:02:37.900
+present in the database.
+
+56
+00:02:38.200 --> 00:02:39.840
+PGmacs shows us this in the minibuffer
+
+57
+00:02:39.840 --> 00:02:42.480
+it has updated one row.
+
+58
+00:02:43.540 --> 00:02:45.440
+We can look at help for the key
+
+59
+00:02:45.440 --> 00:02:47.440
+bindings that are present in this type of
+
+60
+00:02:47.440 --> 00:02:47.780
+buffer.
+
+61
+00:02:48.120 --> 00:02:49.580
+If we scroll down, we can see that
+
+62
+00:02:49.580 --> 00:02:51.580
+we can upcase the value of a cell
+
+63
+00:02:51.580 --> 00:02:52.680
+with M-u.
+
+64
+00:02:52.920 --> 00:02:53.920
+Let's try that out.
+
+65
+00:02:56.430 --> 00:02:58.950
+Okay, here we have updated the value of
+
+66
+00:02:58.950 --> 00:03:00.670
+the cell in the database.
+
+67
+00:03:00.830 --> 00:03:03.330
+We can now lowercase it, and we can
+
+68
+00:03:03.330 --> 00:03:06.510
+put it back to the initial
+
+69
+00:03:06.510 --> 00:03:07.930
+title case of the value.
+
+70
+00:03:09.010 --> 00:03:11.550
+We can also run a shell command on
+
+71
+00:03:11.550 --> 00:03:14.570
+a cell value, to count the number of
+
+72
+00:03:14.570 --> 00:03:15.670
+characters, for example.
+
+73
+00:03:17.570 --> 00:03:20.390
+We can run a shell command with a
+
+74
+00:03:20.390 --> 00:03:22.990
+prefix argument, which updates the value in the
+
+75
+00:03:22.990 --> 00:03:25.610
+database with the output from the shell command.
+
+76
+00:03:27.470 --> 00:03:29.790
+So that has updated the database.
+
+77
+00:03:30.270 --> 00:03:32.790
+If we do that again, that will reverse
+
+78
+00:03:32.790 --> 00:03:39.750
+the value. If we come back
+
+79
+00:03:39.750 --> 00:03:41.590
+to the list of tables, we see
+
+80
+00:03:41.590 --> 00:03:43.010
+that there is a table which is called
+
+81
+00:03:43.010 --> 00:03:43.590
+deleteme.
+
+82
+00:03:43.890 --> 00:03:50.140
+We can try renaming this table with R,
+
+83
+00:03:50.380 --> 00:03:52.880
+we can look at what is in this
+
+84
+00:03:52.880 --> 00:03:53.280
+table.
+
+NOTE Deletion
+
+85
+00:03:53.960 --> 00:03:56.600
+Okay, there is only one row of information
+
+86
+00:03:56.600 --> 00:03:59.280
+that doesn't seem very important, so let's delete
+
+87
+00:03:59.280 --> 00:03:59.680
+that.
+
+88
+00:04:02.160 --> 00:04:05.600
+Let's now delete the table with DEL.
+
+89
+00:04:07.980 --> 00:04:11.000
+PGmacs asks for confirmation, and we've deleted the
+
+90
+00:04:11.000 --> 00:04:11.240
+table.
+
+91
+00:04:13.390 --> 00:04:15.470
+Now when we have a big table with
+
+92
+00:04:15.470 --> 00:04:18.250
+a lot of data, PGmacs is going to
+
+93
+00:04:18.250 --> 00:04:21.150
+show us the results paginated, so we can
+
+94
+00:04:21.150 --> 00:04:23.350
+go chunk by chunk through the table.
+
+95
+00:04:24.370 --> 00:04:28.070
+We can implement a where filter on the
+
+96
+00:04:28.070 --> 00:04:30.570
+rows to only show the rows that match
+
+97
+00:04:30.570 --> 00:04:32.390
+a certain SQL clause.
+
+98
+00:04:33.110 --> 00:04:35.450
+So for example, here we have some temperature
+
+99
+00:04:35.450 --> 00:04:35.950
+measurements.
+
+100
+00:04:36.490 --> 00:04:38.690
+We want to focus on measurements that are
+
+101
+00:04:38.690 --> 00:04:41.270
+more than 40 degrees Celsius, for example.
+
+102
+00:04:45.980 --> 00:04:48.120
+Okay, we have now filtered on a certain
+
+103
+00:04:48.120 --> 00:04:49.240
+number of rows.
+
+104
+00:04:49.540 --> 00:04:51.240
+The filter is shown to us just up
+
+105
+00:04:51.240 --> 00:04:53.540
+here, and we see here that we have
+
+106
+00:04:53.540 --> 00:04:55.960
+some values that look anomalous.
+
+107
+00:04:56.500 --> 00:04:59.120
+There's one, 140, and one is 61.
+
+108
+00:04:59.840 --> 00:05:02.980
+We probably want to delete them, they represent
+
+109
+00:05:02.980 --> 00:05:03.540
+errors.
+
+110
+00:05:04.080 --> 00:05:06.080
+We can mark them for deletion with d,
+
+111
+00:05:06.560 --> 00:05:09.680
+and then really delete them, expunge them, as
+
+112
+00:05:09.680 --> 00:05:11.160
+in Dired, with x.
+
+NOTE Export
+
+113
+00:05:12.880 --> 00:05:16.120
+We can export this table in CSV format,
+
+114
+00:05:16.480 --> 00:05:17.800
+thanks to this little button up here.
+
+115
+00:05:19.860 --> 00:05:22.760
+Here we have our table conveniently formatted as
+
+116
+00:05:22.760 --> 00:05:23.400
+CSV.
+
+117
+00:05:23.400 --> 00:05:28.480
+We can also export a particular row to
+
+118
+00:05:28.480 --> 00:05:32.080
+JSON by typing j, let's look at
+
+119
+00:05:32.080 --> 00:05:36.270
+what that looks like.
+
+120
+00:05:37.810 --> 00:05:40.230
+Okay, here's the JSON for one of the
+
+121
+00:05:40.230 --> 00:05:41.190
+rows in the table.
+
+NOTE HStore
+
+122
+00:05:42.250 --> 00:05:44.270
+Now let's look at a table that contains
+
+123
+00:05:44.270 --> 00:05:46.350
+a column of type HStore.
+
+124
+00:05:46.430 --> 00:05:48.850
+This is a Postgres-specific key-value map.
+
+125
+00:05:49.110 --> 00:05:51.170
+Then the attributes column is of type
+
+126
+00:05:51.170 --> 00:05:54.750
+JSON, which can be stored natively in Postgres.
+
+127
+00:05:54.750 --> 00:05:56.910
+It's possible to edit these values using a
+
+128
+00:05:56.910 --> 00:06:00.490
+widget-based interface by typing w, and here
+
+129
+00:06:00.490 --> 00:06:03.630
+we have a convenient interface for modifying these
+
+130
+00:06:03.630 --> 00:06:04.450
+types of values.
+
+131
+00:06:05.410 --> 00:06:08.390
+Likewise, for the JSON type parameter, we can
+
+132
+00:06:08.390 --> 00:06:10.790
+update using a widget-based interface.
+
+NOTE Connecting to a different database
+
+133
+00:06:11.510 --> 00:06:14.270
+Let's connect to a different database.
+
+134
+00:06:14.490 --> 00:06:18.910
+We do that with a M-x pgmacs, and
+
+135
+00:06:18.910 --> 00:06:26.670
+then enter our username and password.
+
+136
+00:06:27.310 --> 00:06:29.390
+Here we have the list of tables present
+
+137
+00:06:29.390 --> 00:06:30.390
+in this database.
+
+NOTE SchemaSpy
+
+138
+00:06:31.110 --> 00:06:33.690
+PGmacs has some support for running the SchemaSpy
+
+139
+00:06:33.690 --> 00:06:37.950
+utility, which generates a graphical representation of the
+
+140
+00:06:37.950 --> 00:06:41.710
+relationships between tables in this database, which can
+
+141
+00:06:41.710 --> 00:06:44.470
+be useful when you're discovering the database.
+
+142
+00:06:45.170 --> 00:06:47.870
+Here is the SVG that's output by this
+
+143
+00:06:47.870 --> 00:06:48.470
+utility.
+
+144
+00:06:50.860 --> 00:06:53.840
+This is a test database containing information about
+
+145
+00:06:53.840 --> 00:06:55.460
+a digital media store.
+
+146
+00:06:55.880 --> 00:06:58.160
+It has a table with information about the
+
+147
+00:06:58.160 --> 00:06:59.300
+tracks that are available.
+
+148
+00:07:00.960 --> 00:07:03.480
+If we look at this table, we
+
+149
+00:07:03.480 --> 00:07:04.780
+see that we have the name of the
+
+150
+00:07:04.780 --> 00:07:08.980
+track, a reference to the album, album ID.
+
+151
+00:07:09.240 --> 00:07:11.240
+This is a reference to a foreign key,
+
+152
+00:07:11.660 --> 00:07:13.520
+a key in the table which is called
+
+153
+00:07:13.520 --> 00:07:13.940
+album.
+
+154
+00:07:14.820 --> 00:07:16.840
+Now we can follow this foreign key reference
+
+155
+00:07:16.840 --> 00:07:20.580
+simply by pressing Enter, and here we find
+
+156
+00:07:20.580 --> 00:07:23.100
+it's the album called For Those About To
+
+157
+00:07:23.100 --> 00:07:23.340
+Rock.
+
+158
+00:07:24.260 --> 00:07:26.420
+And in the same way, here we have
+
+159
+00:07:26.420 --> 00:07:28.780
+a foreign key reference to the relevant artist
+
+160
+00:07:28.780 --> 00:07:29.680
+which we can follow.
+
+161
+00:07:30.080 --> 00:07:31.800
+That's, of course, AC/DC.
+
+NOTE Convenience queries
+
+162
+00:07:32.620 --> 00:07:35.720
+And finally, PGmacs has some convenience queries that
+
+163
+00:07:35.720 --> 00:07:38.280
+allows us to list the procedures which are
+
+164
+00:07:38.280 --> 00:07:39.820
+defined in this database.
+
+165
+00:07:40.260 --> 00:07:42.820
+Here we have the built-in procedures, mostly
+
+166
+00:07:42.820 --> 00:07:45.300
+used by the PostGIS extension.
+
+167
+00:07:48.430 --> 00:07:52.110
+We can also display some more information about
+
+168
+00:07:52.110 --> 00:07:52.690
+our backend.
+
+169
+00:07:53.090 --> 00:07:56.450
+Here we have the list of extensions which
+
+170
+00:07:56.450 --> 00:07:56.990
+are available.
+
+171
+00:07:57.470 --> 00:08:00.250
+We can load one of these extensions if
+
+172
+00:08:00.250 --> 00:08:01.570
+we have the rights to do that.
+
+173
+00:08:02.350 --> 00:08:05.290
+Here we've loaded the relevant extension.
+
+174
+00:08:06.210 --> 00:08:08.850
+We can show some information about the Postgres
+
+175
+00:08:08.850 --> 00:08:16.650
+settings also, and update them if we have
+
+176
+00:08:16.650 --> 00:08:17.790
+the rights to do that.
+
+NOTE Emacs as an application development platform
+
+177
+00:08:18.850 --> 00:08:21.650
+Now I'm preaching to the converted, but Emacs
+
+178
+00:08:21.650 --> 00:08:24.870
+is a really great application development platform.
+
+179
+00:08:25.510 --> 00:08:29.130
+PGmacs is currently around 3000 lines of code.
+
+180
+00:08:29.630 --> 00:08:32.510
+A first point of comparison, PGCLI, which is
+
+181
+00:08:32.510 --> 00:08:36.409
+a text user interface for accessing Postgres implemented
+
+182
+00:08:36.409 --> 00:08:39.289
+in Python, is 17,000 lines of code.
+
+183
+00:08:40.390 --> 00:08:43.190
+PGAdmin4, which is a well-known Python GUI
+
+184
+00:08:43.190 --> 00:08:47.010
+for administrating Postgres databases, is almost half a
+
+185
+00:08:47.010 --> 00:08:48.050
+million lines of code.
+
+186
+00:08:48.410 --> 00:08:51.450
+And DBeaver, implemented in Java, is almost a
+
+187
+00:08:51.450 --> 00:08:52.490
+million lines of code.
+
+188
+00:08:53.130 --> 00:08:56.030
+Developing things on Emacs, you get for
+
+189
+00:08:56.030 --> 00:08:58.270
+free portability between different platforms.
+
+190
+00:08:58.470 --> 00:09:00.130
+As I'm showing you, it works great on
+
+191
+00:09:00.130 --> 00:09:02.730
+Linux, which is where I developed this library.
+
+192
+00:09:03.070 --> 00:09:06.530
+It also works perfectly in the terminal, except
+
+193
+00:09:06.530 --> 00:09:08.530
+for some of the functionality I showed, which
+
+194
+00:09:08.530 --> 00:09:10.190
+requires SVG support.
+
+195
+00:09:10.970 --> 00:09:12.630
+It also works well, if you're into that
+
+196
+00:09:12.630 --> 00:09:15.230
+kind of thing, on MacOS and on Windows.
+
+197
+00:09:15.830 --> 00:09:19.130
+And it even works perfectly on Haiku, which
+
+198
+00:09:19.130 --> 00:09:20.770
+is a free BeOS clone.
+
+199
+00:09:21.300 --> 00:09:23.870
+Emacs is actually really pretty on this operating
+
+200
+00:09:23.870 --> 00:09:26.590
+system, so congratulations to the people who did
+
+201
+00:09:26.590 --> 00:09:27.330
+the port there.
+
+202
+00:09:27.530 --> 00:09:29.350
+Now, of course, the main advantage of building
+
+203
+00:09:29.350 --> 00:09:32.430
+on the Emacs development platform, is that the
+
+204
+00:09:32.430 --> 00:09:35.590
+application is easy for the user to extend.
+
+NOTE Extending pgmacs
+
+205
+00:09:36.250 --> 00:09:38.690
+To illustrate that, previously we were looking at
+
+206
+00:09:38.690 --> 00:09:40.650
+a table of temperature measurements.
+
+207
+00:09:42.070 --> 00:09:44.510
+Imagine we want to highlight rows in this
+
+208
+00:09:44.510 --> 00:09:48.430
+table, which look anomalous, where the value looks
+
+209
+00:09:48.430 --> 00:09:49.450
+a bit extreme.
+
+210
+00:09:50.090 --> 00:09:52.150
+That's quite easy to do with a bit
+
+211
+00:09:52.150 --> 00:09:53.130
+of Emacs Lisp.
+
+212
+00:09:54.610 --> 00:09:58.410
+We define a function, which, if the cell
+
+213
+00:09:58.410 --> 00:10:01.570
+value is bigger than 40, is going to
+
+214
+00:10:01.570 --> 00:10:03.850
+display it in a face which has a
+
+215
+00:10:03.850 --> 00:10:04.950
+dark red foreground.
+
+216
+00:10:05.950 --> 00:10:08.890
+We can now register this display function for
+
+217
+00:10:08.890 --> 00:10:11.590
+the measurement column in the temperatures table.
+
+218
+00:10:12.190 --> 00:10:16.490
+And if we reopen the table now, we
+
+219
+00:10:16.490 --> 00:10:19.950
+see that the anomalous measurements are indeed highlighted
+
+220
+00:10:19.950 --> 00:10:20.810
+in red.
+
+221
+00:10:24.100 --> 00:10:27.320
+Another example, imagine we have a table which
+
+222
+00:10:27.320 --> 00:10:28.880
+contains image data.
+
+223
+00:10:29.200 --> 00:10:31.740
+There's a column which is of BYTEA type,
+
+224
+00:10:31.740 --> 00:10:35.020
+which contains images in binary form.
+
+225
+00:10:35.340 --> 00:10:38.920
+We can display these inline as follows.
+
+226
+00:10:40.340 --> 00:10:44.900
+We create an inline image display function, using
+
+227
+00:10:44.900 --> 00:10:47.080
+Emacs' image support.
+
+228
+00:10:47.080 --> 00:10:49.540
+And then we'd register this function to display
+
+229
+00:10:49.540 --> 00:10:52.460
+the image column in the inline image table.
+
+230
+00:10:52.780 --> 00:10:55.540
+If we now reopen the inline image table,
+
+231
+00:10:56.060 --> 00:10:59.140
+we see the images are displayed inline.
+
+232
+00:10:59.660 --> 00:11:03.160
+And as a final example of customisation, here's
+
+233
+00:11:03.160 --> 00:11:05.440
+how to bind a key to a specific
+
+234
+00:11:05.440 --> 00:11:07.860
+function, in the row-list buffer.
+
+235
+00:11:08.800 --> 00:11:12.080
+Let's define a function that does a DuckDuckGo
+
+236
+00:11:12.080 --> 00:11:15.500
+lookup for a particular value in
+
+237
+00:11:15.500 --> 00:11:16.700
+the Emacs web browser.
+
+238
+00:11:18.080 --> 00:11:22.140
+We can define a function which does a
+
+239
+00:11:22.140 --> 00:11:24.400
+funcall on the cell value for this
+
+240
+00:11:24.400 --> 00:11:26.200
+DuckDuckGo lookup function.
+
+241
+00:11:27.100 --> 00:11:30.060
+And finally we can define a key, the
+
+242
+00:11:30.060 --> 00:11:33.360
+capital D key, in the row-list map,
+
+243
+00:11:33.540 --> 00:11:35.480
+which calls this function that does a
+
+244
+00:11:35.480 --> 00:11:36.900
+DuckDuckGo lookup.
+
+245
+00:11:37.240 --> 00:11:39.600
+And now if I'm browsing information in a
+
+246
+00:11:39.600 --> 00:11:41.580
+table that I want to do a web
+
+247
+00:11:41.580 --> 00:11:45.380
+search on, I can use my D shortcut
+
+248
+00:11:45.380 --> 00:11:48.580
+and see some web results concerning the cell.
+
+NOTE Conclusion
+
+249
+00:11:49.400 --> 00:11:53.880
+So to conclude, the source and installation instructions
+
+250
+00:11:53.880 --> 00:11:56.520
+for PGmacs are available on GitHub.
+
+251
+00:11:56.680 --> 00:11:58.780
+It requires Emacs 29.
+
+252
+00:11:59.260 --> 00:12:01.620
+There is a prebuilt container image which you
+
+253
+00:12:01.620 --> 00:12:02.820
+can use for testing.
+
+254
+00:12:02.980 --> 00:12:04.100
+It's a Docker image.
+
+255
+00:12:04.580 --> 00:12:06.160
+The Docker image only works in terminal mode.
+
+256
+00:12:06.160 --> 00:12:08.380
+And of course that's a recommended way of
+
+257
+00:12:08.380 --> 00:12:11.020
+testing Emacs Lisp code that you load
+
+258
+00:12:11.020 --> 00:12:13.100
+into your Emacs before having read it.
+
+259
+00:12:13.360 --> 00:12:15.720
+It works with any recent version of Postgres
+
+260
+00:12:15.720 --> 00:12:18.580
+over the past 10 years, including the latest
+
+261
+00:12:18.580 --> 00:12:19.900
+release, Postgres 17.
+
+262
+00:12:20.440 --> 00:12:22.700
+It does work with a certain number of
+
+263
+00:12:22.700 --> 00:12:26.440
+databases that are compatible with Postgres, such as
+
+264
+00:12:26.440 --> 00:12:30.360
+ParadeDB, TimescaleDB and IvorySQL.
+
+265
+00:12:30.940 --> 00:12:33.560
+However, it doesn't work with all databases that
+
+266
+00:12:33.560 --> 00:12:35.340
+claim to be Postgres compatible.
+
+267
+00:12:35.340 --> 00:12:37.840
+It doesn't work, for example, with CrateDB or
+
+268
+00:12:37.840 --> 00:12:39.960
+with CockroachDB or some others that you see
+
+269
+00:12:39.960 --> 00:12:40.640
+listed here.
+
+270
+00:12:40.760 --> 00:12:42.660
+The reason for that is that these databases
+
+271
+00:12:42.660 --> 00:12:46.440
+don't implement the system tables that PGmacs queries
+
+272
+00:12:46.440 --> 00:12:49.600
+to obtain information about the columns present in
+
+273
+00:12:49.600 --> 00:12:52.220
+a table, the size on disk, the ownership
+
+274
+00:12:52.220 --> 00:12:53.560
+of tables, etc.
+
+275
+00:12:54.600 --> 00:12:58.180
+PGmacs supports TLS encrypted connections to the database,
+
+276
+00:12:58.380 --> 00:13:01.400
+as well as local Unix socket connections.
+
+277
+00:13:02.040 --> 00:13:04.600
+And in terms of stability, I would classify
+
+278
+00:13:04.600 --> 00:13:06.160
+it as beta status.
+
+279
+00:13:06.680 --> 00:13:09.200
+I do use it myself in production on
+
+280
+00:13:09.200 --> 00:13:11.160
+some not very important data.
+
+281
+00:13:11.560 --> 00:13:13.060
+Really, it works quite well.
+
+282
+00:13:14.300 --> 00:13:15.420
+Thanks for your attention.
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
new file mode 100644
index 00000000..803490e2
--- /dev/null
+++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt
@@ -0,0 +1,2423 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:10.319
+And about, I think we are live. Okay, hi again everyone. And hi
+
+00:00:10.320 --> 00:00:14.679
+Blaine, how are you doing? Fantastic, happy to be here.
+
+00:00:14.680 --> 00:00:17.479
+Yeah, it's good to see you again. We were just reminiscing in
+
+00:00:17.480 --> 00:00:20.239
+a room right now that it's almost been a year exactly since we
+
+00:00:20.240 --> 00:00:23.879
+last spoke because you were at the EmacsConf last year. That's
+
+00:00:23.880 --> 00:00:28.559
+right. This is great fun. Yeah, well, thank you for coming in
+
+00:00:28.560 --> 00:00:33.079
+and especially every time you come with a very well-crafted
+
+00:00:33.080 --> 00:00:37.279
+talks talking about, you know, what you do with Org Mode, Org
+
+00:00:37.280 --> 00:00:41.039
+Roam and whatever. And it's really fascinating as someone
+
+00:00:41.040 --> 00:00:43.479
+who develops and use those tools constantly to see you put
+
+00:00:43.480 --> 00:00:46.199
+them in action so well. Because you, you know, the way you
+
+00:00:46.200 --> 00:00:49.719
+talk about your research, it really reminds me on what we
+
+00:00:49.720 --> 00:00:53.279
+were, sorry, I've got elves talking in my ears and I'm still
+
+00:00:53.280 --> 00:00:56.639
+not used to it at this point. But it's really nice to see you
+
+00:00:56.640 --> 00:01:00.359
+put all of this together into a very cohesive way for you to
+
+00:01:00.360 --> 00:01:03.759
+write. Okay, let me just share my screen and I'll be sharing
+
+00:01:03.760 --> 00:01:11.879
+the questions. Where is it? All right, take presenter. And I
+
+00:01:11.880 --> 00:01:18.079
+will be sharing the questions. All right. Can you see my
+
+00:01:18.080 --> 00:01:24.159
+screen all right? I can, yes. OK, cool. So we move straight to
+
+00:01:24.160 --> 00:01:26.999
+the question. Let me just check on the time. I think we have
+
+00:01:27.000 --> 00:01:31.999
+about until 10.20, which is in 17 minutes. So let's take
+
+00:01:32.000 --> 00:01:35.639
+about 10 to 15 minutes of question time. And if people have
+
+00:01:35.640 --> 00:01:38.599
+joined on BBB, we'll also be taking questions live. All
+
+NOTE Q: what does 0573 means in your init. file name?
+
+00:01:38.600 --> 00:01:44.079
+right. Starting with the first question, what does 0573
+
+00:01:44.080 --> 00:01:49.719
+mean in your init file name? So this name is, you can think of
+
+00:01:49.720 --> 00:01:55.879
+it as a prefix or a stub. It's an index number that I utilize
+
+00:01:55.880 --> 00:02:01.479
+before a short name that describes the project. So I have all
+
+00:02:01.480 --> 00:02:06.119
+my projects in my home directory, and I just start typing the
+
+00:02:06.120 --> 00:02:12.199
+project number or index number. in the terminal and I have
+
+00:02:12.200 --> 00:02:17.879
+autocompletion available through oh my ZSH package. So I
+
+00:02:17.880 --> 00:02:21.199
+just hit tab and it autocompletes the name of the project and
+
+00:02:21.200 --> 00:02:26.319
+pops me into that folder. And so I find this to be very easy for
+
+00:02:26.320 --> 00:02:30.919
+navigating between projects. As you saw, I work on multiple
+
+00:02:30.920 --> 00:02:37.399
+projects in a given day and this helps me move about. And I
+
+00:02:37.400 --> 00:02:45.639
+also use this number at the start of the log file name and at
+
+00:02:45.640 --> 00:02:50.639
+the start of the manuscript name and the start of the, I also
+
+00:02:50.640 --> 00:02:54.079
+have an annotated bibliography. So all those files are
+
+00:02:54.080 --> 00:02:59.359
+identified just in case I accidentally save one to the wrong
+
+00:02:59.360 --> 00:03:04.639
+folder. I can avoid, I can sort them out later. Great
+
+00:03:04.640 --> 00:03:09.519
+question. Thank you. Next question, which I think is going
+
+NOTE Q: What does Zettelkasten mean?
+
+00:03:09.520 --> 00:03:16.159
+to be a long one. What does Zettelkasten mean? So this means
+
+00:03:16.160 --> 00:03:20.719
+like, I guess, notebox, something along those lines. You
+
+00:03:20.720 --> 00:03:24.879
+can think of it as a- Yeah, spitbox usually, that's the word
+
+00:03:24.880 --> 00:03:29.159
+we use. Thank you. So this is a kind of like a card catalog
+
+00:03:29.160 --> 00:03:33.359
+system that when it was done on paper, and now it's being done
+
+00:03:33.360 --> 00:03:38.679
+electronically through various software packages. So in
+
+00:03:38.680 --> 00:03:43.199
+the Emacs world, org-roam is a one of several alternate
+
+00:03:43.200 --> 00:03:47.999
+packages that you can use. Prot has the note and there's a
+
+00:03:48.000 --> 00:03:59.079
+couple others. So, idea is that you create a note, usually a,
+
+00:03:59.080 --> 00:04:04.239
+ultimately what you want to do is create a nugget of
+
+00:04:04.240 --> 00:04:09.479
+knowledge from your reading that you've done. and you add it
+
+00:04:09.480 --> 00:04:15.879
+to this note system in such a way that you can recover it more
+
+00:04:15.880 --> 00:04:20.159
+easily than what had to be done in the old days with index
+
+00:04:20.160 --> 00:04:23.719
+cards.
+
+00:04:23.720 --> 00:04:28.199
+So you set up backlinks and then you can use the search
+
+00:04:28.200 --> 00:04:34.919
+features in Org Roam to filter and find the notes again in the
+
+00:04:34.920 --> 00:04:43.079
+future. Org Roam has a wonderful GUI interface where you can
+
+00:04:43.080 --> 00:04:47.079
+display it as a knowledge graph, essentially, all your
+
+00:04:47.080 --> 00:04:52.479
+nodes and the backlinks between them. I set mine up in a
+
+00:04:52.480 --> 00:04:56.639
+rather hierarchical fashion to, at least right now, it's
+
+00:04:56.640 --> 00:05:01.959
+pretty hierarchical at this point, but it may become more
+
+00:05:01.960 --> 00:05:07.679
+disorganized over time. But I find it I'm sort of a visual
+
+00:05:07.680 --> 00:05:12.519
+person. I like mind maps a lot. I find that this visual
+
+00:05:12.520 --> 00:05:16.919
+display of my Zettelkasten is similar, resembles to a
+
+00:05:16.920 --> 00:05:22.439
+certain degree, a mind map.
+
+00:05:22.440 --> 00:05:25.599
+Okay, well, that's a pretty good definition of what
+
+00:05:25.600 --> 00:05:28.839
+Zettelkasten is, and you also went on to specify what it
+
+00:05:28.840 --> 00:05:31.599
+means inside Emacs, so thank you. I think that clarifies it
+
+00:05:31.600 --> 00:05:34.199
+for the two people in the room who still do not know, after
+
+00:05:34.200 --> 00:05:36.759
+attending four Emacs conferences, what is the
+
+00:05:36.760 --> 00:05:41.759
+Zettelkasten method. Moving on to the next question,
+
+NOTE Q: How many papers are you writing at the same time?
+
+00:05:41.760 --> 00:05:44.399
+how many papers are you writing at the same time? Because I
+
+00:05:44.400 --> 00:05:47.759
+believe you mentioned that you had concurrent papers being
+
+00:05:47.760 --> 00:05:51.959
+written during your presentation. So I'm probably working
+
+00:05:51.960 --> 00:05:57.839
+on, in a given year, somewhere between 10 and 15. How many do I
+
+00:05:57.840 --> 00:06:03.199
+get published in a year? Probably anywhere from one to four
+
+00:06:03.200 --> 00:06:08.639
+or five. So these papers often, the work on them spans
+
+00:06:08.640 --> 00:06:13.559
+multiple years. will start working on a paper when I begin,
+
+00:06:13.560 --> 00:06:16.519
+before I begin the experiments, ideally, because I'm
+
+00:06:16.520 --> 00:06:23.439
+trying to do hypothesis-driven research. And so that helps
+
+00:06:23.440 --> 00:06:27.559
+define the scope of the project and limit the number of
+
+00:06:27.560 --> 00:06:32.959
+rabbit holes I go down. So, but through the nature of the
+
+00:06:32.960 --> 00:06:36.919
+work, there's a lot of waiting required in my case for
+
+00:06:36.920 --> 00:06:39.679
+crystals to grow and then the opportunity to collect
+
+00:06:39.680 --> 00:06:43.879
+diffraction data on the crystals. And then the structures
+
+00:06:43.880 --> 00:06:48.559
+have to be determined and refined and analyzed and then
+
+00:06:48.560 --> 00:06:52.799
+deposited, figures have to be made. So a lot of steps are
+
+00:06:52.800 --> 00:06:57.759
+involved that those take generally span, that work can span
+
+00:06:57.760 --> 00:07:02.559
+several years.
+
+00:07:02.560 --> 00:07:09.399
+In a given day, I try to work on two papers, ideally. I haven't
+
+00:07:09.400 --> 00:07:12.279
+been doing so well lately over the past month.
+
+00:07:12.280 --> 00:07:19.759
+In the past year, there was a couple of days where I worked on
+
+00:07:19.760 --> 00:07:24.239
+five papers. There was something like a half dozen where I
+
+00:07:24.240 --> 00:07:29.159
+worked on four, about 40 days where I worked on three, and I
+
+00:07:29.160 --> 00:07:33.479
+think there was something like about 100 days where I worked
+
+00:07:33.480 --> 00:07:40.999
+on two papers a day, about 140 days where I just worked on one.
+
+00:07:41.000 --> 00:07:45.719
+So my idea is, I've been sort of developing more recently is
+
+00:07:45.720 --> 00:07:49.159
+that I'll start doing like the generative writing on a paper
+
+00:07:49.160 --> 00:07:51.959
+at the beginning of the day on the paper project I'm most
+
+00:07:51.960 --> 00:07:55.439
+excited about. I tried to, I'm a night owl. I tried to do this
+
+00:07:55.440 --> 00:08:00.519
+work early in the morning when I'm half awake to try to
+
+00:08:00.520 --> 00:08:03.439
+overcome my internal editor that inhibits me from writing
+
+00:08:03.440 --> 00:08:09.879
+prose freely. And so the idea is just to get a lot of words out,
+
+00:08:09.880 --> 00:08:14.639
+worry about editing them later. And then after about three
+
+00:08:14.640 --> 00:08:17.999
+hours, I'll switch to the second project that I'm less
+
+00:08:18.000 --> 00:08:21.999
+excited about. And I can go for another 90 minutes to two
+
+00:08:22.000 --> 00:08:27.719
+hours on that project. So I build up a lot of momentum, and
+
+00:08:27.720 --> 00:08:31.959
+then I do the switch. And I find that switch to be relatively
+
+00:08:31.960 --> 00:08:37.359
+easy. So my process will be On project A, make some final
+
+00:08:37.360 --> 00:08:42.359
+notes about what was accomplished in the writing log. Then
+
+00:08:42.360 --> 00:08:47.999
+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:59.333
+little to-do list and maybe look at the prior entry in the
+
+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
+the manuscript and go for 90 minutes or two hours.
+
+00:09:07.920 --> 00:09:12.479
+Generally, you're only good for somewhere between four and
+
+00:09:12.480 --> 00:09:15.359
+a half, five and a half hours. If you try to write in a
+
+00:09:15.360 --> 00:09:17.839
+generative fashion much longer than that, your
+
+00:09:17.840 --> 00:09:21.279
+productivity goes down quite a bit. You're better off
+
+00:09:21.280 --> 00:09:24.039
+switching to a completely different activity and then
+
+00:09:24.040 --> 00:09:30.159
+using your experience doing that writing to essentially
+
+00:09:30.160 --> 00:09:33.199
+launch background jobs in your subconscious. And so you
+
+00:09:33.200 --> 00:09:37.479
+will get those ideas in the shower the next morning.
+
+00:09:37.480 --> 00:09:44.519
+I find it really funny because I also relate. I've also
+
+00:09:44.520 --> 00:09:48.919
+worked a lot on organization as linked to paper writing but
+
+00:09:48.920 --> 00:09:53.719
+also to on my work as a developer and it's funny how you refer
+
+00:09:53.720 --> 00:09:56.999
+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.833 --> 00:10:02.399
+mentioned in your presentation the cost of context
+
+00:10:02.400 --> 00:10:04.919
+switching between different things but it's also
+
+00:10:04.920 --> 00:10:08.119
+something that we use in computing when a processor needs to
+
+00:10:08.120 --> 00:10:11.719
+be thinking about something else, well, it has a cost. And
+
+00:10:11.720 --> 00:10:15.359
+it's really fun for me to hear you talk about, oh, I need to
+
+00:10:15.360 --> 00:10:19.159
+select two topics, but no longer than 90 minutes per topic,
+
+00:10:19.160 --> 00:10:21.319
+because it's really about maximizing your output for
+
+00:10:21.320 --> 00:10:25.239
+creativity. And overall, your entire chat, your entire
+
+00:10:25.240 --> 00:10:28.519
+presentation here is about really maximizing the
+
+00:10:28.520 --> 00:10:32.959
+engagement that you have between outputs and your
+
+00:10:32.960 --> 00:10:37.159
+cognition. And I really find this amazing how down to the T
+
+00:10:37.160 --> 00:10:40.279
+you've managed to do this. And it actually leads me to
+
+00:10:40.280 --> 00:10:42.679
+another question which is being asked of you, which is,
+
+NOTE Q: How you capture those ideas when when you are away from Emacs?
+
+00:10:42.680 --> 00:10:45.959
+how do you capture those ideas when you are away from Emacs? And
+
+00:10:45.960 --> 00:10:47.999
+perhaps not only those you have in the showers, but also
+
+00:10:48.000 --> 00:10:53.919
+elsewhere. So that's a great question. Over the past year, I
+
+00:10:53.920 --> 00:10:59.239
+actually, last January, upon recommendation of a senior
+
+00:10:59.240 --> 00:11:05.399
+colleague, I bought a digital voice recorder for $85 from
+
+00:11:05.400 --> 00:11:10.279
+Sony, and it's the best investment I've made in a very long
+
+00:11:10.280 --> 00:11:16.399
+time. other than my laptop computer, because I then record
+
+00:11:16.400 --> 00:11:21.439
+my thoughts. So I have a half hour commute. And to me, that's
+
+00:11:21.440 --> 00:11:25.359
+largely a waste of time. I wish I lived a lot closer to work.
+
+00:11:25.360 --> 00:11:33.679
+But I use that time to generate ideas. So maybe I'll start my
+
+00:11:33.680 --> 00:11:40.559
+day at home for 90 minutes, worked on paper A, and then I might
+
+00:11:40.560 --> 00:11:44.799
+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:50.982
+those in the digital voice recorder. And then when I get to
+
+00:11:50.983 --> 00:11:54.441
+the lab, I'll transfer the audio file to my computer, and
+
+00:11:54.442 --> 00:12:00.066
+I'll transcribe it using Whisper. So I've set up some
+
+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
+convert all the sentences into one sentence per line
+
+00:12:11.000 --> 00:12:16.359
+because that's the way I like to write and edit things. And so
+
+00:12:16.360 --> 00:12:19.679
+it does all this pre-processing for me. And I have this
+
+00:12:19.680 --> 00:12:23.279
+transcript that's in pretty good shape. I don't have to do
+
+00:12:23.280 --> 00:12:29.159
+very much editing. And I'll then copy that over and work on
+
+00:12:29.160 --> 00:12:33.079
+it, clean it up, and pluck out the ideas that I think might be
+
+00:12:33.080 --> 00:12:40.439
+useful. Unfortunately, I'm not very I'm not away from my
+
+00:12:40.440 --> 00:12:47.959
+computer that much. I'm in front of it, 12, 14 hours a day. So
+
+00:12:47.960 --> 00:12:53.039
+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:01.649
+don't have a cell phone. I'm trying to be the last human on
+
+00:13:01.650 --> 00:13:07.316
+earth without a cell phone. I think I would be so distracted
+
+00:13:07.317 --> 00:13:12.442
+by a cell phone. I would be the worst person on the planet,
+
+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
+
+00:13:23.000 --> 00:13:26.199
+difficulties hailing taxis and that sort of thing when I'm
+
+00:13:26.200 --> 00:13:30.599
+traveling. So there are some downsides to not having a cell
+
+00:13:30.600 --> 00:13:35.719
+phone, but these days. Yeah, but I think there's a pretty
+
+00:13:35.720 --> 00:13:38.639
+significant upside because, you know, you talk about cell
+
+00:13:38.640 --> 00:13:40.999
+phones here, but before you were talking about the 90
+
+00:13:41.000 --> 00:13:44.799
+minutes of uninterrupted focus on a given topic. And I think
+
+00:13:44.800 --> 00:13:48.359
+plenty of people would be envious of this ability to focus
+
+00:13:48.360 --> 00:13:54.519
+for that long on a topic. And I guess if we are to thread the
+
+00:13:54.520 --> 00:13:57.239
+needle here, well, the lack of cell phone might be for
+
+00:13:57.240 --> 00:14:00.839
+something for this ability to focus. So take of this what you
+
+00:14:00.840 --> 00:14:06.799
+will. True, I am a sucker for the web browser. I can get
+
+00:14:06.800 --> 00:14:11.759
+distracted going down various rabbit holes thanks to
+
+00:14:11.760 --> 00:14:17.279
+Google searches and that sort of thing. Likewise, email is
+
+00:14:17.280 --> 00:14:22.399
+another tension grabber. So, there's those other battles I
+
+00:14:22.400 --> 00:14:27.599
+have to fight too. So, right, that is a huge battle that all of
+
+00:14:27.600 --> 00:14:31.839
+us face is developing focus and being able to maintain
+
+00:14:31.840 --> 00:14:37.159
+focus. Right. So, we have about three more minutes of
+
+00:14:37.160 --> 00:14:39.279
+questions. So, thank you so much already for answering many
+
+00:14:39.280 --> 00:14:43.319
+questions. How about we do a quick fire for the remaining
+
+00:14:43.320 --> 00:14:47.079
+questions and then maybe we will take a question from... from
+
+00:14:47.080 --> 00:14:50.272
+here or in the room. So how about we go for the next one?
+
+NOTE Q: What if an ideas does not belong to any current working manuscript?
+
+00:14:50.273 --> 00:14:51.573
+What if an ID does not belong
+
+00:14:51.574 --> 00:14:55.199
+to any current working manuscript? So I
+
+00:14:55.200 --> 00:14:57.799
+have a sandbox area in the log file.
+
+00:14:57.800 --> 00:15:04.319
+So if it's likely going to be related to something to a
+
+00:15:04.320 --> 00:15:09.119
+certain degree, if the idea is totally unrelated to
+
+00:15:09.120 --> 00:15:12.719
+anything I'm working on, then I will
+
+00:15:12.720 --> 00:15:21.359
+I maintain a 700 through 750 words. I maintain a kind of a
+
+00:15:21.360 --> 00:15:26.719
+external diary and I just capture those kind of ideas there.
+
+00:15:26.720 --> 00:15:31.199
+So, I have access to a web interface to this big text area with
+
+00:15:31.200 --> 00:15:37.079
+nothing in it. And I just dump ideas all day long in there. So,
+
+00:15:37.080 --> 00:15:42.799
+and I save that away. I have that in a big LaTeX document
+
+00:15:42.800 --> 00:15:49.999
+currently on Overleaf. but each day has its own page. And so
+
+00:15:50.000 --> 00:15:53.079
+that information is captured and I can recover it. And maybe
+
+00:15:53.080 --> 00:15:57.599
+it's gonna take me a week, a month, a year to take that idea and
+
+00:15:57.600 --> 00:16:00.279
+think about it. And then eventually I'll get to a point where
+
+00:16:00.280 --> 00:16:04.279
+I have a critical mass of momentum and data and so forth,
+
+00:16:04.280 --> 00:16:08.279
+where I could start a new writing project. But you're right,
+
+00:16:08.280 --> 00:16:11.399
+that is a problem, capturing those ideas and keeping track
+
+00:16:11.400 --> 00:16:16.719
+of them. The Xenocasting can also help with that. Right. OK,
+
+00:16:16.720 --> 00:16:19.159
+so we have time for one more question and I think I'm going to
+
+00:16:19.160 --> 00:16:22.679
+skip this one. You can take all the time you want after we're
+
+00:16:22.680 --> 00:16:25.679
+done with the live show for you to answer in BBB, obviously,
+
+00:16:25.680 --> 00:16:28.319
+and even after the conference. But I'd really like to finish
+
+00:16:28.320 --> 00:16:28.801
+on this one.
+
+NOTE Q: If there were one habit from your process (referencing your extensive flow chart) that you want active learners/professional researchers to adopt, which would it be and why?
+
+00:16:28.802 --> 00:16:31.879
+So, if there were one habit from your process,
+
+00:16:31.880 --> 00:16:35.079
+referencing your extensive flowchart, that you want
+
+00:16:35.080 --> 00:16:37.839
+active learners or professional researchers to adopt,
+
+00:16:37.840 --> 00:16:44.479
+which would it be and why? So,
+
+00:16:44.480 --> 00:16:49.999
+I think just keeping that daily diary, that's the essential
+
+00:16:50.000 --> 00:16:55.239
+part for overcoming the fear of forgetting and the fear of
+
+00:16:55.240 --> 00:16:58.319
+losing momentum. One reason why people don't work on two
+
+00:16:58.320 --> 00:17:02.399
+projects a day is that they fear losing momentum on the first
+
+00:17:02.400 --> 00:17:07.319
+project they're working on. But we often are stuck with
+
+00:17:07.320 --> 00:17:09.999
+working on multiple writing projects, and they're best
+
+00:17:10.000 --> 00:17:13.199
+done over longer periods of time rather than in a hasty
+
+00:17:13.200 --> 00:17:18.679
+fashion. I try to avoid binge writing, although I do my share
+
+00:17:18.680 --> 00:17:23.479
+of that, too. Okay, well, Blaine, thank you so much for all
+
+00:17:23.480 --> 00:17:29.199
+your questions. The stream is going to move to the next chat
+
+00:17:29.200 --> 00:17:31.999
+and talk. We're moving to the next talk of the day, but feel
+
+00:17:32.000 --> 00:17:35.159
+free to stay in a room. For everyone interested in asking
+
+00:17:35.160 --> 00:17:38.479
+more questions to Blaine, the BBB, sorry, BigBlueButton
+
+00:17:38.480 --> 00:17:41.250
+link is available on the website. You can join and ask
+
+00:17:41.240 --> 00:17:43.319
+questions directly to Blaine. And otherwise, we'll make
+
+00:17:43.320 --> 00:17:45.479
+sure that all the remaining questions on the pad get their
+
+00:17:45.480 --> 00:17:48.239
+answer eventually. Thank you so much, Blaine. You're
+
+00:17:48.240 --> 00:17:56.559
+welcome. Bye-bye. Bye.
+
+00:17:56.560 --> 00:18:00.079
+okay I think the stream is moving on. Just making sure. okay. Yes
+
+00:18:00.080 --> 00:18:02.079
+we are moving on to the next stream. So Blaine, I'm going to need to
+
+00:18:02.080 --> 00:18:04.919
+get ready for the next talk. Thank you so much for all your
+
+00:18:04.920 --> 00:18:08.079
+answers and feel free to answer your questions. I'm
+
+00:18:08.080 --> 00:18:11.759
+sorry that i didn't get to fill your question live. It's just
+
+00:18:11.760 --> 00:18:16.599
+there was a lot of questions actually. It was a comment. Okay.
+
+NOTE Off-stream Q&A
+
+00:18:16.600 --> 00:18:24.199
+Yeah, yeah. You mentioned about that you sit all the day in
+
+00:18:24.200 --> 00:18:27.999
+front of computer, right? And I have to say, it's not too
+
+00:18:28.000 --> 00:18:31.439
+different from a bathroom if you get distracted by web
+
+00:18:31.440 --> 00:18:34.919
+browser. I also have the same problem. And one interesting
+
+00:18:34.920 --> 00:18:38.679
+solution I found at some point is that I pry my mind about
+
+00:18:38.680 --> 00:18:44.039
+certain task, I leave my office and I go for a walk while
+
+00:18:44.040 --> 00:18:49.079
+thinking about this. And that really forces to focus
+
+00:18:49.080 --> 00:18:52.839
+because while you're working you have nothing else to do.
+
+00:18:52.840 --> 00:18:56.999
+You cannot go and like go like searching Google and stuff
+
+00:18:57.000 --> 00:19:03.359
+like that. It can really help in some cases.
+
+00:19:03.360 --> 00:19:09.559
+Yeah, I try to. Periodically, I'll try to restart doing the
+
+00:19:09.560 --> 00:19:12.879
+Pomodoro method, where you're supposed to get up every 25
+
+00:19:12.880 --> 00:19:17.959
+minutes and take a break. But that requires a lot of
+
+00:19:17.960 --> 00:19:23.799
+discipline. And it also has, I find I'm more exhausted by
+
+00:19:23.800 --> 00:19:26.879
+following that method at the end of the day. But I think the
+
+00:19:26.880 --> 00:19:30.919
+problem with, well, I think in part- No, no, I don't mean
+
+00:19:30.920 --> 00:19:36.079
+Pomodoro actually. I mean, more like showers. Because when
+
+00:19:36.080 --> 00:19:39.079
+you take a shower, you think about something, right? When
+
+00:19:39.080 --> 00:19:43.159
+you just go for a walk, you again think about it. So this is not
+
+00:19:43.160 --> 00:19:46.119
+a break to take rest. It's a break to think away from
+
+00:19:46.120 --> 00:19:49.039
+computer.
+
+00:19:49.040 --> 00:19:54.239
+And you prime yourself, your brain by... picking something
+
+00:19:54.240 --> 00:19:56.719
+to work on. So I have a project, I think, like certain
+
+00:19:56.720 --> 00:20:01.079
+questions I want to think about. I sometimes take my, like a
+
+00:20:01.080 --> 00:20:05.319
+piece of paper with me. And then when I walk, I like take
+
+00:20:05.320 --> 00:20:10.279
+notes. You can record voice in your case. And like half an
+
+00:20:10.280 --> 00:20:15.239
+hour and you can really generate ideas.
+
+00:20:15.240 --> 00:20:18.519
+I have been doing a similar thing. I will take a clipboard.
+
+00:20:18.520 --> 00:20:24.799
+Maybe I'll have, um, Some blank pages where I'll write, jot
+
+00:20:24.800 --> 00:20:29.799
+down ideas as I walk. I'll go for like a half hour, hour-long
+
+00:20:29.800 --> 00:20:33.879
+walk and also read a paper sometimes, and in the process of
+
+00:20:33.880 --> 00:20:39.159
+reading, I get ideas.
+
+00:20:39.160 --> 00:20:45.159
+The clipboard though is socially less acceptable. It
+
+00:20:45.160 --> 00:20:49.359
+reminds people of their gym teacher, I think, or their
+
+00:20:49.360 --> 00:20:53.799
+marine drill sergeant, and they give me all kinds of weird
+
+00:20:53.800 --> 00:20:59.279
+looks. Even though they're walking and reading their cell
+
+00:20:59.280 --> 00:21:03.759
+phone, looking down at their cell phone, they give me weird
+
+00:21:03.760 --> 00:21:08.599
+looks for looking down at a clipboard as I walk. So there's
+
+00:21:08.600 --> 00:21:16.719
+that weird aspect to it. It's kind of hilarious.
+
+00:21:16.720 --> 00:21:21.479
+Thank you very much for the comment. Yeah, hopefully it's
+
+00:21:21.480 --> 00:21:24.799
+helpful. Because I really struggled about this web browser
+
+00:21:24.800 --> 00:21:28.346
+in the past. Not so much these days. Very good.
+
+00:21:28.347 --> 00:21:57.279
+That's good to hear.
+
+00:21:57.280 --> 00:21:57.639
+I asked,
+
+00:21:57.640 --> 00:22:06.519
+when I write notes, I've noticed like with the
+
+00:22:06.520 --> 00:22:10.360
+Getting Things Done and the Zettelkasten, I like to separate them
+
+00:22:10.400 --> 00:22:14.759
+out. And beyond that, I also like to separate them out on
+
+00:22:14.760 --> 00:22:19.959
+daily things and the global things. So that, for instance,
+
+00:22:19.960 --> 00:22:24.719
+your Zettelkasten, a daily would be like a journal. If you
+
+00:22:24.720 --> 00:22:29.599
+separate it out, It gives a lot of tension of, oh, well, if
+
+00:22:29.600 --> 00:22:33.119
+it's just a stray thought, I'll write it into my journal if I
+
+00:22:33.120 --> 00:22:36.959
+don't know where it goes. If I can think of a permanent place
+
+00:22:36.960 --> 00:22:41.479
+for it to go, it goes into the Zettelkasten. Same thing with,
+
+00:22:41.480 --> 00:22:44.599
+and then with like the getting things done is like, I don't,
+
+00:22:44.600 --> 00:22:48.159
+you start with like a fresh sheet of paper every single day or
+
+00:22:48.160 --> 00:22:54.639
+note or whatever. You ever done, you have tricks like that
+
+00:22:54.640 --> 00:22:59.359
+that you've noticed? So I'm sort of doing something similar
+
+00:22:59.360 --> 00:23:04.279
+through this. Well, to be honest, I like at the start of the
+
+00:23:04.280 --> 00:23:07.399
+day, I actually will just do sort of a brain dump of what
+
+00:23:07.400 --> 00:23:11.879
+happened the day before, just to try to get writing again.
+
+00:23:11.880 --> 00:23:16.959
+And these days, because of carpal tunnel syndrome, I'll use
+
+00:23:16.960 --> 00:23:22.159
+a voice speech to text to generate that initial text. And I'm
+
+00:23:22.160 --> 00:23:28.479
+just trying to, build up momentum of generating words. And
+
+00:23:28.480 --> 00:23:35.559
+so I capture, but I'm also adding to that document
+
+00:23:35.560 --> 00:23:40.719
+throughout the day. And so that is available through the web
+
+00:23:40.720 --> 00:23:47.279
+browser. I have a tab open to 750 words all the time. There's
+
+00:23:47.280 --> 00:23:51.719
+an alternate to it that is called Write Honey, that somebody
+
+00:23:51.720 --> 00:23:55.919
+in Berlin started, because they benefited so greatly from
+
+00:23:55.920 --> 00:23:58.679
+this practice. They have made it available for free,
+
+00:23:58.680 --> 00:24:05.039
+apparently for life. And so there's no word limit, whereas I
+
+00:24:05.040 --> 00:24:10.599
+have a grandfathered version of 750 words, and I have a word
+
+00:24:10.600 --> 00:24:15.519
+limit of 5,000 words. I rarely hit it. It's nice to know that
+
+00:24:15.520 --> 00:24:20.599
+right honey doesn't have that limit. So, that's how I'm
+
+00:24:20.600 --> 00:24:26.199
+capturing things. And then, so some of that text winds up
+
+00:24:26.200 --> 00:24:32.279
+being moved into my log file or even sometimes into the
+
+00:24:32.280 --> 00:24:37.799
+manuscript.
+
+00:24:37.800 --> 00:24:42.079
+So maybe a little less organized than the getting things
+
+00:24:42.080 --> 00:24:47.559
+done approach with the dailies and then the refiling
+
+00:24:47.560 --> 00:24:54.319
+process. So I don't do any refiling. I want to file once. I
+
+00:24:54.320 --> 00:24:58.079
+don't want to file a second time or have to go back and handle
+
+00:24:58.080 --> 00:25:03.319
+something a second time. So that's my rationale for the
+
+00:25:03.320 --> 00:25:08.159
+approach I take. I'm not using it. I've had various
+
+00:25:08.160 --> 00:25:12.759
+iterations of systems I've used, but I think my favorite one
+
+00:25:12.760 --> 00:25:15.559
+for like getting things done is actually not using
+
+00:25:15.560 --> 00:25:18.799
+Org Agenda, just like making a blank sheet and kind of doing
+
+00:25:18.800 --> 00:25:24.039
+like a template where it's just like, and separating my
+
+00:25:24.040 --> 00:25:28.119
+tasks out into three categories, like core tasks, like, and
+
+00:25:28.120 --> 00:25:32.279
+rule of thumb is like, if it's beyond three, it's too much too
+
+00:25:32.280 --> 00:25:36.359
+many. And like core tasks, secondary tasks and unplanned
+
+00:25:36.360 --> 00:25:39.759
+tasks. So these, those three categories, like for
+
+00:25:39.760 --> 00:25:42.039
+instance, the core task, if it's greater than three, it's
+
+00:25:42.040 --> 00:25:46.999
+too many. That way is like, when you look back, then you can
+
+00:25:47.000 --> 00:25:51.439
+see, like, if I got my core tasks done, I did really good. or if
+
+00:25:51.440 --> 00:25:56.879
+I got a lot of secondary tasks but not my core tasks done, I got
+
+00:25:56.880 --> 00:25:58.873
+side reactions with things that don't matter.
+
+00:25:58.874 --> 00:26:00.674
+If I got a lot of unplanned tasks,
+
+00:26:00.640 --> 00:26:03.679
+I could look at those unplanned tasks to see, oh yeah, okay,
+
+00:26:03.680 --> 00:26:07.639
+that was fine. Okay, the day didn't go as
+
+00:26:07.640 --> 00:26:14.999
+planned, but it was, yeah. That's an excellent suggestion.
+
+00:26:15.000 --> 00:26:20.119
+I generally just And I ended up long of a to-do list. It's
+
+00:26:20.120 --> 00:26:25.079
+impossible to accomplish in a day. Then I just like
+
+00:26:25.080 --> 00:26:29.799
+furnaces. Another trick that I liked was I also put like that
+
+00:26:29.800 --> 00:26:34.719
+under like a week. Cause it makes more sense to do it under a
+
+00:26:34.720 --> 00:26:39.079
+week. And then I'd have like subheadings under that, like,
+
+00:26:39.080 --> 00:26:45.079
+you know, so week day. Um, then I'd have those three
+
+00:26:45.080 --> 00:26:48.599
+categories for each of the tasks and then kind of as an
+
+00:26:48.600 --> 00:26:51.719
+unofficial day at the end, I just like have a staging area for
+
+00:26:51.720 --> 00:26:56.199
+all tasks. So I just kind of, then I just, I want to be using org
+
+00:26:56.200 --> 00:27:00.319
+agenda. So then I just be moving up and down, you know, cause
+
+00:27:00.320 --> 00:27:03.199
+you could, cause you're able to rearrange stuff in org mode
+
+00:27:03.200 --> 00:27:08.079
+so easily. I don't know if there's a good way of, that's been
+
+00:27:08.080 --> 00:27:11.919
+my favorite iteration
+
+00:27:11.920 --> 00:27:20.759
+of doing it. So I wrote a little function that pops in the
+
+00:27:20.760 --> 00:27:25.439
+to-dos that are specific to a particular project in the log
+
+00:27:25.440 --> 00:27:31.359
+file for that project.
+
+00:27:31.360 --> 00:27:36.599
+And then I add the log file name to the list of org files that
+
+00:27:36.600 --> 00:27:41.919
+Org Agenda searches, so those to-dos will show up. But my
+
+00:27:41.920 --> 00:27:46.199
+list is too long, and that becomes overwhelming. So I'll
+
+00:27:46.200 --> 00:27:51.399
+just assign a to-do heading to the top item in my to-do list to
+
+00:27:51.400 --> 00:27:54.479
+try to, but maybe it should be three. That would be a
+
+00:27:54.480 --> 00:27:58.479
+reasonable compromise.
+
+00:27:58.480 --> 00:28:03.879
+That's a good idea.
+
+00:28:03.880 --> 00:28:12.879
+So you're doing weekly planning then? I can show up. I was.
+
+00:28:12.880 --> 00:28:16.879
+This is, yeah, this was, yeah. What ended up making me stop is
+
+00:28:16.880 --> 00:28:20.439
+I didn't know how to make a template of it. And I, I ended up
+
+00:28:20.440 --> 00:28:25.879
+getting annoyed by manually changing the days every single
+
+00:28:25.880 --> 00:28:29.759
+time and naming like my files and stuff like that. If I Maybe
+
+00:28:29.760 --> 00:28:34.159
+if I did it now, I could figure out how to program it or if I
+
+00:28:34.160 --> 00:28:36.439
+spent enough time, but that's what I think eventually made
+
+00:28:36.440 --> 00:28:42.479
+me stop doing it. So there's a, um, you can make a snippet for
+
+00:28:42.480 --> 00:28:45.640
+the week and then you could have code in the snippet that
+
+00:28:45.680 --> 00:28:51.519
+would generate the dates automatically. Um, So I have like
+
+00:28:51.520 --> 00:28:56.599
+for my daily entry, I have a snippet called entry and then I
+
+00:28:56.600 --> 00:29:02.079
+hit tab and our control or whatever to insert the snippet and
+
+00:29:02.080 --> 00:29:07.919
+that has the current date already entered. So I skip that, I
+
+00:29:07.920 --> 00:29:13.479
+don't have to deal with that. So I think you could probably
+
+00:29:13.480 --> 00:29:18.639
+feed what you want to accomplish to a copilot, for example,
+
+00:29:18.640 --> 00:29:21.801
+being copilot. I've been using Bing Copilot
+
+00:29:21.802 --> 00:29:25.833
+for the past three or four months to return
+
+00:29:25.834 --> 00:29:29.227
+Elisp code that works 90% of the time.
+
+00:29:29.228 --> 00:29:34.399
+I've been pretty impressed. And it's free. So no
+
+00:29:34.400 --> 00:29:43.119
+API key required. It runs. So I guess I installed the Bing
+
+00:29:43.120 --> 00:29:49.362
+Copilot plugin in the Google Chrome.
+
+00:29:49.363 --> 00:29:50.199
+And that's what I've been using.
+
+00:29:50.200 --> 00:30:00.807
+Yeah, I can show you my screen if
+
+00:30:00.808 --> 00:30:05.852
+you want to see what the screen looks like.
+
+00:30:05.853 --> 00:30:06.839
+I can email you the template. I kind of have it saved as a
+
+00:30:06.840 --> 00:30:12.639
+template. I've got to find it, though. Let's see.
+
+00:30:12.640 --> 00:30:17.439
+Not exactly set up to.
+
+00:30:17.440 --> 00:30:44.159
+Alright, so. I
+
+00:30:44.160 --> 00:30:50.159
+don't know if you can see this well enough, but...
+
+00:30:50.160 --> 00:30:59.599
+Yeah, let's make it bigger. Can you see that at all? I can see a
+
+00:30:59.600 --> 00:31:01.279
+little bit of it. Yeah, it's kind of blurry.
+
+00:31:01.280 --> 00:31:07.399
+Alright, well. But then you just do that right there. So it's
+
+00:31:07.400 --> 00:31:13.239
+all color coded. I, so I get a sense of, uh, uh, what the kind of
+
+00:31:13.240 --> 00:31:18.599
+greenish blue lines must be or days, I guess, or. Okay. Well,
+
+00:31:18.600 --> 00:31:22.639
+right. There's like, so you can see like startup show two
+
+00:31:22.640 --> 00:31:27.519
+levels. Then I have like numbers right there. So right on one
+
+00:31:27.520 --> 00:31:30.919
+day you have like the core tasks, there's three out of four
+
+00:31:30.920 --> 00:31:37.119
+done. Then I have like secondary and unplanned and then.
+
+00:31:37.120 --> 00:31:42.079
+Yeah, that's just the general idea
+
+00:31:42.080 --> 00:31:50.319
+So that this is you raise you know the so the dilemma I face of
+
+00:31:50.320 --> 00:31:55.119
+course is that I have maintain like a to-do list and our
+
+00:31:55.120 --> 00:31:58.799
+project specific and then there's the all the other things I
+
+00:31:58.800 --> 00:32:04.439
+have to do and So there should be like some The org agenda
+
+00:32:04.440 --> 00:32:09.879
+should be a way of being able to pull the two sets together, I
+
+00:32:09.880 --> 00:32:10.319
+guess.
+
+00:32:10.320 --> 00:32:16.959
+I had broken up my,
+
+00:32:16.960 --> 00:32:25.359
+well, I had way too many to-do lists stored in various
+
+00:32:25.360 --> 00:32:25.919
+places.
+
+00:32:25.920 --> 00:32:32.199
+And so that's a problem, I guess, when you have too many
+
+00:32:32.200 --> 00:32:37.359
+to-dos and the org Agenda becomes overwhelming and sort of
+
+00:32:37.360 --> 00:32:44.479
+discourages Yeah, I figure that the general task on that is
+
+00:32:44.480 --> 00:32:49.199
+like I start writing things up. I get more and more items.
+
+00:32:49.200 --> 00:32:52.319
+I'll make a master to-do list. Oh my master to-do list has too
+
+00:32:52.320 --> 00:32:58.759
+many items. Let me throw it out Well, there's another name
+
+00:32:58.760 --> 00:33:01.559
+for that kind of list you could you know called a grass
+
+NOTE Time Power
+
+00:33:01.560 --> 00:33:06.959
+catcher list. So Charles Hobbs was this, he wrote a book in
+
+00:33:06.960 --> 00:33:16.079
+the 80s called Time Power. And he had like, you know, so he was
+
+00:33:16.080 --> 00:33:22.679
+one of these time management gurus. And so, let's
+
+00:33:22.680 --> 00:33:26.519
+see, you get the name of some, like Tony Robbins and,
+
+00:33:26.520 --> 00:33:34.879
+I forget the name of the other guy, that's Brian Tracy. So
+
+00:33:34.880 --> 00:33:39.119
+that they have kind of pushed the same kind of similar
+
+00:33:39.120 --> 00:33:43.279
+approaches. But Charles Hobbs had a very more organized
+
+00:33:43.280 --> 00:33:46.679
+approach, I think, and more disciplined. And he identified
+
+00:33:46.680 --> 00:33:49.439
+that kind of list as a grass catcher list, where you have a
+
+00:33:49.440 --> 00:33:52.839
+list of items that you think you might want to do, but you
+
+00:33:52.840 --> 00:33:57.359
+haven't prioritized them yet. And you haven't scheduled
+
+00:33:57.360 --> 00:34:03.199
+them yet. but they need a safe place to be stored. When time
+
+00:34:03.200 --> 00:34:06.199
+permits, the idea was you would pull items off that grass
+
+00:34:06.200 --> 00:34:10.599
+catcher list and move it into a to-do item that you will
+
+00:34:10.600 --> 00:34:18.079
+schedule and commit to getting done. That was the idea,
+
+00:34:18.080 --> 00:34:20.999
+separating them between core tasks, secondary tasks,
+
+00:34:21.000 --> 00:34:24.119
+unplanned tasks, because your whole day can't be planned.
+
+00:34:24.120 --> 00:34:27.919
+Right, right. You have things you have to do that are
+
+00:34:27.920 --> 00:34:31.319
+unscheduled that come through your door or land in your
+
+00:34:31.320 --> 00:34:35.239
+inbox or land in your email. You've got to do them. And then
+
+00:34:35.240 --> 00:34:38.799
+core tasks, I don't know, like to-do lists, their whole
+
+00:34:38.800 --> 00:34:43.279
+point is. So for instance, like journal and Zettelkasten
+
+00:34:43.280 --> 00:34:46.679
+are kind of, and like that's global lists versus the daily
+
+00:34:46.680 --> 00:34:49.399
+lists are kind of. done a little differently. With
+
+00:34:49.400 --> 00:34:53.639
+Zettelkasten, it's organic. Things build up. If you make a
+
+00:34:53.640 --> 00:34:56.359
+note, it's great. If you don't, if it has a small amount,
+
+00:34:56.360 --> 00:35:00.479
+that's great. Have a small note. With a daily to-do, you want
+
+00:35:00.480 --> 00:35:05.199
+to use it to make decisions. That's the idea of having the
+
+00:35:05.200 --> 00:35:08.639
+core task and the secondary task separate because the whole
+
+00:35:08.640 --> 00:35:12.719
+thing about it is, I wanna use this to eliminate what I'm
+
+00:35:12.720 --> 00:35:15.759
+going to do. It's to choose what I'm going to do, like the core
+
+00:35:15.760 --> 00:35:19.839
+tasks. Because if I can get my core tasks, I can be happy with
+
+00:35:19.840 --> 00:35:26.519
+my previous days. And then I would probably start using
+
+00:35:26.520 --> 00:35:30.639
+agenda a lot more if I was more consistent with using like
+
+00:35:30.640 --> 00:35:34.439
+these as like weekly files. I don't know. But then the whole
+
+00:35:34.440 --> 00:35:37.559
+goal thing is just like, let me see what I wanna populate the
+
+00:35:37.560 --> 00:35:43.879
+day list with. So how many core tasks wind up spanning
+
+00:35:43.880 --> 00:35:47.359
+multiple days because they're such big projects?
+
+00:35:47.360 --> 00:35:54.519
+I would need more time using the system before I'd figure
+
+00:35:54.520 --> 00:35:59.679
+something like that out. As I said, I'm not using it right
+
+00:35:59.680 --> 00:36:04.759
+now, but that has been my favorite iteration of using these.
+
+00:36:04.760 --> 00:36:13.519
+So within the core tasks, do you assign priorities? So the
+
+00:36:13.520 --> 00:36:20.279
+way I would translate this a little bit would be like in this
+
+00:36:20.280 --> 00:36:24.999
+method that Charles Hobbs had, he had a category for the
+
+00:36:25.000 --> 00:36:29.399
+items that you really have to get done, and they're really
+
+00:36:29.400 --> 00:36:34.119
+important. And so they get a priority of A. And then the
+
+00:36:34.120 --> 00:36:39.519
+secondary tasks would get a priority of B. But then within
+
+00:36:39.520 --> 00:36:42.079
+the A category, you would number them like one through
+
+00:36:42.080 --> 00:36:45.039
+three, I guess. All right, so this would be part of the
+
+00:36:45.040 --> 00:36:49.079
+purpose of separating the daily list or like the weekly list
+
+00:36:49.080 --> 00:36:51.719
+from the global list. So for instance, your global list,
+
+00:36:51.720 --> 00:36:55.679
+you'd say, I want this project that will take a long duration
+
+00:36:55.680 --> 00:37:00.639
+of time. But your daily list would just say, I want to work on
+
+00:37:00.640 --> 00:37:05.039
+it today, even if I don't get it done today. Like, I want to
+
+00:37:05.040 --> 00:37:11.399
+work on it today. then maybe you can link like for instance
+
+00:37:11.400 --> 00:37:16.239
+that your daily list to that global list or something along
+
+00:37:16.240 --> 00:37:20.479
+those lines. But that would be I think a good answer to that
+
+00:37:20.480 --> 00:37:24.719
+type of problem because yeah, the daily list is like
+
+00:37:24.720 --> 00:37:30.999
+supposed to be for that day, not for, Like for instance, you
+
+00:37:31.000 --> 00:37:34.679
+start out clean, you make the list like that would probably
+
+00:37:34.680 --> 00:37:38.599
+be your first task for the week is what do I want for the week?
+
+00:37:38.600 --> 00:37:41.639
+Then you have some tasks that you do with staging. And then
+
+00:37:41.640 --> 00:37:43.799
+like for instance, since you look at it as a whole week at a
+
+00:37:43.800 --> 00:37:47.559
+time, you're able to rearrange it and say, these are the
+
+00:37:47.560 --> 00:37:51.159
+things I wanna get done this week. This is what I really wanna
+
+00:37:51.160 --> 00:37:53.639
+get done on this day. This is what I don't care about on this
+
+00:37:53.640 --> 00:37:53.959
+day or yeah.
+
+00:37:53.960 --> 00:38:03.079
+Another person that kind of, and this is kind of related,
+
+00:38:03.080 --> 00:38:05.559
+there's this idea of
+
+00:38:05.560 --> 00:38:14.039
+of time blocking. So obviously, three tasks, core tasks,
+
+00:38:14.040 --> 00:38:18.839
+maybe they're going to take three or four hours each or two or
+
+00:38:18.840 --> 00:38:23.919
+three. And you can assign blocks of time in your schedule to
+
+00:38:23.920 --> 00:38:30.039
+get them done. And often, what happens is they take longer
+
+00:38:30.040 --> 00:38:33.799
+than you expect. And you have to extend the blocks. Calvin
+
+00:38:33.800 --> 00:38:39.359
+Newport has a that's a kind of approach he advocates is you
+
+00:38:39.360 --> 00:38:43.519
+and I think the power to that is you're you. you're mapping
+
+00:38:43.520 --> 00:38:48.599
+out, you know, you're allocating the time to do these things
+
+00:38:48.600 --> 00:38:52.679
+and you're seeing how you actually, how much time things
+
+00:38:52.680 --> 00:38:56.119
+actually take. And then you, so you wind up adjusting in the
+
+00:38:56.120 --> 00:39:00.079
+future. And the idea is with this approach is do it on paper.
+
+00:39:00.080 --> 00:39:03.559
+And then you have to like, uh, if something takes longer,
+
+00:39:03.560 --> 00:39:06.599
+that pushes everything else down. You just wind up
+
+00:39:06.600 --> 00:39:12.799
+redrawing your schedule for the day, uh, manually. And, um,
+
+00:39:12.800 --> 00:39:17.399
+So it's kind of laborious, and that labor is supposed to
+
+00:39:17.400 --> 00:39:21.799
+inhibit you from spending too much time on a project. As you
+
+00:39:21.800 --> 00:39:24.959
+know, you've got the pain of redrawing everything if you
+
+00:39:24.960 --> 00:39:27.919
+spend too much time on the first project.
+
+00:39:27.920 --> 00:39:36.999
+Yeah, there was a, let's see. It's whatever you strategy you
+
+00:39:37.000 --> 00:39:40.359
+want to do. Like for instance, to me, it's like doing it this
+
+00:39:40.360 --> 00:39:45.519
+way makes me say, I want to focus on like what matters. Then
+
+00:39:45.520 --> 00:39:49.239
+it'll tell me if I feel good about that day, depends on what
+
+00:39:49.240 --> 00:39:52.759
+algorithm, what level and what type of strategy you're
+
+00:39:52.760 --> 00:39:56.119
+using. If you're using time blocking, you're optimizing
+
+00:39:56.120 --> 00:40:02.879
+for each level of time block where I'm, where's like, And you
+
+00:40:02.880 --> 00:40:09.359
+can combine the approaches. It'd be trickier. But like, now
+
+00:40:09.360 --> 00:40:12.919
+let's see. I was listening to a talk with Jordan Peterson.
+
+00:40:12.920 --> 00:40:15.159
+One of the things he said that really resonated with me is
+
+00:40:15.160 --> 00:40:19.119
+like, you wanna use a calendar, but the first rule of using a
+
+00:40:19.120 --> 00:40:24.599
+calendar is don't let the calendar tyrannize you. Because
+
+00:40:24.600 --> 00:40:27.999
+like the first thing you wanna do whenever you use a calendar
+
+00:40:28.000 --> 00:40:33.039
+is schedule every single minute of the day Now you don't have
+
+00:40:33.040 --> 00:40:37.279
+any room for if any task overruns at all. And after a couple of
+
+00:40:37.280 --> 00:40:42.719
+tests, you're like, I don't want to do this anymore. I rebel.
+
+00:40:42.720 --> 00:40:49.879
+I'm going to throw it out. So one kind of combination is
+
+00:40:49.880 --> 00:40:53.799
+through this Pomodoro method I mentioned earlier, where
+
+00:40:53.800 --> 00:40:57.719
+you would sort of like block out, say, two hours. You work for
+
+00:40:57.720 --> 00:41:02.199
+like 25 minutes, take a little, break for up to five minutes
+
+00:41:02.200 --> 00:41:07.279
+and get back to work. And then after two hours, you're to take
+
+00:41:07.280 --> 00:41:11.119
+like a 15 minute break in the morning. In the afternoon, you
+
+00:41:11.120 --> 00:41:14.599
+might even let that break run longer and you might only have
+
+00:41:14.600 --> 00:41:19.279
+three work sessions between breaks. So because you're
+
+00:41:19.280 --> 00:41:24.319
+going to be more run down in the afternoon. And so you build in
+
+00:41:24.320 --> 00:41:26.919
+some
+
+00:41:26.920 --> 00:41:31.639
+into your schedule, some flex like, okay, that's supposed
+
+00:41:31.640 --> 00:41:34.439
+to be a break time, but you know, maybe some urgency comes up
+
+00:41:34.440 --> 00:41:37.999
+and you got to deal with, um, and you have to break out of this,
+
+00:41:38.000 --> 00:41:44.039
+uh, Pomodoro technique. So, uh, that, that, that's one way
+
+00:41:44.040 --> 00:41:48.799
+of kind of scheduling in some, uh, flexibility is through
+
+00:41:48.800 --> 00:41:54.399
+the breaks at Peterson's[??], right. Right. That... I can't, I
+
+00:41:54.400 --> 00:41:59.239
+can't... I don't schedule to that kind of detail. That's just
+
+00:41:59.240 --> 00:42:00.039
+too oppressive.
+
+00:42:00.040 --> 00:42:05.399
+Well, neither do I, but it's like that, like I, that's, I
+
+00:42:05.400 --> 00:42:09.119
+don't try to, to me, the much more interesting question that
+
+00:42:09.120 --> 00:42:12.479
+I tried to do is like, let's try to make sure I do the important
+
+00:42:12.480 --> 00:42:15.199
+things. Cause if I do those, my life would probably move a lot
+
+00:42:15.200 --> 00:42:19.319
+quicker. If I get, if I choose a couple items that I really
+
+00:42:19.320 --> 00:42:22.239
+want and am able to consistently do them, I think my life
+
+00:42:22.240 --> 00:42:26.319
+would bastically start improving. Not necessarily if I can
+
+00:42:26.320 --> 00:42:28.879
+play the game of optimizing every hour.
+
+00:42:28.880 --> 00:42:36.879
+Maybe that could be, and it's a place to start rather, and I
+
+00:42:36.880 --> 00:42:39.079
+think it'd be the most effective place to start. And if I got
+
+00:42:39.080 --> 00:42:42.719
+better at using it all the time, perhaps I'd be playing
+
+00:42:42.720 --> 00:42:46.999
+optimizing every hour game. But this is the game I think
+
+00:42:47.000 --> 00:42:52.719
+would be best bang for buck for me to optimize now. What
+
+00:42:52.720 --> 00:42:56.039
+you're trying to optimize for is accomplishing these core
+
+00:42:56.040 --> 00:43:03.559
+tasks, getting them done as quickly as possible, or as
+
+00:43:03.560 --> 00:43:10.559
+effectively as possible, and as effectively as you need, or
+
+00:43:10.560 --> 00:43:15.359
+whatever your goal is. But yeah, focusing on that rather
+
+00:43:15.360 --> 00:43:19.679
+than the scheduling, I think. Plus, a core task could be, I
+
+00:43:19.680 --> 00:43:26.119
+don't know, catch up on all my house chores, or let, or do a
+
+00:43:26.120 --> 00:43:28.879
+specific one if it's really big or like, I don't know, it's
+
+00:43:28.880 --> 00:43:32.159
+whatever you want it to be. It's like, you can make them
+
+00:43:32.160 --> 00:43:37.559
+bigger or smaller depending on, on how you word them and
+
+00:43:37.560 --> 00:43:40.919
+everything. Cause like, if you say cap, capture all of your
+
+00:43:40.920 --> 00:43:44.879
+house chores up for like one week and you haven't done
+
+00:43:44.880 --> 00:43:47.279
+anything, that's probably a little too ambitious.
+
+00:43:47.280 --> 00:43:56.439
+That's right. Yeah, well, a lot of. Yeah.
+
+00:43:56.440 --> 00:44:03.039
+I spend, I don't know, at least 15 minutes, half an hour at the
+
+00:44:03.040 --> 00:44:07.119
+beginning of the day, sort of my my planning and sort of my
+
+00:44:07.120 --> 00:44:12.359
+initial writing session is involves a bit of planning and
+
+00:44:12.360 --> 00:44:20.399
+there's always. A lot more time. So generally, depending on
+
+00:44:20.400 --> 00:44:21.279
+the nature of your work,
+
+00:44:21.280 --> 00:44:28.119
+it can take up to 15% of your time. It can take quite a bit of
+
+00:44:28.120 --> 00:44:33.919
+time. And I think people don't really acknowledge that as
+
+00:44:33.920 --> 00:44:39.039
+part of your work is planning. And it can take a significant
+
+00:44:39.040 --> 00:44:39.839
+amount of time.
+
+00:44:39.840 --> 00:44:44.799
+Yeah, that's what I was meaning though is like the very first
+
+00:44:44.800 --> 00:44:48.119
+thing I think people generally always try to do with the
+
+00:44:48.120 --> 00:44:51.279
+scanners like look at how productive I can be let's schedule
+
+00:44:51.280 --> 00:44:55.319
+every single minute up and it's like You're not gonna want to
+
+00:44:55.320 --> 00:45:00.519
+do that for very long and it's not gonna work out And what you
+
+00:45:00.520 --> 00:45:06.359
+were saying about The pomodoro technique one of the core
+
+00:45:06.360 --> 00:45:11.919
+Let's see, one of the benefits could be described of another
+
+00:45:11.920 --> 00:45:16.879
+benefit I've seen of like multiple habits books is if you
+
+00:45:16.880 --> 00:45:19.599
+start multiple small habits where you try to do them
+
+00:45:19.600 --> 00:45:23.319
+consistently, you give yourself an opening to where if you
+
+00:45:23.320 --> 00:45:28.279
+get into the flow state, you can do a lot more of it. Like, I
+
+00:45:28.280 --> 00:45:31.759
+don't know, let's say you got a habit of, I don't know, just
+
+00:45:31.760 --> 00:45:36.519
+write a journal entry. You're a journal entry of like at
+
+00:45:36.520 --> 00:45:39.279
+least two lines. I don't know that could very easily turn to
+
+00:45:39.280 --> 00:45:42.759
+like three paragraphs and if you have like a whole bunch of
+
+00:45:42.760 --> 00:45:46.279
+Like the pomodoro technique it could be like stubs to allow
+
+00:45:46.280 --> 00:45:47.639
+you to do more stuff
+
+00:45:47.640 --> 00:45:54.319
+Where are they in spur to allow inspiration to allow you to
+
+00:45:54.320 --> 00:45:57.239
+generate inspiration and then capture it when it strikes if
+
+00:45:57.240 --> 00:45:58.759
+the mood fancies you
+
+00:45:58.760 --> 00:46:08.319
+Yeah, so that's kind of an issue with the Pomodoro
+
+00:46:08.320 --> 00:46:13.839
+technique. So, one idea is that you just, if you really have
+
+00:46:13.840 --> 00:46:19.359
+to break out, because the idea is too big to put on the back
+
+00:46:19.360 --> 00:46:24.359
+burner and hold in place, then you do have to break out of the
+
+00:46:24.360 --> 00:46:30.039
+Pomodoro and go, you know, jot down a quick note or three
+
+00:46:30.040 --> 00:46:30.719
+paragraphs.
+
+00:46:30.720 --> 00:46:36.839
+but like how much... You don't get to count that as a
+
+00:46:36.840 --> 00:46:40.679
+Pomodoro. You have to like reset your count because you've
+
+00:46:40.680 --> 00:46:48.759
+broken it. I mean, according to that method, it's
+
+00:46:48.760 --> 00:46:52.879
+kind of rigid. It's a different algorithm optimizing for
+
+00:46:52.880 --> 00:46:55.479
+different things. And this may just be like a by-product,
+
+00:46:55.480 --> 00:47:00.759
+but this could be very easily like a core advantage that may
+
+00:47:00.760 --> 00:47:05.599
+or may not be the core reason that you were using it but didn't
+
+00:47:05.600 --> 00:47:08.719
+realize it, and may not be something that it's optimizing
+
+00:47:08.720 --> 00:47:17.399
+for. So
+
+00:47:17.400 --> 00:47:22.159
+are you developing a Emacs package then with your template?
+
+00:47:22.160 --> 00:47:30.319
+No. As I said,
+
+00:47:30.320 --> 00:47:36.319
+My next steps where I think would make it work a lot better is
+
+00:47:36.320 --> 00:47:39.999
+if I figured out some way of automatically filling out the
+
+00:47:40.000 --> 00:47:45.439
+dates or maybe automatically adding the file per week into
+
+00:47:45.440 --> 00:47:51.999
+and out of Org Agenda. That would be my next steps. I think if I
+
+00:47:52.000 --> 00:47:55.719
+did that, it would have a much greater chance of becoming
+
+00:47:55.720 --> 00:48:01.879
+part of my workflow at all times. Yeah, I bet you could do it
+
+00:48:01.880 --> 00:48:08.439
+pretty Something I got to work with the help of copilot. I'm
+
+00:48:08.440 --> 00:48:14.959
+not a wizard yet at Emacs Lisp, but I find that copilot is
+
+00:48:14.960 --> 00:48:26.439
+quite helpful.
+
+00:48:26.440 --> 00:48:32.799
+Yeah, their AIs are definitely interesting.
+
+NOTE Do you use a lot of TeX inside Org Mode?
+
+00:48:32.800 --> 00:48:38.279
+So. do you ever use any, uh, a lot of TeX inside of org mode?
+
+00:48:38.280 --> 00:48:49.639
+No, mostly because I know that like I could try to learn it,
+
+00:48:49.640 --> 00:48:57.639
+but I just don't have a need for it. So yeah. And then also like
+
+00:48:57.640 --> 00:49:05.279
+I remember learning, when I learned HTML, I like writing
+
+00:49:05.280 --> 00:49:08.519
+HTML more than like, for instance, Word, because it was a lot
+
+00:49:08.520 --> 00:49:14.959
+more transparent, like a plain text document is, and kind of
+
+00:49:14.960 --> 00:49:20.159
+wrote the ordered list, unordered list, in such a way that it
+
+00:49:20.160 --> 00:49:25.599
+kind of looked similar to the page. But I find that I like Org
+
+00:49:25.600 --> 00:49:26.439
+Mode more than,
+
+00:49:26.440 --> 00:49:35.479
+HTML because, well, it's optimized for, like, my writing
+
+00:49:35.480 --> 00:49:38.479
+and consumption and overall use case rather than, like,
+
+00:49:38.480 --> 00:49:43.359
+optimizing it for somebody else to view, which I generally
+
+00:49:43.360 --> 00:49:45.039
+don't have as much.
+
+00:49:45.040 --> 00:49:52.799
+But, so, like, I don't know. Org Mode is what I'm going to end
+
+00:49:52.800 --> 00:49:57.879
+up using the most, so. I just want to use LaTeX enough.
+
+00:49:57.880 --> 00:50:00.999
+Although I'd be interested in learning LaTeX snippets
+
+00:50:01.000 --> 00:50:06.519
+inside of Org Mode for like the math stuff, but then again, I
+
+00:50:06.520 --> 00:50:13.479
+just never have to type it. So my attitude towards Org Mode
+
+00:50:13.480 --> 00:50:18.199
+changed radically over the summer. I was avoiding it
+
+00:50:18.200 --> 00:50:25.439
+somewhat before and then when I realized I can keep all the
+
+00:50:25.440 --> 00:50:33.279
+great aspects of LaTeX and still use all the great features
+
+00:50:33.280 --> 00:50:39.959
+of Org Mode. So I view now, I think of Org Mode as a wrapper
+
+00:50:39.960 --> 00:50:44.559
+around LaTeX. I know it's not really that, but by thinking
+
+00:50:44.560 --> 00:50:49.159
+about it that way, uh, it's much more palatable to me to, uh,
+
+00:50:49.160 --> 00:50:54.679
+uh, just go, uh, commit to doing as much as possible in org
+
+00:50:54.680 --> 00:50:58.559
+mode. So I've been, that's what I've been doing. Um, this
+
+00:50:58.560 --> 00:51:01.839
+fall is just, uh, every document I started as an org file.
+
+00:51:01.840 --> 00:51:09.959
+I imagine I would like it if I knew it, it's just because I,
+
+00:51:09.960 --> 00:51:13.319
+because I imagine it would feel to me like HTML, or it's just
+
+00:51:13.320 --> 00:51:18.519
+like, Yeah, I can write it, I can format it the way I want to.
+
+00:51:18.520 --> 00:51:24.439
+This is just guesses from my experience with HTML. I can read
+
+00:51:24.440 --> 00:51:27.679
+the source code of it and kind of get an idea of how it will look
+
+00:51:27.680 --> 00:51:30.919
+like, but I just...
+
+00:51:30.920 --> 00:51:36.799
+It's like if you're gonna use the Linux terminal, but you're
+
+00:51:36.800 --> 00:51:41.639
+gonna use it for an hour a week every... Yeah, an hour a week.
+
+00:51:41.640 --> 00:51:45.199
+It's just like, it's just not enough time to dedicate to
+
+00:51:45.200 --> 00:51:48.279
+learn it for to start paying off. That's right. And you can
+
+00:51:48.280 --> 00:51:52.559
+always export your org file to an HTML file.
+
+00:51:52.560 --> 00:51:56.079
+Yeah.
+
+00:51:56.080 --> 00:52:06.039
+But the org file is what I stare at 95% of the time or more. I
+
+00:52:06.040 --> 00:52:10.519
+only use a PDF. So I export to PDF generally. And when I export
+
+00:52:10.520 --> 00:52:16.239
+to HTML, it's very cool. I like looking at the document in the
+
+00:52:16.240 --> 00:52:20.879
+web browser. I like navigating it. But I generally will
+
+00:52:20.880 --> 00:52:24.879
+export it to PDF so I can print it out when I'm traveling to
+
+00:52:24.880 --> 00:52:30.439
+carry out editing. But that's just a small, tiny fraction of
+
+00:52:30.440 --> 00:52:34.039
+the time that I'm actually working with the document. So
+
+00:52:34.040 --> 00:52:38.119
+most of the time it's in org mode. You know, maybe it doesn't
+
+00:52:38.120 --> 00:52:44.199
+look as pretty as in, you know, uh, HTML, but it's, uh, it's so
+
+00:52:44.200 --> 00:52:48.679
+such a pleasure to work in because of the way you can reorder
+
+NOTE Org Mode versus Markdown
+
+00:52:48.680 --> 00:52:55.119
+lists, you know, create headlines. So what about org mode
+
+00:52:55.120 --> 00:52:57.719
+versus Markdown? Cause I know when, cause when I looked at
+
+00:52:57.720 --> 00:53:00.559
+org mode versus Markdown, I was like, yeah, more stuff
+
+00:53:00.560 --> 00:53:05.039
+supports Markdown, but. Org mode has more stuff built into
+
+00:53:05.040 --> 00:53:10.519
+it, like the calendar and agenda stuff. And it's obvious
+
+00:53:10.520 --> 00:53:14.559
+what this is supposed to be in org mode. And Emacs has got the
+
+00:53:14.560 --> 00:53:18.919
+best client. I use Emacs. And I think it's got a better syntax
+
+00:53:18.920 --> 00:53:23.319
+than Markdown. You've got stuff like Obsidian and Notes.
+
+00:53:23.320 --> 00:53:30.959
+And what about the Markdown? So Markdown, I use it a lot on
+
+00:53:30.960 --> 00:53:35.479
+GitHub repositories for the readme files. Sometimes I'll
+
+00:53:35.480 --> 00:53:38.959
+do them in org, but generally just go with the GitHub
+
+00:53:38.960 --> 00:53:44.159
+Markdown. But tables are still kind of a pain in Markdown,
+
+00:53:44.160 --> 00:53:48.719
+whereas tables are such a pleasure to build in org mode,
+
+00:53:48.720 --> 00:53:52.959
+because you have that dynamic adjusting of the column width
+
+00:53:52.960 --> 00:53:59.239
+as you make entries that become wider. And it's so easy to add
+
+00:53:59.240 --> 00:54:04.159
+columns. And it's so hard to add columns. It's much harder in
+
+00:54:04.160 --> 00:54:12.479
+Markdown and in LaTeX. It's more of a pain to add new columns.
+
+00:54:12.480 --> 00:54:16.919
+So the table aspect, that, to me, was one of the killer
+
+00:54:16.920 --> 00:54:20.439
+features. And then the other killer feature, of course, is
+
+00:54:20.440 --> 00:54:24.159
+the literate programming or interactive programming. So
+
+00:54:24.160 --> 00:54:26.559
+interactive computing that you can do where you have a code
+
+00:54:26.560 --> 00:54:30.639
+block and then you can execute it and have the output show up
+
+00:54:30.640 --> 00:54:35.159
+right below the code block. And
+
+00:54:35.160 --> 00:54:40.839
+org modes support for that kind of interactive computing is
+
+00:54:40.840 --> 00:54:46.039
+I'm not aware of anything more sophisticated, because you
+
+00:54:46.040 --> 00:54:50.799
+could have parallel sessions. You could have four Python
+
+00:54:50.800 --> 00:54:55.039
+sessions going, each of them labeled differently. And
+
+00:54:55.040 --> 00:54:57.519
+they're all walled off from each other. They don't see each
+
+00:54:57.520 --> 00:55:07.079
+other. Or you can have different programming languages. So
+
+00:55:07.080 --> 00:55:11.039
+you can do polyglottic
+
+00:55:11.040 --> 00:55:14.359
+programming where you have... Maybe Python's generating a
+
+00:55:14.360 --> 00:55:18.239
+table, and then that table gets, you decide you want to plot
+
+00:55:18.240 --> 00:55:24.199
+it using R, or you want to use ggplot2 and R to plot it, so that
+
+00:55:24.200 --> 00:55:29.719
+table gets fed into R in the next code block down, and then
+
+00:55:29.720 --> 00:55:33.559
+below it, you get a graph made in R, or you can make it in new
+
+00:55:33.560 --> 00:55:39.559
+plot, or you could, or some other, or you could move it into a
+
+00:55:39.560 --> 00:55:47.399
+LaTeX code block, plot the data in with Tikz,
+
+00:55:47.400 --> 00:55:52.719
+or you could move it into Clojure and use one of the
+
+00:55:52.720 --> 00:55:56.399
+Clojure plotting programs. Just kind of limitless what you
+
+00:55:56.400 --> 00:56:00.119
+can do in terms of recombining the best of different
+
+00:56:00.120 --> 00:56:01.599
+programming languages.
+
+00:56:01.600 --> 00:56:09.239
+Yeah, let's see. The literate DevOps are really good talks
+
+00:56:09.240 --> 00:56:13.359
+and subjects to get into this type of stuff. And they give a
+
+00:56:13.360 --> 00:56:17.119
+very good example of some tips on how to do this. You start
+
+00:56:17.120 --> 00:56:20.359
+writing in the previous or past tenses, though. You got the
+
+00:56:20.360 --> 00:56:23.719
+answer already, and then your notes are already formatted
+
+00:56:23.720 --> 00:56:28.559
+out as you're doing it for after the fact. And like, one thing
+
+NOTE Raku
+
+00:56:28.560 --> 00:56:32.679
+I like doing a lot is using the Raku language as a calculator,
+
+00:56:32.680 --> 00:56:37.239
+because I can just type in math as normal and it all works.
+
+00:56:37.240 --> 00:56:44.919
+I've tried that. Yeah, you can just say like, I don't know, 25
+
+00:56:44.920 --> 00:56:49.559
+times four with, and you can put like parentheses in it. I'm
+
+00:56:49.560 --> 00:56:55.039
+not exactly, I haven't used it very heavily. Oh, it also
+
+00:56:55.040 --> 00:57:01.839
+supports Unicode. So if you wanted to have
+
+00:57:01.840 --> 00:57:07.319
+the not equals sign, the Unicode not equals sign, it will
+
+00:57:07.320 --> 00:57:12.919
+actually do that. Cool. Or like the division sign. I don't
+
+00:57:12.920 --> 00:57:22.759
+know how it will do it. Yeah. But yeah. And then using that in,
+
+00:57:22.760 --> 00:57:28.239
+I also wrote a shell script where it would just help me do a
+
+00:57:28.240 --> 00:57:31.879
+calculation. I was trying to do a business calculation
+
+00:57:31.880 --> 00:57:35.359
+where I was, and I'd have variable names and I ended up
+
+00:57:35.360 --> 00:57:39.319
+writing the, in the parentheses I'd have enters, returns,
+
+00:57:39.320 --> 00:57:42.319
+and then just a variable name with like a dollar sign, kind of
+
+00:57:42.320 --> 00:57:45.799
+like how you'd have in the shell. And I outputted every
+
+00:57:45.800 --> 00:57:47.479
+single line that I had in the enter.
+
+00:57:47.480 --> 00:57:54.479
+six or 10 variables in this paragraph, the paragraph
+
+00:57:54.480 --> 00:57:57.759
+spanned, I don't know, like four lines or something like
+
+00:57:57.760 --> 00:58:01.039
+that. Maybe, yeah, something, I think it was along those
+
+00:58:01.040 --> 00:58:04.599
+lines. And I was just thinking of like what this would be in
+
+00:58:04.600 --> 00:58:07.879
+something else, just like, it was a lot nicer. Yeah, I had
+
+00:58:07.880 --> 00:58:10.879
+like equations for the variable, like in like one line, but
+
+00:58:10.880 --> 00:58:13.839
+when I wrote that, what my output should be is like, like I
+
+00:58:13.840 --> 00:58:16.359
+wasn't putting all of these like, you know, string join,
+
+00:58:16.360 --> 00:58:21.159
+string join, string join, It looked relatively close to
+
+00:58:21.160 --> 00:58:25.239
+what my terminal output would be, and then a later iteration
+
+00:58:25.240 --> 00:58:29.039
+I found on this was, let's write what I'm going to put into the
+
+00:58:29.040 --> 00:58:36.119
+command line, made a couple changeable variables in it, and
+
+00:58:36.120 --> 00:58:40.039
+then I can see my results, and that ended up being very nice.
+
+00:58:40.040 --> 00:58:44.199
+Ended up being nicer than the shells. Yeah, ended up
+
+00:58:44.200 --> 00:58:45.959
+enhancing that shell script that I wrote.
+
+00:58:45.960 --> 00:58:50.919
+That's a Raku calculator.
+
+00:58:50.920 --> 00:58:57.759
+Uh, it's the Raku programming language, which I was just
+
+00:58:57.760 --> 00:59:02.479
+using it, which I was just using as, which I'll just use as
+
+00:59:02.480 --> 00:59:06.079
+just straight up that calculator. Cause I'll do like,
+
+00:59:06.080 --> 00:59:11.999
+because it supports math well enough that I, like I, yeah,
+
+00:59:12.000 --> 00:59:17.239
+you can put like 25 divided by four and it doesn't start
+
+00:59:17.240 --> 00:59:24.439
+doing, what's the word, modular fractal, the double math,
+
+00:59:24.440 --> 00:59:28.079
+like it,
+
+00:59:28.080 --> 00:59:28.639
+if it's,
+
+00:59:28.640 --> 00:59:34.439
+the double math where it's like negative .2 versus like
+
+00:59:34.440 --> 00:59:40.399
+minus one, or sometimes it'll do optimized computer math
+
+00:59:40.400 --> 00:59:43.999
+where it doesn't give you the right answer, why people will
+
+00:59:44.000 --> 00:59:44.639
+like Mathematica.
+
+00:59:44.640 --> 00:59:56.439
+So, how do you, do you access it through, in org mode then?
+
+00:59:56.440 --> 01:00:05.199
+I'll do it in that. Sometimes I just fire up a Raku shell, but
+
+01:00:05.200 --> 01:00:09.159
+one of the biggest things I'll fire up a Raku shell for is like
+
+01:00:09.160 --> 01:00:17.399
+just, um, what's oh just recently I was just like doing it for
+
+01:00:17.400 --> 01:00:20.399
+some math and like how many people how much money will I have
+
+01:00:20.400 --> 01:00:24.559
+to spend on Christmas oh I've got I'm gonna buy this gift it's
+
+01:00:24.560 --> 01:00:33.799
+gonna cost this much and then I've got so let's I think 15
+
+01:00:33.800 --> 01:00:37.959
+times four because it's no 60 divided by four because it was a
+
+01:00:37.960 --> 01:00:42.919
+four pack And then times, and then I put it in parentheses,
+
+01:00:42.920 --> 01:00:47.519
+oh, four plus like two plus two, because like of the
+
+01:00:47.520 --> 01:00:49.119
+families, each of the units, and I just started doing it that
+
+01:00:49.120 --> 01:00:53.479
+way. And I put them all in a parentheses. And then at the end of
+
+01:00:53.480 --> 01:00:55.959
+this spit out the numbers, like, so I could just use the
+
+01:00:55.960 --> 01:00:58.279
+parentheses without thinking about, you know, like, oh,
+
+01:00:58.280 --> 01:01:02.679
+I'm actually in a programming language. No, I just kind of
+
+01:01:02.680 --> 01:01:07.279
+wrote it like I was in algebra, algebra, not in,
+
+01:01:07.280 --> 01:01:11.359
+not finding some special program, not finding a
+
+01:01:11.360 --> 01:01:14.999
+calculator, because it's easy for me to file up a terminal.
+
+01:01:15.000 --> 01:01:20.439
+Then I open that up, and it all just works. Plus, I also got a
+
+01:01:20.440 --> 01:01:22.639
+full programming language behind it if I ever need it.
+
+01:01:22.640 --> 01:01:33.679
+I wasn't aware that it utilizes standard math notation
+
+01:01:33.680 --> 01:01:37.279
+rather than the Polish math notation that we use in ELISP.
+
+01:01:37.280 --> 01:01:42.839
+Um, that's interesting because it's, it's in the list
+
+01:01:42.840 --> 01:01:45.279
+family of programming languages.
+
+01:01:45.280 --> 01:01:54.399
+Yeah. It's like, Hey, I can use, I can actually use my math
+
+01:01:54.400 --> 01:01:57.879
+knowledge. I can use the order of operations.
+
+01:01:57.880 --> 01:02:00.879
+Yep.
+
+01:02:00.880 --> 01:02:07.999
+I just wish that when I was in high school, they started
+
+01:02:08.000 --> 01:02:10.239
+telling me how to practically use this rather than me
+
+01:02:10.240 --> 01:02:14.119
+discover it years later when I'm out of it. Yeah.
+
+01:02:14.120 --> 01:02:27.399
+Well, I probably better move along to attend the other
+
+01:02:27.400 --> 01:02:32.839
+talks. All right. So it's been great talking to you, Plasma
+
+01:02:32.840 --> 01:02:35.159
+Strike. Yep, you too.
diff --git a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt
new file mode 100644
index 00000000..9c239169
--- /dev/null
+++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt
@@ -0,0 +1,59 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:02:20.079
+Introduction
+
+00:02:20.080 --> 00:04:05.479
+Starting a new writing project
+
+00:04:05.480 --> 00:04:36.959
+The writing log
+
+00:04:36.960 --> 00:05:25.309
+Starting the research paper
+
+00:05:25.310 --> 00:06:11.439
+Outline
+
+00:06:11.440 --> 00:07:17.457
+Another kind of writing log - accountability
+
+00:07:17.458 --> 00:07:46.479
+Reducing switching costs
+
+00:07:46.480 --> 00:09:31.519
+Motivation
+
+00:09:31.520 --> 00:10:17.294
+Overview of the writing log
+
+00:10:17.295 --> 00:10:42.667
+LaTeX preamble in opened drawer
+
+00:10:42.668 --> 00:12:21.399
+Informative header
+
+00:12:21.400 --> 00:13:28.079
+Four workflows
+
+00:13:28.080 --> 00:14:56.959
+Project initiation workflow
+
+00:14:56.960 --> 00:17:05.750
+Daily workflow
+
+00:17:05.751 --> 00:17:48.884
+Metadata and metacognition
+
+00:17:48.885 --> 00:18:56.959
+Periodic assessment workflow
+
+00:18:56.960 --> 00:19:49.639
+Project closeout workflow
+
+00:19:49.640 --> 00:20:34.519
+Conclusions
+
+00:20:34.520 --> 00:21:37.720
+Acknowledgements
diff --git a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt
new file mode 100644
index 00000000..d728c78e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt
@@ -0,0 +1,894 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:09.999
+Good morning. I'm Blaine Mooers. I'm an associate
+
+00:00:10.000 --> 00:00:12.399
+professor of biochemistry and physiology at the
+
+00:00:12.400 --> 00:00:15.079
+University of Oklahoma Health Sciences in Oklahoma City.
+
+00:00:15.080 --> 00:00:21.639
+I'm going to be talking about the utilization of Org mode to
+
+00:00:21.640 --> 00:00:26.799
+write a specific kind of log file for thinking about writing
+
+00:00:26.800 --> 00:00:31.599
+projects, in particular research articles. I have stored a
+
+00:00:31.600 --> 00:00:35.919
+template for this file on GitHub. You can find it at Mooers
+
+00:00:35.920 --> 00:00:40.759
+Lab. If you go to the landing page and scroll down to
+
+00:00:40.760 --> 00:00:47.279
+Emacs-related, you'll find a link to it.
+
+00:00:47.280 --> 00:00:50.679
+I am a structural biologist. I utilize X-ray
+
+00:00:50.680 --> 00:00:53.359
+crystallography to determine the structures of proteins
+
+00:00:53.360 --> 00:00:58.919
+and nucleic acids that are important in human health. Our
+
+00:00:58.920 --> 00:01:01.879
+workflow is shown across the top. We start out with a
+
+00:01:01.880 --> 00:01:04.959
+purified material that we crystallize as shown by that
+
+00:01:04.960 --> 00:01:09.599
+elongated rod-shaped crystal on the left. We will mount
+
+00:01:09.600 --> 00:01:14.959
+that in a cold stream and collect diffraction data with
+
+00:01:14.960 --> 00:01:20.399
+X-rays in the instrument to the right. That instrument will
+
+00:01:20.400 --> 00:01:23.559
+generate an image like the one to the right where you see a
+
+00:01:23.560 --> 00:01:26.319
+bunch of spots. That's a diffraction pattern from the
+
+00:01:26.320 --> 00:01:29.799
+crystal. After rotating the crystal for one degree, we'll
+
+00:01:29.800 --> 00:01:33.079
+rotate the crystal 180 degrees to get a full data set that
+
+00:01:33.080 --> 00:01:37.359
+we'll process with a computer. This will lead to the
+
+00:01:37.360 --> 00:01:43.719
+chicken-wire map of electron density shown further to the
+
+00:01:43.720 --> 00:01:49.999
+right. Then on the far right, we have compared
+
+00:01:50.000 --> 00:01:54.799
+electrostructures of two drug molecules from two
+
+00:01:54.800 --> 00:01:59.399
+different structures, overlapped after superimposing
+
+00:01:59.400 --> 00:02:02.919
+a wild type protein and a mutant protein. We're trying to
+
+00:02:02.920 --> 00:02:05.959
+analyze how the mutant was preventing one of the drugs from
+
+00:02:05.960 --> 00:02:12.199
+binding. These kind of analyses we can develop that are
+
+00:02:12.200 --> 00:02:16.519
+drugs. In this case, the drugs are being used to treat lung
+
+00:02:16.520 --> 00:02:20.079
+cancer.
+
+NOTE Starting a new writing project
+
+00:02:20.080 --> 00:02:24.919
+When I start a new writing project, I will assign it a number.
+
+00:02:24.920 --> 00:02:29.639
+In this case, I'm developing a review article about the
+
+00:02:29.640 --> 00:02:32.479
+detection of crystals in images collected with
+
+00:02:32.480 --> 00:02:33.861
+microscopes like the image in the upper left.
+
+00:02:33.862 --> 00:02:42.639
+The article is about the utilization of AI to help with that
+
+00:02:42.640 --> 00:02:49.039
+detection of crystals. I start the name of the folder with
+
+00:02:49.040 --> 00:02:55.079
+this index number, and I store the manuscript folders in the
+
+00:02:55.080 --> 00:02:59.159
+top level of my home directory to ease navigation.
+
+00:02:59.160 --> 00:03:03.839
+Whenever I pop open a terminal window, I just enter 0573, hit
+
+00:03:03.840 --> 00:03:07.279
+TAB to autocomplete the name of the folder, and I'll be right
+
+00:03:07.280 --> 00:03:11.599
+in the appropriate folder. I also use that index number to
+
+00:03:11.600 --> 00:03:14.879
+label the names of the files. I start every project with
+
+00:03:14.880 --> 00:03:19.519
+three files: a manuscript, the log file that I'll be talking
+
+00:03:19.520 --> 00:03:22.759
+about today, and an annotated bibliography, which is kind
+
+00:03:22.760 --> 00:03:25.999
+of like one on steroids. Annotated bibliography for the
+
+00:03:26.000 --> 00:03:30.759
+21st century, not the 20th century annotated bibliography
+
+00:03:30.760 --> 00:03:37.239
+you worked on as an undergraduate.
+
+00:03:37.240 --> 00:03:40.279
+I have developed templates not only for Org Mode, but also
+
+00:03:40.280 --> 00:03:45.359
+for other markup languages, like R Markdown and LaTeX. I
+
+00:03:45.360 --> 00:03:49.399
+actually developed this
+
+00:03:49.400 --> 00:03:54.839
+log file template over a dozen years ago in LaTeX. I also
+
+00:03:54.840 --> 00:03:58.159
+have developed it for Typst. Typst is independent of LaTeX.
+
+00:03:58.160 --> 00:04:04.079
+It's inspired by LaTeX, but it's written in Rust, and
+
+00:04:04.080 --> 00:04:05.479
+it's extremely fast.
+
+NOTE The writing log
+
+00:04:05.480 --> 00:04:11.799
+My writing process involves having the writing log at the
+
+00:04:11.800 --> 00:04:14.479
+center of the process. That's where I began the writing
+
+00:04:14.480 --> 00:04:19.679
+project. On the right, I have the manuscript and all its
+
+00:04:19.680 --> 00:04:25.839
+components highlighted in yellow. On the right,
+
+00:04:25.840 --> 00:04:29.839
+hopefully I said on the right, I have the manuscript with all
+
+00:04:29.840 --> 00:04:33.199
+its components highlighted in yellow. On the left, I have
+
+00:04:33.200 --> 00:04:36.959
+the annotated bibliography.
+
+NOTE Starting the research paper
+
+00:04:36.960 --> 00:04:42.199
+When I start a research paper, I will do this after I have
+
+00:04:42.200 --> 00:04:49.639
+built up a strong idea from various sources, and then I'll
+
+00:04:49.640 --> 00:04:54.919
+sit down and go through a series of steps outlined in the
+
+00:04:54.920 --> 00:04:59.839
+writing log to develop that central hypothesis into
+
+00:04:59.840 --> 00:05:03.839
+several paragraphs that are used in the introduction of the
+
+00:05:03.840 --> 00:05:08.159
+manuscript. The rest of the manuscript is built around that
+
+00:05:08.160 --> 00:05:11.599
+central hypothesis, so the results section will include
+
+00:05:11.600 --> 00:05:15.799
+experiments that address the central hypothesis, and it
+
+00:05:15.800 --> 00:05:19.479
+will exclude experiments that have nothing to do with it.
+
+00:05:19.480 --> 00:05:22.719
+Likewise, the discussion points address the central
+
+00:05:22.720 --> 00:05:25.309
+hypothesis.
+
+NOTE Outline
+
+00:05:25.310 --> 00:05:27.919
+When I'm done developing that introduction
+
+00:05:27.920 --> 00:05:33.439
+in, say, three or four hours, I'll have an outline in hand. At
+
+00:05:33.440 --> 00:05:38.199
+least for the results and discussion section, the outline
+
+00:05:38.200 --> 00:05:44.199
+will be detailed down to at least a sub-heading level.
+
+00:05:44.200 --> 00:05:47.239
+I'll move those components over to the manuscript on the
+
+00:05:47.240 --> 00:05:53.079
+right. As work is done to address that central
+
+00:05:53.080 --> 00:05:58.119
+hypothesis, the manuscript will be updated. Also as
+
+00:05:58.120 --> 00:06:01.359
+exploration of the literature continues, new ideas will
+
+00:06:01.360 --> 00:06:11.439
+flow in to the manuscript through the log file.
+
+NOTE Another kind of writing log - accountability
+
+00:06:11.440 --> 00:06:13.519
+You've probably heard of another kind of writing log, which
+
+00:06:13.520 --> 00:06:16.719
+is more of an accountability tool, a tool you use to hold
+
+00:06:16.720 --> 00:06:20.599
+yourself accountable in terms of your commitment to work on
+
+00:06:20.600 --> 00:06:24.716
+your writing projects.
+
+00:06:24.717 --> 00:06:28.999
+So, this idea of carrying out this
+
+00:06:29.000 --> 00:06:32.716
+documentation is supported by research done by
+
+00:06:32.717 --> 00:06:35.838
+Robert Boice. He found that those academics
+
+00:06:35.839 --> 00:06:39.100
+who record their writing
+
+00:06:39.101 --> 00:06:42.002
+are four times more productive than those that do not.
+
+00:06:42.003 --> 00:06:44.119
+Those that actually share their writing with
+
+00:06:44.120 --> 00:06:47.719
+colleagues are nine times more productive. This is sort of a
+
+00:06:47.720 --> 00:06:55.479
+case in point. This is a snapshot of a Google sheet of such a
+
+00:06:55.480 --> 00:07:03.279
+writing log that I was sharing as part of a Google workbook.
+
+00:07:03.280 --> 00:07:06.959
+I was sharing it with three other colleagues. I had the
+
+00:07:06.960 --> 00:07:14.319
+possibility of them taking a peek at my Google sheet, and that
+
+00:07:14.320 --> 00:07:17.457
+possibility I found to be highly motivating.
+
+NOTE Reducing switching costs
+
+00:07:17.458 --> 00:07:22.599
+As you can see, on July 24th, 2023, I worked on five different writing
+
+00:07:22.600 --> 00:07:25.959
+projects. This would not have been possible if it had not
+
+00:07:25.960 --> 00:07:29.399
+been for having five separate writing logs where I could
+
+00:07:29.400 --> 00:07:32.759
+figure out where I had started and where I would report the
+
+00:07:32.760 --> 00:07:36.959
+day's progress before maybe taking a break and then
+
+00:07:36.960 --> 00:07:41.199
+switching to another writing project. The writing log
+
+00:07:41.200 --> 00:07:46.479
+helps reduce switching costs between projects.
+
+NOTE Motivation
+
+00:07:46.480 --> 00:07:57.959
+My motivation for developing this project-specific log
+
+00:07:57.960 --> 00:08:02.959
+that I'm presenting here is to support clearer thinking
+
+00:08:02.960 --> 00:08:06.879
+about the science that I'm trying to do, hopefully leading
+
+00:08:06.880 --> 00:08:10.399
+to better science, as well as accelerating the completion
+
+00:08:10.400 --> 00:08:13.439
+of the writing project. The secondary purpose is to enable
+
+00:08:13.440 --> 00:08:17.719
+working on multiple writing projects in parallel. This is
+
+00:08:17.720 --> 00:08:21.799
+important to be able to harness your subconscious. If you
+
+00:08:21.800 --> 00:08:25.919
+work on project A for a few hours in the morning, say early
+
+00:08:25.920 --> 00:08:28.210
+morning, then late morning you work on project B.
+
+00:08:28.211 --> 00:08:33.860
+While you're working on project B,
+
+00:08:33.861 --> 00:08:39.141
+your subconscious is busy working away on project A.
+
+00:08:39.142 --> 00:08:43.479
+As a result, perhaps the following morning,
+
+00:08:43.480 --> 00:08:46.279
+when you wake up or while you're taking a shower or
+
+00:08:46.280 --> 00:08:51.999
+commuting, new ideas will emerge for projects A and B as a
+
+00:08:52.000 --> 00:08:55.239
+result of these background jobs that you have launched. If
+
+00:08:55.240 --> 00:08:58.799
+you don't work on project A, then you're not going to get the
+
+00:08:58.800 --> 00:09:04.319
+benefit the following morning. The side effects of using
+
+00:09:04.320 --> 00:09:07.439
+this writing log are that it reduces the fear of forgetting
+
+00:09:07.440 --> 00:09:10.199
+and also reduces the fear of losing momentum. These are two
+
+00:09:10.200 --> 00:09:14.999
+barriers to attempting to carry out work on multiple
+
+00:09:15.000 --> 00:09:19.239
+writing projects in a given day. This problem of dealing
+
+00:09:19.240 --> 00:09:22.719
+with multiple writing projects is one that is not discussed
+
+00:09:22.720 --> 00:09:26.039
+in books about writing. It's apparently a very difficult
+
+00:09:26.040 --> 00:09:29.759
+problem. I think my writing log is a successful solution to
+
+00:09:29.760 --> 00:09:31.519
+that problem.
+
+NOTE Overview of the writing log
+
+00:09:31.520 --> 00:09:39.919
+This is an overview of the writing log in Org mode. It has
+
+00:09:39.920 --> 00:09:42.959
+various components. I don't have time to go through all of
+
+00:09:42.960 --> 00:09:48.679
+them in detail, but you can see its structure. We get this
+
+00:09:48.680 --> 00:09:54.319
+summary view when you open up the file. You have this in the
+
+00:09:54.320 --> 00:10:04.119
+header for a startup command overview. Then I just click
+
+00:10:04.120 --> 00:10:08.079
+on the heading and hit TAB to see the contents below. So
+
+00:10:08.080 --> 00:10:11.439
+normally, I'm just going to go straight to the daily log.
+
+00:10:11.440 --> 00:10:17.294
+In this case, it starts on line 944.
+
+NOTE LaTeX preamble in opened drawer
+
+00:10:17.295 --> 00:10:19.255
+I don't have to scroll all the way down to it,
+
+00:10:19.256 --> 00:10:21.239
+because thanks to the support
+
+00:10:21.240 --> 00:10:27.319
+for folding of these sections in Org mode, if I open up the
+
+00:10:27.320 --> 00:10:31.319
+drawer labeled :PREAMBLE:, you can see that I have imported a
+
+00:10:31.320 --> 00:10:38.879
+number of LaTeX packages to enhance the format of the PDF
+
+00:10:38.880 --> 00:10:42.667
+file that is upon export.
+
+NOTE Informative header
+
+00:10:42.668 --> 00:10:44.319
+I have commands that are listed
+
+00:10:44.320 --> 00:10:48.999
+below at the bottom for providing a fancy header. This
+
+00:10:49.000 --> 00:10:54.519
+header has the current date as well as a running title and the
+
+00:10:54.520 --> 00:10:58.199
+current page number and total number of pages. You can see
+
+00:10:58.200 --> 00:11:04.199
+in the center the header at the start of page 2. You can see the
+
+00:11:04.200 --> 00:11:09.399
+bottom of page 1 where the page number is at the bottom of the
+
+00:11:09.400 --> 00:11:17.719
+page. These headers are very useful if you happen to print
+
+00:11:17.720 --> 00:11:22.879
+out several log files and their corresponding manuscripts
+
+00:11:22.880 --> 00:11:25.359
+and take them with you to work on them while traveling.
+
+00:11:25.360 --> 00:11:29.439
+Invariably, the pages will get intermingled, and you'll have
+
+00:11:29.440 --> 00:11:33.679
+to sort them out when you return home. These headers ease
+
+00:11:33.680 --> 00:11:39.799
+that problem. You can see that the table of contents that begin
+
+00:11:39.800 --> 00:11:44.759
+the writing log is hyperlinked to various sections. In
+
+00:11:44.760 --> 00:11:48.519
+addition to the table of contents, the log file, of course,
+
+00:11:48.520 --> 00:11:51.559
+will support various graphical objects like images,
+
+00:11:51.560 --> 00:11:56.039
+tables, equations, code listings. I also have added
+
+00:11:56.040 --> 00:12:00.279
+LaTeX support for an index, a list of acronyms, glossary,
+
+00:12:00.280 --> 00:12:04.999
+mathematical notation, and literature cited. It takes no
+
+00:12:05.000 --> 00:12:10.039
+effort to add these in, so why not have them available? These
+
+00:12:10.040 --> 00:12:12.919
+features are also available in the annotated bibliography
+
+00:12:12.920 --> 00:12:16.359
+template, which helps support making that annotated
+
+00:12:16.360 --> 00:12:21.399
+bibliography far more relevant and interesting.
+
+NOTE Four workflows
+
+00:12:21.400 --> 00:12:28.079
+This shows a list of four workflows that I'm going to
+
+00:12:28.080 --> 00:12:32.599
+discuss, since I don't have time to go through each
+
+00:12:32.600 --> 00:12:36.279
+of the items. Obviously, project initiation
+
+00:12:36.280 --> 00:12:39.719
+occurs on day one. If I have a three- or four-hour block of time,
+
+00:12:39.720 --> 00:12:45.759
+that's sufficient to finish project initiation. Then
+
+00:12:45.760 --> 00:12:49.359
+the daily workflow is obviously what occurs every day to
+
+00:12:49.360 --> 00:12:54.239
+move the project forward. The periodic assessments are
+
+00:12:54.240 --> 00:12:57.079
+done on a monthly or weekly basis, generally on the weekly
+
+00:12:57.080 --> 00:13:02.559
+basis as the submission deadline approaches. Then
+
+00:13:02.560 --> 00:13:05.639
+after you have received the galley proofs and sent them
+
+00:13:05.640 --> 00:13:09.839
+back, there are a few chores that need to be done in terms of
+
+00:13:09.840 --> 00:13:13.959
+project closeout. This is an example of a protocol
+
+00:13:13.960 --> 00:13:18.519
+that could be followed to do that, and an example of the kinds
+
+00:13:18.520 --> 00:13:21.799
+of more or less appendix material that could be included in
+
+00:13:21.800 --> 00:13:28.079
+the writing log to help get these things done.
+
+NOTE Project initiation workflow
+
+00:13:28.080 --> 00:13:31.679
+This shows a project initiation section of the workflow.
+
+00:13:31.680 --> 00:13:39.119
+I go through a series of sections that include advice
+
+00:13:39.120 --> 00:13:45.719
+about what I need to do to complete each section. The
+
+00:13:45.720 --> 00:13:50.759
+rationale section asks me like, why are you doing this? Why
+
+00:13:50.760 --> 00:13:54.319
+should you do this? Why not somebody else? Those sort of
+
+00:13:54.320 --> 00:14:01.287
+fundamental questions. Then I have
+
+00:14:01.288 --> 00:14:05.329
+a drawer labeled guidance that I have,
+
+00:14:05.330 --> 00:14:07.190
+and that headline immediately above,
+
+00:14:07.191 --> 00:14:11.839
+I have this :noexport: keyword so that guidance is not
+
+00:14:11.840 --> 00:14:17.039
+written out upon export to the PDF unless you want it. If you
+
+00:14:17.040 --> 00:14:20.439
+want it, you have to remove the :noexport: tag. Then I have the
+
+00:14:20.440 --> 00:14:25.199
+response to these questions--in this case, a list of
+
+00:14:25.200 --> 00:14:29.199
+journals that I'm targeting for submission of this review
+
+00:14:29.200 --> 00:14:32.959
+article. I have a plan B journal picked out in case the
+
+00:14:32.960 --> 00:14:43.399
+editors decide to reject it. Having a plan B journal
+
+00:14:43.400 --> 00:14:47.999
+picked out is a decision you can make at the time of
+
+00:14:48.000 --> 00:14:55.959
+submission, so that you're prepared to move quickly if the
+
+00:14:55.960 --> 00:14:56.959
+article is rejected.
+
+NOTE Daily workflow
+
+00:14:56.960 --> 00:15:04.639
+This shows the daily workflow section. Each entry has a
+
+00:15:04.640 --> 00:15:09.439
+date. I sometimes annotate the dated entries with a small
+
+00:15:09.440 --> 00:15:14.479
+phrase to highlight certain events. Within a given entry,
+
+00:15:14.480 --> 00:15:17.319
+I'll have a list of accomplishments. That's sort of the bare
+
+00:15:17.320 --> 00:15:20.719
+minimum of what I include. This just demonstrates how
+
+00:15:20.720 --> 00:15:25.639
+relatively brief these entries are. Just whatever
+
+00:15:25.640 --> 00:15:30.599
+distinct accomplishments were made are listed.
+
+00:15:30.600 --> 00:15:37.239
+Sometimes I'll include the goals for that day.
+
+00:15:37.240 --> 00:15:40.599
+I'll always include the correspondence related to the
+
+00:15:40.600 --> 00:15:44.439
+project. I'll copy and paste an email into a quote
+
+00:15:44.440 --> 00:15:49.719
+environment from LaTeX.
+
+00:15:49.720 --> 00:15:54.319
+I have a snippet template for auto-generating these
+
+00:15:54.320 --> 00:15:59.919
+entries. It will insert the date, for example, in the
+
+00:15:59.920 --> 00:16:04.239
+subheading. Then below that, I'll have the next action,
+
+00:16:04.240 --> 00:16:06.919
+following David Allen's Getting Things Done approach
+
+00:16:06.920 --> 00:16:08.550
+where you identify the next thing that needs to be done.
+
+00:16:08.551 --> 00:16:14.759
+That may have come from a to-do list that's indicated below that.
+
+00:16:14.760 --> 00:16:19.039
+Beyond that, there's sections for some writing
+
+00:16:19.040 --> 00:16:23.919
+accountability, and then a reminder to go about updating
+
+00:16:23.920 --> 00:16:28.919
+your Zettelkasten and Org-roam if you have come across any
+
+00:16:28.920 --> 00:16:32.359
+nuggets of knowledge you want to add to your Org-roam. Then
+
+00:16:32.360 --> 00:16:38.999
+below that, there's another section for the storage of
+
+00:16:39.000 --> 00:16:42.919
+additions to be made to the manuscript. Maybe they're not
+
+00:16:42.920 --> 00:16:47.599
+ready to go yet, so this provides a spot for them to be
+
+00:16:47.600 --> 00:16:51.599
+incubated, a sandbox, if you will, where you have room to
+
+00:16:51.600 --> 00:16:53.239
+develop them further before they're ready to be
+
+00:16:53.240 --> 00:16:58.399
+transferred over to the main manuscript. I also have a
+
+00:16:58.400 --> 00:17:04.239
+section there too for the incubation of new ideas for new
+
+00:17:04.240 --> 00:17:05.750
+projects.
+
+NOTE Metadata and metacognition
+
+00:17:05.751 --> 00:17:09.639
+So this kind of metadata and metacognition about
+
+00:17:09.640 --> 00:17:13.759
+the project are often stored in commented out regions or in
+
+00:17:13.760 --> 00:17:18.039
+comments, like MS Word documents. These are often stripped
+
+00:17:18.040 --> 00:17:21.839
+out in the rush to submit the manuscript, and they're quite
+
+00:17:21.840 --> 00:17:26.479
+often lost. Yet they can be invaluable, not only for the
+
+00:17:26.480 --> 00:17:30.239
+preparation of future manuscripts, but they can be very
+
+00:17:30.240 --> 00:17:38.279
+invaluable for responding to critiques by reviewers. This
+
+00:17:38.280 --> 00:17:42.839
+writing log provides ample room for the safe storage of such
+
+00:17:42.840 --> 00:17:48.884
+information, such knowledge.
+
+NOTE Periodic assessment workflow
+
+00:17:48.885 --> 00:17:53.666
+Then periodically, every several months or weeks,
+
+00:17:53.667 --> 00:17:55.159
+we'll carry out an assessment of
+
+00:17:55.160 --> 00:18:02.119
+the project. We go through a checklist for the completion of
+
+00:18:02.120 --> 00:18:06.319
+the manuscript. We also have a timeline with milestones
+
+00:18:06.320 --> 00:18:07.439
+identified.
+
+00:18:07.440 --> 00:18:13.759
+Of course, Org has these wonderful tables that are very
+
+00:18:13.760 --> 00:18:18.879
+dynamic. If you need a wider column to accommodate a new
+
+00:18:18.880 --> 00:18:23.359
+entry, it self-adjusts. These self-adjusting tables
+
+00:18:23.360 --> 00:18:29.639
+are one reason why I was attracted to Org mode, because coming
+
+00:18:29.640 --> 00:18:33.039
+from LaTex, where trying to make changes to
+
+00:18:33.040 --> 00:18:36.999
+tables is quite difficult. Below that, there's a
+
+00:18:37.000 --> 00:18:39.639
+section to make assessments. There are four questions that
+
+00:18:39.640 --> 00:18:43.839
+I address about the status of the project. One really good
+
+00:18:43.840 --> 00:18:46.559
+question is, why can't you submit this project today?
+
+00:18:46.560 --> 00:18:49.350
+What's holding it back?
+
+00:18:49.351 --> 00:18:55.214
+Other such existential questions
+
+00:18:55.215 --> 00:18:56.959
+are important to ask from time to time.
+
+NOTE Project closeout workflow
+
+00:18:56.960 --> 00:19:03.633
+Then finally, the project closeout workflow.
+
+00:19:03.634 --> 00:19:06.477
+So this is in the form of a checklist.
+
+00:19:06.478 --> 00:19:09.079
+This checklist in the main template
+
+00:19:09.080 --> 00:19:13.479
+is already included, but you could include it from an
+
+00:19:13.480 --> 00:19:19.959
+external file. Of course, that checklist will be only in
+
+00:19:19.960 --> 00:19:22.799
+the PDF when it's included in this fashion. It won't be in the
+
+00:19:22.800 --> 00:19:27.599
+Org file, but you can view that checklist by clicking on its
+
+00:19:27.600 --> 00:19:32.719
+file path. It serves as a link that will open up in an Org
+
+00:19:32.720 --> 00:19:40.119
+buffer. The advantage of taking a modular approach to this
+
+00:19:40.120 --> 00:19:42.999
+sort of appendix material is that you can update your
+
+00:19:43.000 --> 00:19:46.399
+protocols and the updated protocols will be available to
+
+00:19:46.400 --> 00:19:49.639
+all log files across all projects.
+
+NOTE Conclusions
+
+00:19:49.640 --> 00:19:56.319
+In conclusion, this project-specific log file helps
+
+00:19:56.320 --> 00:20:02.759
+narrow the focus on one project. It provides space to harbor
+
+00:20:02.760 --> 00:20:08.679
+the thinking about that project, and it helps support the
+
+00:20:08.680 --> 00:20:13.999
+project initiation and sustain its momentum and
+
+00:20:14.000 --> 00:20:21.799
+facilitate its completion. The side effects of using this
+
+00:20:21.800 --> 00:20:27.399
+log file for one project is that it dampens the fear of
+
+00:20:27.400 --> 00:20:31.439
+forgetting, the fear of losing momentum, which inhibits us
+
+00:20:31.440 --> 00:20:34.519
+working on more than one project in a given day.
+
+NOTE Acknowledgements
+
+00:20:34.520 --> 00:20:42.559
+I would like to thank my friends at the Oklahoma Data Science
+
+00:20:42.560 --> 00:20:47.799
+Workshop. We hold this workshop every third Friday at noon
+
+00:20:47.800 --> 00:20:53.759
+central time by Zoom. It's open to participation by people
+
+00:20:53.760 --> 00:20:56.879
+from all around the world. Send me an email if you are
+
+00:20:56.880 --> 00:21:01.519
+interested in the applications of computing to scientific
+
+00:21:01.520 --> 00:21:06.799
+research. I participate occasionally in these Emacs
+
+00:21:06.800 --> 00:21:11.359
+meetups, and I have shared this writing blog with members of
+
+00:21:11.360 --> 00:21:18.719
+the UK Research Software Engineer group through the Emacs
+
+00:21:18.720 --> 00:21:24.279
+Research Slack channel. My efforts are supported by
+
+00:21:24.280 --> 00:21:28.799
+funding from these grants. I'll be happy to take any
+
+00:21:28.800 --> 00:21:37.720
+questions.
diff --git a/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt b/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt
new file mode 100644
index 00000000..bad03237
--- /dev/null
+++ b/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt
@@ -0,0 +1,1198 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:13.359
+Hello, I'm Danny McClanahan. This is EmacsConf 2024. And
+
+00:00:13.360 --> 00:00:17.159
+this presentation is ostensibly about Emacs Regex
+
+00:00:17.160 --> 00:00:22.639
+compilation. But it'll lead a lot more in future
+
+00:00:22.640 --> 00:00:30.879
+directions. Thanks for coming on this journey with me.
+
+00:00:30.880 --> 00:00:36.719
+This presentation is 50 slides, 50 footnotes, and that's
+
+00:00:36.720 --> 00:00:40.679
+intended for it to be a resource later on for your perusal. We
+
+00:00:40.680 --> 00:00:44.199
+are unfortunately not going to be able to go into all of it,
+
+00:00:44.200 --> 00:00:49.439
+but I will try to be within 20 minutes so we can make it
+
+00:00:49.440 --> 00:00:56.199
+throughout Q&A. This is the structure of the talk.
+
+00:00:56.200 --> 00:01:03.519
+But enough about me. Who are you? And why are you here?
+
+00:01:03.520 --> 00:01:09.479
+I'm Danny McClanahan.
+
+00:01:09.480 --> 00:01:13.439
+My experience is a lot in build tools, especially in the
+
+00:01:13.440 --> 00:01:19.399
+package managers. That started because I realized I was
+
+00:01:19.400 --> 00:01:23.319
+wasting a lot of time. Then I didn't like that. I
+
+00:01:23.320 --> 00:01:29.439
+started wasting a lot of time, trying to avoid wasting time.
+
+00:01:29.440 --> 00:01:35.479
+Then I ended up... going so far around that I ended up
+
+00:01:35.480 --> 00:01:40.319
+stopping other people from wasting their own time, in this
+
+00:01:40.320 --> 00:01:44.359
+case, regarding failing builds. But this is a kind of
+
+00:01:44.360 --> 00:01:47.479
+pattern that you'll see. I'm talking a lot about patterns in
+
+00:01:47.480 --> 00:01:52.399
+this presentation. Parsing in text is another one of
+
+00:01:52.400 --> 00:01:57.479
+those tendencies that I have. Why am I here? I've got a lot
+
+00:01:57.480 --> 00:02:00.639
+of feelings about text. For the next 20 minutes, I'm
+
+00:02:00.640 --> 00:02:06.079
+making it your problem.
+
+00:02:06.080 --> 00:02:09.639
+First off, a huge shout out to Emacs Devel and the Emacs
+
+00:02:09.640 --> 00:02:12.919
+community in general. I spent a lot of time learning about
+
+00:02:12.920 --> 00:02:15.559
+what I'm about to talk about. I was definitely super
+
+00:02:15.560 --> 00:02:19.439
+confused at first. Then when I became less confused and I
+
+00:02:19.440 --> 00:02:23.919
+decided I was going to look at the regular expressions of the
+
+00:02:23.920 --> 00:02:28.039
+Regex engine, I was like, oh, it's old C code. It's
+
+00:02:28.040 --> 00:02:33.559
+Emacs. We can just use modern techniques. Turns out that's
+
+00:02:33.560 --> 00:02:37.839
+wrong for kind of two reasons. One, because using modern
+
+00:02:37.840 --> 00:02:41.479
+techniques or other engines don't necessarily do what
+
+00:02:41.480 --> 00:02:44.799
+Emacs regex engine currently does. Then secondarily,
+
+00:02:44.800 --> 00:02:48.719
+that's not actually as interesting as the other kind of
+
+00:02:48.720 --> 00:02:52.359
+larger goals that emacs-devel discussed. Thank you, Eli
+
+00:02:52.360 --> 00:02:56.279
+Zaretskii, so, so much, especially Pip Cet and everyone else
+
+00:02:56.280 --> 00:02:59.319
+as well--I believe--Pip Cet, I hope I'm pronouncing that
+
+00:02:59.320 --> 00:03:01.799
+correctly. Thank you so much. I'll be shouting you out
+
+00:03:01.800 --> 00:03:04.319
+later as well. Then these larger goals ended up
+
+00:03:04.320 --> 00:03:07.199
+overlapping a lot with my own research interests. And
+
+00:03:07.200 --> 00:03:09.879
+that's very exciting. I'm hoping it's exciting for you
+
+00:03:09.880 --> 00:03:14.079
+too. What is a regular expression? And when and how does
+
+00:03:14.080 --> 00:03:16.559
+implementation match formal theory? So what does formal
+
+00:03:16.560 --> 00:03:24.079
+theory mean? And we'll talk about that.
+
+00:03:24.080 --> 00:03:27.519
+What is a regular expression? So I might ask you this
+
+00:03:27.520 --> 00:03:30.799
+question, and you might give an answer. Then I might ask
+
+00:03:30.800 --> 00:03:33.519
+someone else, and they might have an answer. Then I might
+
+00:03:33.520 --> 00:03:38.039
+ask myself, and I might try to think of an answer. Our
+
+00:03:38.040 --> 00:03:41.799
+answers would, you know, see, the thing is, they'd all be
+
+00:03:41.800 --> 00:03:45.359
+correct, but they'd probably be slightly different, and
+
+00:03:45.360 --> 00:03:50.319
+they'd be different in kind of important ways. I'm
+
+00:03:50.320 --> 00:03:55.039
+using formal theory to kind of describe what unifies these
+
+00:03:55.040 --> 00:04:00.119
+interpretations and what causes this sort of divergence,
+
+00:04:00.120 --> 00:04:05.439
+both over time and then across code bases. I'm kind of
+
+00:04:05.440 --> 00:04:09.319
+putting a flag in the ground here and saying formal theory is
+
+00:04:09.320 --> 00:04:12.999
+actually a really, really negative influence, I think, but
+
+00:04:13.000 --> 00:04:15.999
+it can be better. That's what I'm going to talk about in
+
+00:04:16.000 --> 00:04:19.519
+this talk, in this presentation. We might ask, how did
+
+00:04:19.520 --> 00:04:26.679
+this happen? and we might try to find a start state. We
+
+00:04:26.680 --> 00:04:30.519
+might put that place at the theories of formal languages
+
+00:04:30.520 --> 00:04:34.679
+that kind of arose, especially post Turing and post
+
+00:04:34.680 --> 00:04:37.519
+Chomsky. Especially there was this really, really
+
+00:04:37.520 --> 00:04:40.119
+interesting and powerful relationship with formal
+
+00:04:40.120 --> 00:04:43.959
+languages between representation and computation. And
+
+00:04:43.960 --> 00:04:48.599
+then on top of that, we have regex as this really powerful
+
+00:04:48.600 --> 00:04:52.159
+union of theory and practice And then, like I mentioned,
+
+00:04:52.160 --> 00:04:55.799
+this is kind of divergence that kind of occurs. This
+
+00:04:55.800 --> 00:04:58.079
+divergence happens for a good reason. This happens because
+
+00:04:58.080 --> 00:05:01.999
+people were adding implementations and people adding
+
+00:05:02.000 --> 00:05:04.639
+features to implementations. While the people adding
+
+00:05:04.640 --> 00:05:06.679
+these features were often academics, they were
+
+00:05:06.680 --> 00:05:09.199
+industries, people that were hobbyists, they were
+
+00:05:09.200 --> 00:05:11.999
+interested in building practical tools. This is a good
+
+00:05:12.000 --> 00:05:14.879
+thing. This is still a good thing, even though it moves a
+
+00:05:14.880 --> 00:05:18.199
+little bit away from formal theory. But we start seeing some
+
+00:05:18.200 --> 00:05:22.639
+cracks developing, and we'll go into that in a second. We're
+
+00:05:22.640 --> 00:05:27.519
+just going to kind of electric slide into the 1980s here, and
+
+00:05:27.520 --> 00:05:31.879
+we're going to be confronted with two occurrences very
+
+00:05:31.880 --> 00:05:35.639
+similarly. We might call it simultaneous discovery. In
+
+00:05:35.640 --> 00:05:38.559
+1983, you have Michael Jackson demonstrating the
+
+00:05:38.560 --> 00:05:41.999
+moonwalk. Three years later, we have backtracking
+
+00:05:42.000 --> 00:05:44.999
+developed to stimulate EGREP-style regular expressions.
+
+00:05:45.000 --> 00:05:48.599
+These would both be incredibly influential in their own
+
+00:05:48.600 --> 00:05:54.039
+kind of branching paths. Here's where the gloves come
+
+00:05:54.040 --> 00:06:00.759
+off. Formal theory, I claim, remains largely concerned
+
+00:06:00.760 --> 00:06:03.359
+with incremental improvements to artificial benchmarks,
+
+00:06:03.360 --> 00:06:07.279
+and much less with expanding models to cover actual user
+
+00:06:07.280 --> 00:06:11.799
+needs. This isn't just about, oh, if you listened to
+
+00:06:11.800 --> 00:06:15.999
+users, that you'd be a nicer person, you'd be a better
+
+00:06:16.000 --> 00:06:19.359
+engineer. What I'm actually saying is that they're missing
+
+00:06:19.360 --> 00:06:23.919
+out. When you don't listen to applications, you miss out on a
+
+00:06:23.920 --> 00:06:26.639
+lot of fantastic opportunities for novel theory. So
+
+00:06:26.640 --> 00:06:30.839
+this is, again, my complaint with formal theory as it
+
+00:06:30.840 --> 00:06:34.599
+stands. But we're gonna do better. Before we get better,
+
+00:06:34.600 --> 00:06:36.959
+we're gonna get, a little bit worse for a bit. We're going to
+
+00:06:36.960 --> 00:06:40.359
+actually get a little bit worse is better. What I mean by
+
+00:06:40.360 --> 00:06:43.239
+that is, by the 1990s, we start looking into these
+
+00:06:43.240 --> 00:06:46.479
+non-backtracking engines. This is a bit of a reaction to
+
+00:06:46.480 --> 00:06:50.399
+backtracking. The current ones include RE2,
+
+00:06:50.400 --> 00:06:53.919
+hyperscan, and the rust regex library. These are all
+
+00:06:53.920 --> 00:06:56.439
+great. I'll talk about them later as well. They make use
+
+00:06:56.440 --> 00:06:58.719
+of these. They kind of call back to the earlier formal
+
+00:06:58.720 --> 00:07:01.479
+theory. They have linear runtimes for well-specified
+
+00:07:01.480 --> 00:07:02.519
+search tasks.
+
+00:07:02.520 --> 00:07:08.079
+What happens if that doesn't fit your needs? We're going to
+
+00:07:08.080 --> 00:07:11.479
+talk about that. We're going to table that for a second,
+
+00:07:11.480 --> 00:07:15.319
+and we're going to focus more on Emacs, the subject of this
+
+00:07:15.320 --> 00:07:19.359
+conference. What are regex used for? And in this
+
+00:07:19.360 --> 00:07:22.439
+particular case, they're used for lots of things, with
+
+00:07:22.440 --> 00:07:25.199
+practically, and I think they should be. But more
+
+00:07:25.200 --> 00:07:29.559
+specifically, how do Emacs users use them? And I'm going to
+
+00:07:29.560 --> 00:07:32.679
+focus in on this text as input and output. I'll be kind of
+
+00:07:32.680 --> 00:07:38.959
+elaborating on this analogy as we continue. Why is text
+
+00:07:38.960 --> 00:07:43.399
+powerful? Text as I/O. The reason text programming
+
+00:07:43.400 --> 00:07:45.759
+languages and not just programming languages, but
+
+00:07:45.760 --> 00:07:49.159
+languages themselves, the reason why they're successful
+
+00:07:49.160 --> 00:07:52.279
+and why they propagate, I claim, is because text is both
+
+00:07:52.280 --> 00:07:56.439
+input readable and output writable. What this means
+
+00:07:56.440 --> 00:08:01.199
+is that if you receive something in text, you can read it, And
+
+00:08:01.200 --> 00:08:04.239
+then you can also write it, you can modify it, and you can
+
+00:08:04.240 --> 00:08:06.959
+produce a new version of it. You're on a kind of level
+
+00:08:06.960 --> 00:08:10.959
+playing field. That's not always the case, though. You
+
+00:08:10.960 --> 00:08:15.959
+recall that I've worked a lot with build systems and package
+
+00:08:15.960 --> 00:08:20.999
+managers. There's a discussion that goes by the name of
+
+00:08:21.000 --> 00:08:25.319
+software supply chain security. I think it's a massive
+
+00:08:25.320 --> 00:08:29.079
+joke. The reason why is because people largely raise it
+
+00:08:29.080 --> 00:08:34.279
+to explain why their for-profit company with their
+
+00:08:34.280 --> 00:08:38.079
+for-profit product is going to solve the problem for you, as
+
+00:08:38.080 --> 00:08:41.959
+opposed to the commons of open source. If you are unable to
+
+00:08:41.960 --> 00:08:44.999
+modify or deploy your code without employing an opaque
+
+00:08:45.000 --> 00:08:48.599
+external system, I think, then you have a hidden
+
+00:08:48.600 --> 00:08:53.879
+dependency. you don't remove a dependency, you just, by,
+
+00:08:53.880 --> 00:08:59.239
+for example, paying into a for-profit product or using a
+
+00:08:59.240 --> 00:09:01.519
+closed-off supply chain, you end up just having a hidden
+
+00:09:01.520 --> 00:09:04.719
+dependency, you end up just displacing that. This can
+
+00:09:04.720 --> 00:09:07.639
+actually exert arbitrary control over your programming
+
+00:09:07.640 --> 00:09:11.279
+output and potentially even your thoughts. This is really
+
+00:09:11.280 --> 00:09:15.839
+important. I'm going to dive in a little bit deeper and I'm
+
+00:09:15.840 --> 00:09:18.999
+going to overload the term locality here. I'm going to
+
+00:09:19.000 --> 00:09:22.239
+say, if you cannot reproduce a system locally, it becomes an
+
+00:09:22.240 --> 00:09:24.999
+opaque external system. I'm going to give examples
+
+00:09:25.000 --> 00:09:27.479
+here, and these are going to be a bit of a hot take. First
+
+00:09:27.480 --> 00:09:30.519
+off, GUI IDEs. I think we might, well, some of us might agree
+
+00:09:30.520 --> 00:09:34.519
+with that here. I say development environments that only
+
+00:09:34.520 --> 00:09:38.119
+allow you to use a graphical interface, do not expose
+
+00:09:38.120 --> 00:09:42.799
+interaction with text, are explicitly trying to kind of
+
+00:09:42.800 --> 00:09:46.239
+place you on a separate kind of plane where you're not an
+
+00:09:46.240 --> 00:09:50.439
+equal contributor to the people who make the development
+
+00:09:50.440 --> 00:09:53.079
+environment, make the development kind of frameworks
+
+00:09:53.080 --> 00:09:57.399
+here. We'll go one further. Cloud services are precisely,
+
+00:09:57.400 --> 00:10:00.039
+you know, they're useful for things that, you know, that
+
+00:10:00.040 --> 00:10:04.399
+require large domain computation, but, you know, Twitter,
+
+00:10:04.400 --> 00:10:08.679
+for example, didn't actually ever use any cloud services,
+
+00:10:08.680 --> 00:10:12.199
+external ones, because it was really important for them to
+
+00:10:12.200 --> 00:10:14.999
+actually own their own hardware, their own computation,
+
+00:10:15.000 --> 00:10:20.199
+their own thinking. Cloud services are a way to ensure
+
+00:10:20.200 --> 00:10:24.919
+that you're unable to reproduce a system without paying an
+
+00:10:24.920 --> 00:10:28.039
+amount per month, an amount per day, an amount per second, an
+
+00:10:28.040 --> 00:10:32.439
+amount per cycle to an external entity. I'm just going to
+
+00:10:32.440 --> 00:10:35.559
+conclude this with, I'd say, the argumentum ad absurdum,
+
+00:10:35.560 --> 00:10:39.239
+here, where large language models are all of these at once.
+
+00:10:39.240 --> 00:10:42.879
+They are a cloud service, specifically, and this is what
+
+00:10:42.880 --> 00:10:48.439
+makes them very evil, to make it so that, similar to GUI IDEs,
+
+00:10:48.440 --> 00:10:52.919
+so that text itself loses that ability to be both readable
+
+00:10:52.920 --> 00:10:56.199
+and writable. Instead, text is both unreadable, because
+
+00:10:56.200 --> 00:10:59.519
+it's produced by a machine, and then also unwritable,
+
+00:10:59.520 --> 00:11:02.999
+because you're subservient and subjugated to the machine,
+
+00:11:03.000 --> 00:11:05.359
+to the large language model to produce the code in the first
+
+00:11:05.360 --> 00:11:08.919
+place. You lose this input, output, readable, writable
+
+00:11:08.920 --> 00:11:13.359
+behavior that I claim text has specifically. To
+
+00:11:13.360 --> 00:11:19.439
+underline this, what is text? Text is local. Finally,
+
+00:11:19.440 --> 00:11:23.639
+we're at the subject of this conference. Emacs, I have
+
+00:11:23.640 --> 00:11:27.479
+double hearts with text. I start off the slide saying Emacs
+
+00:11:27.480 --> 00:11:31.519
+is a text editor. I think that's a good start. Which
+
+00:11:31.520 --> 00:11:34.319
+implements much of its own logic and user interface via
+
+00:11:34.320 --> 00:11:38.399
+text. What this means is that, you know, I say without
+
+00:11:38.400 --> 00:11:42.639
+trying, Emacs tries very hard, but without trying so hard,
+
+00:11:42.640 --> 00:11:47.639
+Emacs, is imbued with all of the capabilities that text has
+
+00:11:47.640 --> 00:11:51.319
+specifically. When you use text like Emacs does, and
+
+00:11:51.320 --> 00:11:55.519
+particularly you then start offering mechanisms to query,
+
+00:11:55.520 --> 00:11:59.999
+to transform, and to generally metaprogram text itself,
+
+00:12:00.000 --> 00:12:03.319
+you don't just have the ability to edit code in new ways. And
+
+00:12:03.320 --> 00:12:06.999
+this is something that I think is often lost, maybe not by
+
+00:12:07.000 --> 00:12:11.239
+participants of this conference, you particularly start
+
+00:12:11.240 --> 00:12:14.319
+being able to not only just edit code differently, but to
+
+00:12:14.320 --> 00:12:16.599
+change the way that you think about code and actually to
+
+00:12:16.600 --> 00:12:20.239
+expand your range of thought, the range of actions that you
+
+00:12:20.240 --> 00:12:22.719
+can perform. You can actually start then editing at the
+
+00:12:22.720 --> 00:12:25.799
+speed of thought. This is where especially Regex kind of
+
+00:12:25.800 --> 00:12:30.319
+comes into play. Finally, we get to the subject of the
+
+00:12:30.320 --> 00:12:33.599
+title of this talk. I'm about to disappoint a lot of
+
+00:12:33.600 --> 00:12:38.759
+people. I claim for good reason. Unfortunately, it's a
+
+00:12:38.760 --> 00:12:41.599
+very brief walkthrough, but I'm going to go over what the
+
+00:12:41.600 --> 00:12:43.799
+current Emacs Redix engine is. This is going to give us
+
+00:12:43.800 --> 00:12:48.119
+enough context for the next section on future directions.
+
+00:12:48.120 --> 00:12:51.799
+Quickly, it's a backtracking engine over a multi-byte
+
+00:12:51.800 --> 00:12:53.919
+code point. I'll define what that means. It's in
+
+00:12:53.920 --> 00:12:58.439
+regex-emacs.c. It's invoked in two ways, which you'll see
+
+00:12:58.440 --> 00:13:01.759
+is actually the same way, over a single contiguous string
+
+00:13:01.760 --> 00:13:05.359
+input. This is a Lisp string that you pass in. or over the
+
+00:13:05.360 --> 00:13:07.039
+two halves of the gap buffer. This is when you match
+
+00:13:07.040 --> 00:13:11.879
+against a buffer text. We'll go into that a little bit
+
+00:13:11.880 --> 00:13:13.919
+more, but this is one of the really actually interesting and
+
+00:13:13.920 --> 00:13:17.839
+specific things about Emacs Regex Engine as it stands. So
+
+00:13:17.840 --> 00:13:21.559
+very, very quickly, this is the data layout. This is just, if
+
+00:13:21.560 --> 00:13:24.879
+you're interested, this is where the code lies. So
+
+00:13:24.880 --> 00:13:30.159
+regex-emacs.h has re-pattern buffer, which is a struct
+
+00:13:30.160 --> 00:13:34.239
+Actually, you know, I love, by the way, I love the Emacs C
+
+00:13:34.240 --> 00:13:37.359
+source code. It's so nice to read. It made all this so, so
+
+00:13:37.360 --> 00:13:41.119
+easy. I really appreciated it. In this particular case,
+
+00:13:41.120 --> 00:13:44.039
+I'm just going to focus on re-pattern buffer actually has
+
+00:13:44.040 --> 00:13:47.999
+the compiler. It's a C struct. It has every single thing
+
+00:13:48.000 --> 00:13:52.559
+that is needed to execute the regular expression against a
+
+00:13:52.560 --> 00:13:56.319
+string input or against a buffer input. This buffer,
+
+00:13:56.320 --> 00:13:59.839
+It's not an Emacs buffer. It refers to just the instruction
+
+00:13:59.840 --> 00:14:04.039
+table and the match loop. Again, this is very, very
+
+00:14:04.040 --> 00:14:07.839
+brief, but I want to specifically focus on the first part. So
+
+00:14:07.840 --> 00:14:11.879
+this is this inner matching loop, and there's a prologue,
+
+00:14:11.880 --> 00:14:15.679
+and then there's a loop body, and there's an epilogue. And
+
+00:14:15.680 --> 00:14:18.279
+the prologue is the really, really interesting part. I say
+
+00:14:18.280 --> 00:14:22.839
+extract current and next char. What Emacs does here, it
+
+00:14:22.840 --> 00:14:27.159
+doesn't just reach for the next byte. It actually will
+
+00:14:27.160 --> 00:14:31.879
+perform lazily in some sense, this variable integer size
+
+00:14:31.880 --> 00:14:36.039
+VAR decoding for multi-byte, and it'll actually then
+
+00:14:36.040 --> 00:14:43.959
+decode the next one to four bytes. Up to 32 bits at once, and
+
+00:14:43.960 --> 00:14:46.799
+then it'll actually go into the loop. We'll talk about the
+
+00:14:46.800 --> 00:14:52.519
+implications of that later. Next, in the body of the loop, we
+
+00:14:52.520 --> 00:14:54.239
+read the instruction from the instruction pointer, which
+
+00:14:54.240 --> 00:14:57.319
+is, again, in that buffer field. Then we have this big
+
+00:14:57.320 --> 00:14:59.479
+switch statement, which is actually, love a big switch
+
+00:14:59.480 --> 00:15:02.079
+statement, super easy to read, super easy to understand
+
+00:15:02.080 --> 00:15:05.399
+kind of what's occurring. Then that's the loop body. And
+
+00:15:05.400 --> 00:15:08.279
+then at the end of it, we either increment the instruction
+
+00:15:08.280 --> 00:15:11.119
+pointer if it was matching a single character or something
+
+00:15:11.120 --> 00:15:14.839
+along those lines, or if it was a jump, we don't do that. A
+
+00:15:14.840 --> 00:15:18.199
+jump, however, it's not referring to a jump in the sense of a
+
+00:15:18.200 --> 00:15:22.519
+go-to, but a jump that's elsewhere within that table, that
+
+00:15:22.520 --> 00:15:25.839
+buffer field. If you've included a capture, we write
+
+00:15:25.840 --> 00:15:29.479
+that end position there. Of course, well, as you may
+
+00:15:29.480 --> 00:15:34.439
+recall, the zeroth capture is, of course, the entire match
+
+00:15:34.440 --> 00:15:36.559
+string. If the capture is zero, then we know we've
+
+00:15:36.560 --> 00:15:39.839
+actually completed that match. That's really great.
+
+00:15:39.840 --> 00:15:43.599
+I would love to receive Q&A about this as well. I've spent a
+
+00:15:43.600 --> 00:15:46.719
+lot of time kind of learning and understanding it. But it's
+
+00:15:46.720 --> 00:15:49.879
+really interesting that this can be described in a single
+
+00:15:49.880 --> 00:15:52.159
+slide because it's really simple. That simplicity is
+
+00:15:52.160 --> 00:15:54.639
+actually a really powerful thing. I'll mention that in
+
+00:15:54.640 --> 00:15:58.759
+the next section. I say, is that all? And I apologize for
+
+00:15:58.760 --> 00:16:02.239
+not doing so. But please, please ask questions in Q&A or
+
+00:16:02.240 --> 00:16:04.999
+message me about this, because I think it's really, really,
+
+00:16:05.000 --> 00:16:07.079
+again, interesting. Again, I find the code relatively
+
+00:16:07.080 --> 00:16:11.999
+easy to read. Now, here's, I think this is actually the
+
+00:16:12.000 --> 00:16:15.519
+point of the talk. The rest of it was, you know, I think just me
+
+00:16:15.520 --> 00:16:18.839
+posturing. This is the really, really interesting part.
+
+00:16:18.840 --> 00:16:22.039
+This is the ways that we can improve, well, not just we can
+
+00:16:22.040 --> 00:16:25.839
+improve stuff in Emacs, but why those are the right things to
+
+00:16:25.840 --> 00:16:30.279
+improve. Then also how that can be a model for even things
+
+00:16:30.280 --> 00:16:35.079
+outside of Emacs. This is gonna be a lot of text. I'm not
+
+00:16:35.080 --> 00:16:38.879
+gonna go through all of it. This is the one thing that I tried.
+
+00:16:38.880 --> 00:16:42.239
+This is the thing that I thought would be a slam dunk, easy
+
+00:16:42.240 --> 00:16:47.439
+solution. My initial thought process was, well, We tried
+
+00:16:47.440 --> 00:16:52.919
+very hard to do an LRU cache here. It works. It's actually
+
+00:16:52.920 --> 00:16:57.399
+very effective. However, though, we don't actually give
+
+00:16:57.400 --> 00:17:00.479
+the user, the list programmer, the ability to then say, I
+
+00:17:00.480 --> 00:17:03.079
+know that this regex is something that is going to be used
+
+00:17:03.080 --> 00:17:06.399
+again. I made an artificial benchmark. I made an
+
+00:17:06.400 --> 00:17:10.039
+artificial benchmark because I wanted to show there is one
+
+00:17:10.040 --> 00:17:13.639
+very specific case that it does solve, but it's the same
+
+00:17:13.640 --> 00:17:16.919
+issue with the artificial benchmarks. mentioned earlier.
+
+00:17:16.920 --> 00:17:21.559
+It's very specifically crafted in order to show that this
+
+00:17:21.560 --> 00:17:25.319
+particular solution would produce some speedup. What
+
+00:17:25.320 --> 00:17:29.599
+this means is it just creates more than 20 regexps in a row. It
+
+00:17:29.600 --> 00:17:31.959
+compiles them. Then, of course, because we just don't
+
+00:17:31.960 --> 00:17:35.159
+pay the compile costs, because we don't go through that
+
+00:17:35.160 --> 00:17:39.079
+cache eviction process, it ends up being faster. But this
+
+00:17:39.080 --> 00:17:42.079
+isn't really mean very much, particularly the goal here,
+
+00:17:42.080 --> 00:17:45.559
+you know, the goal would have been to show that the compile
+
+00:17:45.560 --> 00:17:48.359
+cache is actually causing the performance issue in
+
+00:17:48.360 --> 00:17:51.359
+comparison to pre-compiling it. That's not something
+
+00:17:51.360 --> 00:17:56.039
+I've been able to show. Match over bytes, not cars. So
+
+00:17:56.040 --> 00:17:59.079
+this is when I said at the beginning, oh, I came in and I think,
+
+00:17:59.080 --> 00:18:02.079
+oh, we can just use modern regex engine techniques. This is
+
+00:18:02.080 --> 00:18:05.239
+really what I meant. In particular, I mentioned in this
+
+00:18:05.240 --> 00:18:09.279
+match loop here that there's this, prolog that does this
+
+00:18:09.280 --> 00:18:13.359
+varring decoding. What this means is that every single
+
+00:18:13.360 --> 00:18:18.519
+iteration of that loop is going to be interspersed with this
+
+00:18:18.520 --> 00:18:21.919
+not being able to read a fixed number of bytes, but a variable
+
+00:18:21.920 --> 00:18:24.359
+number of bytes just depending upon the Unicode character
+
+00:18:24.360 --> 00:18:27.039
+or the Unicode code point or the multibyte code point. So
+
+00:18:27.040 --> 00:18:29.799
+this ends up, again, being relatively difficult to
+
+00:18:29.800 --> 00:18:32.919
+optimize because processors operate over bytes and not
+
+00:18:32.920 --> 00:18:38.479
+over code points. Yes, we might consider a multi-byte CPU at
+
+00:18:38.480 --> 00:18:41.039
+some point. But this is a really, really simple thing. It's
+
+00:18:41.040 --> 00:18:44.999
+just generating automata that operate over bytes as
+
+00:18:45.000 --> 00:18:48.839
+opposed to code points. This kind of goes into the much more
+
+00:18:48.840 --> 00:18:51.839
+abstract one. There's a lot of text here, and we're not
+
+00:18:51.840 --> 00:18:56.159
+going to go into it. But the really, really important point
+
+00:18:56.160 --> 00:18:57.999
+that I'm specifically mentioning here is this explicit
+
+00:18:58.000 --> 00:19:02.079
+control over linguistic complexity. That's the
+
+00:19:02.080 --> 00:19:06.159
+abstract kind of point. I want to introduce the inputs and
+
+00:19:06.160 --> 00:19:11.279
+the outputs. Basically, when you perform a search, or a
+
+00:19:11.280 --> 00:19:14.799
+match, or a parse, those are different tasks. They'll
+
+00:19:14.800 --> 00:19:17.799
+have different expected inputs and different desired
+
+00:19:17.800 --> 00:19:21.559
+outputs. Right now, Emacs, the API for the regular
+
+00:19:21.560 --> 00:19:24.919
+expression engine and for matching, It doesn't allow
+
+00:19:24.920 --> 00:19:27.959
+specialization on this. Or rather, if we do specialize on
+
+00:19:27.960 --> 00:19:30.999
+particular inputs, if we have a heuristic to check if a regex
+
+00:19:31.000 --> 00:19:33.519
+is actually a literal string, that's not something that the
+
+00:19:33.520 --> 00:19:36.959
+user actually has control over. For example, you can make
+
+00:19:36.960 --> 00:19:38.999
+a mistake escaping something, and then you don't have a
+
+00:19:39.000 --> 00:19:42.039
+literal, and then you accidentally have behavior that you
+
+00:19:42.040 --> 00:19:44.279
+totally didn't expect. Not just correctness issues, but
+
+00:19:44.280 --> 00:19:48.599
+also performance issues. I really like this one. I like
+
+00:19:48.600 --> 00:19:52.239
+this a lot, because I didn't think of it at all. I think it's
+
+00:19:52.240 --> 00:19:58.119
+better than in all of my ideas. This was proposed, at least
+
+00:19:58.120 --> 00:20:01.839
+to me, by Pip Cet, and I really hope that I'm pronouncing your
+
+00:20:01.840 --> 00:20:04.479
+name correctly. I'm sorry I didn't ask you beforehand,
+
+00:20:04.480 --> 00:20:08.399
+emacs-devel. In particular, this was after a couple of
+
+00:20:08.400 --> 00:20:11.999
+responses where I was trying to say, oh, I want to give the
+
+00:20:12.000 --> 00:20:15.879
+list programmer, way back in here, I want to give the list
+
+00:20:15.880 --> 00:20:20.559
+programmer the ability to control compilation in some
+
+00:20:20.560 --> 00:20:25.759
+sense. you know, he mentioned, I think he is correct, you
+
+00:20:25.760 --> 00:20:28.439
+know, there's no real introspection. That happens
+
+00:20:28.440 --> 00:20:33.119
+because it's written in C. I was thinking, oh, if I turn
+
+00:20:33.120 --> 00:20:35.639
+this into a list object that gives the list programmer the
+
+00:20:35.640 --> 00:20:40.039
+power and the ability to do more with that, but it doesn't
+
+00:20:40.040 --> 00:20:42.839
+actually because it's still in C. At first, I was
+
+00:20:42.840 --> 00:20:46.679
+thinking, oh, we can make the C part more flexible. But
+
+00:20:46.680 --> 00:20:50.039
+actually, especially if we want to do almost any of the
+
+00:20:50.040 --> 00:20:52.719
+things we previously mentioned, I think basically that
+
+00:20:52.720 --> 00:20:56.599
+this is... I think that if I'm not going to do it, somebody
+
+00:20:56.600 --> 00:20:58.879
+else really should do it, and I think we should maybe even do
+
+00:20:58.880 --> 00:21:01.519
+it together, because I think this is really, I think, how we
+
+00:21:01.520 --> 00:21:04.079
+can start experimenting, and not just experimenting, but
+
+00:21:04.080 --> 00:21:07.039
+because, as mentioned here, we have libgccjit, we have the
+
+00:21:07.040 --> 00:21:09.519
+native compiler, we have the ability to opt, like,
+
+00:21:09.520 --> 00:21:12.639
+specifically to generate specific code for this, so why not
+
+00:21:12.640 --> 00:21:15.919
+implement the or a Redix engine itself in list, And this
+
+00:21:15.920 --> 00:21:18.359
+gives us the ability to introspect it. That's one of the
+
+00:21:18.360 --> 00:21:20.759
+things I mentioned at the beginning. But it actually gives
+
+00:21:20.760 --> 00:21:23.879
+us the ability to then actually look at all the previous
+
+00:21:23.880 --> 00:21:28.159
+implementations, to explicitly compile beforehand, to
+
+00:21:28.160 --> 00:21:32.519
+match against bytes, to specialize and dispatch based upon
+
+00:21:32.520 --> 00:21:36.799
+input and output. This is something that, you know, it's
+
+00:21:36.800 --> 00:21:37.999
+super simple.
+
+00:21:38.000 --> 00:21:40.799
+It's really smart. I'm really, really glad that Pip
+
+00:21:40.800 --> 00:21:44.839
+mentioned this because it is, I think, the right way to solve
+
+00:21:44.840 --> 00:21:49.879
+the rest of it. We're at the final section. I talked a
+
+00:21:49.880 --> 00:21:52.679
+lot about, you know, kind of abstract, you know, thoughts.
+
+00:21:52.680 --> 00:21:55.679
+I talked a little about, you know, specific solutions.
+
+00:21:55.680 --> 00:21:59.999
+But I especially talked about, you know, what is Regex and
+
+00:22:00.000 --> 00:22:02.959
+Emacs? And I don't know if I had a lot of specific examples of
+
+00:22:02.960 --> 00:22:06.079
+it. I'm going to just describe kind of my, I guess,
+
+00:22:06.080 --> 00:22:09.799
+motivation, my impetus. Then I think something that's
+
+00:22:09.800 --> 00:22:12.639
+really something to chew on for the future. Do I have any
+
+00:22:12.640 --> 00:22:15.799
+concrete examples? Yes. Well, you can decide if they're
+
+00:22:15.800 --> 00:22:22.799
+concrete. Or am I just posturing? Also, yes. helm, rg. Helm,
+
+00:22:22.800 --> 00:22:27.679
+Erg, it's literally just M-x grep, it uses ripgrep, which
+
+00:22:27.680 --> 00:22:31.999
+is written by the same author of the Rust regex [??]. It
+
+00:22:32.000 --> 00:22:36.199
+happens to be very, very fast. In particular, I use this tool
+
+00:22:36.200 --> 00:22:39.319
+with ripgrep on the Twitter monorepo, and I was able to
+
+00:22:39.320 --> 00:22:42.559
+search very, very large amounts of code that was on my local
+
+00:22:42.560 --> 00:22:46.399
+machine using regular expressions. I think this is one
+
+00:22:46.400 --> 00:22:49.199
+thing that I think is really, really important, because
+
+00:22:49.200 --> 00:22:52.919
+when you want to scale, People say the word scaling and they
+
+00:22:52.920 --> 00:22:56.719
+assume there's a specific kind of answer for that. I've
+
+00:22:56.720 --> 00:23:01.679
+just found that text is not only flexible, it's actually
+
+00:23:01.680 --> 00:23:04.359
+something that can be more performant than the alternative
+
+00:23:04.360 --> 00:23:07.399
+and not only more performant, but more productive. It's
+
+00:23:07.400 --> 00:23:10.359
+again, it's just M-x grep using ripgrep. There's a tool
+
+00:23:10.360 --> 00:23:12.719
+deadgrep by Wilfred Hughes, which is also fantastic. I
+
+00:23:12.720 --> 00:23:15.759
+think it's actually better than this, but this one's mine so
+
+00:23:15.760 --> 00:23:19.199
+I can mess around with it. But this tool is kind of why,
+
+00:23:19.200 --> 00:23:21.799
+especially I started looking into Emacs and looking into
+
+00:23:21.800 --> 00:23:24.919
+changing the way that, or at least diving into how the
+
+00:23:24.920 --> 00:23:27.559
+regular expression matching actually kind of works, both
+
+00:23:27.560 --> 00:23:30.359
+in Emacs and then in ripgrep. We'll go to the next one.
+
+00:23:30.360 --> 00:23:34.119
+This is something that does exist and continues to exist.
+
+00:23:34.120 --> 00:23:36.799
+This is something that doesn't quite exist yet. I'm
+
+00:23:36.800 --> 00:23:41.359
+calling it telepathy grams. It's, you know, it's the name,
+
+00:23:41.360 --> 00:23:44.719
+and it's very, you know, it doesn't work, but it's a code
+
+00:23:44.720 --> 00:23:47.919
+search tool that, in this case, precompiles the database to
+
+00:23:47.920 --> 00:23:51.879
+execute NFAs against. I was thinking, how can I beat And
+
+00:23:51.880 --> 00:23:55.039
+the first thing I thought is, well, as I have worked on build
+
+00:23:55.040 --> 00:23:57.759
+tools, especially in monorepos, one of the things that the
+
+00:23:57.760 --> 00:24:00.799
+pants build tool from Twitter does is it uses a file watcher
+
+00:24:00.800 --> 00:24:04.239
+to ensure that instead of having to constantly read in the
+
+00:24:04.240 --> 00:24:10.079
+entire contents of a file, which may be very, very large, it
+
+00:24:10.080 --> 00:24:13.679
+only does so when the file has been changed. Finally, I
+
+00:24:13.680 --> 00:24:16.919
+want to conclude on this note, which is just that the stuff I
+
+00:24:16.920 --> 00:24:20.839
+didn't learn from emacs devel, I learned from Paul
+
+00:24:20.840 --> 00:24:25.319
+Wankadia, Jr., who is the RE2 maintainer, and he taught me
+
+00:24:25.320 --> 00:24:32.399
+quite a lot from 2023 to 2024. I'm thankful for the time
+
+00:24:32.400 --> 00:24:37.959
+that I learned from you, so thank you, Paul. With that, we're
+
+00:24:37.960 --> 00:24:42.759
+at point-max. Call me, beat me, if you want to reach me and or
+
+00:24:42.760 --> 00:24:45.839
+hire me. These are places that you can reach me at. There are
+
+00:24:45.840 --> 00:24:49.719
+probably others. Feel free to suggest other ways to contact
+
+00:24:49.720 --> 00:24:53.199
+me. But for now, this is the end. Thank you so much for your
+
+00:24:53.200 --> 00:24:56.080
+time. I really appreciate it.
diff --git a/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt
new file mode 100644
index 00000000..1b881325
--- /dev/null
+++ b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt
@@ -0,0 +1,926 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:06.519
+Okay, so I'm going to look at some of the questions showing up
+
+00:00:06.520 --> 00:00:08.499
+in the etherpad we got here.
+
+NOTE Q: Have you considered using CRDTs to share buffers between threads and merge any concurrent edits automatically?
+
+00:00:08.500 --> 00:00:09.439
+It says, have you considered
+
+00:00:09.440 --> 00:00:12.799
+using a CRDT to share buffers between threads and merge any
+
+00:00:12.800 --> 00:00:16.039
+concurrent edits automatically? So I have looked at that.
+
+00:00:16.040 --> 00:00:20.559
+And the problem with CRDTs is that even though they give you a
+
+00:00:20.560 --> 00:00:22.839
+mathematically correct answer when you're trying to merge
+
+00:00:22.840 --> 00:00:26.479
+two conflicts, it's not always a useful answer. Like, it's
+
+00:00:26.480 --> 00:00:29.199
+not coherent. If you have two things trying to edit the same
+
+00:00:29.200 --> 00:00:31.359
+thing, there's no good way to resolve that. And so they
+
+00:00:31.360 --> 00:00:33.559
+really work well when you have two people working live, both
+
+00:00:33.560 --> 00:00:35.639
+editing the same document, because they can fix any
+
+00:00:35.640 --> 00:00:37.199
+particular issues like that, like you would with Google
+
+00:00:37.200 --> 00:00:39.919
+Docs. But you have different packages that aren't aware of
+
+00:00:39.920 --> 00:00:42.159
+each other, and you're going to run into problems. And so
+
+00:00:42.160 --> 00:00:44.999
+this is something, if you read from the Xi editor, which was
+
+00:00:45.000 --> 00:00:48.039
+one of the first ones to use CRDTs, in the retrospective, he
+
+00:00:48.040 --> 00:00:52.359
+talks about how they had this problem, where the CRDTs They
+
+00:00:52.360 --> 00:00:53.999
+give you an answer, but it's not always an answer that's
+
+00:00:54.000 --> 00:00:59.079
+useful. And so I feel like locks at least are going to make it.
+
+00:00:59.080 --> 00:01:00.439
+It's not going to be as efficient if you have a whole bunch of
+
+00:01:00.440 --> 00:01:02.319
+packages, but I don't imagine there's going to be a ton of
+
+00:01:02.320 --> 00:01:04.799
+those. It can actually, I think it'll be more useful in
+
+00:01:04.800 --> 00:01:05.873
+practice.
+
+NOTE Q: Why hosted on GitHub? GitHub is nonfree. Is it possible to report bugs/send patches without using GitHub?
+
+00:01:05.874 --> 00:01:11.239
+I host on GitHub because that's what I know.
+
+00:01:11.240 --> 00:01:13.239
+If there's a way to host it on somewhere else, I'd be
+
+00:01:13.240 --> 00:01:15.439
+interested in doing that. If you're interested in setting
+
+00:01:15.440 --> 00:01:17.799
+patches without using GitHub, you could always send an
+
+00:01:17.800 --> 00:01:22.959
+email. I'm more than happy to accept email patches.
+
+NOTE Q: Do you think it's possible to achieve 100% compatibility with current Emacs code?
+
+00:01:22.960 --> 00:01:24.959
+Do you think it's possible to achieve with the current Emacs
+
+00:01:24.960 --> 00:01:29.719
+code? I do. I think, I think you can do that. Um, like I said,
+
+00:01:29.720 --> 00:01:33.279
+there's a couple things inside there that are intentional
+
+00:01:33.280 --> 00:01:37.919
+breaks with existing Emacs code. And some of those being
+
+00:01:37.920 --> 00:01:43.159
+like functions are immutable. As well as having data shared
+
+00:01:43.160 --> 00:01:44.759
+switch between different threads, which means there's
+
+00:01:44.760 --> 00:01:46.599
+going to be some copying going on. So there's going to be
+
+00:01:46.600 --> 00:01:48.399
+subtle things that are going to be different. And we've
+
+00:01:48.400 --> 00:01:50.359
+really got to think about those intentionally, but I'm
+
+00:01:50.360 --> 00:01:54.519
+really going for bug compatibility with GNU Emacs so that
+
+00:01:54.520 --> 00:01:57.159
+you can take an existing Elisp package and just run it and it
+
+00:01:57.160 --> 00:01:59.879
+just works, 'cause I think that's one of the big strengths of
+
+00:01:59.880 --> 00:02:03.399
+the Emacs ecosystem is the millions of lines of Elisp that
+
+00:02:03.400 --> 00:02:07.479
+people have written.
+
+00:02:07.480 --> 00:02:11.912
+Um, So I'm not, okay...
+
+NOTE Q: so you're re-implementing elisp in rust? have you considered using a more modern lisp, such as scheme? [11:03]
+
+00:02:11.913 --> 00:02:14.279
+So since you're re-implementing Elisp and
+
+00:02:14.280 --> 00:02:17.039
+Rust, have you considered using more modern Lisp such as
+
+00:02:17.040 --> 00:02:20.919
+Scheme? So I'm not re-implementing Elisp and Rust. I'm
+
+00:02:20.920 --> 00:02:25.439
+re-implementing the C in Rust. In fact, I would like to make
+
+00:02:25.440 --> 00:02:30.479
+more of the core that's written in C in Elisp instead of C or
+
+00:02:30.480 --> 00:02:33.839
+Rust, because then it's actually introspectible. There's
+
+00:02:33.840 --> 00:02:38.719
+a talk by Tom Tromney that he gave a while ago about Emacs
+
+00:02:38.720 --> 00:02:42.239
+should be Emacs Lisp. I kind of like that philosophy,
+
+00:02:42.240 --> 00:02:44.799
+that as much of it as should be Elisp as possible, and we
+
+00:02:44.800 --> 00:02:48.079
+should only have C or Rust or some systems level language for
+
+00:02:48.080 --> 00:02:52.319
+really low-level stuff. Using a more modern LISP such as
+
+00:02:52.320 --> 00:02:54.839
+Scheme. I know there's, I mean, there's two talks, I think,
+
+00:02:54.840 --> 00:02:58.239
+in this conference about using Scheme inside Emacs. And I
+
+00:02:58.240 --> 00:03:00.719
+looked at this at one point about what if you wrote it inside
+
+00:03:00.720 --> 00:03:03.919
+Common LISP, because that's also has some really low level
+
+00:03:03.920 --> 00:03:05.879
+details. And then you could go from Elisp down to Common
+
+00:03:05.880 --> 00:03:09.199
+Lisp. But the problem is, is under the hood, you still need a
+
+00:03:09.200 --> 00:03:12.559
+systems language. You can't, you still need either C or Rust
+
+00:03:12.560 --> 00:03:15.639
+or something underneath the Common Lisp to implement the
+
+00:03:15.640 --> 00:03:17.799
+primitives. And so it's not going to give you just two
+
+00:03:17.800 --> 00:03:19.719
+languages, you know, you'll have three. You'll have the
+
+00:03:19.720 --> 00:03:24.919
+elisp, common lisp, and C under the hood. And so in this case
+
+00:03:24.920 --> 00:03:29.559
+we just have the two. We have the Elisp and the rest.
+
+00:03:29.560 --> 00:03:42.999
+All right that's all the questions I see there. Let
+
+00:03:43.000 --> 00:03:54.079
+me go look at... Okay,
+
+00:03:54.080 --> 00:04:01.399
+so I see into the chat.
+
+NOTE Q: Do you have specific features from the Rust compiler that are missing (or are nightly-only) that you would take advantage of?
+
+00:04:01.400 --> 00:04:03.839
+Does it features from the Rust compiler that are missing
+
+00:04:03.840 --> 00:04:06.239
+that way you would take advantage of? Oh, that is a great
+
+00:04:06.240 --> 00:04:10.679
+question. Um, there's a handful of them. Uh, I should've
+
+00:04:10.680 --> 00:04:13.599
+written down a list of these. One of them is Polonius, which
+
+00:04:13.600 --> 00:04:17.959
+is the new borrow checker because we're trying to be used
+
+00:04:17.960 --> 00:04:21.759
+lifetime to track our objects. We often run into situations
+
+00:04:21.760 --> 00:04:24.239
+where we've kind of got a hack around things because the
+
+00:04:24.240 --> 00:04:26.199
+limitations with the borrow checker. And so I have a whole
+
+00:04:26.200 --> 00:04:29.559
+bunch of like notes inside there about where. A better
+
+00:04:29.560 --> 00:04:34.959
+Polonius would help inside there and help ease some of the
+
+00:04:34.960 --> 00:04:40.599
+issues. Another thing is enum variances types, because
+
+00:04:40.600 --> 00:04:42.999
+right now we have an object which is defined as a big enum that
+
+00:04:43.000 --> 00:04:46.079
+had all the possible objects, but if we want to have a subset
+
+00:04:46.080 --> 00:04:47.479
+of those objects or just pass in one of those objects, we've
+
+00:04:47.480 --> 00:04:50.079
+got to define a new struct. And so we have a whole bunch of
+
+00:04:50.080 --> 00:04:52.839
+boilerplate code to define that all out. And if we had
+
+00:04:52.840 --> 00:04:56.719
+variances types, that would make the code a lot easier.
+
+00:04:56.720 --> 00:05:00.079
+Another one is the allocator API. Right now we're kind of
+
+00:05:00.080 --> 00:05:02.479
+working around it, but ultimately we're going to need our
+
+00:05:02.480 --> 00:05:07.719
+own allocator. And the allocator API is still nightly only.
+
+00:05:07.720 --> 00:05:10.919
+So there's a couple more. I'll look at that more, but that's a
+
+00:05:10.920 --> 00:05:24.279
+great question.
+
+00:05:24.280 --> 00:05:26.879
+Let's see.
+
+NOTE Q: Can remacs be reused?
+
+00:05:26.880 --> 00:05:30.799
+Okay. I see a question you might not have noticed just asking
+
+00:05:30.800 --> 00:05:37.159
+about reuse of Remacs. Oh, yes, so I have reused some of Remacs
+
+00:05:37.160 --> 00:05:40.159
+code, and some taken, like I mentioned, taken some of their
+
+00:05:40.160 --> 00:05:45.319
+ideas, but ultimately we're using a different model
+
+00:05:45.320 --> 00:05:49.439
+because under the hood in Remacs, everything is just defined
+
+00:05:49.440 --> 00:05:53.799
+as an opaque external type that's defined inside Emacs and
+
+00:05:53.800 --> 00:05:56.159
+so it just pulls those in interacts with those and passes
+
+00:05:56.160 --> 00:05:58.879
+them back into C. We're trying to see what we can do if we
+
+00:05:58.880 --> 00:06:02.279
+say okay we're not going to take the same... So they're bound to
+
+00:06:02.280 --> 00:06:06.839
+the implementation details of Emacs, and we don't want to do
+
+00:06:06.840 --> 00:06:09.559
+that. We've re-implemented all the core types
+
+00:06:09.560 --> 00:06:12.559
+ourselves. So that means that we can't just take the
+
+00:06:12.560 --> 00:06:16.559
+Remacs code one for one and use it in our project, but we can
+
+00:06:16.560 --> 00:06:18.799
+take a lot of their ideas. I've spent some time reading
+
+00:06:18.800 --> 00:06:20.439
+through their documentation, different things about how
+
+00:06:20.440 --> 00:06:23.856
+they approached strings and GC
+
+00:06:23.857 --> 00:06:24.759
+and different stuff like that.
+
+00:06:24.760 --> 00:07:23.599
+Looks like all the questions.
+
+NOTE Q: What are you thoughts on the GUI layer. Any plans on how to reimplement it?
+
+00:07:23.600 --> 00:07:26.199
+Okay, so another question. What are your thoughts on the GUI
+
+00:07:26.200 --> 00:07:30.959
+layer? Any plans on how to reimplement it? This is something
+
+00:07:30.960 --> 00:07:34.079
+I've thought a lot about, but I still don't have a solid plan
+
+00:07:34.080 --> 00:07:37.253
+for. I'm not really a GUI person. I mostly work with
+
+00:07:37.254 --> 00:07:42.719
+low-level. And so my two thoughts is you can go the GTK route.
+
+00:07:42.720 --> 00:07:45.519
+There's Rust bindings for that. That's well understood.
+
+00:07:45.520 --> 00:07:48.319
+It's got a good support. But there's also some interesting
+
+00:07:48.320 --> 00:07:53.919
+projects to try and do GUI in Rust, native Rust, and have it
+
+00:07:53.920 --> 00:07:57.399
+use Rust idioms and stuff like that. And so those are things
+
+00:07:57.400 --> 00:08:01.439
+like Druid and there's eGUI and a bunch of those that are that
+
+00:08:01.440 --> 00:08:05.359
+way. And I've never used one of them, but I'd be interested to
+
+00:08:05.360 --> 00:08:08.879
+try that out first and see how well does this work and how well
+
+00:08:08.880 --> 00:08:21.239
+supported is this doing a Rust-first GUI.
+
+NOTE Q: If money could fix the problem, how much would it cost to ship this with feature parity before 2026?
+
+00:08:21.240 --> 00:08:23.639
+If money could fix the problem, how much would it cost to ship
+
+00:08:23.640 --> 00:08:28.399
+this with feature parity before 2026? Ooh, in a year. Uh,
+
+00:08:28.400 --> 00:08:32.079
+that's a good question. Even if we had the money, it would
+
+00:08:32.080 --> 00:08:36.639
+take more than just me, even if I was working on it full time.
+
+00:08:36.640 --> 00:08:40.630
+Um, I don't know. That's a good question.
+
+00:08:40.631 --> 00:08:41.769
+I would think it would take a team
+
+00:08:41.770 --> 00:08:45.239
+of at least a handful of people to get this
+
+00:08:45.240 --> 00:08:48.559
+shipping within one year. Because there's still a lot of
+
+00:08:48.560 --> 00:08:50.759
+work to do. And even once you have everything implemented,
+
+00:08:50.760 --> 00:08:55.119
+there's a lot of bug finding and smoothing it out so that it
+
+00:08:55.120 --> 00:08:57.519
+runs as well as Emacs, which has been, you know, battle
+
+00:08:57.520 --> 00:08:58.359
+tested for a long time.
+
+00:08:58.360 --> 00:09:06.599
+Um, okay, so this might be a good moment for me to break in and
+
+00:09:06.600 --> 00:09:09.039
+just say that we've got about 10 minutes left before we
+
+00:09:09.040 --> 00:09:12.519
+resume new talks on on both tracks. Of course, we're happy to
+
+00:09:12.520 --> 00:09:18.119
+keep this. This chat open and keep the recording going here,
+
+00:09:18.120 --> 00:09:21.599
+which will share after the conference as long as as long as
+
+00:09:21.600 --> 00:09:28.349
+there's discussion here. Thank you.
+
+NOTE GObject implementation
+
+00:09:28.350 --> 00:09:29.119
+GTK project has
+
+00:09:29.120 --> 00:09:31.079
+automatic binding with a framework called GObject
+
+00:09:31.080 --> 00:09:33.599
+introspection, which is what I'm using for gypsum project.
+
+00:09:33.600 --> 00:09:35.959
+Probably Rust has a G object implementation, which you can
+
+00:09:35.960 --> 00:09:39.119
+use. Yeah, I know it has some GTK bindings. Um, I'm not sure if
+
+00:09:39.120 --> 00:09:41.954
+it's specifically GObject, but that's a good path
+
+00:09:41.955 --> 00:09:44.335
+because I feel like the problem
+
+00:09:44.336 --> 00:09:46.759
+with the Rust GUIs is that they're all
+
+00:09:46.760 --> 00:09:50.359
+very new. And so, you know, everything works in a demo, but
+
+00:09:50.360 --> 00:09:52.319
+you need something that can work across all different
+
+00:09:52.320 --> 00:09:54.319
+devices and all different platforms and have really good
+
+00:09:54.320 --> 00:09:56.599
+support and good accessibility and stuff like that.
+
+NOTE Q: elisp is implemented in c, so if you're not implementing elisp in rust, are you using/keeping the c implementation of elisp?
+
+00:09:56.600 --> 00:10:03.399
+All right, Elisp is implemented in C. So if you're not
+
+00:10:03.400 --> 00:10:07.359
+implementing Elisp in Rust, we're keeping the C
+
+00:10:07.360 --> 00:10:13.639
+implementation of Elisp. So let me see if I can do a better job
+
+00:10:13.640 --> 00:10:18.439
+of explaining this. So inside Emacs, you have about a
+
+00:10:18.440 --> 00:10:21.519
+million lines of Elisp. And underneath that, you have the C,
+
+00:10:21.520 --> 00:10:24.079
+which is the primitives everything's implemented yet. And
+
+00:10:24.080 --> 00:10:27.079
+so we're keeping all of the Elisp, and we're just taking that
+
+00:10:27.080 --> 00:10:30.559
+C layer and replacing it with Rust. And so when you call a
+
+00:10:30.560 --> 00:10:33.079
+built-in function, it's calling into a Rust function
+
+00:10:33.080 --> 00:10:40.079
+instead of a C function under the hood. So all the Elisp stays
+
+00:10:40.080 --> 00:10:42.679
+Elisp, but the C becomes Rust.
+
+NOTE Clarifying rewriting Elisp in Rust
+
+00:10:42.680 --> 00:10:54.599
+So looking at the IRC chat, it feels to me like maybe there's a
+
+00:10:54.600 --> 00:10:59.159
+little bit of confusion around what do we mean when we say
+
+00:10:59.160 --> 00:11:04.839
+rewriting Elisp in Rust, right? I think there are some
+
+00:11:04.840 --> 00:11:07.399
+people that are like, A, we're reinventing ELISP, and
+
+00:11:07.400 --> 00:11:09.679
+there's other people that are like, no, we're trying to be
+
+00:11:09.680 --> 00:11:12.879
+byte-for-byte compatible with Rust.
+
+00:11:12.880 --> 00:11:17.500
+So some people are questioning your no answer on that.
+
+00:11:17.501 --> 00:11:20.000
+Aren't you really, maybe, is what I'm reading in there.
+
+00:11:20.001 --> 00:11:21.769
+Do you want to respond to that?
+
+00:11:21.770 --> 00:11:26.119
+Yeah, I'm trying to think about how I can make this
+
+00:11:26.120 --> 00:11:29.559
+clearer. So the Elisp stays Elisp. We're not changing the
+
+00:11:29.560 --> 00:11:33.239
+Elisp at all, or at least very minimally. We want to be able to
+
+00:11:33.240 --> 00:11:36.519
+take, like I said, bug compatible. So whatever works inside
+
+00:11:36.520 --> 00:11:39.999
+existing Emacs, you can take all the Lisp and you can run it in
+
+00:11:40.000 --> 00:11:43.599
+Rune and it works the same. So the Elisp stays the same. It's
+
+00:11:43.600 --> 00:11:47.119
+just the under the hood core that is getting replaced. And
+
+00:11:47.120 --> 00:11:49.199
+this in turn adds some new features such as
+
+00:11:49.200 --> 00:11:52.799
+multi-threading. So it's not exactly compatible, but
+
+00:11:52.800 --> 00:11:55.559
+you should be able to use your existing code and the Elisp will
+
+00:11:55.560 --> 00:12:00.639
+stay Elisp. So the idea is that anything that I've written as
+
+00:12:00.640 --> 00:12:04.559
+an Emacs user, my config, my custom packages, whatever it
+
+00:12:04.560 --> 00:12:08.999
+may be, that's all going to be valid code. If you take, you
+
+00:12:09.000 --> 00:12:13.163
+know, the Elisp implementation as being the C code
+
+00:12:13.164 --> 00:12:15.745
+and the parts of Elisp written in Elisp
+
+00:12:15.746 --> 00:12:18.448
+that represent opportunity space
+
+00:12:18.449 --> 00:12:20.799
+thinking about Rust as an implementation language...
+
+00:12:20.800 --> 00:12:24.479
+Okay fine. You know, you can make a semantic argument, okay
+
+00:12:24.480 --> 00:12:25.995
+we're re-implementing, we're creating
+
+00:12:25.996 --> 00:12:29.018
+an alternate implementation of Elisp
+
+00:12:29.019 --> 00:12:31.639
+but what Elisp is isn't the problem
+
+00:12:31.640 --> 00:12:35.039
+space here. That's a fixed, a given, if you will.
+
+00:12:35.040 --> 00:12:36.065
+Is that all right?
+
+00:12:36.066 --> 00:12:39.199
+That's a good way of saying it. Okay. Yeah, what you
+
+00:12:39.200 --> 00:12:42.559
+said makes sense. I was kind of responding to some comments,
+
+00:12:42.560 --> 00:12:44.959
+like I'm not sure it connected for everybody. Makes a lot of
+
+00:12:44.960 --> 00:12:47.399
+sense. Yeah, I wasn't sure how much I needed to expand on that
+
+00:12:47.400 --> 00:12:51.119
+and explain that, but I appreciate you jumping in.
+
+00:12:51.120 --> 00:12:57.907
+Um, okay. So if I were just going to, but...
+
+NOTE Q: Will your Rust implementation also be able to run Emacs bytecode? Or are you implementing it at the Lisp level?
+
+00:12:57.908 --> 00:13:02.239
+Will your Rust implementation also be able to run Emacs bytecode or the
+
+00:13:02.240 --> 00:13:04.359
+implemented at the Lisp level? So I already have a bytecode
+
+00:13:04.360 --> 00:13:06.759
+interpreter inside there that runs the existing Elisp
+
+00:13:06.760 --> 00:13:09.519
+bytecode. And so that was one of the first things I did was
+
+00:13:09.520 --> 00:13:11.679
+bootstrap the interpreter and then bootstrap the bytecode
+
+00:13:11.680 --> 00:13:14.999
+engine. And so we compile, we use the... because the bytecode
+
+00:13:15.000 --> 00:13:19.079
+compiler is written in Emacs Lisp. So you bootstrap that
+
+00:13:19.080 --> 00:13:22.919
+and it gives you the Emacs bytecode. I have a bytecode
+
+00:13:22.920 --> 00:13:26.039
+engine that runs the bytecode. So that's already done. And
+
+00:13:26.040 --> 00:13:28.239
+you can potentially, on top of that, do something like the
+
+00:13:28.240 --> 00:13:31.999
+data compilation or a JIT. But we have both an
+
+00:13:32.000 --> 00:13:47.019
+interpreter and a bytecode compiler.
+
+00:13:47.020 --> 00:13:50.799
+And I'll just break in one more time to say with about five
+
+00:13:50.800 --> 00:13:56.319
+minutes left in our live time with this Q&A session, which
+
+00:13:56.320 --> 00:13:58.439
+we're happy to keep going as long as there are questions.
+
+00:13:58.440 --> 00:14:03.959
+Coming up in five minutes, we'll have a talk on color on the
+
+00:14:03.960 --> 00:14:09.639
+gen track. And then right here, we'll have the p-search
+
+00:14:09.640 --> 00:14:09.959
+talk.
+
+00:14:09.960 --> 00:14:20.099
+Thank you.
+
+NOTE Q: Is it possible to bootstrap with just the bytecode interpreter?
+
+00:14:20.100 --> 00:14:22.559
+Is it possible to bootstrap with just the bytecode
+
+00:14:22.560 --> 00:14:25.759
+interpreter? So I'll have to put in a link to one of my blog
+
+00:14:25.760 --> 00:14:28.519
+posts. So that was my original idea was to say, I don't want to
+
+00:14:28.520 --> 00:14:31.559
+have an interpreter, a bytecode interpreter and a native
+
+00:14:31.560 --> 00:14:33.180
+compiler. I want to just have just one.
+
+00:14:33.181 --> 00:14:36.741
+So I'm only going to have the bytecode.
+
+00:14:36.742 --> 00:14:37.708
+And so that's what I did initially.
+
+00:14:37.709 --> 00:14:42.079
+The problem with that is, is that a bunch of the early bootstrap
+
+00:14:42.080 --> 00:14:45.117
+Emacs code is written with the assumption
+
+00:14:45.118 --> 00:14:47.278
+that it's going to be interpreted.
+
+00:14:47.279 --> 00:14:49.019
+This is especially true with macros,
+
+00:14:49.020 --> 00:14:50.821
+where you'll have a function defined,
+
+00:14:50.822 --> 00:14:52.642
+you'll evaluate part of the function.
+
+00:14:52.643 --> 00:14:55.599
+The other half of the function has macros in it
+
+00:14:55.600 --> 00:14:59.719
+that are not defined yet, but it doesn't matter because they
+
+00:14:59.720 --> 00:15:02.399
+don't get used. But with the bytecode interpreter, it
+
+00:15:02.400 --> 00:15:04.639
+expands all macros when it gets the function definition.
+
+00:15:04.640 --> 00:15:08.799
+And so those weren't macros when the function was expanded,
+
+00:15:08.800 --> 00:15:12.359
+and therefore they got instantiated as functions, but
+
+00:15:12.360 --> 00:15:15.759
+they're not functions, they're macros. And so I initially
+
+00:15:15.760 --> 00:15:18.999
+spent a bunch of time trying to work around this, trying to
+
+00:15:19.000 --> 00:15:21.599
+move code around, work stuff around, refactor the code to
+
+00:15:21.600 --> 00:15:24.759
+try and get it to work with only bytecode interpreter. And
+
+00:15:24.760 --> 00:15:27.039
+eventually I just gave up. I said, you know what, I'm just
+
+00:15:27.040 --> 00:15:30.039
+going to write an actual interpreter to handle this because
+
+00:15:30.040 --> 00:15:33.799
+trying to handle all these lazy macros is too much work. And
+
+00:15:33.800 --> 00:15:35.759
+everything in the bootstrap is built with the assumption
+
+00:15:35.760 --> 00:15:37.799
+that you have lazy macro expansion.
+
+00:15:37.800 --> 00:15:45.159
+I'm guessing the Emacs bytecode interpreter isn't
+
+00:15:45.160 --> 00:15:45.959
+complete.
+
+00:15:45.960 --> 00:15:52.279
+So it's mostly complete. There's a handful of opcodes that
+
+00:15:52.280 --> 00:15:55.239
+aren't implemented that are pretty easy to add that I
+
+00:15:55.240 --> 00:15:57.879
+haven't run into. And there's some of them that are
+
+00:15:57.880 --> 00:16:00.119
+deprecated that aren't implemented, but it's essentially
+
+00:16:00.120 --> 00:16:00.479
+complete.
+
+00:16:00.480 --> 00:16:11.999
+We also provide a bytecode JIT compilation via libgcc the
+
+00:16:12.000 --> 00:16:17.344
+way Emacs currently does it. Eventually I would like to...
+
+00:16:17.345 --> 00:16:22.919
+I'm more inclined to have a proper runtime JIT than an
+
+00:16:22.920 --> 00:16:27.399
+ahead-of-time compiler like libgcc, like the current
+
+00:16:27.400 --> 00:16:29.919
+Emacs native compilation, because it allows you to take
+
+00:16:29.920 --> 00:16:34.559
+type information and actually apply that to the code, which
+
+00:16:34.560 --> 00:17:03.959
+can let you do more aggressive optimizations to it.
+
+NOTE What would it take to bootstrap Guile in Rune?
+
+00:17:03.960 --> 00:17:06.319
+He said, we may either get a new Emacs with an ancient C core
+
+00:17:06.320 --> 00:17:09.039
+with a modern Lisp, or an Emacs with modern core, but stuck
+
+00:17:09.040 --> 00:17:11.879
+with ancient Elisp. So there was another project I was
+
+00:17:11.880 --> 00:17:16.639
+talking to, one of the Guile implementations, about how we
+
+00:17:16.640 --> 00:17:19.119
+could potentially, he was like, what would it take to
+
+00:17:19.120 --> 00:17:24.479
+bootstrap Guile in Rune, where you have both, you could have
+
+00:17:24.480 --> 00:17:27.399
+Elisp and Guile running inside this project. And so we've
+
+00:17:27.400 --> 00:17:28.999
+started that discussion, which I think would be, which
+
+00:17:29.000 --> 00:17:33.999
+would be interesting. But it's tricky too, because
+
+00:17:34.000 --> 00:17:36.199
+fundamentally Elisp and Guile are two different
+
+00:17:36.200 --> 00:17:38.119
+languages. They have different semantics. They have
+
+00:17:38.120 --> 00:17:39.879
+different ways of handling things. You've really got to
+
+00:17:39.880 --> 00:17:42.479
+consider both of those when you're trying to make them work
+
+00:17:42.480 --> 00:17:42.799
+together.
+
+00:17:42.800 --> 00:17:57.319
+How would you do the native module system? What would be
+
+00:17:57.320 --> 00:17:59.799
+different? We can do the same thing. We have an FFI. So I
+
+00:17:59.800 --> 00:18:03.839
+haven't looked into it a ton, but I feel like it could be
+
+00:18:03.840 --> 00:18:06.359
+similar. And I'm actually interested, there's a couple
+
+00:18:06.360 --> 00:18:12.759
+projects on GitHub right now to have an FFI written in Elisp.
+
+00:18:12.760 --> 00:18:17.239
+So you don't even need to create a separate C or Rust module,
+
+00:18:17.240 --> 00:18:21.679
+because you can actually write native modules in Rust or C.
+
+00:18:21.680 --> 00:18:25.559
+And so you can just have direct bindings to a C FFI written in
+
+00:18:25.560 --> 00:18:27.799
+Elisp. You don't need any C code inside there. And I think
+
+00:18:27.800 --> 00:18:33.699
+that would be an interesting approach to look at as well.
+
+00:18:33.700 --> 00:18:35.839
+Oh, Ramin. Yeah, that's right. We were talking about that,
+
+00:18:35.840 --> 00:18:41.539
+about bootstrapping Scheme.
+
+00:18:41.540 --> 00:18:45.519
+And at this point, we have broken away from, uh, from this
+
+00:18:45.520 --> 00:18:47.399
+talk, but we're continuing to record and this will all be
+
+00:18:47.400 --> 00:18:50.439
+published. I'd say, go ahead and keep going as long as you'd
+
+00:18:50.440 --> 00:18:54.959
+like in here. And, um, thanks once again for the awesome
+
+00:18:54.960 --> 00:18:58.639
+discussion. Thank you so much. So I'll just pay attention to
+
+00:18:58.640 --> 00:19:02.919
+the ether pad and the chat and see.
+
+00:19:02.920 --> 00:19:05.919
+That sounds good. I'll keep an eye on IRC. And if there are
+
+00:19:05.920 --> 00:19:08.559
+more questions here, I'll bounce people toward the ether
+
+00:19:08.560 --> 00:19:12.760
+pad or this, uh, chat room. All right, thank you.
diff --git a/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt
new file mode 100644
index 00000000..ef14c4ae
--- /dev/null
+++ b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt
@@ -0,0 +1,92 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:17.081
+Rune
+
+00:00:17.082 --> 00:00:57.167
+The Emacs core
+
+00:00:57.168 --> 00:01:55.864
+Why create this?
+
+00:01:55.865 --> 00:03:01.314
+How does this compare to other projects?
+
+00:03:01.315 --> 00:03:32.440
+Multi-threading
+
+00:03:32.441 --> 00:03:47.647
+Multi-threading elisp
+
+00:03:47.648 --> 00:04:32.637
+No-GIL method
+
+00:04:32.638 --> 00:04:51.251
+Actors
+
+00:04:51.252 --> 00:05:34.679
+Multi-threading elisp (functions)
+
+00:05:34.680 --> 00:05:57.089
+Caveats
+
+00:05:57.090 --> 00:06:38.248
+Multi-threading elisp (data)
+
+00:06:38.249 --> 00:06:57.883
+Copy values to other threads on demands
+
+00:06:57.884 --> 00:08:11.902
+Multi-threading elisp (buffers)
+
+00:08:11.903 --> 00:08:46.918
+Would this actually be useful?
+
+00:08:46.919 --> 00:09:16.536
+Precise garbage collection
+
+00:09:16.537 --> 00:10:38.712
+How Emacs used to deal with roots
+
+00:10:38.713 --> 00:11:00.156
+Conservative stack scanning
+
+00:11:00.157 --> 00:12:38.828
+Movable objects
+
+00:12:38.829 --> 00:14:13.226
+How Rust makes precise GC easy
+
+00:14:13.227 --> 00:15:14.559
+Other Rust niceties: proc macro
+
+00:15:14.560 --> 00:16:01.040
+sum types
+
+00:16:01.041 --> 00:16:16.051
+Regex
+
+00:16:16.052 --> 00:16:27.209
+Parsers
+
+00:16:27.210 --> 00:16:58.918
+Other changes: GUI first, terminal second
+
+00:16:58.919 --> 00:17:16.304
+Off-screen cursor
+
+00:17:16.305 --> 00:17:24.439
+Image flow
+
+00:17:24.440 --> 00:18:36.344
+Testing
+
+00:18:36.345 --> 00:19:07.246
+Status
+
+00:19:07.247 --> 00:19:22.738
+Next directions
+
+00:19:22.739 --> 00:20:06.000
+How to get involved
diff --git a/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt
new file mode 100644
index 00000000..05826fb8
--- /dev/null
+++ b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt
@@ -0,0 +1,1351 @@
+WEBVTT captioned by sachac, checked by bhavin
+
+NOTE Rune
+
+00:00:00.000 --> 00:00:05.119
+Hello, EmacsConf. My name is Troy Hinckley, and this is my
+
+00:00:05.120 --> 00:00:08.759
+talk on Rune, a Rust implementation in Emacs. We strive to be
+
+00:00:08.760 --> 00:00:11.839
+bug compatible with Emacs, so you can use the same Elisp.
+
+00:00:11.840 --> 00:00:14.879
+It's still a fairly early stage experimental project, and
+
+00:00:14.880 --> 00:00:17.081
+we have some basic things implemented.
+
+NOTE The Emacs core
+
+00:00:17.082 --> 00:00:19.946
+Before I get started, I want to talk a bit more
+
+00:00:19.947 --> 00:00:21.847
+about what the core is.
+
+00:00:21.848 --> 00:00:24.559
+So the Emacs core, it includes the runtime, the interpreter,
+
+00:00:24.560 --> 00:00:26.439
+garbage collector, everything used to run the code.
+
+00:00:26.440 --> 00:00:29.799
+It includes the GUI. It includes all the data structures.
+
+00:00:29.800 --> 00:00:31.919
+If you look underneath all the Elisp data structures,
+
+00:00:31.920 --> 00:00:33.599
+there's C code underneath there,
+
+00:00:33.600 --> 00:00:35.559
+as well as the auxiliary functions
+
+00:00:35.560 --> 00:00:39.239
+of which there's about 1500. In making this talk, I don't
+
+00:00:39.240 --> 00:00:40.919
+want to give the impression that I'm saying the core is
+
+00:00:40.920 --> 00:00:42.879
+outdated or that needs to be replaced or that it can't be
+
+00:00:42.880 --> 00:00:45.519
+evolved on its own, because clearly it has continued to
+
+00:00:45.520 --> 00:00:48.319
+evolve. If we look in just the last few years, we can see that
+
+00:00:48.320 --> 00:00:50.439
+we've added native compilation, we've added tree-sitter
+
+00:00:50.440 --> 00:00:52.759
+support, we've added color emoji, and there's work right
+
+00:00:52.760 --> 00:00:57.167
+now to add a new garbage collector to Emacs as well.
+
+NOTE Why create this?
+
+00:00:57.168 --> 00:01:01.071
+Why create this project? Emacs has a long history.
+
+00:01:01.072 --> 00:01:04.535
+It has a lot of users. It needs to support a big community.
+
+00:01:04.536 --> 00:01:06.837
+Because of that, it has to be very conservative
+
+00:01:06.838 --> 00:01:10.321
+about what things it can allow into the project.
+
+00:01:10.322 --> 00:01:11.639
+Forks like this create an
+
+00:01:11.640 --> 00:01:15.586
+opportunity to experiment and try new approaches.
+
+00:01:15.587 --> 00:01:18.799
+This is particularly a good use case for Rust because the C core,
+
+00:01:18.800 --> 00:01:20.849
+it's pretty well tested. It's been around for a long time.
+
+00:01:20.850 --> 00:01:22.959
+A lot of the bugs have been ironed out, but when you're doing a
+
+00:01:22.960 --> 00:01:26.439
+new greenfield project, it's very easy to introduce new
+
+00:01:26.440 --> 00:01:28.774
+undefined behavior and memory unsafety
+
+00:01:28.775 --> 00:01:32.376
+and stuff like that. Rust protects us from most of that,
+
+00:01:32.377 --> 00:01:34.937
+but it also gives us the ability to be fast
+
+00:01:34.938 --> 00:01:37.883
+and has a strong ecosystem behind it.
+
+00:01:37.884 --> 00:01:40.399
+Rust is also really good at multi-threading.
+
+00:01:40.400 --> 00:01:43.399
+Their phrase in the community is fearless concurrency.
+
+00:01:43.400 --> 00:01:45.559
+They should be able to write concurrent programs without
+
+00:01:45.560 --> 00:01:49.319
+having to worry about data races. It's also really high
+
+00:01:49.320 --> 00:01:51.839
+performance. It has a really good regex engine. It's known
+
+00:01:51.840 --> 00:01:55.864
+for its non-copy I/O as well.
+
+NOTE How does this compare to other projects?
+
+00:01:55.865 --> 00:01:57.479
+How does this compare to other
+
+00:01:57.480 --> 00:01:59.919
+Rust and Emacs projects, whether there's been a couple? The
+
+00:01:59.920 --> 00:02:02.799
+first is Remacs. This project was the first. It took an
+
+00:02:02.800 --> 00:02:05.519
+outside-in approach. Basically you could take a C
+
+00:02:05.520 --> 00:02:09.319
+function and replace it with a Rust function and build it
+
+00:02:09.320 --> 00:02:11.799
+together as one executable. This is pretty easy to do
+
+00:02:11.800 --> 00:02:14.639
+because they could both talk over the C ABI. You could
+
+00:02:14.640 --> 00:02:16.479
+swap out functions once at a time. They made really good
+
+00:02:16.480 --> 00:02:20.279
+progress at first, but eventually they ran into the problem
+
+00:02:20.280 --> 00:02:23.079
+that as you get down to the really core parts of it, you can't
+
+00:02:23.080 --> 00:02:25.919
+just replace one function at a time anymore, because some of
+
+00:02:25.920 --> 00:02:28.159
+that functionality is connected to other things. Like for
+
+00:02:28.160 --> 00:02:30.359
+example, you can't replace the garbage collector without
+
+00:02:30.360 --> 00:02:32.759
+replacing the entire garbage collection system. So the
+
+00:02:32.760 --> 00:02:36.279
+progress really kind of slowed down. Another issue with it
+
+00:02:36.280 --> 00:02:38.839
+was, is that they were doing a one-to-one rewrite, so they
+
+00:02:38.840 --> 00:02:41.079
+weren't adding any new features or functionality, just
+
+00:02:41.080 --> 00:02:43.879
+taking the same code and replacing it in Rust, which doesn't
+
+00:02:43.880 --> 00:02:46.801
+add any advantages in and of itself.
+
+00:02:46.802 --> 00:02:50.399
+This spawned Emacs-NG, which was kind of the spiritual successor to
+
+00:02:50.400 --> 00:02:52.746
+Remacs, where they decided to add new functionality,
+
+00:02:52.747 --> 00:02:55.808
+the biggest one being a JavaScript runtime,
+
+00:02:55.809 --> 00:02:58.230
+as well as some new renderers to Emacs.
+
+00:02:58.231 --> 00:03:01.314
+This is no longer actively developed though.
+
+NOTE Multi-threading
+
+00:03:01.315 --> 00:03:04.079
+In this project, one of the big focuses we have is
+
+00:03:04.080 --> 00:03:07.559
+on multi-threading. The C core itself is, everything is
+
+00:03:07.560 --> 00:03:09.959
+designed around being single-threaded, all the data
+
+00:03:09.960 --> 00:03:13.039
+structures and everything like that. Rust has a great
+
+00:03:13.040 --> 00:03:15.719
+concurrency story. In Rust, everything is intended to be
+
+00:03:15.720 --> 00:03:18.199
+multi-threaded. That doesn't mean that everything has to
+
+00:03:18.200 --> 00:03:20.719
+run on multiple threads, but you can't write something that
+
+00:03:20.720 --> 00:03:22.719
+is limited to only running in a single-threaded
+
+00:03:22.720 --> 00:03:25.799
+environment. So this makes it really easy to use all the
+
+00:03:25.800 --> 00:03:28.039
+existing packages and build something that is
+
+00:03:28.040 --> 00:03:30.480
+concurrency safe. which is what we've done here,
+
+00:03:30.481 --> 00:03:32.440
+and that was relatively easy to do.
+
+NOTE Multi-threading elisp
+
+00:03:32.441 --> 00:03:34.781
+But adding it to Elisp is the hard part,
+
+00:03:34.782 --> 00:03:36.502
+because we've got to come up with a good model
+
+00:03:36.503 --> 00:03:39.624
+for Lisp, and Elisp is just a giant ball
+
+00:03:39.625 --> 00:03:41.479
+of mutable state. We need to find some
+
+00:03:41.480 --> 00:03:44.566
+way to tame that so we can make workable concurrency
+
+00:03:44.567 --> 00:03:47.647
+out of it. There's really two ways you can do this.
+
+NOTE No-GIL method
+
+00:03:47.648 --> 00:03:49.268
+One is what I call the no-GIL method.
+
+00:03:49.269 --> 00:03:51.399
+This is what Python is doing, where
+
+00:03:51.400 --> 00:03:53.919
+you take all of your data structures, you make them
+
+00:03:53.920 --> 00:03:56.439
+concurrency safe, and then you just leave it up to the
+
+00:03:56.440 --> 00:03:58.119
+programmer to decide what they're going to do with it.
+
+00:03:58.120 --> 00:04:00.467
+They've got to build safe abstractions on top of that.
+
+00:04:00.468 --> 00:04:03.086
+One of the big downsides with this is that
+
+00:04:03.087 --> 00:04:05.247
+it comes with a pretty high cost.
+
+00:04:05.248 --> 00:04:07.799
+The last benchmarks I've seen is that by making
+
+00:04:07.800 --> 00:04:10.879
+everything concurrency safe in Python, single-threaded
+
+00:04:10.880 --> 00:04:15.799
+code is about 20% slower in some benchmarks.
+
+00:04:15.800 --> 00:04:19.079
+Since most code is single-threaded, this has a big
+
+00:04:19.080 --> 00:04:21.039
+performance impact for most code that isn't taking
+
+00:04:21.040 --> 00:04:23.719
+advantage of the multi-threading. The other thing is this
+
+00:04:23.720 --> 00:04:26.279
+introduces a lot of nasty concurrency bugs because you can
+
+00:04:26.280 --> 00:04:29.039
+have anything mutating any part of the data from any thread,
+
+00:04:29.040 --> 00:04:32.637
+even if you can't have memory unsafety per se.
+
+NOTE Actors
+
+00:04:32.638 --> 00:04:34.738
+The other option is actors,
+
+00:04:34.739 --> 00:04:36.639
+which are a really known way to approach this,
+
+00:04:36.640 --> 00:04:39.079
+where you trade some of that flexibility that you get
+
+00:04:39.080 --> 00:04:43.719
+with fully concurrent for more control and. Code and
+
+00:04:43.720 --> 00:04:45.839
+functions are shared between all the different threads,
+
+00:04:45.840 --> 00:04:50.599
+but data has to be passed along channels between different
+
+00:04:50.600 --> 00:04:51.251
+actors.
+
+NOTE Multi-threading elisp (functions)
+
+00:04:51.252 --> 00:04:52.919
+We want the functions to be shared, and this
+
+00:04:52.920 --> 00:04:55.159
+should be pretty easy because we don't mutate functions
+
+00:04:55.160 --> 00:05:00.119
+like we do data, except when we do. In Lisp, functions are
+
+00:05:00.120 --> 00:05:03.239
+just lists like anything else. So you can mutate them
+
+00:05:03.240 --> 00:05:06.279
+just like lists. Even if you're not talking about
+
+00:05:06.280 --> 00:05:09.159
+interpreted code, like if you have a native compiled
+
+00:05:09.160 --> 00:05:11.959
+function, you can still mutate the constants inside the
+
+00:05:11.960 --> 00:05:14.839
+function. For example, here we have a function returns a
+
+00:05:14.840 --> 00:05:17.679
+string. We take that string out, we mutate that string, and
+
+00:05:17.680 --> 00:05:23.079
+now the function returns a different string. In Rune, we
+
+00:05:23.080 --> 00:05:24.999
+enforce that all functions, their constants are
+
+00:05:25.000 --> 00:05:27.199
+immutable. You can't mutate the insides of a function. You
+
+00:05:27.200 --> 00:05:29.239
+can still swap out functions and redefine them, but you
+
+00:05:29.240 --> 00:05:32.239
+can't mutate the inside of a function. This enables them
+
+00:05:32.240 --> 00:05:34.679
+to be safely shared across threads.
+
+NOTE Caveats
+
+00:05:34.680 --> 00:05:36.400
+However, there are some caveats to this.
+
+00:05:36.401 --> 00:05:38.159
+For example, some functions actually do
+
+00:05:38.160 --> 00:05:41.439
+need to mutate their own data. The example that we run into is
+
+00:05:41.440 --> 00:05:44.839
+cl-generic. It uses a method cache. So it has to be able to
+
+00:05:44.840 --> 00:05:47.639
+update that cache. In this case, we just made a special
+
+00:05:47.640 --> 00:05:50.799
+case for this particular situation, but we don't know what
+
+00:05:50.800 --> 00:05:53.159
+more of these we're gonna run into the future where this is
+
+00:05:53.160 --> 00:05:57.089
+needed behavior to be able to mutate a function.
+
+NOTE Multi-threading elisp (data)
+
+00:05:57.090 --> 00:05:59.810
+Okay, so functions are pretty easy.
+
+00:05:59.811 --> 00:06:00.919
+They just can be shared between
+
+00:06:00.920 --> 00:06:05.159
+threads, but data can't be immutable, at least not into the
+
+00:06:05.160 --> 00:06:08.759
+model that Emacs currently has. We have two different
+
+00:06:08.760 --> 00:06:12.039
+ways to handle this. One is we require whenever you're
+
+00:06:12.040 --> 00:06:14.399
+calling some other code in a different thread, you have to
+
+00:06:14.400 --> 00:06:17.039
+send all the variables that it's going to need over to that
+
+00:06:17.040 --> 00:06:19.159
+thread. This is how you traditionally do inside actors.
+
+00:06:19.160 --> 00:06:21.919
+Any data that needs to go to a different actor needs to be sent
+
+00:06:21.920 --> 00:06:25.519
+over a channel. It's relatively easy implementation, but
+
+00:06:25.520 --> 00:06:28.159
+this is difficult in the Emacs case because everything is
+
+00:06:28.160 --> 00:06:30.799
+going to be accessing different variables. That means
+
+00:06:30.800 --> 00:06:33.119
+when you call something, you have to know ahead of time, all
+
+00:06:33.120 --> 00:06:34.879
+the different variables that are gonna be accessed inside
+
+00:06:34.880 --> 00:06:38.248
+that other thread and put those in when you call it.
+
+NOTE Copy values to other threads on demands
+
+00:06:38.249 --> 00:06:40.959
+The other option we're using is we're copying values to the
+
+00:06:40.960 --> 00:06:43.439
+other threads on demand. If you're running a thread, it
+
+00:06:43.440 --> 00:06:45.759
+tries to look up a variable. It doesn't have any value for
+
+00:06:45.760 --> 00:06:48.759
+that variable. It will go back and ask the main thread and it
+
+00:06:48.760 --> 00:06:50.959
+will copy that value into that thread and it can continue
+
+00:06:50.960 --> 00:06:53.399
+execution. This is nice because you can just launch some
+
+00:06:53.400 --> 00:06:55.639
+code and it'll take care of handling all the data transfer
+
+00:06:55.640 --> 00:06:57.883
+for you.
+
+NOTE Multi-threading elisp (buffers)
+
+00:06:57.884 --> 00:07:00.359
+But we don't want to be copying around is buffers,
+
+00:07:00.360 --> 00:07:04.199
+because they can be really large. In this case, we have a
+
+00:07:04.200 --> 00:07:07.599
+mutex. Each thread could only have one current buffer that
+
+00:07:07.600 --> 00:07:12.279
+it has an exclusive lock to. This comes with some
+
+00:07:12.280 --> 00:07:16.079
+trade-offs, big one being that if the user tries to access
+
+00:07:16.080 --> 00:07:18.359
+some buffer, they want to type something, and a background
+
+00:07:18.360 --> 00:07:20.239
+thread is holding onto that buffer, what do we do in that
+
+00:07:20.240 --> 00:07:24.959
+situation? And we still need to hold an exclusive lock, even
+
+00:07:24.960 --> 00:07:26.359
+if we're only going to read a buffer. If you have multiple
+
+00:07:26.360 --> 00:07:29.159
+readers, they each still need to take turns because we can't
+
+00:07:29.160 --> 00:07:30.999
+determine if at some point a thread is going to try and mutate
+
+00:07:31.000 --> 00:07:33.879
+the buffer. It has to be an exclusive lock. The other issue
+
+00:07:33.880 --> 00:07:37.799
+is buffer-locals. This is less of a implementation issue
+
+00:07:37.800 --> 00:07:40.519
+as much as it is a technical issue. Because you think about
+
+00:07:40.520 --> 00:07:42.759
+when we switch to a buffer, it has some buffer-local data and
+
+00:07:42.760 --> 00:07:45.399
+we have some thread-local data. As we go through, we're
+
+00:07:45.400 --> 00:07:47.599
+mutating everything. Those can get intertwined and
+
+00:07:47.600 --> 00:07:49.719
+pointing to each other. Then we switch away from that
+
+00:07:49.720 --> 00:07:51.679
+buffer. We need some quick way to be able to separate those
+
+00:07:51.680 --> 00:07:54.279
+out. The buffer-locals can go with the buffer-locals and
+
+00:07:54.280 --> 00:07:56.439
+the thread data can stay with thread data and make copies of
+
+00:07:56.440 --> 00:07:58.719
+anything that was pointing to the other side. But we don't
+
+00:07:58.720 --> 00:08:02.839
+have a good method to determine how to separate those two,
+
+00:08:02.840 --> 00:08:05.359
+like what data belongs to this and what data belongs to this,
+
+00:08:05.360 --> 00:08:08.199
+so that we can do that quickly. We haven't found a good
+
+00:08:08.200 --> 00:08:09.599
+solution to that yet, but it's something we're still
+
+00:08:09.600 --> 00:08:11.902
+working on.
+
+NOTE Would this actually be useful?
+
+00:08:11.903 --> 00:08:13.079
+The question is, would this actually be
+
+00:08:13.080 --> 00:08:15.959
+useful for doing real work inside Emacs? I would say,
+
+00:08:15.960 --> 00:08:17.959
+yes, there's a lot of things you can do with this. You could
+
+00:08:17.960 --> 00:08:20.239
+handle process output in the background. You can do syntax
+
+00:08:20.240 --> 00:08:23.479
+highlighting. You can do buffer search in parallel. You can
+
+00:08:23.480 --> 00:08:26.679
+do LSP. You can do fetching your mail in the background. You
+
+00:08:26.680 --> 00:08:29.639
+can have a window manager that doesn't block your window
+
+00:08:29.640 --> 00:08:32.319
+manager when Emacs is blocked. You could do
+
+00:08:32.320 --> 00:08:34.479
+something like a file system watcher that keeps up on files
+
+00:08:34.480 --> 00:08:37.559
+without blocking Emacs. This wouldn't be so great for
+
+00:08:37.560 --> 00:08:39.159
+building concurrent data structures or operating on
+
+00:08:39.160 --> 00:08:42.199
+shared data or building your own abstractions, because of the
+
+00:08:42.200 --> 00:08:46.039
+trade-offs that we've made here. Okay. That's talking
+
+00:08:46.040 --> 00:08:46.918
+about multi-threading.
+
+NOTE Precise garbage collection
+
+00:08:46.919 --> 00:08:47.599
+The other thing we're going to talk
+
+00:08:47.600 --> 00:08:51.319
+about is precise garbage collection. In Rune, we have a
+
+00:08:51.320 --> 00:08:54.439
+safe, precise garbage collection because of the Rust type
+
+00:08:54.440 --> 00:08:58.119
+system. Let's look at what the problem is with garbage
+
+00:08:58.120 --> 00:09:00.479
+collection in the first place. Really, the tricky part
+
+00:09:00.480 --> 00:09:03.719
+about garbage collection is rooting. How do we find out what
+
+00:09:03.720 --> 00:09:06.159
+the roots are? These are all the values that are on the
+
+00:09:06.160 --> 00:09:08.679
+stack or inside the registers. In this example here, we
+
+00:09:08.680 --> 00:09:11.919
+allocate an object. We call garbage_collect, that object's
+
+00:09:11.920 --> 00:09:13.536
+collected, and then we try and return it.
+
+00:09:13.537 --> 00:09:16.536
+It's no longer valid.
+
+NOTE How Emacs used to deal with roots
+
+00:09:16.537 --> 00:09:19.039
+Let's look at how Emacs used to deal with this
+
+00:09:19.040 --> 00:09:22.559
+problem way back in the day. There was a system called gcpro
+
+00:09:22.560 --> 00:09:26.319
+or GC Protect, which is basically designed that every time a
+
+00:09:26.320 --> 00:09:28.919
+value needed to survive past a garbage collection point,
+
+00:09:28.920 --> 00:09:32.359
+you had to try and protect it. In order to do this, you had
+
+00:09:32.360 --> 00:09:35.439
+to declare a struct, you had to put a macro around it to root
+
+00:09:35.440 --> 00:09:37.999
+the object, and then you had to unroot it when you were done--
+
+00:09:38.000 --> 00:09:41.559
+past the garbage collection. Now the value is safe. You
+
+00:09:41.560 --> 00:09:44.039
+can see down here, I pulled these eight rules out from a
+
+00:09:44.040 --> 00:09:46.919
+really old version of the Emacs manual about all the things
+
+00:09:46.920 --> 00:09:49.279
+you had to keep track of when you were trying to use this
+
+00:09:49.280 --> 00:09:52.319
+system. All right, so there was a special handling for
+
+00:09:52.320 --> 00:09:54.639
+nested GC protects. You had to make sure the memory was
+
+00:09:54.640 --> 00:09:58.239
+initialized. You had to make sure that traps couldn't occur
+
+00:09:58.240 --> 00:10:00.839
+between allocating and when GC protect would happen. It
+
+00:10:00.840 --> 00:10:03.319
+can be tricky because you don't always know when a function
+
+00:10:03.320 --> 00:10:06.879
+that's getting called could potentially call garbage
+
+00:10:06.880 --> 00:10:10.719
+collection. So if you got something wrong, you also
+
+00:10:10.720 --> 00:10:12.719
+might not catch it for a long time because garbage
+
+00:10:12.720 --> 00:10:15.719
+collection may only get called one out of 99 times. The other
+
+00:10:15.720 --> 00:10:18.999
+99 times is just fine. That one time it happens and you
+
+00:10:19.000 --> 00:10:22.559
+can't reproduce the issue. When you do get this wrong and
+
+00:10:22.560 --> 00:10:24.439
+some, something doesn't get rooted and it gets
+
+00:10:24.440 --> 00:10:26.319
+overwritten, it generally doesn't show up right where the
+
+00:10:26.320 --> 00:10:28.799
+problem is. It gets showed up way later when you actually try
+
+00:10:28.800 --> 00:10:31.479
+and access the value and the value is invalid. You've got
+
+00:10:31.480 --> 00:10:33.639
+to track it back to where that thing did not get properly
+
+00:10:33.640 --> 00:10:37.359
+rooted. It's a huge source of bugs and very hard to
+
+00:10:37.360 --> 00:10:38.712
+maintain.
+
+NOTE Conservative stack scanning
+
+00:10:38.713 --> 00:10:40.119
+Emacs decided to go with a different path,
+
+00:10:40.120 --> 00:10:42.399
+which we call conservative stack scanning. Basically,
+
+00:10:42.400 --> 00:10:45.239
+the garbage collector just looks at the stack and all the
+
+00:10:45.240 --> 00:10:47.959
+registers and any data inside there that looks like it could
+
+00:10:47.960 --> 00:10:52.279
+be a pointer, it treats it as a pointer. This is nice because
+
+00:10:52.280 --> 00:10:54.711
+you get really easy root tracking,
+
+00:10:54.712 --> 00:10:56.113
+but it also comes with some trade-offs,
+
+00:10:56.114 --> 00:11:00.156
+mostly that your objects are no longer movable.
+
+NOTE Movable objects
+
+00:11:00.157 --> 00:11:03.079
+Why would we want movable objects in Emacs?
+
+00:11:03.080 --> 00:11:05.839
+There's a couple of different reasons. One is compaction.
+
+00:11:05.840 --> 00:11:08.199
+You can take all your heap, you can pack that on down because
+
+00:11:08.200 --> 00:11:11.239
+you can coalesce all your objects together. Another is that
+
+00:11:11.240 --> 00:11:13.239
+it's easy to implement generational garbage collection.
+
+00:11:13.240 --> 00:11:16.039
+You can just copy everything out of your minor heap into your
+
+00:11:16.040 --> 00:11:21.839
+older heap. Really, Emacs is kind of uniquely ideal for
+
+00:11:21.840 --> 00:11:24.279
+generational collection, because the typical way we
+
+00:11:24.280 --> 00:11:27.799
+interact with Emacs is as a series of commands. You execute
+
+00:11:27.800 --> 00:11:29.959
+some command, you'd execute the next command, you execute
+
+00:11:29.960 --> 00:11:33.199
+a command. It could be happening every key press, it could be
+
+00:11:33.200 --> 00:11:36.759
+happening with M-x. However long that command is, that is
+
+00:11:36.760 --> 00:11:40.959
+the ideal length for the minor collection generation, the
+
+00:11:40.960 --> 00:11:43.399
+first generation. Because once you're done with that
+
+00:11:43.400 --> 00:11:45.879
+generation, anything that's still existing is going to be
+
+00:11:45.880 --> 00:11:49.079
+around for a very long time. So that works out really well
+
+00:11:49.080 --> 00:11:52.279
+for Emacs. We want to make this a generational collector.
+
+00:11:52.280 --> 00:11:56.199
+The other thing is with object layout. We use a lot of lists
+
+00:11:56.200 --> 00:12:00.559
+inside Emacs Lisp. Every time you go to the cdr, you've
+
+00:12:00.560 --> 00:12:03.039
+got to be chasing a pointer around the heap and following
+
+00:12:03.040 --> 00:12:05.439
+that. That can potentially result in cache misses and
+
+00:12:05.440 --> 00:12:08.239
+all sorts of other things like that. So it can take a long
+
+00:12:08.240 --> 00:12:12.159
+time. It can be quite slow. But if you have the ability to move
+
+00:12:12.160 --> 00:12:16.559
+objects, you can just relocate an entire list and lay it out
+
+00:12:16.560 --> 00:12:19.168
+in an array right next to each other inside memory.
+
+00:12:19.169 --> 00:12:22.479
+So iterating over it is just as fast as iterating over an array.
+
+00:12:22.480 --> 00:12:25.421
+But you can only do that if you have movable objects.
+
+00:12:25.422 --> 00:12:28.399
+I'll point out here too, that with conservative stack scanning,
+
+00:12:28.400 --> 00:12:31.599
+it's not that all objects are immovable. It's only ones that
+
+00:12:31.600 --> 00:12:35.519
+are pointed to from the stack or from the registers that have
+
+00:12:35.520 --> 00:12:38.828
+to become immovable.
+
+NOTE How Rust makes precise GC easy
+
+00:12:38.829 --> 00:12:41.039
+Let's look at how Rust makes precise
+
+00:12:41.040 --> 00:12:44.439
+garbage collection easy. Here I have some Rust code to
+
+00:12:44.440 --> 00:12:47.279
+show kind of how the lifetime system works and what we call
+
+00:12:47.280 --> 00:12:49.879
+XOR mutability, where we can only have one mutable
+
+00:12:49.880 --> 00:12:52.879
+reference or multiple immutable references to the same
+
+00:12:52.880 --> 00:12:56.199
+thing. Here we declare a vector, we take a reference to the
+
+00:12:56.200 --> 00:12:59.199
+first element of the vector, and then we mutate the vector.
+
+00:12:59.200 --> 00:13:02.239
+Now this could potentially resize the vector and move it to a
+
+00:13:02.240 --> 00:13:04.919
+different location in memory, so that reference is no
+
+00:13:04.920 --> 00:13:07.759
+longer valid. The nice thing is, Rust catches this for
+
+00:13:07.760 --> 00:13:10.479
+us. It says, hey, this is no longer valid. This reference
+
+00:13:10.480 --> 00:13:14.519
+can't survive past when you mutated it. Okay? That's
+
+00:13:14.520 --> 00:13:17.559
+exactly what we want for a garbage collector. You can see
+
+00:13:17.560 --> 00:13:19.879
+here, we take this in a garbage collection context, we
+
+00:13:19.880 --> 00:13:23.359
+create a new context object, we add an object, we call
+
+00:13:23.360 --> 00:13:26.759
+garbage_collect, then we try and access that object. It's no
+
+00:13:26.760 --> 00:13:29.199
+longer accessible, and Rust will prevent us from trying to
+
+00:13:29.200 --> 00:13:34.839
+access that variable. So, how do we solve this? We have a
+
+00:13:34.840 --> 00:13:39.759
+root macro. We declared this root macro, it lets us take the
+
+00:13:39.760 --> 00:13:41.759
+object and let it live past garbage collection, and
+
+00:13:41.760 --> 00:13:45.319
+everything works out. The nice thing is, this root macro
+
+00:13:45.320 --> 00:13:47.799
+will get dropped when it's out of scope, so we don't have to
+
+00:13:47.800 --> 00:13:51.519
+worry about the un-gc-protect step of this. Statically,
+
+00:13:51.520 --> 00:13:55.799
+Rust will verify and tell us any object that needs to be
+
+00:13:55.800 --> 00:13:58.279
+rooted. If we try and access it, it'll tell us it's invalid.
+
+00:13:58.280 --> 00:14:00.999
+We have this root macro and then we can access it. So in
+
+00:14:01.000 --> 00:14:03.759
+that way, we have safe, precise garbage collection without
+
+00:14:03.760 --> 00:14:07.479
+any chance of introducing undefined behavior, which is
+
+00:14:07.480 --> 00:14:09.999
+really, really powerful. It's really easy because the
+
+00:14:10.000 --> 00:14:13.226
+type system will catch it all for us.
+
+NOTE Other Rust niceties: proc macro
+
+00:14:13.227 --> 00:14:15.147
+There's some other Rust niceties I want to kind of
+
+00:14:15.148 --> 00:14:16.799
+talk through that are useful, but
+
+00:14:16.800 --> 00:14:21.079
+are not, you know, star features. One is proc macros. You
+
+00:14:21.080 --> 00:14:23.679
+can see up on the top, you can see how you declare a function
+
+00:14:23.680 --> 00:14:27.359
+inside the C core. All right. You have to use the macro. You
+
+00:14:27.360 --> 00:14:29.141
+have to put the list type, the function type,
+
+00:14:29.142 --> 00:14:30.963
+the struct type, the different types of arguments
+
+00:14:30.964 --> 00:14:33.225
+or different number of arguments, the doc string,
+
+00:14:33.226 --> 00:14:36.023
+and then you can put your argument listing down inside there.
+
+00:14:36.024 --> 00:14:37.984
+On the Rust side, we just write this like we would
+
+00:14:37.985 --> 00:14:40.044
+any other Rust function. And then we put
+
+00:14:40.045 --> 00:14:41.285
+the defun proc macro on there
+
+00:14:41.286 --> 00:14:44.186
+and it takes care of everything for us behind the scenes.
+
+00:14:44.187 --> 00:14:46.407
+A couple of cool additional things we can do with this
+
+00:14:46.408 --> 00:14:48.727
+is that we don't have to make everything just an object.
+
+00:14:48.728 --> 00:14:49.759
+We can actually make things
+
+00:14:49.760 --> 00:14:54.239
+more specific types. Here we have symbols. As well as
+
+00:14:54.240 --> 00:14:56.279
+you can see subfeature, it's an optional parameter, and we
+
+00:14:56.280 --> 00:15:00.919
+just make it an option inside Rust and it automatically make
+
+00:15:00.920 --> 00:15:03.599
+it an optional inside Elisp.
+
+00:15:03.600 --> 00:15:05.181
+This makes them really easy to write.
+
+00:15:05.182 --> 00:15:06.439
+I can't take credit for this is because this is
+
+00:15:06.440 --> 00:15:09.119
+something that I saw inside Remacs and I stole from them, but
+
+00:15:09.120 --> 00:15:11.439
+it makes the functions really easy to call from each other
+
+00:15:11.440 --> 00:15:14.559
+and really easy to write as well.
+
+NOTE sum types
+
+00:15:14.560 --> 00:15:18.523
+Another thing that's really nice is sum types.
+
+00:15:18.524 --> 00:15:21.039
+In the C core, if I wanted to get a
+
+00:15:21.040 --> 00:15:23.759
+string out of an object, I would first need to check that it's
+
+00:15:23.760 --> 00:15:28.319
+a string and then dereference it as a string. But if it's not a
+
+00:15:28.320 --> 00:15:30.679
+string, I may introduce undefined behavior. So in
+
+00:15:30.680 --> 00:15:32.799
+complicated code, I have to make sure that I have always
+
+00:15:32.800 --> 00:15:34.959
+checked what type it is before I try and dereference that
+
+00:15:34.960 --> 00:15:37.879
+type. We don't have to worry about any of that inside Rust
+
+00:15:37.880 --> 00:15:41.319
+because we can untag a value and we can use their some types,
+
+00:15:41.320 --> 00:15:44.399
+basically create an enum and we can match on what the
+
+00:15:44.400 --> 00:15:47.639
+different values can be. Then we only get out the types
+
+00:15:47.640 --> 00:15:50.359
+that are viable or are actually there. So we never
+
+00:15:50.360 --> 00:15:52.159
+accidentally get something out of an object that we didn't
+
+00:15:52.160 --> 00:15:54.239
+mean to, or dereference it as something that doesn't
+
+00:15:54.240 --> 00:15:56.879
+really exist. We can just match on it and we can get out the
+
+00:15:56.880 --> 00:16:01.040
+values that we need, which is really, really powerful.
+
+NOTE Regex
+
+00:16:01.041 --> 00:16:03.639
+So there's some other Rust niceties as well working with here.
+
+00:16:03.640 --> 00:16:07.799
+One is the regex engine inside Rust is really fast, high
+
+00:16:07.800 --> 00:16:10.959
+performance. We are using that for the Elixir regex
+
+00:16:10.960 --> 00:16:14.879
+engine to give it high performance and worst-case
+
+00:16:14.880 --> 00:16:16.051
+guarantees.
+
+NOTE Parsers
+
+00:16:16.052 --> 00:16:18.599
+The other is that Rust has a lot of really good
+
+00:16:18.600 --> 00:16:21.559
+parsers for things like JSON that are no copy parsers that
+
+00:16:21.560 --> 00:16:24.719
+are high performance. We can use those inside Rune as
+
+00:16:24.720 --> 00:16:27.209
+well.
+
+NOTE Other changes: GUI first, terminal second
+
+00:16:27.210 --> 00:16:29.439
+There's a handful of other changes we're working on
+
+00:16:29.440 --> 00:16:33.119
+that are not Rust-specific, but we'd like to see. The first is
+
+00:16:33.120 --> 00:16:36.759
+being GUI first, terminal second. This means two things.
+
+00:16:36.760 --> 00:16:40.039
+First is that we have all of our key bindings. Right now
+
+00:16:40.040 --> 00:16:43.279
+inside Emacs, C-i and TAB are bound to the same key
+
+00:16:43.280 --> 00:16:45.039
+binding by default, because that's how it works inside the
+
+00:16:45.040 --> 00:16:48.119
+terminal. In the GUI, you shouldn't have that limitation.
+
+00:16:48.120 --> 00:16:52.559
+The second is that the GUI should not block when Lisp is
+
+00:16:52.560 --> 00:16:55.199
+blocked. It should be independent of that. Your GUI can
+
+00:16:55.200 --> 00:16:58.918
+still continue to operate when Lisp is running.
+
+NOTE Off-screen cursor
+
+00:16:58.919 --> 00:17:01.279
+The other is the ability to have an off-screen cursor
+
+00:17:01.280 --> 00:17:02.699
+so that you can be typing on something,
+
+00:17:02.700 --> 00:17:04.319
+you can scroll up and down and the point
+
+00:17:04.320 --> 00:17:06.719
+doesn't have to follow you where you lose your place where
+
+00:17:06.720 --> 00:17:09.399
+you were before. You don't have to intentionally set a mark.
+
+00:17:09.400 --> 00:17:11.199
+You can just scroll and then start typing and it'll go back up
+
+00:17:11.200 --> 00:17:13.879
+to where it was before, like it works in most applications.
+
+00:17:13.880 --> 00:17:16.304
+And this can be optional.
+
+NOTE Image flow
+
+00:17:16.305 --> 00:17:18.079
+The other is image flow. We want it
+
+00:17:18.080 --> 00:17:20.879
+so that you can easily flow images and you can have large
+
+00:17:20.880 --> 00:17:23.159
+images and scroll past them without jumping and you can flow
+
+00:17:23.160 --> 00:17:24.439
+text around images.
+
+NOTE Testing
+
+00:17:24.440 --> 00:17:29.799
+How are we testing this project? Because there's a lot of
+
+00:17:29.800 --> 00:17:33.159
+things that you could get wrong here. One thing we're doing
+
+00:17:33.160 --> 00:17:38.039
+is we're using ERT. Emacs ships with over 7,000 built-in
+
+00:17:38.040 --> 00:17:42.879
+tests--Elisp tests. We are using this test suite to test
+
+00:17:42.880 --> 00:17:45.079
+our project as well. We can kind of use this as a dashboard
+
+00:17:45.080 --> 00:17:47.679
+of saying how close are we to getting to parity with GNU
+
+00:17:47.680 --> 00:17:52.319
+Emacs. The other thing that we have is a tool called elprop,
+
+00:17:52.320 --> 00:17:55.279
+which is an external utility that basically tests for
+
+00:17:55.280 --> 00:17:58.719
+correctness. Because really, the correctness of Rune is
+
+00:17:58.720 --> 00:18:00.999
+whatever Emacs does, because there's no official spec on
+
+00:18:01.000 --> 00:18:04.079
+how things should behave. To do this, we can go look at
+
+00:18:04.080 --> 00:18:07.159
+the Rust function signature. We know what the arguments
+
+00:18:07.160 --> 00:18:09.319
+are, we know how many they are, and we know what types they
+
+00:18:09.320 --> 00:18:11.679
+should be. Given that information, we can generate a
+
+00:18:11.680 --> 00:18:15.279
+whole bunch of random functions feeding those types in. And
+
+00:18:15.280 --> 00:18:18.959
+then we send a copy over to Emacs, we send a copy over to Rune.
+
+00:18:18.960 --> 00:18:21.679
+They each evaluate it and they return the result and we make
+
+00:18:21.680 --> 00:18:23.519
+sure the results are the same. Then you do that for
+
+00:18:23.520 --> 00:18:26.199
+thousands of different implementations of the function.
+
+00:18:26.200 --> 00:18:29.039
+And it helps us find corner cases really easy without having
+
+00:18:29.040 --> 00:18:31.639
+to handwrite a whole bunch of different cases to test things
+
+00:18:31.640 --> 00:18:36.344
+and say, where are these two functions different?
+
+NOTE Status
+
+00:18:36.345 --> 00:18:39.359
+So the current status: we already have a multi-threaded Elixir
+
+00:18:39.360 --> 00:18:42.999
+interpreter and bytecode engine inside there. There's no
+
+00:18:43.000 --> 00:18:45.679
+actual text editor in there yet, but the primitives are
+
+00:18:45.680 --> 00:18:48.679
+there. Like you can insert text, move point around,
+
+00:18:48.680 --> 00:18:52.039
+delete text, do different things like that. But we don't
+
+00:18:52.040 --> 00:18:53.679
+have a GUI hooked up to different key bindings to actually
+
+00:18:53.680 --> 00:18:58.159
+type on. There's just a REPL to operate in. We have about
+
+00:18:58.160 --> 00:19:01.279
+250 of the 1500 built-in functions already implemented
+
+00:19:01.280 --> 00:19:04.119
+inside there. There's a lot of low-hanging fruit inside this
+
+00:19:04.120 --> 00:19:07.246
+area to still be implemented.
+
+NOTE Next directions
+
+00:19:07.247 --> 00:19:07.719
+The next directions we're
+
+00:19:07.720 --> 00:19:11.959
+working on is we're optimizing the GC. We want to make it
+
+00:19:11.960 --> 00:19:13.839
+generational. Like I said, right now, it's just a simple
+
+00:19:13.840 --> 00:19:17.359
+semi-spaced copying GC. We want to add a proper GUI. We need
+
+00:19:17.360 --> 00:19:19.599
+to implement text properties, overlays, process and job
+
+00:19:19.600 --> 00:19:22.738
+control, all that goodness right there.
+
+NOTE How to get involved
+
+00:19:22.739 --> 00:19:25.378
+How can you get involved? This is hosted on GitHub.
+
+00:19:25.379 --> 00:19:26.424
+You can come on over.
+
+00:19:26.425 --> 00:19:28.639
+If you have any ideas about how to implement something or
+
+00:19:28.640 --> 00:19:30.639
+something you'd like to see done, go ahead and just open an
+
+00:19:30.640 --> 00:19:32.799
+issue so we can have a discussion about it. We've had lots of
+
+00:19:32.800 --> 00:19:34.599
+interesting discussions with different people coming in
+
+00:19:34.600 --> 00:19:37.639
+to the GitHub repo. If you're interested in contributing,
+
+00:19:37.640 --> 00:19:40.439
+the easiest way is probably to run elprop, pick some
+
+00:19:40.440 --> 00:19:43.279
+function, run elprop on it. I promise it won't take long to
+
+00:19:43.280 --> 00:19:45.639
+find some issues, some discrepancy between Emacs and Rune,
+
+00:19:45.640 --> 00:19:48.959
+and that lets you dive into the Rust code and figure out, and
+
+00:19:48.960 --> 00:19:50.879
+the C code, and figure out what the difference is between the
+
+00:19:50.880 --> 00:19:53.119
+two. or come along and help implement your favorite
+
+00:19:53.120 --> 00:19:55.679
+functionality. This has been a really interesting project
+
+00:19:55.680 --> 00:19:58.359
+so far, and we've had a handful of different contributors on
+
+00:19:58.360 --> 00:20:01.799
+it who just kind of want to learn Rust or get more into
+
+00:20:01.800 --> 00:20:06.000
+systems-level programming. Thank you.
diff --git a/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt
new file mode 100644
index 00000000..b75132d7
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:00.007 --> 00:00:06.125
+General and Development tracks
+
+00:00:06.126 --> 00:00:59.965
+Watching and participating
+
+00:00:59.966 --> 00:02:30.001
+Questions and answers
+
+00:02:30.002 --> 00:03:02.056
+Etherpad
+
+00:03:02.057 --> 00:03:46.229
+Internet Relay Chat
+
+00:03:46.230 --> 00:04:07.334
+Open captions
+
+00:04:07.335 --> 00:04:18.928
+Status
+
+00:04:18.929 --> 00:04:26.423
+Conduct
+
+00:04:26.424 --> 00:04:37.332
+Recordings
+
+00:04:37.333 --> 00:04:42.248
+emacsconf-discuss updates
+
+00:04:42.249 --> 00:04:59.991
+Let's go!
diff --git a/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt
new file mode 100644
index 00000000..b7e47d82
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt
@@ -0,0 +1,367 @@
+WEBVTT
+
+00:00.007 --> 00:03.484
+Welcome to EmacsConf 2024, where we have fun
+
+00:03.485 --> 00:06.125
+exploring how much we can do with a text editor.
+
+00:06.126 --> 00:08.161
+It's hard to give a general overview
+
+00:08.162 --> 00:10.039
+of all the cool talks today and tomorrow,
+
+00:10.040 --> 00:11.237
+so you can flip through the talks
+
+00:11.238 --> 00:12.902
+and see what sparks your interests.
+
+00:12.903 --> 00:15.334
+Don't feel limited to one track or another.
+
+00:15.335 --> 00:18.492
+The best parts of EmacsConf are the conversations.
+
+00:18.493 --> 00:21.290
+The wiki has a page on how to watch and participate,
+
+00:21.291 --> 00:23.688
+and I'll give you a quick overview as well.
+
+00:23.689 --> 00:26.886
+You can watch both streams at live.emacsconf.org
+
+00:26.887 --> 00:29.364
+using free and open source software.
+
+00:29.365 --> 00:31.442
+Using a streaming media player like mpv
+
+00:31.443 --> 00:34.640
+seems to be the best way to watch in terms of performance
+
+00:34.641 --> 00:36.359
+but there are also web-based players
+
+00:36.360 --> 00:37.917
+just in case that's all you've got.
+
+00:37.918 --> 00:39.915
+The schedule shows the General track on top
+
+00:39.916 --> 00:41.533
+and the Development track on the bottom,
+
+00:41.534 --> 00:43.631
+so you can see what else is going on.
+
+00:43.632 --> 00:45.168
+As you're watching the talks,
+
+00:45.169 --> 00:47.488
+you can refer to the schedule in another window.
+
+00:47.489 --> 00:50.406
+Hover over the boxes to see the times and titles,
+
+00:50.407 --> 00:52.044
+and click on the boxes in the schedule
+
+00:52.045 --> 00:54.643
+to jump to the talk's page for more details.
+
+00:54.644 --> 00:57.821
+You can also get the schedule as an iCalendar file
+
+00:57.822 --> 00:59.965
+or as an Org file in different time zones.
+
+00:59.966 --> 01:01.438
+Many talks will be followed by
+
+01:01.439 --> 01:04.076
+live Q&A web conferences with the speaker,
+
+01:04.077 --> 01:06.583
+which will be done in BigBlueButton or BBB.
+
+01:06.584 --> 01:09.333
+These are indicated with a solid border on the schedule
+
+01:09.334 --> 01:12.482
+and by Q&A: BBB on the schedule page.
+
+01:12.483 --> 01:14.410
+You can join the web conference room
+
+01:14.411 --> 01:15.989
+by clicking on the BBB link
+
+01:15.990 --> 01:18.747
+on the schedule page or the talk's webpage.
+
+01:18.748 --> 01:21.846
+Then you can ask your questions yourself when the Q&A starts.
+
+01:21.847 --> 01:24.824
+To improve performance, please keep your webcam off
+
+01:24.825 --> 01:27.043
+and stay muted until it's your turn to talk.
+
+01:27.044 --> 01:28.261
+If you don't like Javascript,
+
+01:28.262 --> 01:30.259
+you can still ask questions via IRC
+
+01:30.260 --> 01:32.434
+and the hosts can read them out for you.
+
+01:32.435 --> 01:34.192
+We're probably going to automatically switch
+
+01:34.193 --> 01:36.190
+between talks and Q&A sessions,
+
+01:36.191 --> 01:38.868
+so the transitions on the stream might be a little sudden.
+
+01:38.869 --> 01:40.387
+People in the BigBlueButton room
+
+01:40.388 --> 01:42.025
+can continue the conversation
+
+01:42.026 --> 01:44.463
+even after the talk moves off-stream.
+
+01:44.464 --> 01:46.181
+and you can also reach out to the speakers
+
+01:46.182 --> 01:48.724
+using the contact information on the talk page.
+
+01:48.725 --> 01:52.222
+Other talks will have Q&A via Etherpad or IRC,
+
+01:52.223 --> 01:54.180
+depending on what the speakers prefer.
+
+01:54.181 --> 01:56.738
+This is indicated in the schedule with a dashed border
+
+01:56.739 --> 01:58.264
+and on the schedule page as well.
+
+01:58.265 --> 01:59.603
+As an experiment,
+
+01:59.604 --> 02:02.002
+the Q&A for the mcclim talk this afternoon
+
+02:02.003 --> 02:03.881
+will also be in LambdaMOO.
+
+02:03.882 --> 02:05.040
+If you'd like to try it out,
+
+02:05.041 --> 02:07.039
+see the mcclim talk page for instructions
+
+02:07.040 --> 02:08.759
+so you can join the discussion there.
+
+02:08.760 --> 02:11.557
+The schedule pages and track pages have quick shortcuts
+
+02:11.558 --> 02:14.675
+so that you can find out more about talks, open the Etherpads,
+
+02:14.676 --> 02:16.402
+and join the Q&A sessions.
+
+02:16.403 --> 02:18.192
+The watch page has more tips
+
+02:18.193 --> 02:19.731
+on how to make the most of Q&A.
+
+02:19.732 --> 02:22.609
+If you can, please add notes and ask questions
+
+02:22.610 --> 02:25.087
+in the Etherpad for the talk. That makes it easier
+
+02:25.088 --> 02:26.725
+for everyone to share their notes,
+
+02:26.726 --> 02:29.603
+and speakers and hosts can read the questions from there.
+
+02:29.604 --> 02:31.841
+We'll copy the notes to the talk pages afterwards.
+
+02:31.842 --> 02:33.719
+We have one pad for each talk,
+
+02:33.720 --> 02:36.197
+so you can follow the links to get to the next one
+
+02:36.198 --> 02:39.115
+or go back to the schedule and get the link from there.
+
+02:39.116 --> 02:40.633
+If you have general feedback about
+
+02:40.634 --> 02:42.791
+the conference itself, please put it in
+
+02:42.792 --> 02:47.389
+pad.emacsconf.org/2024 , which is linked on each pad.
+
+02:47.390 --> 02:49.547
+You can also use this as a general community message board
+
+02:49.548 --> 02:51.786
+for things like Help Wanted.
+
+02:51.787 --> 02:54.864
+Internet Relay Chat or IRC can be another great way
+
+02:54.865 --> 02:56.982
+to be part of lots of conversations.
+
+02:56.983 --> 03:01.180
+You can use chat.emacsconf.org to join the IRC channels
+
+03:01.181 --> 03:02.712
+through your web browser.
+
+03:02.713 --> 03:04.657
+The tabs on the left can help you
+
+03:04.658 --> 03:06.775
+switch between the different channels.
+
+03:06.776 --> 03:09.453
+There's #emacsconf-gen for the General track
+
+03:09.454 --> 03:12.171
+and #emacsconf-dev for the Development track.
+
+03:12.172 --> 03:16.089
+If you need to reach us, you can join #emacsconf-org
+
+03:16.090 --> 03:21.248
+or e-mail emacsconf-org-private@gnu.org.
+
+03:21.249 --> 03:25.205
+You can use #emacsconf for hallway conversations.
+
+03:25.206 --> 03:27.283
+Of course, you can join any of these channels
+
+03:27.284 --> 03:29.182
+with your favourite IRC client
+
+03:29.183 --> 03:32.080
+by connecting to irc.libera.chat
+
+03:32.081 --> 03:35.959
+port 6697 using TLS.
+
+03:35.960 --> 03:38.597
+Once again, we're going to be streaming with open captions
+
+03:38.598 --> 03:41.355
+for most of the talks this year, thanks to our speakers and
+
+03:41.356 --> 03:44.793
+captioning volunteers. The captioned talks are indicated
+
+03:44.794 --> 03:47.231
+on the schedule, and with any luck, we'll be posting
+
+03:47.232 --> 03:50.709
+transcripts on talk pages shortly after the talks start.
+
+03:50.710 --> 03:52.307
+If you need additional accommodations,
+
+03:52.308 --> 03:54.566
+please let us know in #emacsconf-org
+
+03:54.567 --> 03:57.064
+and we'll see if we can make things happen.
+
+03:57.065 --> 04:00.942
+If something goes down, we'll update status.emacsconf.org.
+
+04:00.943 --> 04:02.700
+If it doesn't look like we've noticed yet,
+
+04:02.701 --> 04:06.099
+please let us know in the #emacsconf-org IRC channel,
+
+04:06.100 --> 04:08.658
+where we will be quietly panicking.
+
+04:08.659 --> 04:11.216
+In all of these conversations, please keep in mind
+
+04:11.217 --> 04:13.534
+our guidelines for conduct. You can find them on the wiki.
+
+04:13.535 --> 04:16.153
+They basically boil down to: please be nice.
+
+04:16.154 --> 04:18.430
+If all goes well, the prerecorded talks and transcripts
+
+04:18.431 --> 04:20.348
+should be available from the talk pages
+
+04:20.349 --> 04:21.906
+shortly after they start playing,
+
+04:21.907 --> 04:24.304
+and we'll post the recordings of live talks
+
+04:24.305 --> 04:27.062
+and Q&A sessions within the next month or so.
+
+04:27.063 --> 04:29.300
+If you'd like to get an update, you can subscribe to
+
+04:29.301 --> 04:31.978
+the emacsconf-discuss mailing list.
+
+04:31.979 --> 04:33.056
+All right, let's get going.
+
+04:33.057 --> 04:34.974
+Leo is hosting the general track,
+
+04:34.975 --> 04:36.772
+and Corwin is hosting the development track.
+
+04:36.773 --> 04:39.850
+The other volunteers and I will run around mostly backstage,
+
+04:39.851 --> 04:41.888
+and you'll probably meet us in the closing remarks.
+
+04:41.889 --> 04:43.326
+That's also where we get to thank
+
+04:43.327 --> 04:45.124
+all the people and organizations
+
+04:45.125 --> 04:46.322
+who make EmacsConf possible.
+
+04:46.323 --> 04:49.721
+Thanks for coming to EmacsConf 2024.
diff --git a/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt
new file mode 100644
index 00000000..01d22a35
--- /dev/null
+++ b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:03:23.309
+Introduction
+
+00:03:23.310 --> 00:07:39.187
+Q&A technical issues
+
+00:07:39.188 --> 00:08:08.531
+Q: Can you describe some potential interactive uses for this within Emacs?
+
+00:08:08.532 --> 00:09:12.066
+Q: Is this saved in the repo or file as \"run sops here\" or is the encrypted blob in the git repo?
+
+00:09:12.067 --> 00:10:23.629
+Q: How do you decide whether to use SOPS or other solutions such as pass-cli?
+
+00:10:23.630 --> 00:11:11.982
+Q: One limitation with guix (similar package manager to nix) is there is no great way of storing secrets in the store, would SOPS be useful for this?
+
+00:11:11.983 --> 00:11:49.438
+Q: Wacky question: what happens in sops-mode if you encrypt the already encrypted file as if it was plaintext?
+
+00:11:49.439 --> 00:14:57.085
+Q: can you describe some potential interactive uses for this within Emacs
diff --git a/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt
new file mode 100644
index 00000000..fd90802a
--- /dev/null
+++ b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt
@@ -0,0 +1,725 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:01.349
+Yeah, my talk is committing
+
+00:00:01.350 --> 00:00:10.189
+secrets with Git via SOPS mode. So what is SOPS? SOPS
+
+00:00:10.190 --> 00:00:15.069
+came originally from Mozilla, and their acronym was Secret
+
+00:00:15.070 --> 00:00:19.669
+Operations, so S-O-P-S. It's a utility that allows you to
+
+00:00:19.670 --> 00:00:24.269
+encrypt pretty much any file you want and then have the
+
+00:00:24.270 --> 00:00:27.869
+ability to commit it or just share it with somebody that has
+
+00:00:27.870 --> 00:00:32.709
+the ability to decrypt it. I've mostly used it with AWS KMS,
+
+00:00:32.710 --> 00:00:36.829
+but there's a number of encryptions, ways you can encrypt
+
+00:00:36.830 --> 00:00:41.909
+it. Um, so yeah, that's what SOPS mode is. Most of the
+
+00:00:41.910 --> 00:00:45.709
+time I've used it is with application or deployment
+
+00:00:45.710 --> 00:00:48.269
+secrets--decrypt them on the fly during a
+
+00:00:48.270 --> 00:00:52.109
+pipeline run and then use them. We've also
+
+00:00:52.110 --> 00:00:56.549
+been using it for kind of a self-service for engineers
+
+00:00:56.550 --> 00:00:59.629
+to be able to say, if there's an API token that they
+
+00:00:59.630 --> 00:01:03.429
+need either in the container or that gets put
+
+00:01:03.430 --> 00:01:09.109
+somewhere else, that's another way to use SOPS.
+
+00:01:09.110 --> 00:01:13.949
+Just sharing secrets. The tooling, there's
+
+00:01:13.950 --> 00:01:16.814
+quite a bit of tooling for Terraform.
+
+00:01:16.815 --> 00:01:19.090
+You can just decrypt it and then use it
+
+00:01:19.091 --> 00:01:21.309
+however you want. Ansible, it's another
+
+00:01:21.310 --> 00:01:23.648
+place, and then Kubernetes...
+
+00:01:23.649 --> 00:01:26.124
+There'll be links at the very end.
+
+00:01:26.125 --> 00:01:28.982
+There's actually a Nix SOPS too.
+
+00:01:28.983 --> 00:01:30.237
+I think there's a link in the end.
+
+00:01:30.238 --> 00:01:32.830
+So yeah, I'll just show a quick demo.
+
+00:01:32.831 --> 00:01:35.286
+I'll actually show it in Emacs too,
+
+00:01:35.287 --> 00:01:36.983
+but this is the idea.
+
+00:01:36.984 --> 00:01:39.450
+I'm just going to create a file
+
+00:01:39.451 --> 00:01:42.051
+and then I'm going to encrypt it with age.
+
+00:01:42.052 --> 00:01:46.874
+Then we should see the encrypted file
+
+00:01:46.875 --> 00:01:53.189
+be output here. The idea is you can decrypt it
+
+00:01:53.190 --> 00:01:59.349
+there. So my talk was... the reason how my
+
+00:01:59.350 --> 00:02:04.429
+talk came about was there was no mode like this yet.
+
+00:02:04.430 --> 00:02:08.829
+So I didn't want to have to...
+
+00:02:08.830 --> 00:02:10.269
+What you can do is you can pass
+
+00:02:10.270 --> 00:02:13.029
+in the editor variable, set your Emacs,
+
+00:02:13.030 --> 00:02:16.441
+then call the command, but that opens
+
+00:02:16.442 --> 00:02:20.589
+a whole new window. I wanted to live in my
+
+00:02:20.590 --> 00:02:22.994
+current Emacs. So this is that
+
+00:02:22.995 --> 00:02:25.555
+same encrypted file that we just created.
+
+00:02:25.556 --> 00:02:28.566
+I'm going to quickly do C-c C-d.
+
+00:02:28.567 --> 00:02:32.309
+So now we're in the SOPS decrypted mode of the
+
+00:02:32.310 --> 00:02:38.057
+file. I can save this, or make changes and save it.
+
+00:02:38.058 --> 00:02:39.963
+And then it resaves it.
+
+00:02:39.964 --> 00:02:42.918
+I'll just show you that decrypting it
+
+00:02:42.919 --> 00:02:44.629
+shows what we changed.
+
+00:02:44.630 --> 00:02:52.831
+I think that's most of my talk.
+
+00:02:52.832 --> 00:02:55.882
+There's future stuff that I would like to do
+
+00:02:55.883 --> 00:03:00.447
+with this. There's no way to create SOPS files
+
+00:03:00.448 --> 00:03:03.191
+from scratch. And then just putting more
+
+00:03:03.192 --> 00:03:06.069
+documentation around the other ways you can
+
+00:03:06.070 --> 00:03:14.029
+set up your editor to decrypt. But yeah,
+
+00:03:14.030 --> 00:03:19.109
+here's all the links. I haven't uploaded
+
+00:03:19.110 --> 00:03:23.309
+this yet, but yeah, that is my talk.
+
+NOTE Q&A technical issues
+
+00:03:23.310 --> 00:03:27.770
+[Leo] Okay. Thank you, Jonathan.
+
+00:03:27.771 --> 00:03:32.692
+Let me just make sure. So everything you've mentioned
+
+00:03:32.693 --> 00:03:34.887
+about putting stuff available to everyone,
+
+00:03:34.888 --> 00:03:36.469
+we'll make sure that everything
+
+00:03:36.470 --> 00:03:38.513
+ends up on the pad and on the website,
+
+00:03:38.514 --> 00:03:40.850
+so don't worry. Let me see if we can get up
+
+00:03:40.851 --> 00:03:41.753
+the pad for you.
+
+00:03:41.754 --> 00:03:43.284
+Do you have any preference with regards
+
+00:03:43.285 --> 00:03:45.467
+to the questions? Do you want to read them yourself
+
+00:03:45.468 --> 00:03:50.121
+or do you want one of us to read them for you?
+
+00:03:50.122 --> 00:03:53.389
+[Jonathan]: I'm okay with talking first,
+
+00:03:53.390 --> 00:03:57.461
+saying it out loud if there are some.
+
+00:03:57.462 --> 00:04:00.749
+[Leo]: Sure. Let me just find you the pads.
+
+00:04:00.750 --> 00:04:02.757
+Where is it? There you go.
+
+00:04:02.758 --> 00:04:05.409
+Do you have access to the pad on your end?
+
+00:04:05.410 --> 00:04:06.153
+Yep.
+
+00:04:06.154 --> 00:04:09.549
+Okay. Well, if you, since you're already showing
+
+00:04:09.550 --> 00:04:12.389
+your screen, if you can maybe switch the window to the one
+
+00:04:12.390 --> 00:04:13.435
+that is hosting the pad
+
+00:04:13.436 --> 00:04:15.814
+and feel free to start answering questions.
+
+00:04:15.815 --> 00:04:16.262
+Yep.
+
+00:04:16.263 --> 00:04:20.109
+It didn't look like we have any yet, but...
+
+00:04:20.110 --> 00:04:21.942
+Well, there's still coming, don't worry.
+
+00:04:21.943 --> 00:04:29.149
+We're just waiting for people to catch up.
+
+00:04:29.150 --> 00:04:31.533
+I probably need to make it bigger.
+
+00:04:31.534 --> 00:04:34.460
+Is it big enough or do I need to make it bigger?
+
+00:04:34.461 --> 00:04:40.247
+Right now, it's just a black screen on my end, so...
+
+00:04:40.248 --> 00:04:45.269
+Oh, wow. Weird. I can see it on mine, weirdly.
+
+00:04:45.270 --> 00:04:47.536
+Maybe it's just me. Let me check here.
+
+00:04:47.537 --> 00:04:48.989
+No, it seems to be just a
+
+00:04:48.990 --> 00:04:50.069
+black square, even on the stream.
+
+00:04:50.070 --> 00:05:00.927
+Try it again. That change at all? No, it's still black.
+
+00:05:00.928 --> 00:05:02.743
+Can you maybe start switching window
+
+00:05:02.744 --> 00:05:04.069
+and coming back to the one?
+
+00:05:04.070 --> 00:05:08.869
+Otherwise, I'll just stream it on my end.
+
+00:05:08.870 --> 00:05:13.629
+Yeah. All right, I'll do it. I'll take presenter in just a
+
+00:05:13.630 --> 00:05:22.229
+second. Yeah, sorry about that. Thank you.
+
+00:05:22.230 --> 00:05:27.069
+If I can take presenter, and I will share the screen.
+
+00:05:27.070 --> 00:05:36.749
+Sorry, I'm just trying to find a chat. There we go.
+
+00:05:36.750 --> 00:05:39.509
+Normally, I'm not supposed to be on the dev track, which is
+
+00:05:39.510 --> 00:05:42.309
+why I'm confusing all my windows. Give me just a second.
+
+00:05:42.310 --> 00:05:53.709
+Shell, casual. So we are on the dev track, and it is this
+
+00:05:53.710 --> 00:05:54.189
+one.
+
+00:05:54.190 --> 00:06:08.229
+There we go. No, that's not a guide, damn it. Secrets.
+
+00:06:08.230 --> 00:06:10.109
+And...
+
+00:06:10.110 --> 00:06:15.509
+There we go, finally.
+
+00:06:15.510 --> 00:06:19.109
+Ah. Probably just for the delay, do some jazz hands in the
+
+00:06:19.110 --> 00:06:20.889
+background as we did in the start.
+
+00:06:20.890 --> 00:06:23.600
+It feels like Yordle[??] Castle this year,
+
+00:06:23.601 --> 00:06:25.462
+where nothing works properly.
+
+00:06:25.463 --> 00:06:26.269
+That's right.
+
+00:06:26.270 --> 00:06:39.149
+All right. There we go. It's loading up. Obviously.
+
+00:06:39.150 --> 00:06:44.189
+There we go.
+
+00:06:44.190 --> 00:06:49.189
+All right. You should be able to see my screen now. Yep. All
+
+00:06:49.190 --> 00:06:53.789
+right. So, well, we've gone so far. Oh, it did stop. Damn it.
+
+00:06:53.790 --> 00:07:02.989
+Sorry, now it's BBB not behaving properly. That's right.
+
+00:07:02.990 --> 00:07:10.309
+Okay, let me just join, leave and join again. Okay. I just did
+
+00:07:10.310 --> 00:07:11.909
+exactly that for what it's worth.
+
+00:07:11.910 --> 00:07:26.189
+Nothing. All right.
+
+00:07:26.190 --> 00:07:29.029
+All right, I seem to be back. Let me show. And there we go.
+
+00:07:29.030 --> 00:07:36.909
+All right, everything is working. I'm not touching
+
+00:07:36.910 --> 00:07:39.187
+anything. So. Cool.
+
+NOTE Q: Can you describe some potential interactive uses for this within Emacs?
+
+00:07:39.188 --> 00:07:43.629
+Yeah, I'll just start with the top. Can
+
+00:07:43.630 --> 00:07:47.349
+you describe some potential interactive uses for this with
+
+00:07:47.350 --> 00:07:52.789
+an Emacs? Um, I'm, I'm not actually sure what this means.
+
+00:07:52.790 --> 00:08:01.029
+Could we, could you add some more context maybe? Or, um,
+
+00:08:01.030 --> 00:08:03.549
+I think we'll maybe come back to that one. I'm not sure what,
+
+00:08:03.550 --> 00:08:08.531
+uh, potential interactive uses mean, but.
+
+NOTE Q: Is this saved in the repo or file as \"run sops here\" or is the encrypted blob in the git repo?
+
+00:08:08.532 --> 00:08:10.429
+Yep. Uh, is this
+
+00:08:10.430 --> 00:08:18.749
+saved in the repo or file as run SOPs here? Oh, encrypted.
+
+00:08:18.750 --> 00:08:24.829
+They're saved as just text files so that you can do
+
+00:08:24.830 --> 00:08:28.103
+SOPs and encrypt like a binary. I think in the end,
+
+00:08:28.104 --> 00:08:30.819
+no matter what, they become just a text file,
+
+00:08:30.820 --> 00:08:34.520
+and then it does the encoding and decoding on the fly
+
+00:08:34.521 --> 00:08:36.753
+when you encrypt or decrypt. So no matter
+
+00:08:36.754 --> 00:08:41.984
+what it's going to be, I think it might just be
+
+00:08:41.985 --> 00:08:44.989
+a JSON in the end. Uh, so yeah.
+
+00:08:44.990 --> 00:08:56.309
+I'll try to, well, I can type out that answer, but all
+
+00:08:56.310 --> 00:08:56.855
+right.
+
+00:08:56.856 --> 00:08:59.429
+Don't worry about typing it out.
+
+00:08:59.430 --> 00:09:00.989
+We are gathering the
+
+00:09:00.990 --> 00:09:04.069
+recordings at the end, you know, even answers that are not
+
+00:09:04.070 --> 00:09:05.782
+provided, we'll type them out eventually.
+
+00:09:05.783 --> 00:09:09.029
+So don't stress too much about the actual answers being written.
+
+00:09:09.030 --> 00:09:12.066
+Okay. All right. So I'll go to the third one.
+
+NOTE Q: How do you decide whether to use SOPS or other solutions such as pass-cli?
+
+00:09:12.067 --> 00:09:13.189
+How do you decide
+
+00:09:13.190 --> 00:09:18.949
+whether to use SOPS or other solutions such as pass-cli?
+
+00:09:18.950 --> 00:09:24.469
+The biggest use case that I've been using it recently is,
+
+00:09:24.470 --> 00:09:29.109
+Bitbucket has a way to... In a repository,
+
+00:09:29.110 --> 00:09:35.829
+you can store non-secrets and secrets. So
+
+00:09:35.830 --> 00:09:39.549
+we're trying to move the secrets into the repository
+
+00:09:39.550 --> 00:09:43.109
+and then allow the engineers to have
+
+00:09:43.110 --> 00:09:48.789
+access to that.
+
+00:09:48.790 --> 00:09:52.389
+Bitbucket variables is a black box. Since the devs can
+
+00:09:52.390 --> 00:09:56.841
+access it, it's manual work for everybody
+
+00:09:56.842 --> 00:10:00.869
+that has to deal with it. Since we're moving
+
+00:10:00.870 --> 00:10:04.339
+SOPS-encrypted files into the repo,
+
+00:10:04.340 --> 00:10:06.830
+now there's that trackability
+
+00:10:06.831 --> 00:10:10.942
+from who made the change and what it changed from,
+
+00:10:10.943 --> 00:10:16.589
+what did it go to, and just things like that.
+
+00:10:16.590 --> 00:10:23.629
+You can use it anytime you'd want to commit them.
+
+NOTE Q: One limitation with guix (similar package manager to nix) is there is no great way of storing secrets in the store, would SOPS be useful for this?
+
+00:10:23.630 --> 00:10:32.029
+One limitation with GUIX is there's no great way to store
+
+00:10:32.030 --> 00:10:36.869
+secrets in the store. Yeah, I think, sorry... Let me. One
+
+00:10:36.870 --> 00:10:40.189
+limitation of GUIX is there's no way to store secrets in the
+
+00:10:40.190 --> 00:10:42.108
+store. Would SOPS be useful for this?
+
+00:10:42.109 --> 00:10:44.829
+I think so, but I don't know how
+
+00:10:44.830 --> 00:10:48.869
+that package manager works, if it's just like
+
+00:10:48.870 --> 00:10:52.989
+some sort of "you decrypt and then you run the package
+
+00:10:52.990 --> 00:10:56.109
+manager," then yeah, that's a lot of our workflows.
+
+00:10:56.110 --> 00:10:58.989
+If we're doing a deployment and the container
+
+00:10:58.990 --> 00:11:01.629
+needs it, we'll decrypt, put that in
+
+00:11:01.630 --> 00:11:03.829
+whatever place, or source it if it's an
+
+00:11:03.830 --> 00:11:06.629
+environment file for the container, and then
+
+00:11:06.630 --> 00:11:11.982
+pass it in. I think it'd be a great choice there.
+
+NOTE Q: Wacky question: what happens in sops-mode if you encrypt the already encrypted file as if it was plaintext?
+
+00:11:11.983 --> 00:11:17.069
+A wacky question. What happens in sops mode if you
+
+00:11:17.070 --> 00:11:21.709
+encrypt an already encrypted file as if it was plain text?
+
+00:11:21.710 --> 00:11:24.949
+You know, I might have actually accidentally did that
+
+00:11:24.950 --> 00:11:29.709
+today. I didn't actually see the resulting file. But that's
+
+00:11:29.710 --> 00:11:31.709
+a great question.
+
+00:11:31.710 --> 00:11:38.189
+Well, it's technically still binary, isn't it, at the end?
+
+00:11:38.190 --> 00:11:40.389
+You've got binary stuff that is being encrypted
+
+00:11:40.390 --> 00:11:42.949
+again. It's just double encryption.
+
+00:11:42.950 --> 00:11:44.842
+I'm pretty sure it works.
+
+00:11:44.843 --> 00:11:48.869
+Yeah, probably. I'm going to go back up to the
+
+00:11:48.870 --> 00:11:49.438
+top one.
+
+NOTE Q: can you describe some potential interactive uses for this within Emacs
+
+00:11:49.439 --> 00:11:52.469
+Can you describe some potential interactive uses
+
+00:11:52.470 --> 00:11:57.349
+for this within Emacs? Is there some other activity that
+
+00:11:57.350 --> 00:12:01.909
+would enable or it would be enabled with SOPS decryption
+
+00:12:01.910 --> 00:12:12.529
+first, like an IT configuration task.
+
+00:12:12.530 --> 00:12:18.509
+So in the README right now,
+
+00:12:18.510 --> 00:12:22.629
+there is a block and it's called SOPS setup
+
+00:12:22.630 --> 00:12:27.687
+environment. I think it's a hook. Don't quote me.
+
+00:12:27.688 --> 00:12:29.596
+I haven't touched it in a while.
+
+00:12:29.597 --> 00:12:32.051
+I think that hook runs prior to
+
+00:12:32.052 --> 00:12:35.349
+doing any sort of decryption or encryption.
+
+00:12:35.350 --> 00:12:40.654
+So there's an example in the README for ways
+
+00:12:40.655 --> 00:12:44.669
+that you can set up your SOPS mode for AWS.
+
+00:12:44.670 --> 00:12:51.136
+You can set the profile. It was actually
+
+00:12:51.137 --> 00:12:58.829
+a pretty fun thing to add because with that bit of code,
+
+00:12:58.830 --> 00:13:01.199
+I can pretty much go to any one of our repos
+
+00:13:01.200 --> 00:13:04.085
+and decrypt and encrypt on the fly and
+
+00:13:04.086 --> 00:13:06.749
+not have to do much fanfare of like,
+
+00:13:06.750 --> 00:13:09.269
+well, what account or what profile
+
+00:13:09.270 --> 00:13:12.324
+do I need to switch to? I haven't looked at
+
+00:13:12.325 --> 00:13:15.309
+GCP yet or Azure, and that's kind of one of
+
+00:13:15.310 --> 00:13:19.079
+my future things. I need to maybe look into those
+
+00:13:19.080 --> 00:13:21.055
+to see what they look like
+
+00:13:21.056 --> 00:13:23.909
+and give example configs to help users.
+
+00:13:23.910 --> 00:13:28.993
+Hopefully that answered your question.
+
+00:13:28.994 --> 00:13:30.949
+I think so.
+
+00:13:30.950 --> 00:13:34.849
+Continuing the theme of this, both of you being cursed,
+
+00:13:34.850 --> 00:13:36.947
+my X11 decided to crash.
+
+00:13:36.948 --> 00:13:40.201
+Nothing is going well with this one.
+
+00:13:40.202 --> 00:13:44.509
+Have you answered all the questions? I think so.
+
+00:13:44.510 --> 00:13:46.438
+Well, do you have anything else to add, perhaps?
+
+00:13:46.439 --> 00:13:48.327
+Maybe something that wasn't enough
+
+00:13:48.328 --> 00:13:50.109
+to fit in your live presentation?
+
+00:13:50.110 --> 00:13:56.669
+No, I'm excited to see the other talks and I hope everybody
+
+00:13:56.670 --> 00:13:57.811
+has fun too.
+
+00:13:57.812 --> 00:14:03.303
+Yeah, if you have any other questions, just email me.
+
+00:14:03.304 --> 00:14:05.210
+That's all.
+
+00:14:05.211 --> 00:14:07.594
+I got nothing.
+
+00:14:07.595 --> 00:14:08.222
+Okay, cool.
+
+00:14:08.223 --> 00:14:10.469
+[Leo]: Well, thank you so much, Jonathan, for your
+
+00:14:10.470 --> 00:14:12.789
+presentation. It was, sorry for all the technical
+
+00:14:12.790 --> 00:14:14.162
+problems, we tried our best,
+
+00:14:14.163 --> 00:14:15.532
+but I think we still managed to have
+
+00:14:15.533 --> 00:14:17.309
+a live presentation, and we managed to have some
+
+00:14:17.310 --> 00:14:20.137
+questions from the crowd. So, as far as I'm concerned,
+
+00:14:20.138 --> 00:14:21.837
+I think we did a good job.
+
+00:14:21.838 --> 00:14:24.894
+[Jonathan]: Yeah, you stomped it in this whole dev track,
+
+00:14:24.895 --> 00:14:28.349
+I just have to say. It's been a privilege to jump in
+
+00:14:28.350 --> 00:14:31.069
+with it here and there and to just listen to the great
+
+00:14:31.070 --> 00:14:33.180
+conversations.
+
+00:14:33.181 --> 00:14:38.949
+[Leo]: I think next up we have Emacs and McCLIM,
+
+00:14:38.950 --> 00:14:41.904
+which is going to be a similar format to this talk.
+
+00:14:41.905 --> 00:14:44.709
+We'll probably jump right into that in just about two minutes.
+
+00:14:44.710 --> 00:14:47.821
+We'll give you another countdown here. One second.
+
+00:14:47.822 --> 00:14:49.916
+Well, we arranged that and meanwhile,
+
+00:14:49.917 --> 00:14:51.349
+I just want to take my own
+
+00:14:51.350 --> 00:14:55.309
+little humble opportunity to thank you Jonathan, and I
+
+00:14:55.310 --> 00:14:57.085
+guess everybody else.
diff --git a/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt
new file mode 100644
index 00000000..b1e3121d
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt
@@ -0,0 +1,59 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:12.433
+Introduction
+
+00:00:12.466 --> 00:00:36.300
+Knowledge grows when it is shared
+
+00:00:36.333 --> 00:01:07.200
+When's the last time you shared something?
+
+00:01:07.200 --> 00:02:41.533
+Sharing Emacs
+
+00:02:41.566 --> 00:03:06.733
+My background
+
+00:03:06.766 --> 00:03:44.066
+Why you should make Emacs videos (or other formats)
+
+00:03:44.100 --> 00:05:22.933
+Beginners
+
+00:05:22.966 --> 00:05:56.100
+Intermediate
+
+00:05:56.133 --> 00:06:22.833
+Advanced
+
+00:06:22.866 --> 00:07:28.433
+Impostor syndrome
+
+00:07:28.466 --> 00:08:46.400
+Process for recording
+
+00:08:46.400 --> 00:09:36.666
+Details: recording
+
+00:09:36.700 --> 00:13:33.439
+Tips: Recording
+
+00:13:33.440 --> 00:14:38.319
+Details: Editing
+
+00:14:38.320 --> 00:15:44.000
+Tips: Editing
+
+00:15:44.000 --> 00:16:06.819
+Details: Uploading
+
+00:16:06.820 --> 00:18:06.133
+Tips: Uploading
+
+00:18:06.166 --> 00:19:04.900
+Your secret sauce
+
+00:19:04.933 --> 00:21:40.266
+Cons of YouTube
diff --git a/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt
new file mode 100644
index 00000000..23e0a699
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt
@@ -0,0 +1,1653 @@
+WEBVTT captioned by anush and sachac
+
+NOTE Introduction
+
+00:00.000 --> 00:01.233
+Hey, I'm Gopar
+
+00:01.266 --> 00:00:03.244
+and today I'm going to talk about
+
+00:00:03.245 --> 00:00:04.700
+being an Emacs influencer
+
+00:04.733 --> 00:07.066
+and try to convince you to be one too.
+
+00:07.100 --> 00:08.466
+Hopefully that goes well.
+
+00:08.500 --> 00:12.433
+If not, we'll see at the end of the talk.
+
+NOTE Knowledge grows when it is shared
+
+00:12.466 --> 00:14.833
+But first, I want to share something,
+
+00:14.866 --> 00:17.500
+and that is: that knowledge grows when it is shared.
+
+00:17.533 --> 00:19.500
+This is usually how I end my videos.
+
+00:19.533 --> 00:21.233
+Some of you may be familiar with this.
+
+00:21.266 --> 00:25.466
+I say this quote because I believe there is truth to it.
+
+00:25.500 --> 00:27.833
+The more you share something, the more you reinforce it,
+
+00:27.866 --> 00:30.466
+and the more the knowledge grows, not just for you,
+
+00:30.500 --> 00:33.466
+but for everybody else around it with who you share it with.
+
+00:33.500 --> 00:34.400
+With that being said,
+
+00:34.400 --> 00:36.300
+there's only one question I want to ask you.
+
+NOTE When's the last time you shared something?
+
+00:36.333 --> 00:39.300
+That is: what is the last time you shared something?
+
+00:39.333 --> 00:41.333
+Now, the sharing of knowledge
+
+00:41.366 --> 00:43.000
+doesn't just have to be about Emacs.
+
+00:43.000 --> 00:45.633
+It can just be about other things that you learn in life.
+
+00:45.666 --> 00:47.200
+There's plenty of things
+
+00:47.200 --> 00:50.833
+that I share with people that I've learned in life,
+
+00:50.866 --> 00:53.500
+and I hope that they learn from what I'm saying as well.
+
+00:53.533 --> 00:54.866
+Learn from the mistakes in others
+
+00:54.900 --> 00:56.100
+type of deal, things like that.
+
+00:56.133 --> 00:58.333
+But anyway, since this is EmacsConf,
+
+00:58.366 --> 01:01.066
+we're gonna keep it to Emacs-related,
+
+01:01.100 --> 01:02.633
+so we're going to find ways
+
+01:02.666 --> 01:04.700
+on how to share all that Emacs knowledge
+
+01:04.733 --> 01:07.200
+that is locked up inside you guys' brain.
+
+NOTE Sharing Emacs
+
+01:07.200 --> 01:09.266
+So sharing Emacs, how can we do that?
+
+01:09.300 --> 01:10.800
+Well, there's a few ways.
+
+01:10.800 --> 01:13.666
+We can do meetups and conferences, aka EmacsConf,
+
+01:13.700 --> 01:16.033
+like we're doing now. So hopefully one of you guys
+
+01:16.066 --> 01:18.300
+might be incentivized to share the knowledge
+
+01:18.333 --> 01:20.700
+that you have in the next upcoming year,
+
+01:20.733 --> 01:23.466
+or the future ones, or be a repeated presenter.
+
+01:23.500 --> 00:01:25.960
+The list goes on and on.
+
+00:01:25.961 --> 01:30.233
+Blog posts. So, one of the easier entries to [??]
+
+01:30.266 --> 01:31.200
+because it is writing
+
+01:31.200 --> 01:32.666
+and you don't have to do video,
+
+01:32.700 --> 01:34.900
+not like the other formats that I'm about to present.
+
+01:34.933 --> 01:37.400
+Tweeting is also an easier format as well
+
+01:37.400 --> 01:40.000
+because it's even smaller than a blog post, more condensed,
+
+01:40.000 --> 01:43.433
+and you can use hashtags. When I was learning,
+
+01:43.466 --> 01:46.000
+when I was reading the Org Mode manual,
+
+01:46.000 --> 01:49.733
+I would use the hashtag #OrgTip on on Twitter.
+
+01:49.766 --> 01:52.666
+Even if you search right now,
+
+01:52.700 --> 01:53.933
+I believe you'll find some of my tweets.
+
+01:53.966 --> 01:55.866
+But yeah, that's one way
+
+01:55.900 --> 01:57.633
+that you can go about it: simple tweets
+
+01:57.666 --> 02:00.100
+that you find, little things, little nuggets of gold
+
+02:00.133 --> 02:02.500
+as I would say. Of course, there's podcasts,
+
+02:02.533 --> 00:02:03.855
+which I'm pretty sure
+
+00:02:03.856 --> 00:02:06.200
+the Emacs community would love to have,
+
+02:06.200 --> 02:08.500
+so if anybody wants to pick up a podcast
+
+02:08.533 --> 02:12.133
+go right ahead. Twitch live streaming,
+
+02:12.166 --> 02:13.900
+which is... Twitch is a platform
+
+02:13.933 --> 02:15.233
+in which you can do live streaming
+
+02:15.266 --> 02:16.900
+for those who are not familiar.
+
+02:16.933 --> 02:19.500
+And people, I've seen people use the Emacs tag in there
+
+02:19.533 --> 02:21.833
+and, you know, just pop up, say hello,
+
+02:21.866 --> 02:23.133
+ask questions, things like that.
+
+02:23.166 --> 02:24.700
+You can be working on the configuration
+
+02:24.733 --> 02:26.033
+or just reading Emacs source code,
+
+02:26.066 --> 02:28.233
+you know, fun stuff like that.
+
+02:28.266 --> 02:29.700
+Videos, which is what I do,
+
+02:29.733 --> 02:31.833
+which I will touch on in a second.
+
+02:31.866 --> 02:33.800
+There's probably more formats
+
+02:33.800 --> 02:35.000
+that I'm not thinking at the moment
+
+02:35.000 --> 02:36.866
+and that you guys can probably fill in the gaps.
+
+02:36.900 --> 02:38.633
+But yeah, these are just some of the ways
+
+02:38.666 --> 02:41.533
+that we can share Emacs. So how do we get started?
+
+NOTE My background
+
+02:41.566 --> 02:42.700
+Well, before we get started,
+
+02:42.733 --> 02:44.633
+I want to talk about my credentials, right?
+
+02:44.666 --> 02:45.700
+I mean, who is this guy
+
+02:45.733 --> 02:47.633
+that you're just listening in this little square
+
+02:47.666 --> 02:49.800
+talking about creating videos?
+
+02:49.800 --> 02:52.633
+Well, I run a channel called goparism on YouTube.
+
+02:52.666 --> 02:55.333
+It has around 2700 subscribers at the moment.
+
+02:55.366 --> 02:57.500
+I kind of know a little bit of the flow.
+
+02:57.533 --> 03:00.333
+I'm not an expert, but I've done enough videos
+
+03:00.366 --> 03:03.300
+that I kind of understand the flow of all of
+
+03:03.333 --> 03:06.733
+at least the simple way of doing it, which I want to share.
+
+NOTE Why you should make Emacs videos (or other formats)
+
+03:06.766 --> 03:08.733
+So right now you're probably thinking,
+
+03:08.766 --> 03:11.000
+OK, I get that you want to sell us
+
+03:11.000 --> 03:12.900
+on the whole video making formats
+
+03:12.933 --> 03:15.433
+or you know sharing just Emacs in general,
+
+03:15.466 --> 03:19.533
+but I'm a beginner, I'm an intermediate, I'm advanced,
+
+03:19.566 --> 03:21.633
+I don't know if I can provide input.
+
+03:21.666 --> 03:23.700
+Each of those, I want to tackle each of those,
+
+03:23.733 --> 03:26.200
+and say that yeah, each of you have input.
+
+03:26.200 --> 03:28.000
+You know, for a beginner it might be say,
+
+03:28.000 --> 03:29.500
+oh, an intermediate and an advanced person
+
+03:29.533 --> 03:30.933
+already has information.
+
+03:30.966 --> 03:32.933
+Intermediate might say, oh, I'm not at that level yet.
+
+03:32.966 --> 03:35.700
+An advanced person might say, oh, I have nothing to say.
+
+03:35.733 --> 03:38.100
+You know, I don't... What I know,
+
+03:38.133 --> 03:39.033
+everybody else knows.
+
+03:39.066 --> 03:43.200
+So I want to, you know, dispel all that and just tell you that,
+
+03:43.200 --> 03:44.066
+hey, it doesn't matter.
+
+NOTE Beginners
+
+03:44.100 --> 03:48.300
+So for beginners, you guys are in a beautiful place,
+
+03:48.333 --> 03:51.333
+which is that you have a clean slate.
+
+03:51.366 --> 03:55.233
+So the way I imagine is that every Emacs user
+
+03:55.266 --> 03:58.300
+is presented[??] upon themselves,
+
+03:58.333 --> 04:00.133
+you know, kind of like this world.
+
+04:00.166 --> 04:02.066
+And in this world, you can either build a road
+
+04:02.100 --> 04:06.266
+that goes to the mountains, the city, or to the beach.
+
+04:06.300 --> 04:08.666
+Some of us have decided which way we want to go.
+
+04:08.700 --> 04:09.733
+Some of us might be building
+
+04:09.766 --> 04:13.333
+the road to the city, to the beach, for example.
+
+04:13.366 --> 04:16.400
+If someone starts a road to the city,
+
+04:16.400 --> 04:19.533
+they are probably stuck in their ways, right?
+
+04:19.566 --> 04:21.933
+And then what leads them to the goal to the city,
+
+04:21.966 --> 04:24.400
+they're not going to make a detour towards the mountain
+
+04:24.400 --> 04:26.300
+or towards the beach to get to the city.
+
+04:26.333 --> 04:27.833
+They just want the straightest path.
+
+04:27.866 --> 04:32.200
+And when you are used to doing things a certain way,
+
+04:32.200 --> 04:33.533
+you're going to have a ton of vision.
+
+04:33.566 --> 04:35.433
+So as a beginner, you don't have any of that
+
+04:35.466 --> 04:36.933
+because you're just starting brand new.
+
+04:36.966 --> 04:40.700
+Everything is, you know, a world of possibilities.
+
+04:40.733 --> 04:43.066
+So I would say that this is a very big advantage.
+
+04:43.100 --> 04:46.400
+The second one is that people enjoy the journey, right?
+
+04:46.400 --> 04:49.033
+People want to see someone grow from this spot
+
+04:49.066 --> 04:51.300
+to the next level, etc, etc.
+
+04:51.333 --> 04:53.466
+This is one of the reasons why we watch movies,
+
+04:53.500 --> 04:54.866
+TV shows, anime, right?
+
+04:54.900 --> 04:57.400
+Because there's a character that needs a problem
+
+04:57.400 --> 04:59.900
+and they're working their way up to solve that problem.
+
+04:59.933 --> 05:01.633
+If we just get to see the ending
+
+05:01.666 --> 05:03.000
+of where they solve the problem,
+
+05:03.000 --> 05:04.300
+we don't really feel anything
+
+05:04.333 --> 05:05.733
+because we weren't part of that journey.
+
+05:05.766 --> 05:08.866
+I would say that starting from scratch
+
+05:08.900 --> 05:10.800
+is a pretty good place to be.
+
+05:10.800 --> 05:12.700
+Of course, if you're going
+
+05:12.733 --> 05:14.300
+to be writing or making videos
+
+05:14.333 --> 05:16.500
+or anything related to Emacs, you kind of have to force...
+
+05:16.533 --> 05:19.500
+If you want to teach people, you kind of have to learn it.
+
+05:19.533 --> 05:20.800
+You're kind of forced to learn,
+
+05:20.800 --> 05:22.933
+which is always encouraged.
+
+NOTE Intermediate
+
+05:22.966 --> 05:25.900
+For intermediates now, you might be saying,
+
+05:25.933 --> 05:28.400
+hey, I'm a little past intermediate.
+
+05:28.400 --> 05:30.033
+I'm sorry, past beginner,
+
+05:30.066 --> 05:32.133
+but I don't feel confident enough to share.
+
+05:32.166 --> 05:34.666
+Well, let's say that you're wrong. Once you're intermediate,
+
+05:34.700 --> 05:37.300
+you're probably fiddling with your Emacs config,
+
+05:37.333 --> 05:39.266
+maybe doing something with Org Mode,
+
+05:39.300 --> 05:40.500
+like a lot of people are doing it,
+
+05:40.533 --> 05:43.500
+and you can document, talk about the things that you do,
+
+05:43.533 --> 05:46.466
+and also those functions that you write in Elisp
+
+05:46.500 --> 05:49.000
+to just improve quality of life, things like that.
+
+05:49.000 --> 05:51.100
+There's a whole list of things that you can do.
+
+05:51.133 --> 05:54.233
+These are just two things out of a plethora.
+
+05:54.266 --> 05:56.100
+of items that you can talk about.
+
+NOTE Advanced
+
+05:56.133 --> 05:59.833
+For my advanced folks, you guys are in a position
+
+05:59.866 --> 06:02.900
+where you guys know more about the Emacs internals.
+
+06:02.933 --> 06:05.100
+You might have read the source code.
+
+06:05.133 --> 06:08.133
+You might know a Emacs manual section pretty well
+
+06:08.166 --> 06:09.833
+that you can talk about.
+
+06:09.866 --> 06:11.866
+Usually when you're at the advanced
+
+06:11.900 --> 06:12.600
+or intermediate level,
+
+06:12.600 --> 06:15.466
+you start, or at least some people start writing packages.
+
+06:15.500 --> 06:17.400
+You can talk about the best practices
+
+06:17.400 --> 06:20.133
+for creating packages, the troubles that you face, you know,
+
+06:20.166 --> 06:22.833
+the things that you learn, things like that.
+
+NOTE Impostor syndrome
+
+06:22.866 --> 06:25.133
+Now that I've given a little bit of examples
+
+06:25.166 --> 06:27.400
+for each of these tiers, there's probably still
+
+06:27.400 --> 06:30.400
+something going on in each of you guys' mind,
+
+06:30.400 --> 06:32.400
+which is something all of us get to face,
+
+06:32.400 --> 06:37.033
+and that is impostor syndrome. Now, with impostor syndrome,
+
+06:37.066 --> 06:40.100
+the sad reality is that we all have it at some point,
+
+06:40.133 --> 06:41.000
+we're going to, you know,
+
+06:41.000 --> 06:43.266
+at the beginner, intermediate, or even advanced stage,
+
+06:43.300 --> 06:43.833
+it doesn't matter,
+
+06:43.866 --> 06:46.800
+there's always that little voice of imposter syndrome saying,
+
+06:46.800 --> 06:49.333
+hey, "You're probably not good enough" or not...
+
+06:49.366 --> 06:50.933
+but questioning if you're good enough
+
+06:50.966 --> 06:53.800
+or if you deserve to be at this level and things like that.
+
+06:53.800 --> 06:56.266
+I believe it's very common with software engineers.
+
+06:56.300 --> 06:59.233
+The other sad thing is that it will never go away
+
+06:59.266 --> 07:02.200
+But the way I see it with impostor syndrome
+
+07:02.200 --> 07:03.433
+is that we embrace it.
+
+07:03.466 --> 07:04.833
+If we are getting an impostor syndrome,
+
+07:04.866 --> 07:07.500
+it's because we're pushing ourself to a next level
+
+07:07.533 --> 07:12.000
+that we haven't been able to to overcome or to progress in.
+
+07:12.000 --> 07:14.733
+If you're pushing yourself, you will get impostor syndrome.
+
+07:14.766 --> 07:16.900
+Like, hey, am I good enough to lead this project?
+
+07:16.933 --> 07:19.500
+To finish this? To optimize this part
+
+07:19.533 --> 07:21.900
+or whatever? I feel it's a good way.
+
+07:21.933 --> 07:24.466
+Impostor syndrome, yeah, it feels horrible,
+
+07:24.500 --> 07:26.033
+but I believe that if you have it,
+
+07:26.066 --> 07:28.433
+it's because you're doing something right.
+
+NOTE Process for recording
+
+07:28.466 --> 07:29.533
+Okay, now that we've gotten
+
+07:29.566 --> 07:32.833
+that out of the way, what's the process for recording?
+
+07:32.866 --> 07:34.800
+Well, it's actually a lot simpler than you think.
+
+07:34.800 --> 07:36.866
+There's three steps, and one of them
+
+07:36.900 --> 07:37.866
+you might not even have to do,
+
+07:37.900 --> 07:39.866
+depending on how you want to go about it.
+
+07:39.900 --> 07:40.733
+The first one is that you have
+
+07:40.766 --> 07:42.933
+to record your voice and screen,
+
+07:42.966 --> 07:45.200
+because if you do want to make video,
+
+07:45.200 --> 07:46.300
+people have to see what you're doing
+
+07:46.333 --> 07:48.100
+and they have to hear what you're talking,
+
+07:48.133 --> 07:50.900
+otherwise it's going to be not as engaging.
+
+07:50.933 --> 07:52.800
+Of course, you can make the face optional
+
+07:52.800 --> 07:54.066
+when recording videos.
+
+07:54.100 --> 07:56.033
+If you watch some of my videos, sometimes
+
+07:56.066 --> 07:57.600
+I show my face, sometimes I don't.
+
+07:57.600 --> 08:02.300
+It just really depends on the mood of what I'm doing
+
+08:02.333 --> 08:05.433
+when I'm recording the video. But yeah, completely up to you.
+
+08:05.466 --> 08:08.333
+After recording, you can edit if desired.
+
+08:08.366 --> 08:10.600
+I remember when I first started making the videos,
+
+08:10.600 --> 08:13.100
+I was not editing them at all.
+
+08:13.133 --> 08:15.433
+I was just one shot and upload.
+
+08:15.466 --> 08:16.866
+That can either be good or bad
+
+08:16.900 --> 08:19.233
+depending on how you view it,
+
+08:19.266 --> 08:22.500
+but it is what it is. Nowadays I do some light editing,
+
+08:22.533 --> 08:26.066
+mainly just to remove the silences
+
+08:26.100 --> 08:29.633
+or when I'm going through debugging something.
+
+08:29.666 --> 08:32.900
+Third one is to upload it,
+
+08:32.933 --> 08:34.100
+which might be the easiest section,
+
+08:34.133 --> 08:35.666
+depending on your goals.
+
+08:35.700 --> 08:38.100
+At minimum, you would put title, description,
+
+08:38.133 --> 08:39.133
+and a little bit more.
+
+08:39.166 --> 08:42.466
+You'll get why I see it can be as easy
+
+08:42.500 --> 08:44.233
+or as complicated as you want,
+
+08:44.266 --> 08:46.400
+which I'll go over later at the end.
+
+NOTE Details: recording
+
+08:46.400 --> 08:50.100
+Let's go over details for recording.
+
+08:50.133 --> 08:53.833
+For recording, thankfully, all OSes,
+
+08:53.866 --> 08:56.466
+or at least the major OSes, have free recording software,
+
+08:56.500 --> 08:59.066
+or you can go a little fancy and get paid [software],
+
+08:59.100 --> 09:01.400
+which usually, you know, depending on your viewpoint,
+
+09:01.400 --> 09:03.266
+might make things easier or not.
+
+09:03.300 --> 09:05.400
+Personally, I use, I'm on Mac,
+
+09:05.400 --> 09:07.000
+so I use the built-in screen recording,
+
+09:07.000 --> 09:08.800
+which, if you do Command-Shift-5,
+
+09:08.800 --> 09:13.066
+it will pop up a little dialog, and if you did it just now,
+
+09:13.100 --> 09:14.400
+you can press the Escape key
+
+09:14.400 --> 09:16.933
+to get rid of it, and life goes on.
+
+09:16.966 --> 09:20.600
+Also for all major 3 OSes, OBS
+
+09:20.600 --> 09:22.600
+is a pretty popular choice not just for streaming,
+
+09:22.600 --> 09:23.866
+but for recording as well.
+
+09:23.900 --> 09:25.633
+That's something you might want to look at.
+
+09:25.666 --> 09:29.700
+If you do decide to record videos.
+
+09:29.733 --> 09:32.066
+All up to you. These are just things
+
+09:32.100 --> 09:35.300
+that I've come along or encountered along the way.
+
+09:35.333 --> 09:36.666
+When it comes to recording,
+
+NOTE Tips: Recording
+
+09:36.700 --> 09:38.933
+I do have some tips that might help you out.
+
+09:38.966 --> 09:40.833
+At least, if I could go back in time,
+
+09:40.866 --> 09:43.333
+this is what I would tell myself: that
+
+09:43.366 --> 09:44.700
+audio quality matter matters.
+
+09:44.733 --> 09:46.700
+If possible, get an external mic.
+
+09:46.733 --> 09:48.300
+That is not always feasible,
+
+09:48.333 --> 09:50.033
+because extra mic costs money,
+
+09:50.066 --> 09:51.066
+and when you're starting out with YouTube,
+
+09:51.100 --> 09:54.000
+you are not going to make a penny.
+
+09:54.000 --> 09:57.533
+YouTube has very high restrictions
+
+09:57.566 --> 10:01.033
+or bars that you need to pass
+
+10:01.066 --> 10:03.866
+before you start getting any revenue. For example,
+
+10:03.900 --> 10:06.633
+my channel, I still haven't met those bars,
+
+10:06.666 --> 10:08.433
+so i'm still not generating any revenue.
+
+10:08.466 --> 10:11.100
+Anything that I buy is just out of pocket.
+
+10:11.133 --> 10:13.700
+Since I work from home, I already had a mic
+
+10:13.733 --> 10:15.533
+and things like that set up.
+
+10:15.566 --> 10:17.333
+I just use that for recording videos.
+
+10:17.366 --> 10:20.266
+But if you have... You can use
+
+10:20.300 --> 10:23.333
+the built-in mic in your laptop if you have one.
+
+10:23.366 --> 10:25.233
+I would strongly suggest if you do that,
+
+10:25.266 --> 10:28.233
+try to minimize the noise. Go into a quiet room
+
+10:28.266 --> 10:30.700
+and make sure there's no washing machine
+
+10:30.733 --> 10:32.700
+or anything going off right now,
+
+10:32.733 --> 10:35.266
+because people do not... They can handle,
+
+10:35.300 --> 10:36.866
+you know, not the greatest quality of video.
+
+10:36.900 --> 10:38.400
+But when it comes to audio, picky
+
+10:38.400 --> 10:40.733
+people are a lot more pickier when it comes to that.
+
+10:40.766 --> 10:43.100
+Next is don't start with recording the face.
+
+10:43.133 --> 10:44.700
+Voice and screen are just fine.
+
+10:44.733 --> 10:49.000
+Personally, I feel when I started recording my face,
+
+10:49.000 --> 10:51.133
+it made it harder in a sense,
+
+10:51.166 --> 10:53.666
+because now I was just not only concentrating
+
+10:53.700 --> 10:55.433
+on what I was showing, how it was sounding,
+
+10:55.466 --> 10:58.000
+but how I look, if I was making any faces like that.
+
+10:58.000 --> 11:01.233
+It's just one less thing to have on your brain
+
+11:01.266 --> 11:02.133
+when you're recording.
+
+11:02.166 --> 11:05.133
+Another thing is that when I started recording,
+
+11:05.166 --> 11:08.266
+I was very passionate or excited about doing this.
+
+11:08.300 --> 11:10.866
+What I would do is--I took that to the advantage--
+
+11:10.900 --> 11:13.700
+is that I just recorded a lot of videos
+
+11:13.733 --> 11:16.333
+in one go or in sessions.
+
+11:16.366 --> 11:18.300
+As soon as I recorded, start the next one,
+
+11:18.333 --> 11:20.866
+next one, et cetera. I strongly believe that helped
+
+11:20.900 --> 11:22.100
+because later down the road,
+
+11:22.133 --> 11:24.833
+once I got busy with work or life or whatever,
+
+11:24.866 --> 11:26.866
+I didn't really have to worry about making time.
+
+11:26.900 --> 11:28.433
+I already had a batch ready to go
+
+11:28.466 --> 11:31.500
+that I can just slowly pull out and edit and upload.
+
+11:31.533 --> 11:35.033
+That's something helpful whenever you know work is slow
+
+11:35.066 --> 11:37.333
+or your vacations or things like that, you want to record,
+
+11:37.366 --> 11:39.266
+just go for it.
+
+11:39.300 --> 11:43.066
+Another one is when you are editing, you can use pauses
+
+11:43.100 --> 11:45.666
+so that it's easier to edit
+
+11:45.700 --> 00:11:48.159
+because what happens to... At least this
+
+00:11:48.160 --> 00:11:48.880
+is what happened to me
+
+00:11:48.881 --> 11:49.700
+when I was beginning,
+
+11:49.733 --> 11:53.000
+I would say, oh I can mumble fumble,
+
+11:53.000 --> 00:11:54.500
+you know, do a lot of verbal fillers,
+
+00:11:54.501 --> 00:11:55.833
+and I can just edit it,
+
+11:55.866 --> 11:57.233
+but if you don't do any pauses
+
+11:57.266 --> 00:12:01.560
+it's hard to fix the mistakes,
+
+00:12:01.561 --> 12:03.400
+the things that you don't want people seeing
+
+12:03.400 --> 00:12:05.839
+because then it doesn't blend well
+
+00:12:05.840 --> 12:08.300
+if you do editing. If you do any editing,
+
+12:08.333 --> 12:09.500
+you know what I'm talking about,
+
+12:09.533 --> 12:12.033
+because then there's chops of audio
+
+12:12.066 --> 00:12:13.840
+from the previous clip.
+
+00:12:13.841 --> 12:17.266
+Trying to edit... There's ways to mitigate that,
+
+12:17.300 --> 12:19.500
+but my editing skills are very minimal.
+
+12:19.533 --> 12:21.833
+It's just what I need to know to get things done.
+
+12:21.866 --> 12:25.066
+Just using pauses helps out a lot.
+
+12:25.100 --> 12:26.066
+Another thing is that
+
+12:26.100 --> 12:30.133
+some people want to record in like super-high quality,
+
+12:30.166 --> 12:32.633
+you know, get the highest quality possible for the video.
+
+12:32.666 --> 12:34.900
+I would say instead of focusing on the video recording,
+
+12:34.933 --> 12:36.900
+focus on the audio, like I mentioned,
+
+12:36.933 --> 00:12:37.819
+because at the end of the day,
+
+00:12:37.820 --> 12:41.033
+we're in Emacs and we're only sharing text.
+
+12:41.066 --> 12:43.833
+You know, there's only so much definition
+
+12:43.866 --> 12:44.700
+that you can show on text.
+
+12:44.733 --> 12:48.400
+If anything, just increase the font. Simple as that.
+
+12:48.400 --> 12:50.666
+My personal favorite,
+
+12:50.700 --> 12:53.233
+or at least the one that I still encounter even now,
+
+12:53.266 --> 12:56.733
+is that when I'm recording, my voice still feels dry.
+
+12:56.766 --> 12:59.533
+Right when I'm about to record,
+
+12:59.566 --> 13:01.800
+all of a sudden, I get dry. I need to drink water.
+
+13:01.800 --> 13:03.900
+It feels uncomfortable. I get nervous
+
+13:03.933 --> 13:06.000
+because it's something new. I'm staring at myself.
+
+13:06.000 --> 00:13:08.599
+It's like, oh man, all the... I mentioned just extra things
+
+00:13:08.600 --> 00:13:10.119
+that I need to worry about.
+
+00:13:10.120 --> 13:13.466
+But all of this goes less with practice.
+
+13:13.500 --> 13:15.300
+The more you do it, the more comfortable you are.
+
+13:15.333 --> 13:17.066
+It's just like everything else.
+
+13:17.100 --> 13:18.400
+When you start learning guitar,
+
+13:18.400 --> 13:21.600
+your fingers are very hard. When you start learning piano,
+
+13:21.600 --> 13:24.866
+the independence of fingers don't want to work.
+
+13:24.900 --> 13:25.866
+When you're learning drums,
+
+13:25.900 --> 13:27.466
+each limb needs to be independent.
+
+13:27.500 --> 13:29.266
+It's very hard. You have to start very slow.
+
+13:29.300 --> 13:31.033
+Everything in life, you know, practice
+
+13:31.066 --> 00:13:33.439
+and it will get better. All right now .
+
+NOTE Details: Editing
+
+00:13:33.440 --> 00:13:34.852
+Editing, well, like I mentioned,
+
+00:13:34.853 --> 00:13:36.939
+this is not always going to be necessary,
+
+00:13:36.940 --> 00:13:37.894
+depending on your style.
+
+00:13:37.895 --> 00:13:41.100
+There's some Youtube Emacs creators
+
+13:41.133 --> 00:13:43.959
+that simply record everything in one go.
+
+00:13:43.960 --> 13:46.533
+They might get up, get a coffee or something,
+
+13:46.566 --> 13:48.100
+and they'll just leave that in the clip,
+
+13:48.133 --> 13:49.400
+which is totally fine.
+
+13:49.400 --> 13:51.933
+No shame. It's the way they they want to do the video.
+
+13:51.966 --> 13:54.666
+Sometimes they just don't have any time
+
+13:54.700 --> 00:13:56.925
+to edit the videos themselves
+
+00:13:56.926 --> 00:13:57.900
+or pay someone else to do it.
+
+13:57.933 --> 00:14:00.466
+What's the best next thing? just leave it as is,
+
+00:14:00.467 --> 00:14:04.300
+upload, and that's fine. That completely works.
+
+14:04.333 --> 14:07.466
+I will say that if you do end up editing
+
+14:07.500 --> 14:09.666
+or deciding to edit, and you want software
+
+14:09.700 --> 14:11.266
+I would say check out DaVinci Resolve.
+
+14:11.300 --> 14:14.666
+It's free. It's available on the three major OSes.
+
+14:14.700 --> 14:19.000
+Honestly, DaVinci Resolve by itself
+
+14:19.000 --> 14:20.833
+has a plethora of features.
+
+14:20.866 --> 14:27.233
+I personally, I only use like 5% max of the features.
+
+14:27.266 --> 14:29.433
+It's professional,
+
+14:29.466 --> 14:33.000
+it's like professional studio all the way, things like that.
+
+14:33.000 --> 14:35.466
+But yeah, I would say DaVinci Resolve
+
+14:35.500 --> 00:14:38.319
+is a pretty solid choice.
+
+NOTE Tips: Editing
+
+00:14:38.320 --> 14:40.933
+Okay, what about the tips for editing?
+
+14:40.966 --> 14:42.833
+Well, most of them are pretty straightforward.
+
+14:42.866 --> 00:14:46.039
+Just learn enough to get going, like in all things.
+
+00:14:46.040 --> 14:48.266
+Like if you have a band practice
+
+14:48.300 --> 14:50.333
+and you're rehearsing a song,
+
+14:50.366 --> 14:52.100
+you just need to know the chords,
+
+14:52.133 --> 14:53.233
+you don't need to know improvise,
+
+14:53.266 --> 14:55.733
+just enough to get you through this gig
+
+14:55.766 --> 14:57.933
+that you're playing. That's pretty much it.
+
+14:57.966 --> 14:59.900
+Of course, learn the keyboard shortcuts.
+
+14:59.933 --> 15:02.266
+We all come from Emacs, so we all know how valuable,
+
+15:02.300 --> 15:05.133
+how much we treasure shortcuts to avoid the mouse.
+
+15:05.166 --> 15:06.833
+unfortunately since you're editing,
+
+15:06.866 --> 15:08.433
+you will still have to use the mouse,
+
+15:08.466 --> 15:10.666
+but the more keyboard shortcuts you use,
+
+15:10.700 --> 15:13.633
+the less the mouse is used. So there's that.
+
+15:13.666 --> 15:17.100
+One thing is that--I didn't know you can actually do this
+
+15:17.133 --> 15:18.900
+until I started editing--
+
+15:18.933 --> 15:22.733
+is that you can play the speed of the video in 2x.
+
+15:22.766 --> 15:24.900
+For me this is great because
+
+15:24.933 --> 15:28.200
+since I'm mainly just listening for pauses in my video,
+
+15:28.200 --> 15:29.900
+I just wait until there's silence.
+
+15:29.933 --> 15:31.233
+Oh, that's the part I need to trim,
+
+15:31.266 --> 15:35.233
+or that's the part I need to remove. Simple as that.
+
+15:35.266 --> 15:37.800
+Also batch edit, the same thing
+
+15:37.800 --> 15:41.500
+as I said about recording videos, just do it in batch.
+
+15:41.533 --> 15:44.000
+You can also just batch edit as well.
+
+NOTE Details: Uploading
+
+15:44.000 --> 15:48.033
+Uploading, the final step. YouTube,
+
+15:48.066 --> 15:49.600
+if you do end up using YouTube
+
+15:49.600 --> 15:52.466
+which is the most popular choice for uploading videos,
+
+15:52.500 --> 00:15:55.119
+is that the uploading process
+
+00:15:55.120 --> 15:56.000
+is pretty straightforward.
+
+15:56.000 --> 15:58.433
+I imagine this is the same for every other platform
+
+15:58.466 --> 16:01.000
+that you choose. It's pretty straightforward,
+
+16:01.000 --> 00:16:04.119
+but it can be a little complicated
+
+00:16:04.120 --> 00:16:06.819
+depending on what you want to do.
+
+NOTE Tips: Uploading
+
+00:16:06.820 --> 16:09.066
+What are my tips for uploading?
+
+16:09.100 --> 16:10.866
+Well, first of all, at minimum,
+
+16:10.900 --> 16:13.266
+you need to have a descriptive title
+
+16:13.300 --> 16:16.100
+and a description of what you talk about in the video,
+
+16:16.133 --> 16:20.733
+just to help out with SEO and things like that
+
+16:20.766 --> 16:24.433
+when people are searching for Emacs on YouTube.
+
+16:24.466 --> 00:16:25.479
+Also, if possible, use a thumbnail.
+
+00:16:25.480 --> 16:29.466
+There's a whole community about Emacs creators
+
+16:29.500 --> 16:32.100
+discussing best practices to get the highest engagement,
+
+16:32.133 --> 16:34.733
+how to get people watching your videos, things like that,
+
+16:34.766 --> 00:16:35.579
+and one of the things
+
+00:16:35.580 --> 16:39.133
+is they highly recommend a thumbnail.
+
+16:39.166 --> 16:42.666
+If you mainly watch, or if you watch any Emacs content,
+
+16:42.700 --> 16:45.000
+a lot of us do not use thumbnails,
+
+16:45.000 --> 16:46.333
+and that's perfectly fine.
+
+16:46.366 --> 16:48.633
+I think the Emacs community is pretty used
+
+16:48.666 --> 16:51.133
+to just watching videos with just a thumbnail,
+
+16:51.166 --> 16:52.933
+it's just a screenshot of the video,
+
+16:52.966 --> 00:16:55.019
+and we just go there for the content, right?
+
+00:16:55.020 --> 16:57.900
+We're not really going there for anything else,
+
+16:57.933 --> 00:17:01.899
+for the knowledge that the person is spreading.
+
+00:17:01.900 --> 17:04.433
+I say that it can be as simple or as complex,
+
+17:04.466 --> 00:17:07.219
+because if your goal is to potentially
+
+00:17:07.220 --> 17:08.633
+earn revenue down the line,
+
+17:08.666 --> 17:11.933
+you will want to spend some time configuring
+
+17:11.966 --> 00:17:17.459
+some of the settings for uploading, like the tags,
+
+00:17:17.460 --> 17:18.733
+I forget what they're called, but they're
+
+17:18.766 --> 00:17:20.875
+a little embedded so that people can watch
+
+00:17:20.876 --> 00:17:22.233
+other videos and things like that.
+
+17:22.266 --> 17:25.500
+So there's a plethora of options, an abundance of options.
+
+17:25.533 --> 17:27.300
+Honestly, there's too many,
+
+17:27.333 --> 17:31.300
+but it all depends if you potentially want
+
+17:31.333 --> 17:33.066
+to make some type of income in the future
+
+17:33.100 --> 17:35.033
+with Emacs, making videos on Emacs.
+
+17:35.066 --> 17:37.700
+And yeah, that's just something
+
+17:37.733 --> 17:39.666
+that you will have to discover
+
+17:39.700 --> 17:42.633
+and read and learn more about what the Emacs community,
+
+17:42.666 --> 00:17:45.133
+Emacs creator community suggest,
+
+00:17:45.134 --> 00:17:47.200
+and best practices and things like that.
+
+17:47.200 --> 17:48.933
+But if anybody ever wants to talk about it,
+
+17:48.966 --> 17:50.266
+feel free to reach out to me.
+
+17:50.300 --> 00:17:54.579
+I would love to talk about things
+
+00:17:54.580 --> 00:17:55.740
+about YouTube and all this,
+
+00:17:55.741 --> 00:17:58.440
+because I find it interesting. Potentially, hopefully,
+
+00:17:58.441 --> 00:18:01.259
+one day, I'll be able to make some revenue.
+
+00:18:01.260 --> 18:03.066
+Hopefully, maybe some of you guys
+
+18:03.100 --> 18:04.266
+might knock it out of the park
+
+18:04.300 --> 18:06.133
+with what I'm going to talk about next.
+
+NOTE Your secret sauce
+
+18:06.166 --> 18:10.866
+That is your secret sauce. This is your ultimate weapon
+
+18:10.900 --> 18:13.466
+as to get viewers, to get subscribers, you know,
+
+18:13.500 --> 18:14.733
+to get anybody that wants
+
+18:14.766 --> 18:17.266
+to watch your... to reach a higher audience.
+
+18:17.300 --> 18:20.200
+That can be your humor. You might be naturally funny.
+
+18:20.200 --> 18:21.500
+You can make comments.
+
+18:21.533 --> 18:24.700
+You have a natural skill on the way you talk,
+
+18:24.733 --> 18:26.300
+on the way you articulate things,
+
+18:26.333 --> 18:29.300
+so you might be able to get people drawn to that,
+
+18:29.333 --> 18:32.733
+or you might be someone who just does animations
+
+18:32.766 --> 18:35.700
+for your videos, which does highly well as well.
+
+18:35.733 --> 18:38.633
+or you can do a mix of all these.
+
+18:38.666 --> 18:40.500
+You can just insert your superpower
+
+18:40.533 --> 18:42.700
+whatever you want. You can go ahead
+
+18:42.733 --> 18:45.266
+and use that to your advantage
+
+18:45.300 --> 18:47.100
+to grow user base, a viewer base.
+
+18:47.133 --> 18:50.000
+Hopefully, if all things align,
+
+18:50.000 --> 18:52.600
+you'll be able to get paid
+
+18:52.600 --> 18:56.200
+to also create Emacs videos soon, spread the knowledge,
+
+18:56.200 --> 18:58.800
+which would be pretty cool--become an Emacs influencer,
+
+18:58.800 --> 19:00.200
+which is the goal, right? Okay.
+
+19:00.200 --> 19:03.800
+I believe I painted this in a pretty good light,
+
+19:03.800 --> 19:04.900
+at least personal opinion.
+
+NOTE Cons of YouTube
+
+19:04.933 --> 19:07.900
+But like everything, every good also has a bad.
+
+19:07.933 --> 19:09.666
+Nothing is always perfect.
+
+19:09.700 --> 19:11.633
+That's also the same for Youtube.
+
+19:11.666 --> 19:14.466
+What are the bads of Youtube?
+
+19:14.500 --> 19:18.266
+Well, it's not going to be an overnight success.
+
+19:18.300 --> 19:21.533
+That is very very rare. You're not going to create a video
+
+19:21.566 --> 19:24.900
+and then all of a sudden get like a hundred thousand views.
+
+19:24.933 --> 19:27.200
+I believe by from what I've seen in the community
+
+19:27.200 --> 19:29.033
+if a video gets over 10k
+
+19:29.066 --> 19:33.100
+that it means that it did really well in the Emacs community.
+
+19:33.133 --> 19:38.300
+I think on average is under 3k for a video within...
+
+19:38.333 --> 19:40.466
+This is within the time span of
+
+19:40.500 --> 19:43.333
+I'd say like two weeks or so or a month, around there.
+
+19:43.366 --> 19:46.066
+So it varies. All these metrics you'll learn
+
+19:46.100 --> 19:48.466
+if you really actually want to be able
+
+19:48.500 --> 19:50.066
+to create something in the Emacs...
+
+19:50.100 --> 19:53.266
+But like I said, it does take work and it does take time.
+
+19:53.300 --> 19:56.733
+Another thing is that negative feedback people are very quick
+
+19:56.766 --> 20:00.533
+as we all have been accustomed to that.
+
+20:00.566 --> 20:04.300
+People are do not shy from being very negative.
+
+20:04.333 --> 20:07.833
+It is so easy to just say negative and mean things online
+
+20:07.866 --> 20:09.900
+because there's no repercussions.
+
+20:09.933 --> 20:12.666
+I don't understand why people do that, but it is what it is.
+
+20:12.700 --> 20:17.500
+But most of these comments are from the younger population.
+
+20:17.533 --> 20:20.700
+You know, just ignore them.
+
+20:20.733 --> 20:22.866
+Most of the time, they're just ignorant.
+
+20:22.900 --> 20:24.066
+They don't know what they're saying.
+
+20:24.100 --> 20:27.800
+It will help you get them, you know, grow some thick skin.
+
+20:27.800 --> 20:30.133
+If you already have thick skin, then you don't.
+
+20:30.166 --> 20:31.833
+This is not going to be a problem.
+
+20:31.866 --> 20:35.233
+But most of the negative comments that I've receive our
+
+20:35.266 --> 20:38.066
+or childish, I would say,
+
+20:38.100 --> 20:42.700
+that it's not really based on anything that has substance.
+
+20:42.733 --> 20:44.400
+Yeah, just ignore it. It's fine.
+
+20:44.400 --> 20:46.066
+It's not going to affect your day.
+
+20:46.100 --> 20:47.100
+"Don't let it affect your day"
+
+20:47.133 --> 20:48.866
+is the most important thing.
+
+20:48.900 --> 20:51.466
+Third, like I was mentioning, revenue is very hard
+
+20:51.500 --> 20:54.700
+to get monetized on by YouTube standards.
+
+20:54.733 --> 20:58.600
+That will definitely take some time and dedication.
+
+20:58.600 --> 21:01.300
+But if you really want it, you will work for it.
+
+21:01.333 --> 21:03.266
+Hopefully all of us,
+
+21:03.300 --> 21:05.866
+the people that are constantly creating content
+
+21:05.900 --> 21:09.233
+via these platforms are able to get compensated
+
+21:09.266 --> 21:10.400
+in some way or another,
+
+21:10.400 --> 21:13.000
+because we do share it because we love it,
+
+21:13.000 --> 21:15.833
+but also it would be nice to get some compensation.
+
+21:15.866 --> 21:17.933
+I'm not speaking for everybody. I'm speaking personally
+
+21:17.966 --> 21:22.133
+because time is a valuable asset.
+
+21:22.166 --> 21:23.866
+You can choose what you want to spend it
+
+21:23.900 --> 21:25.866
+and right now I'm having fun making videos.
+
+21:25.900 --> 21:29.733
+That's what I'm deciding to spend it.
+
+21:29.766 --> 21:31.866
+But yeah now, with all this that I've said,
+
+21:31.900 --> 21:36.033
+there's only one question that I want to ask all of you,
+
+21:36.066 --> 21:40.266
+and that is: what are you going to share?
diff --git a/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt
new file mode 100644
index 00000000..2f81b8be
--- /dev/null
+++ b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt
@@ -0,0 +1,44 @@
+WEBVTT
+
+
+00:00:02.940 --> 00:00:37.880
+Introduction
+
+00:00:37.881 --> 00:01:38.559
+What do I mean by shell?
+
+00:01:38.560 --> 00:04:50.159
+What I do not mean
+
+00:04:50.160 --> 00:09:26.911
+What is a shell?
+
+00:09:26.912 --> 00:11:57.299
+Launching external processes
+
+00:11:57.300 --> 00:14:33.413
+Environment variables
+
+00:14:54.400 --> 00:16:02.546
+Processes
+
+00:17:00.180 --> 00:20:07.719
+Redirecting and pipelining input and output
+
+00:20:09.440 --> 00:21:01.999
+Scripts
+
+00:21:11.780 --> 00:23:30.079
+File system management
+
+00:23:43.560 --> 00:24:23.639
+Networking
+
+00:24:30.120 --> 00:34:21.127
+A brief tour of Eshell
+
+00:34:21.128 --> 00:36:36.979
+Login shell
+
+00:36:36.980 --> 00:37:13.000
+Resources
diff --git a/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt
new file mode 100644
index 00000000..7f16a859
--- /dev/null
+++ b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt
@@ -0,0 +1,1142 @@
+WEBVTT captioned by mark
+
+NOTE Introduction
+
+00:00:02.940 --> 00:00:08.719
+Welcome to Emacs as a Shell, a talk by Christopher Howard for
+
+00:00:08.720 --> 00:00:13.799
+Emacs Conference 2024.
+
+00:00:13.800 --> 00:00:18.399
+In this talk, I would like to explore, or advocate for, a
+
+00:00:18.400 --> 00:00:21.919
+particular perspective. I want to encourage people to
+
+00:00:21.920 --> 00:00:26.479
+think of Emacs not as simply an editor or a development
+
+00:00:26.480 --> 00:00:31.119
+environment, but rather as a shell, or at least something
+
+00:00:31.120 --> 00:00:33.919
+that allows us to do most of the things that we might
+
+00:00:33.920 --> 00:00:37.880
+otherwise want to do from a shell.
+
+NOTE What do I mean by shell?
+
+00:00:37.881 --> 00:00:40.839
+What do I mean by shell? By
+
+00:00:40.840 --> 00:00:45.439
+shell, I mean basically an interface that allows us to
+
+00:00:45.440 --> 00:00:50.679
+interact with the rest of our system by entering commands.
+
+00:00:50.680 --> 00:00:55.039
+That definition is, perhaps, a little too broad, and so I
+
+00:00:55.040 --> 00:00:58.439
+will try to narrow it down with a list of features that,
+
+00:00:58.440 --> 00:01:03.279
+historically, we have come to expect from a shell. The Bash
+
+00:01:03.280 --> 00:01:07.719
+shell is one very portable and well-known shell, and for
+
+00:01:07.720 --> 00:01:13.599
+many of us it is maybe the prototypical example. But in the
+
+00:01:13.600 --> 00:01:16.879
+past there have been many other shells, and there are other
+
+00:01:16.880 --> 00:01:21.119
+shells available today. If we are willing to be flexible in
+
+00:01:21.120 --> 00:01:25.559
+our thinking, we can think of Emacs as being a shell, or at
+
+00:01:25.560 --> 00:01:28.879
+least providing most of the functionality that we expect
+
+00:01:28.880 --> 00:01:38.559
+from a shell.
+
+NOTE What I do not mean
+
+00:01:38.560 --> 00:01:42.759
+Before further expanding on this idea, I must emphasize
+
+00:01:42.760 --> 00:01:47.159
+what I do not mean. First of all, I am not talking about
+
+00:01:47.160 --> 00:01:51.439
+running Bash, or some other external shell, from within
+
+00:01:51.440 --> 00:01:56.439
+Emacs, although this is certainly possible. I am arguing,
+
+00:01:56.440 --> 00:02:02.439
+rather, for using Emacs as a shell, instead of other shells.
+
+00:02:02.440 --> 00:02:06.239
+Second, I do not mean running a terminal emulator from
+
+00:02:06.240 --> 00:02:11.399
+within Emacs. Emacs has a built-in terminal emulator, but
+
+00:02:11.400 --> 00:02:15.839
+this is not what I mean. A terminal emulator is essentially a
+
+00:02:15.840 --> 00:02:20.039
+program designed to control the cursor and text appearance
+
+00:02:20.040 --> 00:02:23.999
+in response to various control codes in order to mimic a
+
+00:02:24.000 --> 00:02:28.439
+terminal display device. There are certainly legitimate
+
+00:02:28.440 --> 00:02:32.559
+reasons to do this. Nevertheless, in general, it does not
+
+00:02:32.560 --> 00:02:36.519
+make much sense to run a terminal emulator within Emacs,
+
+00:02:36.520 --> 00:02:39.719
+because Emacs has its own commands for controlling the
+
+00:02:39.720 --> 00:02:45.039
+cursor and text appearance. Also, due to the way Emacs was
+
+00:02:45.040 --> 00:02:48.919
+designed historically, Emacs itself believes that it is
+
+00:02:48.920 --> 00:02:53.119
+running on a terminal. So you end up with layers upon layers
+
+00:02:53.120 --> 00:02:58.199
+of terminal emulation. Anyhow, at the end of the day, Emacs
+
+00:02:58.200 --> 00:03:01.839
+will not perform as well as a dedicated terminal emulator
+
+00:03:01.840 --> 00:03:08.079
+program. I also think that, as we try to force ANSI terminal
+
+00:03:08.080 --> 00:03:12.359
+emulation into our Emacs workflow, this ultimately will be
+
+00:03:12.360 --> 00:03:15.879
+a hindrance to us in taking advantage of the natural and
+
+00:03:15.880 --> 00:03:19.319
+pleasant interfaces that are already available to us
+
+00:03:19.320 --> 00:03:24.999
+within Emacs. In brief, if your goal is simply to figure out
+
+00:03:25.000 --> 00:03:28.499
+how to be able to do all your normal Bash command line
+
+00:03:28.500 --> 00:03:32.359
+wizardry from within an Emacs window instead of a GNOME
+
+00:03:32.360 --> 00:03:36.479
+console window, you are headed down a different set of train
+
+00:03:36.480 --> 00:03:43.199
+tracks than I am. Also, something which I fear may confuse
+
+00:03:43.200 --> 00:03:47.919
+the issue for some viewers is the fact that Emacs ships with
+
+00:03:47.920 --> 00:03:52.839
+its own unique built-in shell, called the Emacs shell, or
+
+00:03:52.840 --> 00:03:59.079
+Eshell.
+
+00:03:59.080 --> 00:04:02.959
+Eshell aims to be a legitimate shell, and provides a very
+
+00:04:02.960 --> 00:04:07.599
+similar experience to other shells like Bash, while being
+
+00:04:07.600 --> 00:04:11.119
+well integrated into the Emacs interface, and without
+
+00:04:11.120 --> 00:04:15.639
+giving up the power of the Emacs Lisp engine. Eshell will be
+
+00:04:15.640 --> 00:04:19.139
+mentioned multiple times in this talk. The entire talk
+
+00:04:19.140 --> 00:04:24.179
+could, in fact, be about Eshell, except that I want the talk
+
+00:04:24.180 --> 00:04:28.319
+to cover all aspects of Emacs shell-like functionality
+
+00:04:28.320 --> 00:04:32.079
+through its other tools, such as interactive commands and
+
+00:04:32.080 --> 00:04:37.079
+special modes. So, hopefully we can keep distinct in our
+
+00:04:37.080 --> 00:04:43.279
+mind the ideas of Emacs as a shell versus the Emacs shell,
+
+00:04:43.880 --> 00:04:50.159
+though the latter is an important part of the former.
+
+NOTE What is a shell?
+
+00:04:50.160 --> 00:04:55.399
+Let's get back to the fundamental idea of what is a shell. In
+
+00:04:55.400 --> 00:04:59.159
+the broadest definition, a shell is an interface which
+
+00:04:59.160 --> 00:05:02.279
+allows you to interact with your operating system through
+
+00:05:02.280 --> 00:05:06.840
+commands. However, from a historical perspective, there
+
+00:05:06.841 --> 00:05:10.699
+are a few basic capabilities which we expect to be part of
+
+00:05:10.700 --> 00:05:17.880
+every shell.
+
+00:05:17.881 --> 00:05:21.420
+First of all, the shell provides a means of launching
+
+00:05:21.421 --> 00:05:26.440
+external programs. Some internal or built-in commands
+
+00:05:26.441 --> 00:05:31.679
+might also be made available. Second, the shell provides a
+
+00:05:31.680 --> 00:05:36.820
+means of managing environment variables. In the past,
+
+00:05:36.821 --> 00:05:40.580
+environment variables often played a critical role as a
+
+00:05:40.581 --> 00:05:45.360
+means of passing in options, file names, device names, and
+
+00:05:45.361 --> 00:05:50.119
+suchlike to external programs. This is not quite as common
+
+00:05:50.120 --> 00:05:54.080
+today, but the environment still plays a critical role in
+
+00:05:54.081 --> 00:05:57.619
+managing things such as the path to executables and
+
+00:05:57.620 --> 00:06:03.080
+libraries, as well as various other user, desktop, and
+
+00:06:03.081 --> 00:06:08.280
+system settings. The shell modifies the environment and
+
+00:06:08.281 --> 00:06:11.620
+passes it on to external programs.
+
+00:06:13.540 --> 00:06:17.580
+Historically, job control was expected to be either a
+
+00:06:17.581 --> 00:06:21.560
+function of the shell, or easily accessible from it.
+
+00:06:21.561 --> 00:06:24.019
+Usually today, our personal computing is not
+
+00:06:24.020 --> 00:06:29.280
+batch-oriented. But typically, shells can run multiple
+
+00:06:29.281 --> 00:06:34.599
+processes simultaneously, as well as provide means to
+
+00:06:34.600 --> 00:06:38.780
+suspend and terminate processes, which are useful
+
+00:06:38.781 --> 00:06:44.880
+features. Shells should be able to redirect and pipeline
+
+00:06:44.881 --> 00:06:49.100
+process input and output. This allows the user to connect
+
+00:06:49.101 --> 00:06:53.880
+process input and output with files, devices, or other
+
+00:06:53.881 --> 00:06:58.813
+processes. Finally, shells are expected to have some
+
+00:06:58.814 --> 00:07:02.380
+limited scripting capability, such as the
+
+00:07:02.381 --> 00:07:06.613
+POSIX-compliant set of program statements and
+
+00:07:06.614 --> 00:07:08.880
+conditionals that Bash provides.
+
+00:07:11.100 --> 00:07:15.113
+As command-line wizards, there are a number of tasks we
+
+00:07:15.114 --> 00:07:18.280
+expect to be able to do quickly and easily from our shell,
+
+00:07:18.660 --> 00:07:21.646
+even though these tasks are not the domain of the shell
+
+00:07:21.647 --> 00:07:27.880
+itself. A common task is file management and navigation. We
+
+00:07:27.881 --> 00:07:31.113
+quickly navigate and manipulate the file system with
+
+00:07:31.114 --> 00:07:34.813
+standard utilities that do things like change the current
+
+00:07:34.814 --> 00:07:39.380
+working directory, rename files, move files, and delete
+
+00:07:39.381 --> 00:07:44.146
+files. We usually expect to have access to some additional
+
+00:07:44.147 --> 00:07:48.380
+process management utilities. These allow us to do things
+
+00:07:48.381 --> 00:07:51.780
+such as find out the status of all processes running on the
+
+00:07:51.781 --> 00:07:57.980
+system, and send signals to processes. Finally, we expect
+
+00:07:57.981 --> 00:08:02.113
+to have access to some basic networking utilities. For
+
+00:08:02.114 --> 00:08:05.413
+example, we should be able to run commands that set up
+
+00:08:05.414 --> 00:08:09.513
+network interfaces, ping computers, and download files.
+
+00:08:09.514 --> 00:08:16.080
+With a little reflection, we can see that Emacs can provide
+
+00:08:16.081 --> 00:08:20.146
+all or nearly all of the functionality we have described so
+
+00:08:20.147 --> 00:08:24.046
+far. And the functionality can be called conveniently
+
+00:08:24.047 --> 00:08:26.746
+through one of several methods.
+
+00:08:33.520 --> 00:08:43.846
+Either a normal interactive call, like M-x something, or a
+
+00:08:43.847 --> 00:08:46.013
+call to an elisp function,
+
+00:08:53.620 --> 00:09:01.180
+or through Eshell commands, or through some special buffer
+
+00:09:01.181 --> 00:09:06.946
+mode, such as the directory editor, which provides its own
+
+00:09:06.947 --> 00:09:09.413
+interface to some functionality.
+
+00:09:09.414 --> 00:09:17.413
+It may be going too far to say that Emacs is a full replacement
+
+00:09:17.414 --> 00:09:21.713
+for shells like Bash. Nevertheless, we can see that Emacs
+
+00:09:21.714 --> 00:09:25.680
+can do most of the things that we might otherwise do with our
+
+00:09:25.681 --> 00:09:26.911
+shell.
+
+NOTE Launching external processes
+
+00:09:26.912 --> 00:09:32.513
+Let us give some examples. First, can Emacs launch
+
+00:09:32.514 --> 00:09:36.680
+external commands? Of course. Now, there are something
+
+00:09:36.681 --> 00:09:40.446
+like a half-dozen different ways to do that within Emacs, and
+
+00:09:40.447 --> 00:09:46.713
+some are more convenient than others. From any Elisp
+
+00:09:46.714 --> 00:09:50.780
+program, we can call functions like make-process and
+
+00:09:50.781 --> 00:09:53.913
+call-process to launch external processes.
+
+00:10:12.460 --> 00:10:16.846
+These, however, generally are not convenient for quick,
+
+00:10:16.847 --> 00:10:22.380
+one-off commands. Another option would be to run Eshell,
+
+00:10:22.381 --> 00:10:26.580
+which would allow us to call the external program from a
+
+00:10:26.581 --> 00:10:28.946
+familiar command line prompt.
+
+00:10:34.160 --> 00:10:38.880
+If we do not actually want to drop into Eshell just to run one
+
+00:10:38.881 --> 00:10:42.213
+command, we also have the interactive command,
+
+00:10:42.214 --> 00:10:44.613
+eshell-command,
+
+00:10:52.420 --> 00:10:56.746
+which would allow us to call the external program from a
+
+00:10:56.747 --> 00:10:59.180
+familiar command line prompt.
+
+00:11:09.940 --> 00:11:12.080
+If we do not actually want to drop an
+
+00:11:12.081 --> 00:11:15.699
+Eshell just to run one command, as I just mentioned, we also
+
+00:11:15.700 --> 00:11:19.799
+have the interactive command eshell-command, which allows
+
+00:11:19.800 --> 00:11:23.399
+us to enter in a one-off command and run that immediately.
+
+00:11:25.420 --> 00:11:28.799
+And finally, there is also an interactive command called
+
+00:11:28.800 --> 00:11:30.499
+simply shell-command.
+
+00:11:34.600 --> 00:11:39.099
+Shell command is like Eshell command, but instead passes
+
+00:11:39.100 --> 00:11:42.899
+the command off to our system shell, for example, bash.
+
+00:11:43.940 --> 00:11:48.599
+This is cheating, of course, but it might be useful or convenient
+
+00:11:48.600 --> 00:11:57.299
+in some scenarios.
+
+NOTE Environment variables
+
+00:11:57.300 --> 00:12:01.899
+Regarding environment variables, Emacs can read and
+
+00:12:01.900 --> 00:12:05.399
+manipulate the environment variables, which in turn get
+
+00:12:05.400 --> 00:12:09.659
+passed on to processes which it launches. The
+
+00:12:09.660 --> 00:12:12.899
+general-purpose interactive commands for this are
+
+00:12:12.900 --> 00:12:18.499
+getenv and setenv. These commands
+
+00:12:18.500 --> 00:12:21.799
+deal with the one environment that is available throughout
+
+00:12:21.800 --> 00:12:25.699
+all parts of your running Emacs session. In other words,
+
+00:12:25.700 --> 00:12:28.999
+these functions deal with a global environment, which is
+
+00:12:29.000 --> 00:12:32.099
+the same wherever you are running getenv or
+
+00:12:32.100 --> 00:12:34.399
+setenv.
+
+00:13:00.340 --> 00:13:04.259
+An important exception is that every instance of Eshell
+
+00:13:04.260 --> 00:13:07.599
+maintains a distinct environment that will not be affected
+
+00:13:07.600 --> 00:13:13.980
+by setenv calls run in other buffers. Also, Eshell
+
+00:13:13.981 --> 00:13:16.446
+has some additional syntax for dealing with its
+
+00:13:16.447 --> 00:13:20.780
+environment, including the set and export syntax.
+
+00:13:38.647 --> 00:13:47.113
+Regarding job control and process management, Emacs does
+
+00:13:47.114 --> 00:13:50.880
+not provide job control in the way that Bash users are used
+
+00:13:50.881 --> 00:13:57.080
+to. We can, however, launch asynchronous processes, and do
+
+00:13:57.081 --> 00:14:01.580
+various things to them. From Eshell, or an eshell-command
+
+00:14:01.581 --> 00:14:07.180
+call, we can append the ampersand symbol to the command, and
+
+00:14:07.181 --> 00:14:11.013
+this will cause the process to run asynchronously in a
+
+00:14:11.014 --> 00:14:13.313
+dedicated buffer.
+
+00:14:20.881 --> 00:14:25.280
+Now, if the command is launched from Eshell, it will not
+
+00:14:25.281 --> 00:14:31.180
+actually run in a separate buffer, but the output will go to
+
+00:14:31.181 --> 00:14:33.413
+the Eshell buffer.
+
+NOTE Processes
+
+00:14:54.400 --> 00:14:59.580
+We can run the interactive command list-processes to see
+
+00:14:59.581 --> 00:15:02.846
+all the processes running for our current Emacs session.
+
+00:15:11.747 --> 00:15:17.646
+In Eshell, we can run the command "jobs" to get the same list.
+
+00:15:17.647 --> 00:15:22.813
+This will show the process name, process buffer name,
+
+00:15:22.814 --> 00:15:28.613
+process ID, and some other information. We can select the
+
+00:15:28.614 --> 00:15:32.880
+process buffer in the process list to bring up that process
+
+00:15:32.881 --> 00:15:36.213
+buffer.
+
+00:15:42.414 --> 00:15:47.046
+We can also use the interactive command signal-process to
+
+00:15:47.047 --> 00:15:52.980
+send any signal to a process, including "stop" to suspend the
+
+00:15:52.981 --> 00:15:58.380
+process, "continue" to resume the process, and "interrupt" or
+
+00:15:58.381 --> 00:16:02.546
+kill to terminate the process.
+
+NOTE Redirecting and pipelining input and output
+
+00:17:00.180 --> 00:17:04.813
+Regarding redirecting and pipelining input and output,
+
+00:17:04.814 --> 00:17:11.613
+Eshell does support redirection similar to Bash, so you can
+
+00:17:11.614 --> 00:17:17.046
+overwrite and append to files and some other objects. Input
+
+00:17:17.047 --> 00:17:22.380
+redirection is not yet implemented, but it is on the Eshell
+
+00:17:22.381 --> 00:17:29.213
+to-do list. Eshell also has pipes. The default pipe, which
+
+00:17:29.214 --> 00:17:33.220
+uses the familiar vertical bar symbol, pipes the data
+
+00:17:33.221 --> 00:17:36.980
+between the commands using an intermediate Emacs buffer.
+
+00:17:36.981 --> 00:17:41.200
+This, while usually quite practical, is less efficient
+
+00:17:41.201 --> 00:17:46.319
+than the system pipe. Therefore, Eshell also makes
+
+00:17:46.320 --> 00:17:50.146
+available a star-modified version, which uses the system
+
+00:17:50.147 --> 00:17:52.546
+pipe through a call to your system shell.
+
+00:17:56.881 --> 00:17:59.413
+So we can do things like
+
+00:18:02.340 --> 00:18:05.860
+direct output to a file.
+
+00:18:15.100 --> 00:18:20.240
+We're unfortunately not able to do input redirection, but
+
+00:18:20.241 --> 00:18:22.540
+we can use pipes.
+
+00:18:41.760 --> 00:18:45.639
+Elisp can manipulate and tie together processes in various
+
+00:18:45.640 --> 00:18:50.999
+ways, such as process filters and pipe processes, but I
+
+00:18:51.000 --> 00:18:56.559
+won't attempt to cover that. I feel like you should mention
+
+00:18:56.560 --> 00:19:02.119
+again that we have two kinds of pipes here available. So this
+
+00:19:02.120 --> 00:19:09.239
+pipe, the standard one, will pipe the data through Emacs
+
+00:19:09.240 --> 00:19:16.759
+buffers. That's very practical in most cases, but it is less
+
+00:19:16.760 --> 00:19:22.919
+efficient than piping through the system pipe. So Eshell
+
+00:19:22.920 --> 00:19:28.119
+makes available another symbol for that, star, vertical
+
+00:19:28.120 --> 00:19:38.339
+bar, that allows you to explicitly use the system pipe.
+
+00:19:38.340 --> 00:19:43.599
+Regarding scripting: Of course, using Emacs makes
+
+00:19:43.600 --> 00:19:47.959
+available all the power of the Elisp API and third-party
+
+00:19:47.960 --> 00:19:54.719
+packages, so we have that out of the gate. Eshell also has
+
+00:19:54.720 --> 00:19:59.639
+control flow statements, like an "if" construct and a "for"
+
+00:19:59.640 --> 00:20:06.519
+construct. See the Eshell info manual, section 3.7, for
+
+00:20:06.520 --> 00:20:07.719
+more details.
+
+NOTE Scripts
+
+00:20:09.440 --> 00:20:13.839
+And if you wish to write a script entirely in Eshell syntax,
+
+00:20:13.840 --> 00:20:18.559
+and store it in a separate file, this is possible with recent
+
+00:20:18.560 --> 00:20:20.159
+versions of Emacs.
+
+00:20:31.840 --> 00:20:34.679
+Here's an example of a brief script that I wrote.
+
+00:20:37.560 --> 00:20:42.679
+Unfortunately, an eshell mode for proper syntax
+
+00:20:42.680 --> 00:20:46.279
+highlighting is not yet available, but hopefully that will
+
+00:20:46.280 --> 00:20:51.279
+be forthcoming. Note that Eshell syntax allows elisp
+
+00:20:51.280 --> 00:20:55.079
+forms to be interspersed with regular command form for
+
+00:20:55.080 --> 00:20:58.759
+additional scripting power. We will discuss this a little
+
+00:20:58.760 --> 00:21:01.999
+more later.
+
+NOTE File system management
+
+00:21:11.780 --> 00:21:16.759
+Regarding file system management. In Emacs, many of the
+
+00:21:16.760 --> 00:21:20.239
+common file system operations are available as
+
+00:21:20.240 --> 00:21:26.759
+interactive commands. For example, M-x cd, to change your
+
+00:21:26.760 --> 00:21:32.839
+buffer's current working directory, and other M-x commands
+
+00:21:32.840 --> 00:21:37.439
+such as make-directory
+
+00:21:40.780 --> 00:21:42.679
+chmod,
+
+00:21:43.260 --> 00:21:51.159
+and delete-file. Of course, you can also drop into Eshell,
+
+00:21:53.840 --> 00:22:00.639
+or use M-x eshell-command to run the usual external commands
+
+00:22:00.640 --> 00:22:07.039
+for file system manipulation. Also, a file manager is built
+
+00:22:07.040 --> 00:22:14.279
+into Emacs, which can be run by calling M-x dired.
+
+00:22:19.640 --> 00:22:24.559
+The directory editor is powerful, but it is a bit strange to
+
+00:22:24.560 --> 00:22:28.679
+folks expecting something like Midnight Commander or the
+
+00:22:28.680 --> 00:22:35.639
+GNOME file manager. It gives us a number of helpful features
+
+00:22:35.640 --> 00:22:43.639
+like the ability to mark files, and to run elisp functions on
+
+00:22:44.700 --> 00:22:48.439
+them, and some other interesting ways to manipulate and
+
+00:22:48.440 --> 00:22:54.079
+rename the files. However, third-party Emacs extensions
+
+00:22:54.080 --> 00:22:58.479
+such as Midnight Commander Mode and Sunrise Commander are
+
+00:22:58.480 --> 00:23:03.879
+available to provide a Midnight Commander experience, for those who
+
+00:23:03.880 --> 00:23:10.319
+prefer that sort of file management.
+
+00:23:10.320 --> 00:23:14.879
+Emacs also has the nifty TRAMP functionality built in,
+
+00:23:14.880 --> 00:23:19.159
+which allows you, most of the time, to easily edit files on
+
+00:23:19.160 --> 00:23:22.719
+other computers, as well as manipulate the file system.
+
+00:23:23.180 --> 00:23:27.839
+This transparently works through SSH and some other
+
+00:23:27.840 --> 00:23:30.079
+protocols that you can specify.
+
+NOTE Networking
+
+00:23:43.560 --> 00:23:48.159
+Regarding networking features, I don't have a lot of
+
+00:23:48.160 --> 00:23:51.639
+interesting things to say about this at the present, so I'll
+
+00:23:51.640 --> 00:23:54.919
+skip through this quickly. But if you do a little research,
+
+00:23:54.920 --> 00:23:58.799
+you will see that Emacs has a lot of functionality relating
+
+00:23:58.800 --> 00:24:02.359
+to making network connections, interacting with the web,
+
+00:24:02.780 --> 00:24:07.859
+and such like, both built-in and in available packages, as
+
+00:24:07.860 --> 00:24:14.399
+well as modes for doing things like Web browsing and Gemini
+
+00:24:14.400 --> 00:24:20.599
+browsing. And of course, you can run the usual standard
+
+00:24:20.600 --> 00:24:23.639
+networking commands for your system through Eshell.
+
+NOTE A brief tour of Eshell
+
+00:24:30.120 --> 00:24:33.759
+So having put forward the main arguments for this talk, I
+
+00:24:33.760 --> 00:24:38.199
+would like to take some time now to give a brief tour of a few of
+
+00:24:38.200 --> 00:24:43.799
+the features of Eshell, the Emacs shell. It bears
+
+00:24:43.800 --> 00:24:46.999
+emphasizing that Eshell is not a drop-in replacement for
+
+00:24:47.000 --> 00:24:51.879
+Bash, or even a Bash clone, though I believe the developers
+
+00:24:51.880 --> 00:24:56.839
+are trying to make much of the syntax very similar. Also,
+
+00:24:56.840 --> 00:25:00.479
+Eshell is not a terminal emulator, and it will not display
+
+00:25:00.480 --> 00:25:04.679
+correctly applications which use advanced ANSI control
+
+00:25:04.680 --> 00:25:10.119
+codes. However, Eshell can be configured to be aware of such
+
+00:25:10.120 --> 00:25:13.300
+applications, and to run them automatically within the
+
+00:25:13.301 --> 00:25:19.940
+Emacs terminal emulator when launched. See section 5.1 of
+
+00:25:19.941 --> 00:25:24.100
+the Eshell manual titled Visual Commands.
+
+00:25:32.540 --> 00:25:36.759
+Though Eshell is not Bash, it has multiple features,
+
+00:25:36.760 --> 00:25:40.679
+pertaining mainly to its by-design Emacs integration,
+
+00:25:40.680 --> 00:25:44.639
+which may make it more appealing to use than Bash or another
+
+00:25:44.640 --> 00:25:45.359
+shell.
+
+00:25:48.160 --> 00:25:52.039
+For one, Eshell allows entering commands on the command
+
+00:25:52.040 --> 00:25:55.960
+line that are space and new line separated, without
+
+00:25:55.961 --> 00:26:01.280
+parentheses. Of course, all the other shells do this. But
+
+00:26:01.281 --> 00:26:06.280
+within Eshell, it is possible to enter internal Emacs
+
+00:26:06.281 --> 00:26:11.060
+functions, as well as external commands.
+
+00:26:13.240 --> 00:26:45.739
+This allows us to do things like this.
+
+00:26:45.740 --> 00:26:49.759
+As far as I understand, it is possible to enter any Emacs
+
+00:26:49.760 --> 00:26:53.959
+function on the Eshell command line. However, some special
+
+00:26:53.960 --> 00:26:58.399
+syntax may be required if you are trying to pass in something
+
+00:26:58.400 --> 00:27:00.799
+that is not a string or a number.
+
+00:27:04.380 --> 00:27:07.919
+As you might have noticed in the last example, Eshell makes
+
+00:27:07.920 --> 00:27:12.919
+it possible to use an Emacs buffer as a sink for output. It
+
+00:27:12.920 --> 00:27:18.039
+also allows using a buffer as a source of input, though this
+
+00:27:18.040 --> 00:27:21.839
+is slightly more complicated, since the buffer must be
+
+00:27:21.840 --> 00:27:27.199
+converted to a string first. I have distilled this down into
+
+00:27:27.200 --> 00:27:30.279
+my own function, named with the "at" symbol.
+
+00:27:36.640 --> 00:27:40.319
+And I will provide the brief snippet of code for this later.
+
+00:27:54.640 --> 00:28:02.499
+So to give an example, here's our messages buffer.
+
+00:28:02.500 --> 00:28:05.399
+And from Eshell, we can do something like this.
+
+00:28:29.780 --> 00:28:34.439
+Let's say here we wanted to grab our messages buffer to see
+
+00:28:34.440 --> 00:28:38.079
+everything that we had been loading during the startup
+
+00:28:38.080 --> 00:28:38.959
+process.
+
+00:28:48.060 --> 00:28:51.879
+So you can see how that could be very handy in a number of
+
+00:28:51.880 --> 00:28:52.959
+scenarios.
+
+00:28:55.060 --> 00:29:00.239
+I wanted to briefly mention that we have a helpful function
+
+00:29:00.240 --> 00:29:03.439
+here called eshell-insert-buffer-name,
+
+00:29:11.120 --> 00:29:15.359
+which allows us to insert a buffer name into the current
+
+00:29:15.360 --> 00:29:18.439
+buffer at point using completion,
+
+00:29:24.680 --> 00:29:32.879
+which can save you a lot of typing.
+
+00:29:32.880 --> 00:29:34.799
+Another nice feature of Eshell
+
+00:29:37.220 --> 00:29:41.199
+is that it allows integrating ELisp into the command line
+
+00:29:41.200 --> 00:29:48.879
+call. Let's give another example. Say we wanted to echo the
+
+00:29:48.880 --> 00:29:53.919
+date to an event file or an event log.
+
+00:29:56.720 --> 00:30:01.639
+I should probably take a moment to explain this asterisk
+
+00:30:01.640 --> 00:30:06.999
+that I'm occasionally using. So since Emacs, or excuse me,
+
+00:30:07.000 --> 00:30:11.719
+since Eshell can use internal or external Emacs, excuse me,
+
+00:30:11.720 --> 00:30:16.999
+internal Emacs commands or external commands, it may
+
+00:30:17.000 --> 00:30:21.679
+sometimes be necessary to clarify which one you want to use,
+
+00:30:22.380 --> 00:30:27.079
+since the names may overlap. Since my Eshell is configured
+
+00:30:27.080 --> 00:30:32.319
+by default to prefer the internal Emacs functions, then
+
+00:30:32.320 --> 00:30:37.799
+sometimes I have to use the asterisk to specify that I want
+
+00:30:37.800 --> 00:30:39.079
+the external version.
+
+00:30:42.680 --> 00:31:02.639
+Here I can insert a bit of Elisp,
+
+00:31:03.180 --> 00:31:06.119
+and then redirect the output to the event log.
+
+00:31:18.720 --> 00:31:22.639
+Last, I want to mention that there are some optional Eshell
+
+00:31:22.640 --> 00:31:27.159
+modules in Emacs, not turned on by default, which provide
+
+00:31:27.160 --> 00:31:29.039
+additional nifty features.
+
+00:31:40.540 --> 00:31:45.639
+On my system, I have most of the optional modules turned on.
+
+00:31:58.320 --> 00:32:03.199
+An interesting module is eshell-smart, which does various
+
+00:32:03.200 --> 00:32:07.319
+things with cursor positioning and scrolling, so as to make
+
+00:32:07.320 --> 00:32:10.399
+editing commands and reviewing output easier.
+
+00:32:18.340 --> 00:32:23.619
+Let's say I was to change directory to my boot directory
+
+00:32:30.880 --> 00:32:35.039
+and use a command which involves lots of output.
+
+00:32:39.900 --> 00:32:44.359
+You'll notice right away that the cursor positioning is set
+
+00:32:44.360 --> 00:32:48.719
+such that I'm immediately able to view the top of the output.
+
+00:32:48.720 --> 00:32:52.879
+Also, I'm able to use the space bar to page through the
+
+00:32:52.880 --> 00:32:56.079
+output.
+
+00:32:56.080 --> 00:33:01.919
+So this is an opinionated feature, which assumes that
+
+00:33:01.920 --> 00:33:05.399
+you're likely going to want to review the output
+
+00:33:05.400 --> 00:33:10.559
+immediately, or that you often will. Of course, you can
+
+00:33:10.560 --> 00:33:17.599
+always jump to the end.
+
+00:33:19.980 --> 00:33:23.919
+Also, after a command is entered, the cursor is immediately
+
+00:33:23.920 --> 00:33:28.279
+repositioned to make it easy to edit the command.
+
+00:33:53.020 --> 00:33:56.519
+And also, if I don't want to edit the command, and I do not want
+
+00:33:56.520 --> 00:33:59.679
+to review the output, I can simply start typing another
+
+00:33:59.680 --> 00:34:00.359
+command.
+
+00:34:11.260 --> 00:34:15.519
+So that covers the brief tour of Eshell features.
+
+00:34:17.760 --> 00:34:21.127
+And that basically ends my talk.
+
+NOTE Login shell
+
+00:34:21.128 --> 00:34:22.380
+However, a handful of
+
+00:34:22.381 --> 00:34:28.719
+viewers might be wondering, is it possible to set Emacs to be
+
+00:34:28.720 --> 00:34:37.639
+my login shell to completely replace bash in your login
+
+00:34:37.640 --> 00:34:43.719
+experience? The answer is yes, but in practice there are
+
+00:34:43.720 --> 00:34:47.399
+various difficulties involved which might make it not
+
+00:34:47.400 --> 00:34:48.359
+worth the trouble.
+
+00:35:00.440 --> 00:35:03.479
+Before doing this, you'll have to answer a few initial
+
+00:35:03.480 --> 00:35:09.519
+questions. Do you want to make a new Emacs instance every
+
+00:35:09.520 --> 00:35:13.759
+time you log in, or do you want it to connect to an Emacs
+
+00:35:13.760 --> 00:35:20.599
+server? Which is popular among Emacs users, to reuse the
+
+00:35:20.600 --> 00:35:26.599
+session, or to connect to the existing session. Also, do you
+
+00:35:26.600 --> 00:35:30.639
+want a different result, whether in graphical or a terminal
+
+00:35:30.640 --> 00:35:34.679
+environment? And are you okay with your initialization
+
+00:35:34.680 --> 00:35:39.559
+file being run every time you log in, including every new tab
+
+00:35:39.560 --> 00:35:44.520
+you open in a terminal emulator? If we assume that you are
+
+00:35:44.521 --> 00:35:50.339
+using a system with /etc/passwd user management, you get
+
+00:35:50.340 --> 00:35:53.999
+one field to specify the name of the shell program that you
+
+00:35:54.000 --> 00:35:58.479
+want to use, and no arguments are allowed. So maybe you can
+
+00:35:58.480 --> 00:36:02.679
+see how this might be challenging, depending on your
+
+00:36:02.680 --> 00:36:06.879
+answers to the previous questions. You can work around
+
+00:36:06.880 --> 00:36:10.479
+these issues in various ways, like modifying the
+
+00:36:10.480 --> 00:36:15.439
+authentication system, or by specifying a script for your
+
+00:36:15.440 --> 00:36:21.799
+login shell. But if your normal workflow is to simply log in
+
+00:36:21.800 --> 00:36:25.679
+and start Emacs and run that Emacs session until your next
+
+00:36:25.680 --> 00:36:36.979
+reboot, then it probably isn't worth the bother.
+
+NOTE Resources
+
+00:36:36.980 --> 00:36:41.999
+So thank you for listening to my talk, Emacs as a Shell, by
+
+00:36:42.000 --> 00:36:46.319
+Christopher Howard for Emacs Conference 2024.
+
+00:36:46.860 --> 00:36:51.519
+At the bottom of this page, you can see a link to the
+
+00:36:51.520 --> 00:36:56.919
+repository containing the brief amount of code that was
+
+00:36:56.920 --> 00:37:03.679
+featured here in this video, as well as a link to my personal
+
+00:37:03.680 --> 00:37:10.279
+Gemini gemlog, as well as to a Web portal version of that.
+
+00:37:10.280 --> 00:37:13.000
+Thank you.
diff --git a/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt
new file mode 100644
index 00000000..2ea0a13c
--- /dev/null
+++ b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt
@@ -0,0 +1,846 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:11.119
+And I believe we are live. Hi, Daniel, how are you doing? I'm
+
+00:00:11.120 --> 00:00:17.199
+doing great. It's cold outside, but it's nice in here, yeah.
+
+00:00:17.200 --> 00:00:21.439
+I can assure you it's very cold in my own place as well. We do
+
+00:00:21.440 --> 00:00:24.679
+EmacsConf always in December and that's always when it's
+
+00:00:24.680 --> 00:00:27.479
+particularly cold where I live and I assume where you live as
+
+00:00:27.480 --> 00:00:31.039
+well. So, don't worry, we'll try to keep you warm with
+
+00:00:31.040 --> 00:00:35.039
+interesting questions. But first, thank you for taking the
+
+00:00:35.040 --> 00:00:38.359
+time out of your busy high school life to make a presentation
+
+NOTE Q: Do you have any thoughts about the process of recording something for a conference?
+
+00:00:38.360 --> 00:00:41.439
+about Emacs. Do you have any thoughts about the process of
+
+00:00:41.440 --> 00:00:44.399
+recording something for a conference? Because I assume
+
+00:00:44.400 --> 00:00:47.279
+it's one of the first ones you're ever doing.
+
+00:00:47.280 --> 00:00:55.879
+I think it was not as difficult as I thought it would be. I just
+
+00:00:55.880 --> 00:01:04.479
+recorded in my basement and prepared some notes
+
+00:01:04.480 --> 00:01:08.639
+beforehand. I think it was definitely helpful to have Emacs
+
+00:01:08.640 --> 00:01:11.959
+as a tool for that, because I made my presentation with
+
+00:01:11.960 --> 00:01:18.559
+Beamer. Right. I mean, it's amazing to see so many of the
+
+00:01:18.560 --> 00:01:22.519
+tools because, you know, you've shown Emacs, but you've
+
+00:01:22.520 --> 00:01:27.399
+shown Beamer. You've shown tools that are about twice as old
+
+00:01:27.400 --> 00:01:30.239
+as you are yourself, which is amazing when you think about
+
+00:01:30.240 --> 00:01:33.199
+it. But I think many people in the audience can actually
+
+00:01:33.200 --> 00:01:36.479
+relate to your discovery of those tools because we were
+
+00:01:36.480 --> 00:01:40.679
+pretty much, I mean a lot of us were your age when we started
+
+00:01:40.680 --> 00:01:43.999
+playing with those tools so it's like there's a little bit of
+
+00:01:44.000 --> 00:01:45.759
+nostalgia that we feel looking at your presentation
+
+00:01:45.760 --> 00:01:48.719
+because we are, we can see the excitement behind everything
+
+00:01:48.720 --> 00:01:51.919
+you've touched and that's great for us because it brings us
+
+00:01:51.920 --> 00:01:55.919
+back maybe 10 or 20 years in the past and for others perhaps 30
+
+00:01:55.920 --> 00:02:01.079
+or 40 years so that's kind of amazing.
+
+00:02:01.080 --> 00:02:05.039
+How about we start taking some questions? So, just for
+
+00:02:05.040 --> 00:02:09.199
+timekeeping, we have until 20 of the current hours, which is
+
+00:02:09.200 --> 00:02:12.079
+8 minutes and 30 seconds to cover as many questions as
+
+00:02:12.080 --> 00:02:16.599
+possible. Now, if we might take the first one. So, Corwin,
+
+00:02:16.600 --> 00:02:20.359
+can you scroll down to the questions? Yes. I'll be reading
+
+00:02:20.360 --> 00:02:22.319
+you the questions just to make it a little easier for you,
+
+00:02:22.320 --> 00:02:23.791
+Daniel, to answer them.
+
+NOTE Q: I use org-roam for notes and find it very useful - have you considered it?
+
+00:02:23.792 --> 00:02:25.999
+I use Org-roam for notes and find it
+
+00:02:26.000 --> 00:02:30.639
+very useful. Have you considered it? Uh, yeah, that's
+
+00:02:30.640 --> 00:02:35.519
+actually where I started out for taking notes. Um, that,
+
+00:02:35.520 --> 00:02:38.719
+that I moved to Denote because I didn't use all of its
+
+00:02:38.720 --> 00:02:44.319
+features, um, for, Org Roam, I meant.
+
+00:02:44.320 --> 00:02:46.999
+Uh, I also didn't, didn't really like the dependency on an
+
+00:02:47.000 --> 00:02:51.919
+external database. Uh, it just like took a while for, um,
+
+00:02:51.920 --> 00:02:56.879
+stuff to index if I moved it between like, uh, using sync
+
+00:02:56.880 --> 00:03:03.679
+thing. laptop and my desktop. Yeah. Yeah, it's definitely
+
+00:03:03.680 --> 00:03:08.119
+something, I mean, I co-maintain Org Roam, so I'm fully aware
+
+00:03:08.120 --> 00:03:12.159
+of this problem with it. And yeah, SyncThing is not great to
+
+00:03:12.160 --> 00:03:16.639
+sync a database, a SQLite database that we use. And, I mean,
+
+00:03:16.640 --> 00:03:19.399
+whichever solution you use, whatever works for you is good.
+
+00:03:19.400 --> 00:03:21.919
+Orgrim was kind of thought in terms of scalability for
+
+00:03:21.920 --> 00:03:26.199
+people who had, you know, thousands of notes with thousands
+
+00:03:26.200 --> 00:03:28.919
+of links inside of them. so perhaps it's not adapted to your
+
+00:03:28.920 --> 00:03:31.039
+note-taking style right now, but perhaps it's something to
+
+00:03:31.040 --> 00:03:34.599
+keep in mind, you know, it's many tools and you use them when
+
+00:03:34.600 --> 00:03:39.599
+you need to. Colin, if we can switch the questions, I'm
+
+00:03:39.600 --> 00:03:40.879
+switching to the second one.
+
+NOTE Q: Do you use the Getting Things Done methodology as part of your Org workflow?
+
+00:03:40.880 --> 00:03:42.159
+Do you use the Getting Things
+
+00:03:42.160 --> 00:03:46.639
+Done methodology as part of your Org workflow? So there's an
+
+00:03:46.640 --> 00:03:50.039
+interesting thing about that. I started with Org first and
+
+00:03:50.040 --> 00:03:54.959
+then I heard about Getting Things Done, so I didn't exactly
+
+00:03:54.960 --> 00:04:01.679
+design my workflow with that in mind, but I sort of
+
+00:04:01.680 --> 00:04:06.439
+reinvented it, I would say, not really, but I do a lot of
+
+00:04:06.440 --> 00:04:09.439
+the similar things, but I don't have the different TODO
+
+00:04:09.440 --> 00:04:11.319
+states like...
+
+00:04:11.320 --> 00:04:17.279
+I don't know an example because I didn't really look into it
+
+00:04:17.280 --> 00:04:22.719
+that much, but it would be like NEXT isn't the next thing
+
+00:04:22.720 --> 00:04:28.879
+you're going to do. But I don't think I...
+
+00:04:28.880 --> 00:04:35.239
+where I just write what I need to do and then schedule it and
+
+00:04:35.240 --> 00:04:40.999
+then look at my agenda for the next thing. Yeah, I mean, part
+
+00:04:41.000 --> 00:04:45.959
+of the beauty of using Emacs, Org Mode or using a methodology
+
+00:04:45.960 --> 00:04:49.719
+like Getting Things Done is that I think you need to find room
+
+00:04:49.720 --> 00:04:53.519
+in the method or the tool for you to organically do what you
+
+00:04:53.520 --> 00:04:57.279
+want. And it's okay to not do everything in a Getting Things
+
+00:04:57.280 --> 00:05:00.599
+Done methodology. I know a lot of people take issue
+
+00:05:00.600 --> 00:05:04.719
+with the tickler file, where you're supposed to put stuff to
+
+00:05:04.720 --> 00:05:07.319
+review in the future. For instance, if you don't want
+
+00:05:07.320 --> 00:05:10.439
+to work on this particular topic right now in your life, you
+
+00:05:10.440 --> 00:05:14.679
+decide, oh, I'd like to revisit this topic maybe in six
+
+00:05:14.680 --> 00:05:17.399
+months. And then you have this tickler file, which has
+
+00:05:17.400 --> 00:05:21.799
+entries and folders for each month of the year. And when six
+
+00:05:21.800 --> 00:05:24.039
+months comes and you find yourself at the beginning of the
+
+00:05:24.040 --> 00:05:27.319
+next month, you open the file and you see, oh there's the task
+
+00:05:27.320 --> 00:05:30.319
+I left off for later. A lot of people don't like to do it this
+
+00:05:30.320 --> 00:05:34.279
+way, some people really like it, but part of the beauty of
+
+00:05:34.280 --> 00:05:38.119
+having tools which are very modular like Emacs and Org Mode
+
+00:05:38.120 --> 00:05:41.479
+allows you to have, well, you just adjust the method for
+
+00:05:41.480 --> 00:05:44.439
+something that works. And there's something to be garnered
+
+00:05:44.440 --> 00:05:48.759
+as well for applying these lessons to how you organize your
+
+00:05:48.760 --> 00:05:51.559
+life, not merely in front of a computer, but also how you
+
+00:05:51.560 --> 00:05:54.519
+manage your tasks elsewhere at school, iSchool or
+
+00:05:54.520 --> 00:05:58.519
+elsewhere.
+
+NOTE Q: org-fc and org-drill are emacs org mode centric flash card solutions, have you looked into them?
+
+00:05:58.520 --> 00:06:02.799
+All right, moving to the next question. Org-fc and org-drill
+
+00:06:02.800 --> 00:06:06.319
+are Emacs Org Mode-centric flashcard solutions. Have you
+
+00:06:06.320 --> 00:06:11.599
+looked into them? I think I looked into Org-Drill, but I
+
+00:06:11.600 --> 00:06:17.359
+wanted to use Anki because of... I wanted to use it on my
+
+00:06:17.360 --> 00:06:21.439
+phone, but then I realized I had to pay for the app, and then I
+
+00:06:21.440 --> 00:06:24.119
+didn't want to use it on my phone anymore.
+
+00:06:24.120 --> 00:06:31.799
+but it's just something that I used before without work mode
+
+00:06:31.800 --> 00:06:35.239
+for a little bit. And then I liked it,
+
+00:06:35.240 --> 00:06:42.919
+but yeah, it works pretty well with Org mode. So I didn't
+
+00:06:42.920 --> 00:06:47.799
+find a reason to switch to one of those because like I might be
+
+00:06:47.800 --> 00:06:53.559
+not at a computer one day and have to learn something. Yeah,
+
+00:06:53.560 --> 00:06:56.399
+that's something that you call premature optimization.
+
+00:06:56.400 --> 00:06:59.479
+And if you continue as a software engineer at university,
+
+00:06:59.480 --> 00:07:02.679
+you'll get to hear plenty of this. But yes, Anki is also a tool
+
+00:07:02.680 --> 00:07:06.399
+that I've used a whole lot in my learning journeys, be it
+
+00:07:06.400 --> 00:07:09.719
+about languages, be it about literature, be it about
+
+00:07:09.720 --> 00:07:15.519
+whatever really, and it's a very good tool and I recommend
+
+00:07:15.520 --> 00:07:17.799
+people to look into it, especially since they've released a
+
+00:07:17.800 --> 00:07:20.839
+new algorithm to manage learning a little differently than
+
+00:07:20.840 --> 00:07:23.719
+the old one. If you're familiar with SuperMemo, I really
+
+00:07:23.720 --> 00:07:25.992
+invite you to look into the advancement
+
+00:07:25.993 --> 00:07:27.505
+in Anki in recent years.
+
+NOTE Q: What do other students think about your approach - and what are they doing instead (if anything)? And your teachers - what do they think?
+
+00:07:27.506 --> 00:07:31.399
+Moving to another question, what do other students
+
+00:07:31.400 --> 00:07:33.919
+think about your approach and what are they doing instead,
+
+00:07:33.920 --> 00:07:39.359
+if anything? And your teachers, what do they think? So for
+
+00:07:39.360 --> 00:07:43.199
+other students they usually are just confused about what's
+
+00:07:43.200 --> 00:07:51.879
+going on when I show my computer because they know that I use
+
+00:07:51.880 --> 00:07:56.759
+Linux but they don't know what it is so they're just assuming
+
+00:07:56.760 --> 00:08:03.839
+everything on my computer is I'm either hacking or like
+
+00:08:03.840 --> 00:08:05.999
+doing some Linux thing and
+
+00:08:06.000 --> 00:08:09.919
+I don't really bother to explain it to them so that's kind
+
+00:08:09.920 --> 00:08:17.079
+But for I love it. See my see my prior videos. That's that's
+
+00:08:17.080 --> 00:08:19.559
+wonderful. Pardon me. Pardon me for breaking in, Daniel.
+
+00:08:19.560 --> 00:08:22.239
+But I just since I have, I want to say wonderful
+
+00:08:22.240 --> 00:08:28.559
+presentation. I love your spirit, your tone and great
+
+00:08:28.560 --> 00:08:29.319
+thought there.
+
+00:08:29.320 --> 00:08:31.399
+For my teachers, I think...
+
+00:08:31.400 --> 00:08:38.799
+because if I write an essay or something, I usually paste it
+
+00:08:38.800 --> 00:08:46.879
+in Google Docs. But recently, I got more confident, which is
+
+00:08:46.880 --> 00:08:53.879
+export to LaTeX, and I did that for my physics labs. My
+
+00:08:53.880 --> 00:08:56.439
+teacher was pretty satisfied with the results for the math
+
+00:08:56.440 --> 00:09:03.119
+formatting. So I think they don't really have a problem with
+
+00:09:03.120 --> 00:09:06.959
+it, where it's actually more convenient, maybe.
+
+00:09:06.960 --> 00:09:13.039
+That's really great to hear and if you continue at
+
+00:09:13.040 --> 00:09:16.519
+university, which I'm almost sure that you will, your
+
+00:09:16.520 --> 00:09:19.279
+professors, you'll be pretty much using the same tools as
+
+00:09:19.280 --> 00:09:23.359
+they are, so you'll find yourself in a like-minded crowd of
+
+00:09:23.360 --> 00:09:28.519
+people once you get to university. We are a little short on
+
+00:09:28.520 --> 00:09:30.719
+time because we need to move to the next talk in about one
+
+00:09:30.720 --> 00:09:35.999
+minute. There are still some questions and Daniel, I would
+
+00:09:36.000 --> 00:09:40.399
+invite you to stay and maybe answer them in a room so that we
+
+00:09:40.400 --> 00:09:43.399
+can gather as many of your answers as possible. But before we
+
+00:09:43.400 --> 00:09:45.239
+leave, I just want to give you the opportunity, if you have
+
+00:09:45.240 --> 00:09:46.919
+any last words, to share them with the crowd.
+
+00:09:46.920 --> 00:09:53.479
+Well, for the students who may be watching this, I hope that
+
+00:09:53.480 --> 00:09:57.319
+you give Emacs a try. And good luck if you decide to use
+
+00:09:57.320 --> 00:10:01.519
+something else because it's probably won't be as great.
+
+00:10:01.520 --> 00:10:07.399
+It's very good to be so young and to already be convinced that
+
+00:10:07.400 --> 00:10:09.879
+Emacs is the best thing. For some of us, it took us many
+
+00:10:09.880 --> 00:10:12.839
+decades to reach this conclusion, and I'm so happy
+
+00:10:12.840 --> 00:10:15.095
+to see young people. I used to be a teacher,
+
+00:10:15.096 --> 00:10:17.016
+by the way, so I used to teach people your age,
+
+00:10:17.017 --> 00:10:19.799
+but I'm so happy to see people your age
+
+00:10:19.800 --> 00:10:23.359
+interested in Emacs because it makes me hopeful that in the
+
+00:10:23.360 --> 00:10:26.799
+future we'll have people carrying the flame and standing on
+
+00:10:26.800 --> 00:10:30.039
+the shoulders of current people. So thank you so much,
+
+00:10:30.040 --> 00:10:32.917
+Daniel. We'll be seeing you soon. We wish you good luck with
+
+00:10:32.917 --> 00:10:35.999
+your studies. And for EmacsConf, we'll be moving to the next
+
+00:10:36.000 --> 00:10:39.624
+talk in five seconds. See you soon. And I want to reassure
+
+00:10:39.625 --> 00:10:44.332
+you, we'll post all the Q&A info when we do post this video.
+
+00:10:44.333 --> 00:10:47.839
+Yes. So Daniel, as I said,
+
+00:10:47.840 --> 00:10:49.239
+if you want to stick around a little more with
+
+00:10:49.240 --> 00:10:51.839
+Corwin to answer the questions, that's all fine.
+
+00:10:51.840 --> 00:10:53.599
+I'll be moving to the next room to get ready for the next
+
+00:10:53.600 --> 00:10:59.159
+talks. So thank you, Daniel. And I'll see you later.
+
+00:10:59.160 --> 00:11:06.199
+All right, the cops are gone. Wait, no, I'm just kidding. No,
+
+00:11:06.200 --> 00:11:10.042
+but if you'd like to walk through a few more of these
+
+00:11:10.043 --> 00:11:11.960
+questions, I'd be happy to record that. You're not
+
+00:11:12.000 --> 00:11:14.559
+obligated to do that. You could also, the pad's there. You
+
+00:11:14.560 --> 00:11:16.999
+could just type out your answers or whatever you prefer to
+
+00:11:17.000 --> 00:11:24.559
+do. I guess I can answer them still. Cool.
+
+00:11:24.560 --> 00:11:25.359
+So we're here.
+
+NOTE Q: What was your biggest source of frustration/friction/confusion when getting started with Emacs?
+
+00:11:25.360 --> 00:11:27.759
+What was your biggest source of frustration, friction,
+
+00:11:27.760 --> 00:11:32.319
+confusion when getting started?
+
+00:11:32.320 --> 00:11:38.239
+I honestly don't really remember. It
+
+00:11:38.240 --> 00:11:45.279
+somehow just clicked one day and I figured it out.
+
+00:11:45.280 --> 00:11:48.123
+All right, it takes us pretty naturally to the next one.
+
+NOTE Q: How did you come across Emacs? What got you into it?
+
+00:11:48.124 --> 00:11:54.079
+How did you come across Emacs? What got you into it? I could ask
+
+00:11:54.080 --> 00:11:58.280
+this question quite
+
+00:11:58.320 --> 00:12:05.479
+similar to how I stumbled into Linux, where I was... I heard
+
+00:12:05.480 --> 00:12:09.519
+of it before, but I saw screenshots of it
+
+00:12:09.520 --> 00:12:11.247
+or something on Reddit, and I was like, oh,
+
+00:12:11.248 --> 00:12:14.648
+that looks pretty cool, maybe I'll look into that.
+
+00:12:14.649 --> 00:12:16.599
+And then on YouTube, I would see videos
+
+00:12:16.600 --> 00:12:21.199
+about Doom Emacs, and then the Doomcasts video,
+
+00:12:21.200 --> 00:12:37.239
+I think that's what really got me into it.
+
+00:12:37.240 --> 00:12:42.279
+Okay, I did my best to capture that. So what's the situation
+
+00:12:42.280 --> 00:12:46.439
+with respect to the mobile use, if that's applicable? And
+
+00:12:46.440 --> 00:12:47.639
+Orgzly is,
+
+00:12:47.640 --> 00:12:52.359
+sorry, was it not Doomcast? Is it System Crafters?
+
+00:12:52.360 --> 00:12:58.199
+Sorry if I botched the note. Oh yeah, System Crafters was
+
+00:12:58.200 --> 00:13:01.679
+also one of the things I used for getting into Emacs from
+
+00:13:01.680 --> 00:13:08.079
+scratch. I'm sorry if my dog is barking.
+
+00:13:08.080 --> 00:13:16.799
+the, I'm not sure how to pronounce his name, but Protesilaos,
+
+00:13:16.800 --> 00:13:20.399
+I think that's how you say it. I always say Prot just to get me
+
+00:13:20.400 --> 00:13:23.039
+out of that problem for what it's worth. I'm not sure that I
+
+00:13:23.040 --> 00:13:26.719
+can say it properly either. Yeah, his videos were really
+
+00:13:26.720 --> 00:13:30.479
+great for getting started with each, each individual
+
+00:13:30.480 --> 00:13:31.240
+component of
+
+00:13:31.292 --> 00:13:34.124
+something like there's entire videos just
+
+00:13:34.125 --> 00:13:40.249
+about completion and about a tool called Embark. And like, I
+
+00:13:40.250 --> 00:13:41.318
+would just watch those videos
+
+00:13:41.319 --> 00:13:42.999
+while I was doing the dishes or something.
+
+00:13:43.000 --> 00:13:53.679
+and I would learn a lot from that.
+
+NOTE Q: What the situation with respect to "mobile" use (if ever that's applicable)? (yes, Orgzly...using that?)
+
+00:13:53.680 --> 00:13:59.120
+Awesome. I love it. What about the mobile...
+
+00:13:59.121 --> 00:14:04.960
+sorry, did I get that question out there already? Oh, no.
+
+00:14:04.961 --> 00:14:07.917
+I don't use Emacs or any Org Mode things on my
+
+00:14:07.918 --> 00:14:19.963
+phone. I have an iPhone, unfortunately.
+
+00:14:19.964 --> 00:14:24.120
+But for org files, I couldn't really get it to sync over
+
+00:14:24.121 --> 00:14:26.800
+without using a paid app.
+
+00:14:26.801 --> 00:14:28.040
+And I didn't really look into it
+
+00:14:28.041 --> 00:14:30.140
+that much because I have a computer with me
+
+00:14:30.141 --> 00:14:36.000
+almost all the time.
+
+00:14:36.001 --> 00:14:39.520
+Usually I carry around a notebook. And if I really need to
+
+00:14:39.521 --> 00:14:41.940
+know something or remember it for later,
+
+00:14:41.941 --> 00:14:52.660
+I just write it down.
+
+00:14:52.661 --> 00:15:01.759
+I've seen people get started with e-ink tablets, and they
+
+00:15:01.760 --> 00:15:07.959
+sync it with SyncThing because it's Android, but I don't use
+
+00:15:07.960 --> 00:15:21.919
+that, so I can't really attest to how good it is.
+
+NOTE Q: Has using emacs led to expanded interest in programming/computer science?
+
+00:15:21.920 --> 00:15:25.559
+So has using Emacs led you to an expanded interest in
+
+00:15:25.560 --> 00:15:28.519
+programming and computer science? Sorry if
+
+00:15:28.520 --> 00:15:31.781
+I could have got that out of the presentation.
+
+00:15:31.782 --> 00:15:33.999
+I think Emacs is what got me
+
+00:15:34.000 --> 00:15:37.840
+started with Lisp specifically.
+
+00:15:37.900 --> 00:15:40.380
+Otherwise, I probably would have not really looked into it
+
+00:15:40.381 --> 00:15:44.920
+that much, other than like maybe dabbling in Scheme
+
+00:15:44.921 --> 00:15:50.180
+from the Structures and Interpretations of Computer
+
+00:15:50.181 --> 00:15:53.680
+Programs book. But I probably wouldn't have seen that if I
+
+00:15:53.681 --> 00:16:06.120
+hadn't discovered Emacs either so.
+
+00:16:06.121 --> 00:16:08.792
+I was already into programming
+
+00:16:08.793 --> 00:16:14.958
+before Emacs, and I had used VS Code for a little bit and then
+
+00:16:14.959 --> 00:16:22.917
+Vim. But I think I've done most of my programming
+
+00:16:22.918 --> 00:16:26.667
+inside of Emacs, in terms of lines of code written,
+
+00:16:26.668 --> 00:16:40.671
+projects made...
+
+NOTE Q: How does interaction with others work in technical terms?
+
+00:16:40.672 --> 00:16:44.519
+So maybe we'd jump from there, right, to, you mentioned
+
+00:16:44.520 --> 00:16:48.359
+exporting notes, essays, and so on, handing them on to other
+
+00:16:48.360 --> 00:16:53.319
+people. How does interaction with others work in technical
+
+00:16:53.320 --> 00:16:57.759
+terms? We mostly find workflows centered around like
+
+00:16:57.760 --> 00:17:00.479
+Microsoft products, and that makes sense to me. I have a day
+
+00:17:00.480 --> 00:17:03.719
+job where I have to work with a bunch of Microsoft products,
+
+00:17:03.720 --> 00:17:08.399
+and I know the workflows for that. So how do you manage your
+
+00:17:08.400 --> 00:17:14.519
+kind of Emacs-y you know, workflows, um, you know, in terms of
+
+00:17:14.520 --> 00:17:19.119
+sharing with people. Yeah. So for sharing with like my
+
+00:17:19.120 --> 00:17:22.719
+teachers or something, I would, we use like Google at our
+
+00:17:22.720 --> 00:17:25.759
+school. So for, I'm very fortunate that I don't have to deal
+
+00:17:25.760 --> 00:17:29.639
+with Microsoft other than with a very niche situations in
+
+00:17:29.640 --> 00:17:32.599
+which I can just use LibreOffice and then convert to Doc X or
+
+00:17:32.600 --> 00:17:35.719
+something. I heard that chef. That's, that's how all my
+
+00:17:35.720 --> 00:17:39.679
+vendors, uh, my vendors all roll their eyes when they were,
+
+00:17:39.680 --> 00:17:42.885
+oh, you're a Microsoft shop. Yep. Heard.
+
+00:17:42.886 --> 00:17:45.947
+Then they're all Google shops too, in education.
+
+00:17:45.948 --> 00:17:51.958
+Great point. For Google, I just... If my teachers wanted
+
+00:17:51.959 --> 00:17:53.125
+a Google Doc or something,
+
+00:17:53.126 --> 00:17:54.299
+I usually just copy paste
+
+00:17:54.300 --> 00:17:55.679
+whatever I wrote in Emacs
+
+00:17:55.680 --> 00:17:59.333
+and then still keep it, anyway, as a side thing
+
+00:17:59.334 --> 00:18:00.667
+because I don't really trust the cloud
+
+00:18:00.668 --> 00:18:02.875
+that much in terms of using
+
+00:18:02.876 --> 00:18:10.667
+it for later if I wanted to look at it. But for that, I don't
+
+00:18:10.668 --> 00:18:14.339
+really have too much problems. Hopefully, I will find a way
+
+00:18:14.340 --> 00:18:21.439
+to figure it out when I get into university.
+
+00:18:21.440 --> 00:18:26.679
+Awesome. Okay, well, I know we did it once already, but since
+
+00:18:26.680 --> 00:18:30.479
+this will be the end of the video, let me just open the floor
+
+00:18:30.480 --> 00:18:33.439
+one more time for parting thoughts.
+
+00:18:33.440 --> 00:18:41.719
+I'm not sure that I have any. I mean, you said it pretty well,
+
+00:18:41.720 --> 00:18:46.639
+right? I hope my peers see this. I hope they realize other
+
+00:18:46.640 --> 00:18:49.879
+tools are kind of inferior from a gets things done
+
+00:18:49.880 --> 00:18:54.639
+standpoint. Saw your talk. Heard that message in this Q&A.
+
+00:18:54.640 --> 00:18:58.159
+I think you did a great job. You don't have to say more, but
+
+00:18:58.160 --> 00:19:02.835
+just offering you the chance. Thank you.
+
+00:19:02.836 --> 00:19:03.916
+Well, thank you, Daniel,
+
+00:19:03.917 --> 00:19:07.439
+and thanks to everybody watching this video
+
+00:19:07.440 --> 00:19:09.838
+during the conference or after it,
+
+00:19:09.839 --> 00:19:12.159
+and appreciate and look forward
+
+00:19:12.160 --> 00:19:18.880
+to your talks in the future, Daniel. Thank you.
diff --git a/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt
new file mode 100644
index 00000000..9990c2e7
--- /dev/null
+++ b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt
@@ -0,0 +1,472 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:04.639
+Hello, my name is Daniel Pinkston. I'm in my last year of high
+
+00:00:04.640 --> 00:00:07.519
+school, about to go to university. About two and a half years
+
+00:00:07.520 --> 00:00:10.759
+ago, I discovered Emacs. My life has now been separated into
+
+00:00:10.760 --> 00:00:14.199
+two chapters: before and after Emacs. How could this tool be
+
+00:00:14.200 --> 00:00:18.399
+so impactful? Well, you'll just have to see. I made this talk
+
+00:00:18.400 --> 00:00:20.679
+for people who ask questions like this, but don't know where
+
+00:00:20.680 --> 00:00:24.559
+to start. When I started using Emacs for school, it took me a
+
+00:00:24.560 --> 00:00:27.959
+long time to find what I liked. There wasn't many examples of
+
+00:00:27.960 --> 00:00:31.119
+a full process for an organization. This talk was made to
+
+00:00:31.120 --> 00:00:34.359
+guide students like me, those who wanted more from their
+
+00:00:34.360 --> 00:00:37.599
+software workflow that they can learn and adapt from. My
+
+00:00:37.600 --> 00:00:39.959
+main idea was essentially explained by Zaiste in his
+
+00:00:39.960 --> 00:00:43.679
+EmacsConf presentation in 2019. He said something to the
+
+00:00:43.680 --> 00:00:46.399
+effect of, one of the great parts about Doom Emacs as a
+
+00:00:46.400 --> 00:00:48.599
+starting point is that it shows beginners how different
+
+00:00:48.600 --> 00:00:51.399
+packages mesh with each other. He says that people often
+
+00:00:51.400 --> 00:00:53.639
+have trouble seeing how to develop workflows using the
+
+00:00:53.640 --> 00:00:57.159
+thousands of packages Emacs has. In this talk, I introduce
+
+00:00:57.160 --> 00:00:59.519
+some Emacs tools and how they work together to improve a
+
+00:00:59.520 --> 00:01:04.159
+student's academic workflow. Let us commence. If you are
+
+00:01:04.160 --> 00:01:07.199
+watching this talk and have never heard of Emacs, it's a
+
+00:01:07.200 --> 00:01:10.479
+customizable text editor. When you become more
+
+00:01:10.480 --> 00:01:13.559
+experienced, it becomes your entire operating system. You
+
+00:01:13.560 --> 00:01:17.119
+just live inside of Emacs. It's also free as in free pencils
+
+00:01:17.120 --> 00:01:19.919
+and open source, which means that you don't have to pay to
+
+00:01:19.920 --> 00:01:23.599
+download Emacs and its source code. Emacs doesn't charge
+
+00:01:23.600 --> 00:01:25.879
+you a monthly subscription, nor does it steal all of your
+
+00:01:25.880 --> 00:01:31.119
+information. Yeah, I know, it's pretty crazy. In this talk,
+
+00:01:31.120 --> 00:01:33.559
+I introduce some Emacs tools and how they work together to
+
+00:01:33.560 --> 00:01:36.879
+improve a student's academic workflow. Earlier I read this
+
+00:01:36.880 --> 00:01:40.879
+post on this website that said, I can only imagine the great
+
+00:01:40.880 --> 00:01:43.719
+things you'd be able to learn and retain in your brain thanks
+
+00:01:43.720 --> 00:01:47.759
+to the great Emacs ecosystem. You've made the best choice,
+
+00:01:47.760 --> 00:01:51.439
+with far-going implications. I promise you not once, not
+
+00:01:51.440 --> 00:01:54.039
+even subtly, have I ever regretted having invested in
+
+00:01:54.040 --> 00:01:57.399
+learning Emacs. It's the best gift anyone can present to
+
+00:01:57.400 --> 00:02:00.399
+themself. You will forever feel indebted to your younger
+
+00:02:00.400 --> 00:02:03.839
+self for this gift. I guarantee that. I think that this is a
+
+00:02:03.840 --> 00:02:07.199
+real testament to the true power of Emacs. There's simply no
+
+00:02:07.200 --> 00:02:09.839
+other software like it. It's a complete and fitting
+
+00:02:09.840 --> 00:02:12.759
+solution for those who are willing to master it. Hopefully
+
+00:02:12.760 --> 00:02:16.199
+by now you're invested in learning Emacs. But before we jump
+
+00:02:16.200 --> 00:02:18.919
+into the technicalities of everything, we should outline
+
+00:02:18.920 --> 00:02:22.039
+the main things that you need it to do as a student. The best
+
+00:02:22.040 --> 00:02:24.279
+students have their system figured out so that it can do
+
+00:02:24.280 --> 00:02:27.239
+these things quickly and efficiently. They should have no
+
+00:02:27.240 --> 00:02:29.839
+problem quickly organizing what they need to do along with
+
+00:02:29.840 --> 00:02:32.999
+capturing information from their classes. But you may be
+
+00:02:33.000 --> 00:02:36.959
+wondering, how does Emacs do all that? Well, it does it with
+
+00:02:36.960 --> 00:02:41.679
+Org Mode. It was built to be an outliner for note-taking and
+
+00:02:41.680 --> 00:02:45.239
+list management, exactly what a student needs. One of the
+
+00:02:45.240 --> 00:02:47.959
+key features is that it's plain text, which means that you
+
+00:02:47.960 --> 00:02:50.079
+can migrate it between computers, and it's not a
+
+00:02:50.080 --> 00:02:52.919
+proprietary format. For those of you who have heard of
+
+00:02:52.920 --> 00:02:55.799
+Markdown, Org is similar in that it's a markup language.
+
+00:02:55.800 --> 00:02:59.079
+However, it's a bit older, and it goes way beyond Markdown's
+
+00:02:59.080 --> 00:03:01.479
+simple text formatting, with its scheduling, task
+
+00:03:01.480 --> 00:03:04.159
+management, and organization features, all captured
+
+00:03:04.160 --> 00:03:07.159
+within plain text simplicity. This slide shows off one of my
+
+00:03:07.160 --> 00:03:10.159
+notes from a heavily customized Emacs window. Yours
+
+00:03:10.160 --> 00:03:12.439
+probably won't look like this from the start, but you can
+
+00:03:12.440 --> 00:03:17.199
+personalize its appearance with custom themes.
+
+00:03:17.200 --> 00:03:19.999
+It's finally time to get into the technicalities. What you
+
+00:03:20.000 --> 00:03:22.639
+need to do with your notes in Org Mode is create, search, and
+
+00:03:22.640 --> 00:03:25.559
+possibly publish them. I prefer Denote for creating my
+
+00:03:25.560 --> 00:03:29.319
+notes, but there are many Emacs packages for that. Denote is
+
+00:03:29.320 --> 00:03:32.279
+just lightweight and gets the job done. I used to use Org
+
+00:03:32.280 --> 00:03:35.799
+Roam, but I didn't need or use all of its features. I also use
+
+00:03:35.800 --> 00:03:38.359
+Anki, a free and open source flashcard program, but of
+
+00:03:38.360 --> 00:03:41.319
+course, I make all my flashcards in Org Mode. For searching,
+
+00:03:41.320 --> 00:03:43.559
+I often use find and grep, which are both standard
+
+00:03:43.560 --> 00:03:46.799
+utilities on Linux. Other operating systems probably have
+
+00:03:46.800 --> 00:03:50.519
+a tool to replicate this functionality. The final item is
+
+00:03:50.520 --> 00:03:52.959
+exporting. There are many scenarios in which I want to
+
+00:03:52.960 --> 00:03:56.239
+publish my notes to share them with teachers or peers. One of
+
+00:03:56.240 --> 00:03:58.479
+my favorite features of Org Mode is the exportability of the
+
+00:03:58.480 --> 00:04:01.719
+notes you make. This presentation was actually made in Org
+
+00:04:01.720 --> 00:04:04.559
+Mode, and so are all of my lab reports and essays for school. I
+
+00:04:04.560 --> 00:04:10.039
+also write my webpage articles in Org Mode, which a program
+
+00:04:10.040 --> 00:04:15.359
+called Hugo converts into static HTML. So far, you haven't
+
+00:04:15.360 --> 00:04:18.039
+actually seen what it's like to use these tools. Here's a
+
+00:04:18.040 --> 00:04:21.279
+quick demo of how I track what I need to do. First, I always
+
+00:04:21.280 --> 00:04:24.799
+open up my todo.org file in my denote directory. For school
+
+00:04:24.800 --> 00:04:26.839
+assignments, I have a heading under Inbox where I have
+
+00:04:26.840 --> 00:04:29.919
+entries for each class I'm enrolled in. Each class's
+
+00:04:29.920 --> 00:04:32.839
+heading has a tag on it, which the assignment inherits as a
+
+00:04:32.840 --> 00:04:36.999
+subheading. Here's an example assignment. I have a test in
+
+00:04:37.000 --> 00:04:39.599
+physics next next Wednesday and the deadline to finish
+
+00:04:39.600 --> 00:04:42.359
+studying for it is the day that I'm taking it. When I plan my
+
+00:04:42.360 --> 00:04:45.399
+studying, I run the keybind for org-schedule to schedule the
+
+00:04:45.400 --> 00:04:48.839
+day on which I will study it. I can also mark it as the highest
+
+00:04:48.840 --> 00:04:52.399
+priority, making it the most important thing to do. I can
+
+00:04:52.400 --> 00:04:56.439
+also open up my agenda to see my tasks. I've cleaned it up as to
+
+00:04:56.440 --> 00:04:59.679
+not reveal any of my nefarious plans. This agenda is
+
+00:04:59.680 --> 00:05:03.239
+customized, but there are many tutorials on how to do this.
+
+00:05:03.240 --> 00:05:05.599
+My agenda has been the most transforming part of my student
+
+00:05:05.600 --> 00:05:08.239
+experience, and I've gotten a lot better at managing what I
+
+00:05:08.240 --> 00:05:13.119
+need to do. Next, I'll show you what I like to do to take notes.
+
+00:05:13.120 --> 00:05:15.999
+The main entry point for a new note is always starting with
+
+00:05:16.000 --> 00:05:19.679
+M-x denote. You fill out a couple of customizable prompts
+
+00:05:19.680 --> 00:05:23.119
+that will ask for values of the note. I'll start by making a
+
+00:05:23.120 --> 00:05:26.359
+new note, which we'll call test note. Then we'll give it a key
+
+00:05:26.360 --> 00:05:29.359
+for what category it's under. For this, I usually put the
+
+00:05:29.360 --> 00:05:32.319
+subject of the class that I'm doing this note for, be it
+
+00:05:32.320 --> 00:05:35.559
+programming, English, history, or science. Try to keep
+
+00:05:35.560 --> 00:05:39.159
+them short. And then Shazam, we have ourselves a brand new
+
+00:05:39.160 --> 00:05:42.399
+note which we can start typing away in. The cool thing about
+
+00:05:42.400 --> 00:05:45.199
+the note is you don't have to manually name your note files.
+
+00:05:45.200 --> 00:05:49.479
+It uses a standard convention using the time, the title, and
+
+00:05:49.480 --> 00:05:53.199
+the keywords of the note to make it unique. You can even make a
+
+00:05:53.200 --> 00:05:56.599
+meta note, a note about notes, to show a list of notes under a
+
+00:05:56.600 --> 00:06:01.319
+certain keyword. The final step in creation is flashcards.
+
+00:06:01.320 --> 00:06:04.639
+There is a great package called Anki Editor that makes Emacs
+
+00:06:04.640 --> 00:06:08.159
+able to push cards into Anki. There isn't much to
+
+00:06:08.160 --> 00:06:11.159
+overcomplicate here, it's just content on front and back,
+
+00:06:11.160 --> 00:06:14.599
+sometimes with images and complete the phrase. You can also
+
+00:06:14.600 --> 00:06:17.319
+set up LaTeX math formatting, but I don't really use it that
+
+00:06:17.320 --> 00:06:20.599
+much. If you're living in Emacs all the time, you may want
+
+00:06:20.600 --> 00:06:24.559
+some creature comforts. These are some of my favorite. Org
+
+00:06:24.560 --> 00:06:26.959
+Download is a package that allows you to paste images from
+
+00:06:26.960 --> 00:06:28.239
+your clipboard into an org file.
+
+00:06:28.240 --> 00:06:37.319
+Logos is a text narrowing tool that helps you restrict what
+
+00:06:37.320 --> 00:06:40.479
+text you can see and focus on what you're writing. It extends
+
+00:06:40.480 --> 00:06:43.159
+Emacs default narrowing, also adding functionality for
+
+00:06:43.160 --> 00:06:45.399
+quickly switching to headings for a presentation look. It
+
+00:06:45.400 --> 00:06:48.239
+can remove your mode line and center your text for better
+
+00:06:48.240 --> 00:06:53.239
+focus. org-fragtog allows you to move between previews of
+
+00:06:53.240 --> 00:06:55.639
+your LaTeX formulas and the unrendered syntax.
+
+00:06:55.640 --> 00:07:00.679
+pdf-view-mode is a fully fledged PDF reader, complete with
+
+00:07:00.680 --> 00:07:03.439
+annotations and org syntax, highlighting, and clickable
+
+00:07:03.440 --> 00:07:03.919
+links.
+
+00:07:03.920 --> 00:07:09.719
+Something you may want to consider is digital versus
+
+00:07:09.720 --> 00:07:12.199
+handwritten notes. There have been several talks in the
+
+00:07:12.200 --> 00:07:14.799
+past about how to integrate handwritten notes into Emacs,
+
+00:07:14.800 --> 00:07:20.239
+such as retyping them or scanning them in with an OCR tool. I
+
+00:07:20.240 --> 00:07:21.959
+don't think that type notes are the only way that you should
+
+00:07:21.960 --> 00:07:25.159
+take notes, but if you do try writing, at least get some nice
+
+00:07:25.160 --> 00:07:29.079
+stationery. I've seen people ask online to YouTubers and
+
+00:07:29.080 --> 00:07:32.479
+Twitch streamers asking, what is your keyboard? What is
+
+00:07:32.480 --> 00:07:35.519
+your window manager? I understand that they're curious,
+
+00:07:35.520 --> 00:07:37.919
+but cosplaying as a productive person by using the same
+
+00:07:37.920 --> 00:07:41.159
+tools won't accomplish anything. Emacs will not make you a
+
+00:07:41.160 --> 00:07:44.439
+productive person. It can be a significant time investment
+
+00:07:44.440 --> 00:07:47.879
+because of how customizable it is. However, I believe it
+
+00:07:47.880 --> 00:07:50.399
+will make it easier for you to be productive, as it certainly
+
+00:07:50.400 --> 00:07:53.519
+has for me. This was just an example workflow to show
+
+00:07:53.520 --> 00:07:56.119
+prospective students how they can use Emacs for their
+
+00:07:56.120 --> 00:07:56.559
+needs.
+
+00:07:56.560 --> 00:08:01.999
+Even if you don't end up using Emacs in the end, you can still
+
+00:08:02.000 --> 00:08:04.719
+apply most of its ideas to other software. It just won't be as
+
+00:08:04.720 --> 00:08:10.199
+customizable and extensible as Emacs is. Thank you for
+
+00:08:10.200 --> 00:08:12.519
+listening to my talk. It's been a great pleasure to finally
+
+00:08:12.520 --> 00:08:15.359
+take part in this conference in some capacity, and I'm glad I
+
+00:08:15.360 --> 00:08:18.399
+was given a chance. To all the students who may try Emacs in
+
+00:08:18.400 --> 00:08:21.199
+the future, good luck because there might not be any going
+
+00:08:21.200 --> 00:08:24.239
+back. If you have any questions, feel free to shoot me an
+
+00:08:24.240 --> 00:08:26.800
+email. Thank you for your time.
diff --git a/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt b/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt
new file mode 100644
index 00000000..f43e8590
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt
@@ -0,0 +1,118 @@
+WEBVTT
+
+00:00.007 --> 00:03.045
+Hi again everyone, this is Leo, and I'm very sorry that I
+
+00:03.046 --> 00:06.284
+couldn't stick around to the very end of EmacsConf 2024.
+
+00:06.285 --> 00:09.843
+This is a recording, and hopefully this is playing as my
+
+00:09.844 --> 00:13.962
+co-organizers are closing EmacsConf 2024. There's just
+
+00:13.963 --> 00:17.761
+one last thing that I wanted to invite people to do, because
+
+00:17.762 --> 00:20.880
+for me, it was an honor to host the general track of EmacsConf
+
+00:20.881 --> 00:24.119
+this year again. It's my fifth time. But if you are
+
+00:24.120 --> 00:28.638
+interested in hosting, like me, or maybe transcribing
+
+00:28.639 --> 00:32.397
+pre-recordings, you know, captioning them, we do have
+
+00:32.398 --> 00:35.036
+plenty of roles open for people who want to contribute to
+
+00:35.037 --> 00:37.715
+EmacsConf. We do have a page on the website which is
+
+00:37.716 --> 00:40.794
+https://emacsconf.org/volunteer .
+
+00:40.795 --> 00:43.153
+You will find all the information about the roles that
+
+00:43.154 --> 00:45.460
+you can take. Just listing them very quickly.
+
+00:45.461 --> 00:47.152
+We've got captioners, as I mentioned.
+
+00:47.153 --> 00:49.230
+We've got hosts. We have
+
+00:49.231 --> 00:52.229
+Internet Relay Chat monitors, so IRC people to
+
+00:52.230 --> 00:00:53.800
+make sure that everyone is being nice
+
+00:00:53.801 --> 00:00:55.668
+in the chat and perhaps pasting
+
+00:55.669 --> 00:58.747
+questions from IRC to the pad. Speaking of the pad, we have
+
+00:58.748 --> 01:02.386
+pad scribes to make sure that all the questions and answers
+
+01:02.387 --> 01:05.105
+are documented in the pad. That makes our job much easier for
+
+01:05.106 --> 01:07.664
+the publishing process. When it comes to the publishing
+
+01:07.665 --> 01:09.663
+process, we've got everything that has to do with the
+
+01:09.664 --> 01:13.622
+pre-recordings, so people to process the audio of
+
+01:13.623 --> 01:18.101
+pre-recordings, re-encoding. We do have a lot of scripts
+
+01:18.102 --> 01:20.660
+that Sacha and myself have been writing to make our job much
+
+01:20.661 --> 01:24.459
+easier, but we are always in need of a pair of eyes to improve
+
+01:24.460 --> 01:28.138
+the process. Lastly, if you happen to have experience in
+
+01:28.139 --> 01:31.817
+infrastructure and video, we do need sysadmins to maintain
+
+01:31.818 --> 01:34.216
+the platform that we use for streaming, because again,
+
+01:34.217 --> 01:37.455
+everything we do is depending on remote machines, both for
+
+01:37.456 --> 01:42.334
+the streaming, the re-encoding, the transcription. If
+
+01:42.335 --> 01:45.013
+you have any interest in helping us with this, please send us
+
+01:45.014 --> 01:48.772
+an email. And all the information is on the website. All that
+
+01:48.773 --> 01:52.171
+remains for me is to say thank you so much for coming to
+
+01:52.172 --> 01:54.650
+EmacsConf, thanks to all the speakers for the wonderful
+
+01:54.651 --> 00:01:57.792
+talks, and I will most likely see you next year.
+
+00:01:57.793 --> 00:01:59.209
+Have fun, everyone!
diff --git a/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt b/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt
new file mode 100644
index 00000000..adff10e7
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt
@@ -0,0 +1,361 @@
+WEBVTT
+
+00:00.007 --> 00:03.445
+Welcome to the second day of EmacsConf 2024.
+
+00:03.446 --> 00:05.164
+Today we have one track of talks,
+
+00:05.165 --> 00:06.483
+so you don't have to worry about
+
+00:06.484 --> 00:07.922
+missing out on anything.
+
+00:07.923 --> 00:11.201
+The best parts of EmacsConf are the conversations.
+
+00:11.202 --> 00:14.000
+The wiki has a page on how to watch and participate,
+
+00:14.001 --> 00:15.799
+and I'll give you a quick overview as well.
+
+00:15.800 --> 00:18.678
+You can watch the stream at live.emacsconf.org
+
+00:18.679 --> 00:20.917
+using free and open source software.
+
+00:20.918 --> 00:23.316
+Using a streaming media player like mpv
+
+00:23.317 --> 00:26.195
+seems to be the best way to watch in terms of performance
+
+00:26.196 --> 00:28.034
+but there are also web-based players
+
+00:28.035 --> 00:29.273
+just in case that's all you've got.
+
+00:29.274 --> 00:30.672
+As you're watching the talks,
+
+00:30.673 --> 00:32.951
+you can refer to the schedule in another window.
+
+00:32.952 --> 00:35.750
+Hover over the boxes to see the times and titles,
+
+00:35.751 --> 00:37.389
+and click on the boxes in the schedule
+
+00:37.390 --> 00:39.948
+to jump to the talk's page for more details.
+
+00:39.949 --> 00:42.147
+You can also get the schedule as an iCalendar file
+
+00:42.148 --> 00:44.226
+or as an Org file in different time zones.
+
+00:44.227 --> 00:45.705
+Many talks will be followed by
+
+00:45.706 --> 00:47.624
+live Q&A web conferences with the speaker,
+
+00:47.625 --> 00:50.543
+which will be done in BigBlueButton or BBB.
+
+00:50.544 --> 00:52.902
+These are indicated with a solid border on the schedule
+
+00:52.903 --> 00:55.501
+and by Q&A: BBB on the schedule page.
+
+00:55.502 --> 00:57.580
+You can join the web conference room
+
+00:57.581 --> 00:59.259
+by clicking on the BBB link
+
+00:59.260 --> 01:01.658
+on the schedule page or the talk's webpage.
+
+01:01.659 --> 01:04.937
+Then you can ask your questions yourself when the Q&A starts.
+
+01:04.938 --> 01:07.336
+To improve performance, please keep your webcam off
+
+01:07.337 --> 01:09.735
+and stay muted until it's your turn to talk.
+
+01:09.736 --> 01:11.214
+If you don't like Javascript,
+
+01:11.215 --> 01:13.373
+you can still ask questions via IRC
+
+01:13.374 --> 01:15.012
+and the hosts can read them out for you.
+
+01:15.013 --> 01:16.731
+We're probably going to automatically switch
+
+01:16.732 --> 01:18.930
+between talks and Q&A sessions,
+
+01:18.931 --> 01:21.529
+so the transitions on the stream might be a little sudden.
+
+01:21.530 --> 01:23.408
+People in the BigBlueButton room
+
+01:23.409 --> 01:25.047
+can continue the conversation
+
+01:25.048 --> 01:27.646
+even after the talk moves off-stream,
+
+01:27.647 --> 01:29.565
+and you can also reach out to the speakers
+
+01:29.566 --> 01:32.564
+using the contact information on the talk page.
+
+01:32.565 --> 01:35.243
+Other talks will have Q&A via Etherpad or IRC,
+
+01:35.244 --> 01:37.282
+depending on what the speakers prefer.
+
+01:37.283 --> 01:39.761
+This is indicated in the schedule with a dashed border
+
+01:39.762 --> 01:41.200
+and on the schedule page as well.
+
+01:41.201 --> 01:43.679
+Please ask your questions in the recommended places
+
+01:43.680 --> 01:45.718
+so that the speakers can easily see them.
+
+01:45.719 --> 01:47.476
+Again, if you ask your questions in IRC,
+
+01:47.477 --> 01:49.636
+we'll try to copy them to the right places.
+
+01:49.637 --> 01:50.995
+We're going to start Sunday morning
+
+01:50.996 --> 01:53.154
+with more IRC/Etherpad Q&A
+
+01:53.155 --> 01:54.073
+to try to get around
+
+01:54.074 --> 01:55.392
+some of the bandwidth issues
+
+01:55.393 --> 01:56.431
+that we noticed last year.
+
+01:56.432 --> 01:59.110
+The schedule pages and track pages have quick shortcuts
+
+01:59.111 --> 02:02.189
+so that you can find out more about talks, open the Etherpads,
+
+02:02.190 --> 02:03.916
+and join the Q&A sessions.
+
+02:03.917 --> 02:05.707
+The watch page has more tips
+
+02:05.708 --> 02:07.666
+on how to make the most of Q&A.
+
+02:07.667 --> 02:10.265
+If you can, please add notes and ask questions
+
+02:10.266 --> 02:12.424
+in the Etherpad for the talk. That makes it easier
+
+02:12.425 --> 02:13.863
+for everyone to share their notes,
+
+02:13.864 --> 02:16.542
+and speakers and hosts can read the questions from there.
+
+02:16.543 --> 02:19.141
+We'll copy the notes to the talk pages afterwards.
+
+02:19.142 --> 02:20.540
+We have one pad for each talk,
+
+02:20.541 --> 02:22.579
+so you can follow the links to get to the next one
+
+02:22.580 --> 02:25.178
+or go back to the schedule and get the link from there.
+
+02:25.179 --> 02:26.817
+If you have general feedback about
+
+02:26.818 --> 02:29.056
+the conference itself, please put it in
+
+02:29.057 --> 02:34.135
+pad.emacsconf.org/2024 , which is linked on each pad.
+
+02:34.136 --> 02:37.134
+You can also use this as a general community message board
+
+02:37.135 --> 02:38.893
+for things like Help Wanted.
+
+02:38.894 --> 02:40.172
+Or you can put it in IRC
+
+02:40.173 --> 02:41.531
+and we'll find it there too.
+
+02:41.532 --> 02:44.210
+Internet Relay Chat or IRC can be another great way
+
+02:44.211 --> 02:46.329
+to be part of lots of conversations.
+
+02:46.330 --> 02:49.768
+You can use chat.emacsconf.org to join the IRC channels
+
+02:49.769 --> 02:51.212
+through your web browser.
+
+02:51.213 --> 02:53.046
+The tabs on the left can help you
+
+02:53.047 --> 02:54.725
+switch between the different channels.
+
+02:54.726 --> 02:56.284
+Most discussions will be in
+
+02:56.285 --> 02:58.563
+#emacsconf-gen for the General track.
+
+02:58.564 --> 03:03.002
+If you need to reach us, you can join #emacsconf-org
+
+03:03.003 --> 03:07.241
+or e-mail emacsconf-org-private@gnu.org.
+
+03:07.242 --> 03:10.240
+You can use #emacsconf for hallway conversations.
+
+03:10.241 --> 03:12.519
+Of course, you can join any of these channels
+
+03:12.520 --> 03:14.718
+with your favourite IRC client.
+
+03:14.719 --> 03:17.197
+You can connect to irc.libera.chat
+
+03:17.198 --> 03:19.836
+port 6697 with TLS.
+
+03:19.837 --> 03:23.075
+Once again, we're going to be streaming with open captions
+
+03:23.076 --> 03:25.834
+for most of the talks this year, thanks to our speakers and
+
+03:25.835 --> 03:28.873
+captioning volunteers. The captioned talks are indicated
+
+03:28.874 --> 03:31.592
+on the schedule, and with any luck, we'll be posting
+
+03:31.593 --> 03:34.951
+transcripts on talk pages shortly after the talks start.
+
+03:34.952 --> 03:36.710
+If you need additional accommodations,
+
+03:36.711 --> 03:38.909
+please let us know in #emacsconf-org
+
+03:38.910 --> 03:40.428
+and we'll see if we can make things happen.
+
+03:40.429 --> 03:44.627
+If something goes down, we'll update status.emacsconf.org.
+
+03:44.628 --> 03:46.506
+If it doesn't look like we've noticed yet,
+
+03:46.507 --> 03:49.745
+please let us know in the #emacsconf-org IRC channel,
+
+03:49.746 --> 03:51.424
+where we will be quietly panicking.
+
+03:51.425 --> 03:54.503
+In all of these conversations, please keep in mind
+
+03:54.504 --> 03:57.382
+our guidelines for conduct. You can find them on the wiki,
+
+03:57.383 --> 03:59.661
+They basically boil down to: please be nice.
+
+03:59.662 --> 04:02.900
+If all goes well, the prerecorded talks and transcripts
+
+04:02.901 --> 04:04.179
+should be available from the talk pages
+
+04:04.180 --> 04:05.698
+shortly after they start playing,
+
+04:05.699 --> 04:08.017
+and we'll post the recordings of live talks
+
+04:08.018 --> 04:10.176
+and Q&A sessions within the next month or so.
+
+04:10.177 --> 04:13.175
+If you'd like to get an update, you can subscribe to
+
+04:13.176 --> 04:15.134
+the emacsconf-discuss mailing list.
+
+04:15.135 --> 04:16.653
+All right, let's get going.
+
+04:16.654 --> 04:19.572
+Leo Vivier is hosting the general track again today.
+
+04:19.573 --> 04:23.131
+The other volunteers and I will run around mostly backstage,
+
+04:23.132 --> 04:25.210
+and you'll probably meet us in the closing remarks.
+
+04:25.211 --> 04:28.689
+That's also where we get to thank
+
+04:28.690 --> 04:30.648
+all the people and organizations
+
+04:30.649 --> 04:32.927
+who make EmacsConf even possible.
+
+04:32.928 --> 04:36.647
+Thanks for coming to EmacsConf 2024.
diff --git a/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt
new file mode 100644
index 00000000..bb183779
--- /dev/null
+++ b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt
@@ -0,0 +1,405 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:09.279
+So just to be clear, right now we are currently streaming. So
+
+00:00:09.280 --> 00:00:12.679
+if you want to answer with your voice, you can as well. Oh, I'm
+
+00:00:12.680 --> 00:00:17.999
+sorry. Okay. Yeah. So I've got a question. I think there was a
+
+00:00:18.000 --> 00:00:20.279
+little bit of a misunderstanding with whether we were doing
+
+00:00:20.280 --> 00:00:25.079
+a Q&A on BBB or if we were doing it on Etherpad. So it's really
+
+00:00:25.080 --> 00:00:28.479
+up to you. Right now we've set up everything. So if you want to
+
+00:00:28.480 --> 00:00:32.119
+start answering questions with your voice, we might as
+
+00:00:32.120 --> 00:00:33.864
+well. So OK, so I can just do it live.
+
+NOTE Q: When you choose colors based on the same lightness, does it not hurt readability since the eye sees lightness most?
+
+00:00:33.865 --> 00:00:38.239
+So one question is, so I
+
+00:00:38.240 --> 00:00:41.839
+assume this is a question on the lab space, where all the
+
+00:00:41.840 --> 00:00:46.959
+colors are the same lightness. Does it hurt readability? So
+
+00:00:46.960 --> 00:00:53.679
+far, I find it to be OK. For the lab theme, I picked the colors
+
+00:00:53.680 --> 00:01:00.999
+manually. So like I could just fix a angle essentially so
+
+00:01:01.000 --> 00:01:11.759
+that no colors are similar, so I have good readability. But
+
+00:01:11.760 --> 00:01:18.959
+for a random theme in Monte Carlo, it's hard because like
+
+00:01:18.960 --> 00:01:24.639
+it's just random. But yeah, that's a really good point. And
+
+00:01:24.640 --> 00:01:28.959
+also that's one of the motivations I did the nothing, you
+
+00:01:28.960 --> 00:01:33.999
+know, the great scale theme to explore just using
+
+00:01:34.000 --> 00:01:39.759
+lightness. Yeah.
+
+00:01:39.760 --> 00:01:48.199
+So looking at other questions.
+
+00:01:48.200 --> 00:01:52.279
+Okay, great. Do you want to take the next question. So, okay.
+
+NOTE Q: For monte-carlo, are all the "random" colors picked using a colorwheel/hue rotation?
+
+00:01:52.280 --> 00:01:56.959
+Okay, let's go to the third first. Let's finish. Yes, for
+
+00:01:56.960 --> 00:01:59.999
+Monte Carlo are all the random colors that using a color
+
+00:02:00.000 --> 00:02:06.479
+wheel here. Yes. Well, so basically, what this theme does is
+
+00:02:06.480 --> 00:02:14.159
+it. It picks a saturation and lightness for me first. These
+
+00:02:14.160 --> 00:02:19.759
+are also random, but they are picked with some kind of range.
+
+00:02:19.760 --> 00:02:26.559
+And that's a parameter that I can play with, you know, the
+
+00:02:26.560 --> 00:02:28.959
+range of lightness and separation.
+
+00:02:28.960 --> 00:02:33.479
+Once those are fixed, the colors are picked by angles in the
+
+00:02:33.480 --> 00:02:38.399
+color wheel, or heel rotation, as you would put it. So yes,
+
+00:02:38.400 --> 00:02:43.719
+that's roughly the process.
+
+NOTE Q: One area I see emacs able to do themes that is "underused?" is changing the font
+
+00:02:43.720 --> 00:02:47.239
+OK, great. I think the second question is still in the
+
+00:02:47.240 --> 00:02:51.679
+process. Oh, well, maybe you could start fielding it. I
+
+00:02:51.680 --> 00:02:55.319
+think you've got already something to work on. I see one area
+
+00:02:55.320 --> 00:03:01.199
+I see Emacs able to do. under use is changing the font, font
+
+00:03:01.200 --> 00:03:09.759
+size, font type, model space based on various faces. Yeah,
+
+00:03:09.760 --> 00:03:13.439
+so to paraphrase the question, one thing that Emacs is
+
+00:03:13.440 --> 00:03:17.399
+definitely not doing a whole lot of right now is changing the
+
+00:03:17.400 --> 00:03:21.079
+font that is being used, be it the font size, the font family.
+
+00:03:21.080 --> 00:03:25.039
+Sometimes you see themes, especially old mode themes,
+
+00:03:25.040 --> 00:03:29.199
+fontify differently the headers of the documents versus
+
+00:03:29.200 --> 00:03:31.879
+the content, and usually you do have a little bit of a
+
+00:03:31.880 --> 00:03:34.719
+contrast that is being introduced. But is it something that
+
+00:03:34.720 --> 00:03:38.959
+you find value in, this type of contrast based on font? And to
+
+00:03:38.960 --> 00:03:45.159
+me, it's my personal preference to just use one font. I don't
+
+00:03:45.160 --> 00:03:51.479
+even change the font size a lot in org mode. It's just
+
+00:03:51.480 --> 00:03:55.319
+personal preference.
+
+00:03:55.320 --> 00:03:58.999
+I've seen scenes where once I applied, I opened the org doc
+
+00:03:59.000 --> 00:04:04.639
+and suddenly all the titles are like Serif or some fancy
+
+00:04:04.640 --> 00:04:12.759
+fonts. That works. And to me, again, it's a personal
+
+00:04:12.760 --> 00:04:16.919
+preference that I don't really like that, but I know a lot of
+
+00:04:16.920 --> 00:04:21.799
+people like that. So it's up to you, I guess. Yeah, I mean,
+
+00:04:21.800 --> 00:04:25.839
+this, as we've seen in your talk and as well as the previous
+
+00:04:25.840 --> 00:04:29.279
+one we had this morning, you know, themes are very personal
+
+00:04:29.280 --> 00:04:33.079
+and at the end, whatever you need to, you know, some people
+
+00:04:33.080 --> 00:04:35.799
+are going to need more contrast than others, some people are
+
+00:04:35.800 --> 00:04:37.999
+going to need a little more variety in the fonts that they
+
+00:04:38.000 --> 00:04:41.359
+use. Ultimately, it's up to you really what you want to use.
+
+00:04:41.360 --> 00:04:45.199
+The end point, the angle that one should be aiming for is to
+
+00:04:45.200 --> 00:04:49.039
+feel comfortable in what they're editing. And whether this
+
+00:04:49.040 --> 00:04:52.799
+comfort translates into a very barebone color theme like
+
+00:04:52.800 --> 00:04:56.319
+the one we saw this morning with very slight colors but still
+
+00:04:56.320 --> 00:04:59.079
+which has a lot of personality or perhaps something closer
+
+00:04:59.080 --> 00:05:04.279
+to yours which tends to use equal luminance or lightness for
+
+00:05:04.280 --> 00:05:07.879
+the different entries. Well, everyone needs to tune in and
+
+00:05:07.880 --> 00:05:13.959
+find whatever works best for them, I think. Yep. And also, I
+
+00:05:13.960 --> 00:05:18.479
+want to note, I actually have a personal rule. It's also in
+
+00:05:18.480 --> 00:05:24.479
+all my themes. It's that comments have to be italic. I just
+
+00:05:24.480 --> 00:05:31.999
+like the look of italic comments. So, I actually... So, if
+
+00:05:32.000 --> 00:05:37.799
+you... In one of the section in the video, I mentioned I have
+
+00:05:37.800 --> 00:05:41.959
+hooks. Maybe I didn't mention, but I have hooks when using
+
+00:05:41.960 --> 00:05:47.359
+the picking the random theme setup. One of the purpose of
+
+00:05:47.360 --> 00:05:52.359
+that hook is I can add italic to all the themes on the comment
+
+00:05:52.360 --> 00:05:58.999
+face. Which I don't think it works actually right now, but
+
+00:05:59.000 --> 00:06:02.679
+that's the intention. Yeah, but I think it answers the
+
+00:06:02.680 --> 00:06:05.879
+question we started on originally. Because changing the
+
+00:06:05.880 --> 00:06:11.559
+font, I mean, using the italic variant of the font, it's
+
+00:06:11.560 --> 00:06:14.119
+literally a different font. And so, being able to have this
+
+00:06:14.120 --> 00:06:17.479
+type of contrast is actually important for you. So, it's
+
+00:06:17.480 --> 00:06:20.839
+nice that you managed to find this particular bit of
+
+00:06:20.840 --> 00:06:25.519
+knowledge through experimentation. And also I want to add
+
+00:06:25.520 --> 00:06:30.719
+that if you pick a monospace font like I do, usually there's
+
+00:06:30.720 --> 00:06:37.439
+not a lot of... Creativity? No, that's not the word. It's a
+
+00:06:37.440 --> 00:06:45.639
+lot of personality in the regular font part. But people do
+
+00:06:45.640 --> 00:06:51.799
+put a lot of different things in the italic. So yeah, if you
+
+00:06:51.800 --> 00:06:55.999
+can find a way to utilize the italic face, you could see some
+
+00:06:56.000 --> 00:07:01.239
+interesting results. Yeah, definitely. Again, I think
+
+00:07:01.240 --> 00:07:03.719
+it's important to consider all the things you can play with
+
+00:07:03.720 --> 00:07:06.519
+in terms of contrast. Because at the end of the day, you know,
+
+00:07:06.520 --> 00:07:08.839
+some people are going to be more receptive to a change of font
+
+00:07:08.840 --> 00:07:11.639
+than change of color. You know, just considering the amount
+
+00:07:11.640 --> 00:07:14.439
+of people who are colorblind and who are using software like
+
+00:07:14.440 --> 00:07:19.279
+this. You know, sometimes your vision optimizes for
+
+00:07:19.280 --> 00:07:22.039
+particular kind of changes and some people are going to be
+
+00:07:22.040 --> 00:07:26.279
+more sensitive to a slanted eye than they would be to an eye
+
+00:07:26.280 --> 00:07:31.479
+that is red or an eye that is blue. So, But it's not for
+
+00:07:31.480 --> 00:07:31.999
+everyone.
+
+00:07:32.000 --> 00:07:37.519
+So I'm looking at the time and we have about eight minutes
+
+00:07:37.520 --> 00:07:38.839
+until we go into the next talk.
+
+00:07:38.840 --> 00:07:44.519
+To be frank, I don't think I've got any more questions on my
+
+00:07:44.520 --> 00:07:46.879
+end. I'm not sure if we've got any people on BBB who has joined
+
+00:07:46.880 --> 00:07:49.119
+us and would like to ask a question. Let me check on IRC
+
+00:07:49.120 --> 00:07:53.799
+quickly if we've got any questions coming our way. I don't
+
+00:07:53.800 --> 00:07:57.199
+see any. Do you see any on your end?
+
+00:07:57.200 --> 00:08:06.479
+Not really. Well, then I suggest we just leave it at that and
+
+00:08:06.480 --> 00:08:08.679
+enjoy a little break before the next chat. So, thank you so
+
+00:08:08.680 --> 00:08:11.559
+much Metrowind for coming to EmacsConf and talking about
+
+00:08:11.560 --> 00:08:14.399
+colors because, as you saw, many people are interested
+
+00:08:14.400 --> 00:08:17.199
+about them, so much that another person decided to have a
+
+00:08:17.200 --> 00:08:20.639
+chat about theme. We didn't plan for this, but it's nice to
+
+00:08:20.640 --> 00:08:23.959
+see. And, well, perhaps you could collaborate in the future
+
+00:08:23.960 --> 00:08:26.919
+and both find the mutual confidence that you need to push
+
+00:08:26.920 --> 00:08:29.799
+your stuff to Melpa. Because I did hear that you weren't
+
+00:08:29.800 --> 00:08:33.119
+feeling too confident about your random color theme
+
+00:08:33.120 --> 00:08:37.439
+package. But, you know, you've done the first step, which is
+
+00:08:37.440 --> 00:08:40.559
+talking about it and sharing it with all of us. And perhaps
+
+00:08:40.560 --> 00:08:42.759
+the next step is to actually clean up the code to your
+
+00:08:42.760 --> 00:08:47.959
+satisfaction and publish it eventually. Oh, I can see
+
+00:08:47.960 --> 00:08:53.460
+another question. Should we go to that? Sure.
+
+NOTE Q: Have you ever kept any of the random themes that were thrown up?
+
+00:08:53.461 --> 00:08:54.079
+Have you ever
+
+00:08:54.080 --> 00:08:59.719
+kept any of the random themes that were thrown up? So I assume
+
+00:08:59.720 --> 00:09:05.119
+this is for the Monte Carlo setup. The answer is no. The
+
+00:09:05.120 --> 00:09:09.999
+reason is, like I mentioned, I'm using the randomly picking
+
+00:09:10.000 --> 00:09:15.079
+a theme setup right now. And Monte Carlo is one of them. Now,
+
+00:09:15.080 --> 00:09:18.639
+when Emacs picks Monte Carlo by chance, I wouldn't know
+
+00:09:18.640 --> 00:09:23.239
+about it. So I wouldn't know this is my random theme. That's
+
+00:09:23.240 --> 00:09:28.839
+the reason I never kept any, like, good color schemes
+
+00:09:28.840 --> 00:09:34.959
+generated. So, no. Right, okay. Well, considering we don't
+
+00:09:34.960 --> 00:09:37.359
+have any further questions, what I suggest now is that we'll
+
+00:09:37.360 --> 00:09:40.239
+leave it at that. So, again, Metrowind, thank you so much.
+
+00:09:40.240 --> 00:09:43.079
+Thank you. And hopefully we'll hear more of your themes in
+
+00:09:43.080 --> 00:09:51.120
+the future. Cool. Thanks. All right. Bye bye. Bye bye.
diff --git a/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt
new file mode 100644
index 00000000..51441945
--- /dev/null
+++ b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt
@@ -0,0 +1,29 @@
+WEBVTT
+
+
+00:00:02.140 --> 00:00:47.560
+Introduction
+
+00:00:48.820 --> 00:01:14.470
+Deviant
+
+00:01:15.640 --> 00:02:50.320
+FlucUI
+
+00:02:51.910 --> 00:05:23.440
+Lab
+
+00:05:25.090 --> 00:06:13.930
+NotInk: grayscale
+
+00:06:13.930 --> 00:06:48.580
+Random theme
+
+00:06:50.020 --> 00:07:18.370
+Monte Carlo
+
+00:07:19.780 --> 00:08:10.870
+How to pick a random color palette
+
+00:08:12.070 --> 00:11:23.540
+XYZ
diff --git a/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt
new file mode 100644
index 00000000..3f132c9a
--- /dev/null
+++ b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt
@@ -0,0 +1,619 @@
+WEBVTT captioned by MetroWind
+
+NOTE Introduction
+
+00:02.140 --> 00:05.440
+Hi my name is MetroWind.
+
+00:05.440 --> 00:12.910
+In this talk I will take you through my journey into Emacs themes.
+
+00:12.970 --> 00:15.730
+I am a long-time Emacs user. I started using
+
+00:15.760 --> 00:17.770
+Emacs since version 21.
+
+00:19.090 --> 00:22.960
+The goal of this talk is to inspire more people into making themes.
+
+00:24.070 --> 00:26.350
+Maybe you are already making themes.
+
+00:26.350 --> 00:29.410
+In that case I hope you could find some tips and tricks
+
+00:30.550 --> 00:33.670
+you know in this one
+
+00:33.670 --> 00:36.070
+I will basically go through all the themes
+
+00:36.130 --> 00:36.910
+that I created.
+
+00:37.960 --> 00:40.000
+But I think the most important thing
+
+00:40.000 --> 00:42.910
+here is to understand why some of
+
+00:42.910 --> 00:44.620
+the some of the colors are picked,
+
+00:44.860 --> 00:47.560
+and the motivations behind them.
+
+NOTE Deviant
+
+00:48.820 --> 00:50.800
+So the first theme I created is
+
+00:50.800 --> 00:54.190
+called Deviant. It looks like this.
+
+00:55.810 --> 00:57.730
+The inspiration for this one is a
+
+00:57.730 --> 01:00.820
+website called DeviantArt. Basically I just
+
+01:00.850 --> 01:03.580
+use their color palette, you know, from their design.
+
+01:04.810 --> 01:10.750
+It was a like a community for indie artists.
+
+01:10.750 --> 01:12.820
+I was really into that, you know,
+
+01:12.820 --> 01:14.470
+back in the day so that’s that.
+
+NOTE FlucUI
+
+01:15.640 --> 01:19.090
+Otherwise, nothing special. The next theme
+
+01:19.120 --> 01:21.220
+I created was called FlucUI
+
+01:24.820 --> 01:25.630
+It’s in MELPA.
+
+01:26.530 --> 01:27.640
+And let me just show you.
+
+01:35.260 --> 01:37.600
+So yeah that's how it looks like.
+
+01:42.280 --> 01:45.250
+So... but where where did the colors
+
+01:45.250 --> 01:49.060
+come from, right? To understand that,
+
+01:50.290 --> 01:55.270
+I'll need to take you back in time, you know, to where iOS 7
+
+01:55.330 --> 01:58.000
+was released by Apple. That was a
+
+01:58.000 --> 02:01.900
+big deal, because that popularized the idea
+
+02:01.930 --> 02:05.290
+of flat UI color designs; sorry, flat UI
+
+02:05.290 --> 02:10.360
+designs. And after that, everybody followed suit,
+
+02:10.360 --> 02:14.440
+and changed their design, you know
+
+02:14.440 --> 02:22.420
+of all of their websites and applications to use some sort of flat UI design concepts.
+
+02:23.470 --> 02:27.550
+And about the same time, there came a website called flatuicolors.com.
+
+02:28.720 --> 02:30.820
+It hosted one color palette,
+
+02:32.110 --> 02:34.030
+and that was really good!
+
+02:35.110 --> 02:39.490
+So I picked that as the basis of my theme.
+
+02:40.900 --> 02:43.959
+And initially I named it FlatUI,
+
+02:43.959 --> 02:46.717
+But that name was taken in MELPA
+
+02:46.717 --> 02:50.320
+So i just rename it to something random, FlucUI.
+
+NOTE Lab
+
+02:51.910 --> 02:55.060
+The next one is called lab.
+
+02:57.310 --> 03:00.340
+To understand why I needed to create the theme,
+
+03:03.850 --> 03:08.620
+it's because I thought some of the colors in FlucUI
+
+03:10.780 --> 03:15.250
+was standing out too much, like the green here.
+
+03:18.010 --> 03:18.640
+This one.
+
+03:20.170 --> 03:22.090
+I thought this was too bright.
+
+03:22.780 --> 03:26.050
+Just a little bit.
+
+03:27.100 --> 03:30.100
+So I thought I needed way to pick
+
+03:30.100 --> 03:32.890
+some colors that are about the same
+
+03:32.890 --> 03:35.350
+lightness essentially. So how would I do that?
+
+03:35.350 --> 03:42.370
+The answer is to go into a color space called LAB.
+
+03:42.880 --> 03:45.130
+Now normally you'd do color work in RGB,
+
+03:46.420 --> 03:49.300
+which is red, green, and blue.
+
+03:49.660 --> 03:52.420
+It doesn't tell you a lot about lightness.
+
+03:53.830 --> 03:56.440
+If you do a pure blue,
+
+03:56.440 --> 03:58.600
+it actually looks a lot darker than a
+
+03:58.600 --> 04:01.510
+pure red or pure green. So that
+
+04:01.631 --> 04:04.990
+that doesn't work. But in LAB,
+
+04:04.990 --> 04:07.120
+thing are different, because one of the channel
+
+04:07.360 --> 04:10.810
+is L which is lightness. The other
+
+04:10.810 --> 04:13.600
+two channels are a and b, which are just
+
+04:13.750 --> 04:17.140
+for colors. This is great because
+
+04:17.140 --> 04:19.630
+I could just fix L meaning
+
+04:19.630 --> 04:21.790
+I fixed the lightness, and then I can
+
+04:21.790 --> 04:25.300
+vary a and b however I want.
+
+04:25.300 --> 04:27.850
+The color will stay roughly in the same
+
+04:27.850 --> 04:30.310
+lightness, which is exactly what I wanted.
+
+04:31.780 --> 04:34.210
+So for that I created a
+
+04:34.210 --> 04:38.230
+Mac app, where I could just
+
+04:38.230 --> 04:40.330
+fix lightness like I said, and then
+
+04:40.330 --> 04:42.550
+I could click on this colorful thing,
+
+04:42.670 --> 04:45.010
+to pick a color. The app will
+
+04:45.010 --> 04:47.950
+pick another five according to some pattern.
+
+04:48.430 --> 04:50.140
+And then I could just like hard-code
+
+04:50.140 --> 04:51.640
+these colors in Emacs.
+
+04:52.930 --> 04:54.160
+Let me show you.
+
+04:56.230 --> 04:58.000
+apply theme... lab...
+
+04:59.590 --> 05:02.110
+Yeah not very different from FlucUI colors,
+
+05:02.140 --> 05:04.300
+which was intentional.
+
+05:05.350 --> 05:08.200
+The idea here again is
+
+05:08.380 --> 05:10.660
+all the colors will be in about
+
+05:10.660 --> 05:13.570
+the same lightness, which I guess it was.
+
+05:14.230 --> 05:18.250
+So yeah... So this one was
+
+05:18.280 --> 05:20.830
+a success. I use it for a
+
+05:20.830 --> 05:23.440
+really long time. And then I got bored...
+
+NOTE NotInk: grayscale
+
+05:25.090 --> 05:28.150
+So I needed something interesting.
+
+05:28.150 --> 05:31.900
+The idea at the time was then to create a theme
+
+05:33.460 --> 05:36.310
+that doesn't have any colors essentially.
+
+05:36.310 --> 05:41.740
+A grayscale theme. So I called
+
+05:41.740 --> 05:44.830
+it NotInk. It is also in Melpa
+
+05:46.060 --> 05:46.960
+It looks like this.
+
+05:49.210 --> 05:50.650
+Yeah like I said, everything is grey.
+
+05:51.310 --> 05:53.530
+There's no color. But to my
+
+05:53.530 --> 05:56.500
+surprise, this is actually very useable.
+
+05:56.500 --> 05:59.500
+I didn't have any problem in readability;
+
+05:59.500 --> 06:02.170
+I didn't have any problem distinguishing, you know,
+
+06:02.170 --> 06:05.857
+different elements in the code. So a
+
+06:05.857 --> 06:09.460
+big surprise. And also a big success actually.
+
+06:10.720 --> 06:13.930
+And then I got bored.
+
+NOTE Random theme
+
+06:13.930 --> 06:16.360
+I just decided to install a whole bunch
+
+06:16.360 --> 06:17.710
+of themes from MELPA,
+
+06:18.310 --> 06:20.650
+and every time I start Emacs I
+
+06:20.650 --> 06:21.760
+just pick a random theme.
+
+06:23.200 --> 06:25.660
+There are some caveats to that,
+
+06:25.660 --> 06:27.280
+which I don't want to get into.
+
+06:28.660 --> 06:31.210
+But let me just show you.
+
+06:31.210 --> 06:33.130
+apply-random-theme, so it picked one for
+
+06:33.130 --> 06:37.030
+me. And then it picked another... another...
+
+06:37.060 --> 06:37.600
+So yeah.
+
+06:39.490 --> 06:42.340
+It's an interesting setup. I'm still using
+
+06:42.340 --> 06:45.010
+this setup today. Actually a good one
+
+06:46.150 --> 06:48.580
+Walls of text...
+
+NOTE Monte Carlo
+
+06:50.020 --> 06:52.240
+Now the final theme I want to look into,
+
+06:53.380 --> 06:55.750
+which is the latest, is called Monte Carlo.
+
+06:56.650 --> 06:59.110
+...which you know, idea here is to
+
+06:59.110 --> 07:01.947
+bring the idea of picking a random
+
+07:01.990 --> 07:05.620
+theme to the next level.
+
+07:05.620 --> 07:08.440
+So this is just one theme that generates
+
+07:08.470 --> 07:11.530
+a random color palette for me everytime.
+
+07:12.880 --> 07:15.400
+Not in MELPA, because I'm not ...
+
+07:15.419 --> 07:18.370
+I'm not completely satisfied with it.
+
+NOTE How to pick a random color palette
+
+07:19.780 --> 07:22.510
+But anyway... How do I... How do I pick
+
+07:22.540 --> 07:23.830
+a random color palette right?
+
+07:25.030 --> 07:29.680
+The answer is again to look at a different color space.
+
+07:29.680 --> 07:32.890
+This time it's called HLC, which is hue,
+
+07:32.950 --> 07:36.370
+lightness, and chroma. So hue is just
+
+07:36.670 --> 07:40.270
+colors, red, green, blue, or yellow, whatever.
+
+07:40.810 --> 07:44.200
+Lightness is lightness. Chroma is saturation,
+
+07:45.160 --> 07:47.800
+essentially. This is great because I could
+
+07:48.160 --> 07:52.150
+fix both lightness and saturation, and only
+
+07:52.150 --> 07:55.180
+vary in hue to pick my colors.
+
+07:57.580 --> 08:00.190
+Now the problem is
+
+08:01.660 --> 08:03.220
+once I have the color palette in
+
+08:03.250 --> 08:06.105
+HLC, how would I convert it to
+
+08:06.105 --> 08:09.250
+sRGB, because Emacs only knows
+
+08:09.250 --> 08:10.870
+about colors in sRGB.
+
+NOTE XYZ
+
+08:12.070 --> 08:14.230
+The answer here is to go through
+
+08:14.230 --> 08:16.450
+another color space called XYZ.
+
+08:17.950 --> 08:21.340
+This is an extremely important color space,
+
+08:21.670 --> 08:25.870
+because basically all other color spaces are
+
+08:25.870 --> 08:27.790
+defined on top of XYZ.
+
+08:28.930 --> 08:31.180
+So you would have like transformations
+
+08:31.180 --> 08:34.450
+from XYZ to all other
+
+08:34.480 --> 08:37.570
+color spaces. Now if you invert this
+
+08:37.750 --> 08:41.440
+these transformations, you could go from,
+
+08:41.440 --> 08:43.870
+for example, HLC back into XYZ
+
+08:43.900 --> 08:46.960
+and then go to another color
+
+08:46.960 --> 08:48.910
+space of your choosing, right.
+
+08:49.750 --> 08:51.400
+So this is how to convert colors
+
+08:51.430 --> 08:54.970
+between color spaces. In this case,
+
+08:55.270 --> 08:57.850
+I have to convert colors from HLC
+
+08:57.850 --> 08:59.920
+to LAB, and from LAB to XYZ,
+
+08:59.920 --> 09:02.530
+and from XYZ to sRGB.
+
+09:02.530 --> 09:05.710
+So this time the conversions are
+
+09:05.710 --> 09:08.200
+all done in Emacs Lisp, and I
+
+09:08.200 --> 09:13.270
+have the code in here in this URL.
+
+09:13.270 --> 09:14.830
+You could take a look, or you
+
+09:14.830 --> 09:17.350
+could actually just use maybe some package
+
+09:18.310 --> 09:19.390
+to convert colors.
+
+09:20.470 --> 09:23.740
+Anyway let me show you how
+
+09:23.740 --> 09:26.560
+this works. So in this case I
+
+09:26.590 --> 09:29.200
+could apply theme, Monte Carlo.
+
+09:30.670 --> 09:33.760
+So this is now a random theme.
+
+09:33.790 --> 09:36.730
+Actually, well, a theme with random colors,
+
+09:37.150 --> 09:39.580
+because I could apply the same theme,
+
+09:40.960 --> 09:41.920
+and it will look different.
+
+09:45.250 --> 09:45.790
+Every time.
+
+09:48.640 --> 09:52.060
+I could also look at the colors it picked.
+
+09:53.750 --> 09:55.100
+as a list of colors.
+
+09:57.740 --> 10:00.260
+I could also look at this like
+
+10:00.260 --> 10:04.370
+fancy chart of colors. This is
+
+10:04.370 --> 10:06.920
+too small. So let me show you this.
+
+10:06.920 --> 10:10.400
+So basically the same thing.
+
+10:10.400 --> 10:15.650
+This is actually a cross-section in HLC space,
+
+10:16.310 --> 10:18.650
+and the colors it picked are these like
+
+10:18.650 --> 10:19.520
+white circles.
+
+10:20.660 --> 10:23.060
+So that's that.
+
+10:24.740 --> 10:26.150
+But like I said, I'm not
+
+10:26.150 --> 10:30.170
+fully satisfied, because most of time the
+
+10:30.170 --> 10:32.540
+colors are pretty boring from it.
+
+10:33.770 --> 10:36.320
+I could think of some
+
+10:36.320 --> 10:38.570
+ways to improve this. For example I
+
+10:38.570 --> 10:43.485
+could choose different patterns for the color
+
+10:43.490 --> 10:47.540
+samples. but I don't know of any
+
+10:47.900 --> 10:49.880
+good patterns. So I need to try
+
+10:49.880 --> 10:52.130
+things out. And then another way is
+
+10:52.130 --> 10:59.960
+probably to use different color spaces like the HSL, or HSV.
+
+10:59.960 --> 11:01.100
+Again I need to try this out.
+
+11:02.240 --> 11:04.880
+So yeah there are room for improvements.
+
+11:05.120 --> 11:07.220
+If you... If you have and idea,
+
+11:07.520 --> 11:09.860
+you know, let me know, and we
+
+11:09.860 --> 11:10.580
+can try it out.
+
+11:11.960 --> 11:13.610
+So that's the end of my talk.
+
+11:13.880 --> 11:17.390
+Hopefully you have some new ideas.
+
+11:17.450 --> 11:20.240
+Thanks for listening in, and yeah.
+
+11:20.240 --> 11:22.400
+Go create more themes because we can't have enough.
+
+11:22.400 --> 11:23.540
+Thanks!
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
new file mode 100644
index 00000000..e8cb84c4
--- /dev/null
+++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt
@@ -0,0 +1,1032 @@
+WEBVTT chapters by sachac
+
+00:00:00.000 --> 00:00:07.559
+Hopefully the internet goes well. It's a nice Monday
+
+00:00:07.560 --> 00:00:31.999
+morning here in Tokyo.
+
+00:00:32.000 --> 00:00:37.879
+Are we connected all right?
+
+00:00:37.880 --> 00:00:40.879
+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,
+
+00:00:44.520 --> 00:00:49.959
+there we are. Okay. All right. Sorry about that. I got a mute
+
+00:00:49.960 --> 00:00:55.119
+out my, my back office chatter. That's kind of distracting
+
+00:00:55.120 --> 00:00:58.079
+me a little bit. All right. Sorry. I may have lost the plot a
+
+00:00:58.080 --> 00:01:04.919
+little bit. I think I did. However, find the 1st question.
+
+00:01:04.920 --> 00:01:09.919
+I got pretty distracted by conversation backstage. Yeah,
+
+NOTE Q: When I tried comparing transducers.el to cl-lib and dash (benchmark-compiled), I got the following results
+
+00:01:09.920 --> 00:01:15.879
+no problem. So the first question here, someone's asking,
+
+00:01:15.880 --> 00:01:22.279
+when they first tried comparing transducers.el, the cl-lib
+
+00:01:22.280 --> 00:01:27.959
+and Dash bookmark compiled, and they give some detailed
+
+00:01:27.960 --> 00:01:32.479
+results we're sharing on the stream. Um, they expected
+
+00:01:32.480 --> 00:01:36.679
+transducers to be slower than CL loop, but faster than CL lib
+
+00:01:36.680 --> 00:01:41.119
+or dash. However, this isn't the case, any idea why. And so
+
+00:01:41.120 --> 00:01:43.639
+I'll, I'll come back into their data to show there's they're
+
+00:01:43.640 --> 00:01:48.279
+showing, um, you know, there's not a lot of detail on the, on
+
+00:01:48.280 --> 00:01:52.199
+the, on the use case here. We could certainly click through
+
+00:01:52.200 --> 00:02:02.559
+it, do it.
+
+00:02:02.560 --> 00:02:06.999
+Oh, I should've waited to zoom until I find my spot here.
+
+00:02:07.000 --> 00:02:13.639
+There we are.
+
+00:02:13.640 --> 00:02:18.599
+All right, so there's our example.
+
+00:02:18.600 --> 00:02:23.759
+Looks like we are doing a simple map and a sum.
+
+00:02:23.760 --> 00:02:29.239
+Mm-hmm. Yeah, that's right. Yeah, question about
+
+00:02:29.240 --> 00:02:36.279
+performance. So a case like this, a simple, I just want to rip
+
+00:02:36.280 --> 00:02:40.279
+through a collection of numbers and sum them all. That's a
+
+00:02:40.280 --> 00:02:44.679
+case where basically loop is always going to win because
+
+00:02:44.680 --> 00:02:51.319
+loop is optimized. This is true in both Emacs Lisp and in
+
+00:02:51.320 --> 00:02:56.039
+Common Lisp. For a case like this where you're not really
+
+00:02:56.040 --> 00:03:02.399
+doing two nested of chained calls, like you don't have many
+
+00:03:02.400 --> 00:03:05.839
+sort of what I was compositional steps. If you're just
+
+00:03:05.840 --> 00:03:09.999
+ripping through a collection of numbers, loop is always
+
+00:03:10.000 --> 00:03:15.559
+going to win. Transducers kind of shines when you have to do
+
+00:03:15.560 --> 00:03:19.639
+things that loop can't in terms of expressing yourself. So
+
+00:03:19.640 --> 00:03:22.559
+there are lots of different transducers that you can chain
+
+00:03:22.560 --> 00:03:27.079
+together. And in that case, you're kind of prioritizing
+
+00:03:27.080 --> 00:03:33.039
+developer time and developer happiness because you're
+
+00:03:33.040 --> 00:03:36.399
+able to yourself more clearly, whereas sometimes those
+
+00:03:36.400 --> 00:03:40.679
+kind of algorithms can get very hairy if you're just using
+
+00:03:40.680 --> 00:03:45.399
+loop. Now that sounds like I'm moving the goalposts, and
+
+00:03:45.400 --> 00:03:48.639
+there's really no excuse for these things not being as
+
+00:03:48.640 --> 00:03:54.559
+performant as possible. In this specific case, my guess is
+
+00:03:54.560 --> 00:03:57.759
+that the transducers is slower because it has to do a whole
+
+00:03:57.760 --> 00:04:03.239
+bunch of like inner function calls in order to actually do
+
+00:04:03.240 --> 00:04:09.239
+the adding and the collecting. So there's a lot of stuff that
+
+00:04:09.240 --> 00:04:12.119
+just the raw loop doesn't have to do, which transducers
+
+00:04:12.120 --> 00:04:20.439
+does. And so in this case, that's why it would be slower.
+
+00:04:20.440 --> 00:04:29.079
+All right, makes sense.
+
+00:04:29.080 --> 00:04:36.239
+Um... I cannot comment against Dash. And also a reminder
+
+00:04:36.240 --> 00:04:40.159
+that transducers both in CL and in Emacs Lisp here doesn't
+
+00:04:40.160 --> 00:04:44.919
+attempt to do any, you know, fun, you know, inner rewriting
+
+00:04:44.920 --> 00:04:48.239
+or, you know, what's called an Haskell fusion. Like if you
+
+00:04:48.240 --> 00:04:51.359
+have two different map steps, like in a row, it's not gonna
+
+00:04:51.360 --> 00:04:55.159
+see that and somehow fuse them internally. It's a fairly, in
+
+00:04:55.160 --> 00:04:59.679
+that sense, the implementation is just as is.
+
+00:04:59.680 --> 00:05:04.159
+to make it you know as raw fast as possible. The idea being
+
+00:05:04.160 --> 00:05:12.839
+that ergonomics is more important up front. Yeah, that's
+
+00:05:12.840 --> 00:05:17.519
+kind of a whole fascinating sub-panel, right? My theme this
+
+00:05:17.520 --> 00:05:19.799
+conference has been, oh, all these different things we
+
+00:05:19.800 --> 00:05:24.039
+should try to get sub-panels going for and use that. Maybe
+
+00:05:24.040 --> 00:05:29.039
+fill in the dev track or even have a third track or whatever.
+
+00:05:29.040 --> 00:05:31.519
+I'm not that concerned about the logistics of squeezing
+
+00:05:31.520 --> 00:05:38.519
+into the schedule so much. But anyway, interesting, I mean,
+
+00:05:38.520 --> 00:05:40.839
+to say.
+
+NOTE Q: Do you know of any theoretical texts on transducers?
+
+00:05:40.840 --> 00:05:47.799
+Did we already speak to theoretical texts? No, right? No,
+
+00:05:47.800 --> 00:05:53.399
+let's continue. Okay, so another question from the group.
+
+00:05:53.400 --> 00:05:58.879
+Do you know of any theoretical texts on transducers? My
+
+00:05:58.880 --> 00:06:01.959
+readme, particularly of the Common Lisp implementation,
+
+00:06:01.960 --> 00:06:06.159
+is the theoretical text on transducers. Rich Hickey has
+
+00:06:06.160 --> 00:06:10.439
+some YouTube videos which also come close. I mean, he
+
+00:06:10.440 --> 00:06:14.799
+invented the things. But in terms of having a full
+
+00:06:14.800 --> 00:06:21.559
+explanation of everything, it's my readme and it's also
+
+00:06:21.560 --> 00:06:23.319
+the...
+
+00:06:23.320 --> 00:06:28.559
+The info manual of Guile Scheme, their documentation on
+
+00:06:28.560 --> 00:06:34.199
+Surfy 171 is what I used to learn transducers and to
+
+00:06:34.200 --> 00:06:38.399
+re-implement them in other LISPs. So if you just want like a
+
+00:06:38.400 --> 00:06:41.639
+document explaining them, MyReadMe is actually the
+
+00:06:41.640 --> 00:06:46.959
+clearest that I've found. Awesome. Okay, next question.
+
+00:06:46.960 --> 00:06:50.119
+And I'm sorry, you gave a name, you referred to somebody's
+
+00:06:50.120 --> 00:06:55.439
+videos. Rich Hickey, the inventor of Clojure. Rich Hickey,
+
+00:06:55.440 --> 00:07:00.399
+thank you. Hope I got the spelling right, and maybe somebody
+
+00:07:00.400 --> 00:07:04.719
+can catch that and fix it. If not, I'll reach on. Thank you.
+
+NOTE Q: Did you think about [compiler features, macros] viz your cl, fennel, elisp, porting of your transducers?
+
+00:07:04.720 --> 00:07:08.239
+Reach on to the next question. Waters (Lazy Series in
+
+00:07:08.240 --> 00:07:12.799
+Lisp, late 70s) said this should have been done as an
+
+00:07:12.800 --> 00:07:16.799
+additional compiler feature in compilers, but if not, must
+
+00:07:16.800 --> 00:07:21.439
+be a macro package. Do you think about that vis your CL,
+
+00:07:21.440 --> 00:07:27.519
+Fennel, Elisp, porting of transducers? I think that
+
+00:07:27.520 --> 00:07:28.519
+there's definitely
+
+00:07:28.520 --> 00:07:36.519
+some Galaxy Brain Lisp author out there is probably smart
+
+00:07:36.520 --> 00:07:40.599
+enough to turn a bunch of this stuff into macros. I believe
+
+00:07:40.600 --> 00:07:47.119
+that's how the common Lisp library series works. It sees
+
+00:07:47.120 --> 00:07:52.079
+that you were calling map or whatever, and it actually knows
+
+00:07:52.080 --> 00:07:56.639
+that that's a special macro key. in order to be fast. I did not
+
+00:07:56.640 --> 00:08:01.839
+do that. The implementation as I have it is very simple and
+
+00:08:01.840 --> 00:08:05.759
+simplicity shouldn't be underestimated.
+
+00:08:05.760 --> 00:08:13.559
+I love it. What a nice succinct answer. Even I can manage to
+
+00:08:13.560 --> 00:08:16.578
+type that out as I scroll us to the next question.
+
+NOTE Q: Does t-buffer-read provide a lazy stream that's linewise, or charwise, or do something else entirely?
+
+00:08:16.579 --> 00:08:24.079
+So, does t-buffer-read provide a lazy stream
+
+00:08:24.080 --> 00:08:28.359
+that's line-wise or character-wise or do something else
+
+00:08:28.360 --> 00:08:29.018
+entirely?
+
+00:08:29.019 --> 00:08:31.587
+Okay, there are two functions. I showed
+
+00:08:31.588 --> 00:08:35.073
+t-buffer-read. There's also one called t-file-read,
+
+00:08:35.074 --> 00:08:38.682
+which does that. You actually have the buffer open,
+
+00:08:38.683 --> 00:08:40.239
+it's much more clever.
+
+00:08:40.240 --> 00:08:45.999
+t-buffer-read, I believe, is simpler. As long as you have an
+
+00:08:46.000 --> 00:08:52.079
+Emacs list, what is called the current buffer active. I'm
+
+00:08:52.080 --> 00:08:56.679
+fairly sure you're able to just call next-line on it. I don't
+
+00:08:56.680 --> 00:08:59.479
+believe that I'm doing anything fancy there, looking for
+
+00:08:59.480 --> 00:09:03.999
+line ends. I believe I'm just grabbing the next line and then
+
+00:09:04.000 --> 00:09:09.423
+processing that line-wise. Very good.
+
+NOTE Q: Can the Elisp library be combined with the stream.el API or seq in general?
+
+00:09:09.424 --> 00:09:17.303
+Can the Elisp library be combined with the stream.el API
+
+00:09:17.304 --> 00:09:22.830
+or seq in general? I would say that these libraries
+
+00:09:22.831 --> 00:09:27.596
+are completely orthogonal. You saw that everything
+
+00:09:27.597 --> 00:09:29.279
+was prefixed by t-.
+
+00:09:29.280 --> 00:09:36.879
+Basically, transducer is its own zone. However, one thing
+
+00:09:36.880 --> 00:09:40.239
+that I do in the common lisp, which is theoretically
+
+00:09:40.240 --> 00:09:44.359
+possible for the Emacs Lisp as well, is kind of like little
+
+00:09:44.360 --> 00:09:48.919
+shim libraries. So I provide, at least for Common Lisp, for a
+
+00:09:48.920 --> 00:09:51.799
+number of, you know, popular sort of third-party
+
+00:09:51.800 --> 00:09:55.239
+collection types, I provide an ability to use them as
+
+00:09:55.240 --> 00:09:59.559
+sources. Maybe that's what you mean. Like
+
+00:09:59.560 --> 00:10:04.439
+the built-in containers for Emacs Lisp are already
+
+00:10:04.440 --> 00:10:06.519
+supported. So, you know, a vector hash table and so on.
+
+00:10:06.520 --> 00:10:13.719
+make sense so i think what i heard there is yeah go ahead
+
+00:10:13.720 --> 00:10:17.879
+please sorry in terms of mixing like you know like for
+
+00:10:17.880 --> 00:10:22.599
+instance you know like seq-map used in transducers
+
+00:10:22.600 --> 00:10:28.119
+we'll put it that way
+
+00:10:28.120 --> 00:10:31.879
+i was just gonna say i think it um it it sounds like you're
+
+00:10:31.880 --> 00:10:37.199
+saying Yeah, probably they are actually. We don't know yet
+
+00:10:37.200 --> 00:10:41.239
+about any places where they don't play nicely together. So
+
+00:10:41.240 --> 00:10:45.399
+quite possibly so. We can use sequence and transducers
+
+00:10:45.400 --> 00:10:49.959
+together, for example. As a source potentially, yeah. It's
+
+00:10:49.960 --> 00:10:54.159
+very easy because that just uses defgeneric. As long as you
+
+00:10:54.160 --> 00:10:57.719
+have a new, like if you have a new collection type, as long as
+
+00:10:57.720 --> 00:11:01.519
+you implement a def method for it somewhere, it'll just
+
+00:11:01.520 --> 00:11:12.159
+magically work with this library. That's the magic of...
+
+00:11:12.160 --> 00:11:18.439
+Yeah, as an Emacs user enjoying, you know, sort of the
+
+00:11:18.440 --> 00:11:21.959
+renaissance of new features it's had, or sorry, Emacs ERC
+
+00:11:21.960 --> 00:11:27.799
+user for chat. I've seen a lot of awesome stuff get done in the
+
+00:11:27.800 --> 00:11:32.119
+last couple of years with generic set. JP never was working
+
+00:11:32.120 --> 00:11:36.679
+on that. And like, that's just making me my eyes pop and go,
+
+00:11:36.680 --> 00:11:39.279
+wow, that does make a whole lot of things simpler, doesn't
+
+00:11:39.280 --> 00:11:44.279
+it? I think we're a lot of us running into generics and how
+
+00:11:44.280 --> 00:11:47.542
+that solves problems in Emacs.
+
+NOTE Q: How does one debug a t-comp expression? Can you single step and see intermediate results of the different statements you declare?
+
+00:11:47.543 --> 00:11:50.279
+How does one debug a t-comp
+
+00:11:50.280 --> 00:11:55.119
+expression? Can you talk in terms of single step,
+
+00:11:55.120 --> 00:11:58.479
+step-by-step, intermediate results of the different
+
+00:11:58.480 --> 00:12:08.759
+statements you declare? Yes. So in Common Lisp, this is
+
+00:12:08.760 --> 00:12:12.919
+and sly stickers and things like that. In Emacs Lisp, it's a
+
+00:12:12.920 --> 00:12:19.559
+little bit, shall we say, more difficult. For step
+
+00:12:19.560 --> 00:12:20.479
+debugging,
+
+00:12:20.480 --> 00:12:25.679
+so what comp does is comp internally, it should be a macro,
+
+00:12:25.680 --> 00:12:28.839
+but currently it's not, although there's work to improve
+
+00:12:28.840 --> 00:12:33.559
+that. It's doing an internal reduce and it's turning into
+
+00:12:33.560 --> 00:12:37.479
+one giant kind of composed lambda inside. So I don't know if
+
+00:12:37.480 --> 00:12:42.999
+step debugging would work there. However, we do have one
+
+00:12:43.000 --> 00:12:47.439
+function called log, which lets you inspect intermediate
+
+00:12:47.440 --> 00:12:50.759
+results. So you could technically use that to inject
+
+00:12:50.760 --> 00:12:54.279
+yourself somewhere into the transduction chain and, you
+
+00:12:54.280 --> 00:12:57.239
+know, halt or, you know, inspect the current value, et
+
+00:12:57.240 --> 00:13:01.119
+cetera. So you get a bunch of questions lined up. I think
+
+00:13:01.120 --> 00:13:04.199
+we're coming up, uh, within our last five minutes, uh,
+
+00:13:04.200 --> 00:13:07.919
+before some declared, uh, reset time that we have
+
+00:13:07.920 --> 00:13:11.919
+internally to just roll our closing credits, so to speak.
+
+00:13:11.920 --> 00:13:14.839
+Um, not that I would want to cut the question and answer
+
+00:13:14.840 --> 00:13:18.399
+short, but I might have to step away personally. But, um, as
+
+00:13:18.400 --> 00:13:21.519
+we discussed before, you can just kind of run the QA, however
+
+00:13:21.520 --> 00:13:24.879
+you want here. Um, or, or take questions offline if you'd
+
+00:13:24.880 --> 00:13:27.999
+like to answer them off the pad. And I just want to say one more
+
+00:13:28.000 --> 00:13:30.959
+time. Kitt said it managed later. Thanks again for your talk
+
+00:13:30.960 --> 00:13:35.759
+for dedicating the time to this live QA. And I think we can see
+
+00:13:35.760 --> 00:13:40.279
+by the many questions that are here. So I'll try to kind of
+
+00:13:40.280 --> 00:13:42.959
+flip us through as many of them as I can with our last couple of
+
+00:13:42.960 --> 00:13:48.399
+minutes, if that sounds good. Alternately, this might be a
+
+00:13:48.400 --> 00:13:52.079
+good time if you have kind of wrap it up, final thoughts, as
+
+00:13:52.080 --> 00:13:58.399
+Leo Sopanda saying. By all means, have at. Sure, thanks a
+
+00:13:58.400 --> 00:14:01.639
+lot. I'd say that if you are still curious, check out the
+
+00:14:01.640 --> 00:14:05.159
+read-me's because those have a lot of information,
+
+00:14:05.160 --> 00:14:09.519
+including a full description of the API and everything
+
+00:14:09.520 --> 00:14:10.719
+that's available.
+
+00:14:10.720 --> 00:14:16.599
+Otherwise, just give them a shot. Using these things is the
+
+00:14:16.600 --> 00:14:21.639
+best way to learn them, of course. I use them everywhere,
+
+00:14:21.640 --> 00:14:24.719
+basically, all across my Emacs list and all across my common
+
+00:14:24.720 --> 00:14:29.839
+list now. They get a lot of mileage. All right. You're
+
+00:14:29.840 --> 00:14:33.639
+speaking our language now. As Emacs users, all our ears poke
+
+00:14:33.640 --> 00:14:36.039
+up when you say, I'm getting a lot of mileage. I'm using it
+
+00:14:36.040 --> 00:14:39.879
+across everything. Every Emacs user has a story that
+
+00:14:39.880 --> 00:14:42.494
+harmonizes with that, I think.
+
+NOTE 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?
+
+00:14:42.495 --> 00:14:44.519
+So our next question, is
+
+00:14:44.520 --> 00:14:48.599
+there a path for transducers to enable Elisp processing or
+
+00:14:48.600 --> 00:14:53.999
+otherwise overly large data sets as if just normal Emacs
+
+00:14:54.000 --> 00:14:56.959
+buffers, i.e. just pulling one thing at a time. So
+
+00:14:56.960 --> 00:15:00.719
+essentially stream like under the hood, but buffer like an
+
+00:15:00.720 --> 00:15:03.519
+interface. I think that makes sense to me. with none of the
+
+00:15:03.520 --> 00:15:07.799
+usual performance issues, like as if, you know, the history
+
+00:15:07.800 --> 00:15:11.399
+with long files is what that brings to mind, I guess. Yes, so
+
+00:15:11.400 --> 00:15:15.799
+as you saw before, the withBufferRead sort of stream
+
+00:15:15.800 --> 00:15:19.879
+function does have to have the actual buffer in memory, and
+
+00:15:19.880 --> 00:15:22.679
+then you can go really fast. But there's another one with
+
+00:15:22.680 --> 00:15:26.839
+file read. Now, again, I haven't tried to optimize that yet.
+
+00:15:26.840 --> 00:15:30.119
+But in theory, it is able to read right from the underlying
+
+00:15:30.120 --> 00:15:32.839
+file without having to open it as a buffer first.
+
+00:15:32.840 --> 00:15:39.199
+Awesome. Ari, the performance issues mentioned, and that
+
+00:15:39.200 --> 00:15:43.479
+popped up recently in the list and forums, to what extent
+
+00:15:43.480 --> 00:15:46.959
+does tail call optimization and other mechanisms like
+
+00:15:46.960 --> 00:15:50.159
+inlining, garbage collection friendliness, and so on,
+
+00:15:50.160 --> 00:15:55.159
+could these alleviate issues, enable their use at little to
+
+00:15:55.160 --> 00:15:58.439
+no extra costs? I feel like we're leading the witness here,
+
+00:15:58.440 --> 00:16:01.279
+but I'm sure you see where we're going. Yeah, no problem. So
+
+00:16:01.280 --> 00:16:03.799
+in terms of tail optimization, that's already happening
+
+00:16:03.800 --> 00:16:09.199
+because the internal loop mechanism is using CL labels. And
+
+00:16:09.200 --> 00:16:12.199
+in Emacs Lisp, CL labels is just a macro that is like
+
+00:16:12.200 --> 00:16:16.079
+extremely tail recursive. So that's very, very fast. It's
+
+00:16:16.080 --> 00:16:19.039
+not tail recursive, but it's using like goto. So it's
+
+00:16:19.040 --> 00:16:22.519
+extremely, extremely fast, like the raw looping of it. So,
+
+00:16:22.520 --> 00:16:24.359
+okay, well then where does the slowness come from? It's
+
+00:16:24.360 --> 00:16:26.439
+probably coming from those lambdas and it's probably
+
+00:16:26.440 --> 00:16:32.399
+coming from, uh, like extra consing, extra allocation
+
+00:16:32.400 --> 00:16:35.999
+somewhere, which is, um, sort of what you were, what you're
+
+00:16:36.000 --> 00:16:38.519
+referring to with the GC friendliness. So perhaps there's
+
+00:16:38.520 --> 00:16:45.199
+some, um, um, yeah, some, like some fusion that I can do to
+
+00:16:45.200 --> 00:16:51.199
+speed it up. Yeah, that just sounds fascinating endlessly.
+
+NOTE Q: Is there an option to read a csv/json and produce an alist or plist instead of a hash table for an entry?
+
+00:16:51.200 --> 00:16:55.559
+Are there options to like read from a CSV, JSON, produce an
+
+00:16:55.560 --> 00:17:01.679
+alist or plist instead of hash table? Absolutely.
+
+00:17:01.680 --> 00:17:06.239
+Yes, I need to double check that, but we can read both CSV and
+
+00:17:06.240 --> 00:17:10.359
+JSON, and you should be able to just turn on the plist option.
+
+00:17:10.360 --> 00:17:14.159
+I will double check, but there's fairly free conversion
+
+00:17:14.160 --> 00:17:18.039
+between those three types because hash table is not always
+
+00:17:18.040 --> 00:17:22.039
+what you want. And actually, I suspect that slowness that we
+
+00:17:22.040 --> 00:17:24.559
+saw in the demo before was because it was allocating hash
+
+00:17:24.560 --> 00:17:29.239
+tables for every, like, all of the 50,000 lines. And had it
+
+00:17:29.240 --> 00:17:32.599
+been a plist, it would have been faster. Interesting, so
+
+00:17:32.600 --> 00:17:35.399
+maybe there's opportunities even if you end up with hash
+
+00:17:35.400 --> 00:17:38.799
+lists, but then they're shared strategically and you pay
+
+00:17:38.800 --> 00:17:42.039
+the cost of a little extra layer in there that buckets them
+
+00:17:42.040 --> 00:17:46.439
+together the way that we might group files by the first four
+
+00:17:46.440 --> 00:17:50.519
+characters in the file name once we've got a million files.
+
+NOTE Q: Is the common lisp version ready for 'production' use? Is it complete enough and the API stable enough?
+
+00:17:50.520 --> 00:17:54.479
+Anyway, is the Common Lisp version ready for production
+
+00:17:54.480 --> 00:17:59.959
+use? Do you want to comment on API stability? I use it all the
+
+00:17:59.960 --> 00:18:04.159
+time. I'm writing a game in Common Lisp right now, and I'm
+
+00:18:04.160 --> 00:18:08.559
+using transducers everywhere in there, and it doesn't even
+
+00:18:08.560 --> 00:18:11.119
+make a dent in the frame rate, and I'm using them
+
+00:18:11.120 --> 00:18:15.359
+extensively. Okay, well, I'll just read from chat. Thanks
+
+00:18:15.360 --> 00:18:17.476
+so much for the answers.
+
+NOTE 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?
+
+00:18:17.477 --> 00:18:20.439
+Do we need a pre-written or t-minus
+
+00:18:20.440 --> 00:18:24.959
+version for every already existing reducing function,
+
+00:18:24.960 --> 00:18:30.239
+plus, as an example? Or is there a function that constructs,
+
+00:18:30.240 --> 00:18:33.559
+in my, I'm going to add the word, auto-visualifies them
+
+00:18:33.560 --> 00:18:37.319
+already, auto-defines or something, or just generically
+
+00:18:37.320 --> 00:18:42.239
+wraps function calls some way? already defined. This is
+
+00:18:42.240 --> 00:18:49.399
+basically fold. Some built-in functions like plus already
+
+00:18:49.400 --> 00:18:52.599
+function like reducers. It's a coincidence that they do
+
+00:18:52.600 --> 00:18:56.799
+that. But there's an example in the README. Max is one that
+
+00:18:56.800 --> 00:19:00.559
+does not act like that. For instance, maybe I could screen
+
+00:19:00.560 --> 00:19:06.479
+share later, but if you just type in plus one, If you call plus
+
+00:19:06.480 --> 00:19:10.519
+one in Emacs or Common Lisp, you get back one. It actually
+
+00:19:10.520 --> 00:19:15.119
+only needs one argument. If you only type plus, it actually
+
+00:19:15.120 --> 00:19:20.839
+gives you zero. Plus and multiple satisfy the API of
+
+00:19:20.840 --> 00:19:24.759
+reducers. But if you have one that doesn't, like the max
+
+00:19:24.760 --> 00:19:28.759
+function, and similarly, just type in plus as a function
+
+00:19:28.760 --> 00:19:32.359
+call, just plus with nothing else, and you'll see. No, as a
+
+00:19:32.360 --> 00:19:37.199
+function. zero will come out. This basically means it
+
+00:19:37.200 --> 00:19:43.159
+satisfies the reducer API. But a function like max does not.
+
+00:19:43.160 --> 00:19:48.399
+If you just type in max and then one, it won't work. Pardon me,
+
+00:19:48.400 --> 00:19:54.239
+it did. But if you type in max with nothing else, it wouldn't
+
+00:19:54.240 --> 00:19:55.239
+work.
+
+00:19:55.240 --> 00:19:58.599
+Hence, we have to wrap it in something like fold. I would say
+
+00:19:58.600 --> 00:20:01.919
+go look at the fold function. Right, which that I won't do.
+
+00:20:01.920 --> 00:20:04.839
+I'm not that well enough prepped. Darn it. Leo would have
+
+00:20:04.840 --> 00:20:08.399
+been here, but oh, well, you got me. Yeah, no problem. But
+
+00:20:08.400 --> 00:20:16.879
+fold is sort of the ultimate reducer function. Great. So is
+
+00:20:16.880 --> 00:20:26.319
+there, where was I? Here we go. We're way past this, right? So
+
+NOTE Q: Is the compelling argument for transducers is that it's a better abstraction?
+
+00:20:26.320 --> 00:20:34.279
+is the compiling argument for transducers that it's a
+
+00:20:34.280 --> 00:20:38.879
+better abstraction? It seems like there are concerns,
+
+00:20:38.880 --> 00:20:42.399
+objections, while problematically valid focused on
+
+00:20:42.400 --> 00:20:45.679
+implementation. Can this abstraction allow for advances
+
+00:20:45.680 --> 00:20:50.559
+in implementation? Yes, what I've basically done is mostly
+
+00:20:50.560 --> 00:20:55.999
+followed the pattern of usage that exists in Clojure and in
+
+00:20:56.000 --> 00:21:01.159
+Scheme's SERP 171. In theory, the service level API is the
+
+00:21:01.160 --> 00:21:04.999
+same no matter where you're using this, and that's the idea.
+
+00:21:05.000 --> 00:21:08.039
+If you learn them in one list, you should be able to use them
+
+00:21:08.040 --> 00:21:12.879
+everywhere. Then what it's actually doing under the hood is
+
+00:21:12.880 --> 00:21:18.359
+free for us to change around. My implementations are mostly
+
+00:21:18.360 --> 00:21:23.679
+based on the scheme with a few alterations here and there.
+
+00:21:23.680 --> 00:21:27.079
+And in the Common Lisp case, like adding some Common Lisp
+
+00:21:27.080 --> 00:21:27.959
+isms
+
+00:21:27.960 --> 00:21:34.759
+to improve usage like UX a little bit. But overall, we are
+
+00:21:34.760 --> 00:21:38.959
+free to do whatever we want internally to speed up
+
+00:21:38.960 --> 00:21:42.439
+performance. I just haven't done that work. Awesome.
+
+00:21:42.440 --> 00:21:47.239
+Awesome. So here's where I have to, where we're getting the
+
+00:21:47.240 --> 00:21:50.079
+hook. We've just been pulled off the stream. The viewers
+
+00:21:50.080 --> 00:21:54.079
+just saw the crawl by as it sent us over to the other pad where I
+
+00:21:54.080 --> 00:21:57.919
+get to jump on and get involved with that now. But I can't
+
+00:21:57.920 --> 00:22:00.359
+thank you enough, Colin. Would you like me to stop the
+
+00:22:00.360 --> 00:22:03.799
+recording here? Any other comments you'd like to make? Uh,
+
+00:22:03.800 --> 00:22:06.439
+yeah, sure. Like, I mean, I'll stick around for any more live
+
+00:22:06.440 --> 00:22:10.639
+questions. I'm looking at both IRC and, and, um, uh, big blue
+
+00:22:10.640 --> 00:22:13.239
+button here. So if people have more questions, I'll hang
+
+00:22:13.240 --> 00:22:15.959
+around for a bit. I'm going to leave the channel open. I see
+
+00:22:15.960 --> 00:22:17.839
+you do have a few people in here, so I'm just going to go ahead
+
+00:22:17.840 --> 00:22:20.839
+and leave the recording. We can always trim it. Um, trim it
+
+00:22:20.840 --> 00:22:24.279
+up. If you, uh, let us know, Hey, the last 10 minutes weren't
+
+00:22:24.280 --> 00:22:26.999
+anything, you know, or whatever. No, no pressure, no
+
+00:22:27.000 --> 00:22:29.839
+worries, no mistakes. Thank you. Really appreciate you.
+
+00:22:29.840 --> 00:22:31.959
+Yep. Thanks a lot.
+
+NOTE 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?
+
+00:22:31.960 --> 00:22:48.399
+OK, does anyone else have some questions? I see Mohsen in the
+
+00:22:48.400 --> 00:22:52.839
+BigBlueButton chat is asking how I made the video. So the
+
+00:22:52.840 --> 00:22:59.079
+presentation itself was done with RevealJS from Org Mode.
+
+00:22:59.080 --> 00:23:03.639
+So as you saw, I had a raw Org Mode buffer, which was
+
+00:23:03.640 --> 00:23:09.319
+which was the presentation itself, which I then just
+
+00:23:09.320 --> 00:23:11.759
+exported with a few certain settings, a few
+
+00:23:11.760 --> 00:23:15.919
+customizations. And then for screen recording, I used OBS,
+
+00:23:15.920 --> 00:23:19.719
+which worked flawlessly on Arch Linux. I used Sway,
+
+00:23:19.720 --> 00:23:23.159
+Wayland, and all of that. So all of that just worked, which
+
+00:23:23.160 --> 00:23:27.999
+was very impressive. Where do the HTML host the
+
+00:23:28.000 --> 00:23:51.959
+presentation? I don't have that presentation hosted
+
+00:23:51.960 --> 00:23:52.599
+anywhere.
+
+00:23:52.600 --> 00:23:59.119
+I'll look at the.
+
+00:23:59.120 --> 00:24:00.079
+I don't see that.
+
+00:24:00.080 --> 00:24:08.159
+Here it is. So we've got the file here as well.
+
+00:24:08.160 --> 00:24:10.999
+Looks like that's it for questions, basically.
+
+00:24:11.000 --> 00:24:14.919
+Yep, and it looks like everyone's moved on for now. Let's
+
+00:24:14.920 --> 00:24:20.159
+see. I mean, it would be so this is answering lounge 81 on IRC.
+
+NOTE 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?
+
+00:24:20.160 --> 00:24:24.599
+Yeah, like, if we really wanted to go that hardcore, maybe
+
+00:24:24.600 --> 00:24:29.439
+there's some like C level stuff that we could
+
+00:24:29.440 --> 00:24:36.119
+you know, significant demand for such a thing. You know, so
+
+00:24:36.120 --> 00:24:39.239
+far there hasn't been such demand, but maybe there will be in
+
+00:24:39.240 --> 00:24:42.519
+the future. Yeah, perhaps there's some custom stuff we
+
+00:24:42.520 --> 00:24:43.039
+could do.
+
+00:24:43.040 --> 00:24:48.599
+And otherwise, magic one.
+
+00:24:48.600 --> 00:25:00.599
+Well, it looks like some people are quite happy with this.
+
+00:25:00.600 --> 00:25:14.959
+All right. That's about what I've seen. So why don't we end it
+
+00:25:14.960 --> 00:25:19.839
+here? I think I can control the recording from my end. If I
+
+00:25:19.840 --> 00:25:23.800
+pause it, will that work? All right. Thank you, everyone.
diff --git a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt
new file mode 100644
index 00000000..cf0a6206
--- /dev/null
+++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:41.519
+Intro
+
+00:00:41.520 --> 00:03:27.589
+What are transducers?
+
+00:03:27.590 --> 00:05:47.279
+Common issues
+
+00:05:47.280 --> 00:07:35.279
+Transducers
+
+00:07:35.280 --> 00:09:52.624
+Using transducers
+
+00:09:52.625 --> 00:11:49.332
+A more involved example with comp
+
+00:11:49.333 --> 00:14:29.468
+In Emacs
+
+00:14:29.469 --> 00:14:58.039
+Hash tables
+
+00:14:58.040 --> 00:15:55.799
+Clarity
+
+00:15:55.800 --> 00:19:57.679
+How do transducers work?
+
+00:20:00.520 --> 00:26:03.239
+Transducers in the wild - CSV
+
+00:26:03.240 --> 00:26:51.240
+Issues and next steps
diff --git a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt
new file mode 100644
index 00000000..b0083b86
--- /dev/null
+++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt
@@ -0,0 +1,1141 @@
+WEBVTT captioned by sachac
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:10.799
+Hi everyone, this is EmacsConf 2024. I'm Colin, and today
+
+00:00:10.800 --> 00:00:17.319
+I'll be talking about transducers.
+
+00:00:17.320 --> 00:00:21.879
+After introducing them, I'll share a bit of history about
+
+00:00:21.880 --> 00:00:25.359
+transducers and the problems that they solve, some basics
+
+00:00:25.360 --> 00:00:28.879
+about how we can use them, how they work, like how they're
+
+00:00:28.880 --> 00:00:32.399
+implemented, some demonstrations of how we can actually
+
+00:00:32.400 --> 00:00:36.959
+use them in the wild, and then some other discussions about
+
+00:00:36.960 --> 00:00:41.519
+issues that they have.
+
+NOTE What are transducers?
+
+00:00:41.520 --> 00:00:46.399
+Okay, let's get right in. What are transducers?
+
+00:00:46.400 --> 00:00:49.679
+Transducers are a way to do streaming iteration with a
+
+00:00:49.680 --> 00:00:55.679
+modern API.
+
+00:00:55.680 --> 00:01:00.359
+Who are transducers for, and thereby, who is
+
+00:01:00.360 --> 00:01:05.599
+this talk for? Well, it's for people who want to do streamed
+
+00:01:05.600 --> 00:01:10.519
+data processing in Emacs. It's for people who perhaps
+
+00:01:10.520 --> 00:01:14.199
+aren't satisfied with the existing APIs, for example, the
+
+00:01:14.200 --> 00:01:19.359
+seq API, or some other common libraries that provide
+
+00:01:19.360 --> 00:01:23.719
+similar functionality. Maybe you're not a fan of the loop
+
+00:01:23.720 --> 00:01:29.079
+macro. Some people find it difficult to understand. Or
+
+00:01:29.080 --> 00:01:32.719
+maybe you've done a bunch of Clojure before, and you'd like
+
+00:01:32.720 --> 00:01:36.879
+more aspects of Clojure in your Emacs Lisp. Or maybe you're
+
+00:01:36.880 --> 00:01:40.239
+just interested in transducers in general, because the
+
+00:01:40.240 --> 00:01:48.839
+pattern has now been ported to multiple different Lisps.
+
+00:01:48.840 --> 00:01:55.039
+So I'm Colin. I'm fosskers on everything online, and I do
+
+00:01:55.040 --> 00:01:58.519
+mainly back-end programming work and a lot of open source
+
+00:01:58.520 --> 00:02:05.159
+software. I wrote Haskell for a long time, both as a hobbyist
+
+00:02:05.160 --> 00:02:09.079
+and professionally. Since the COVID years, I've been
+
+00:02:09.080 --> 00:02:13.439
+writing Rust, both open source and professionally. But now
+
+00:02:13.440 --> 00:02:19.719
+I find that in my spare time, I'm mostly writing Common Lisp.
+
+00:02:19.720 --> 00:02:22.719
+Some things I learned from my years of Haskell was that a lot
+
+00:02:22.720 --> 00:02:27.519
+of programming is just altering the shape of data. You know,
+
+00:02:27.520 --> 00:02:31.359
+sometimes we work through our algorithm line by line. We're
+
+00:02:31.360 --> 00:02:36.239
+trying to just tell the computer exactly what to do. But if we
+
+00:02:36.240 --> 00:02:39.639
+step back, a lot of the time we're just getting in data of some
+
+00:02:39.640 --> 00:02:44.119
+shape, changing it, and then passing it along. A lot of
+
+00:02:44.120 --> 00:02:49.279
+these patterns are common, identified
+
+00:02:49.280 --> 00:02:53.639
+decades ago. For instance, we have some collection, and we
+
+00:02:53.640 --> 00:02:56.999
+want to transform every element of that collection and then
+
+00:02:57.000 --> 00:03:01.199
+pass it on. Or maybe we're trying to filter out bad elements
+
+00:03:01.200 --> 00:03:04.799
+in that collection. Or maybe we're looking for a specific
+
+00:03:04.800 --> 00:03:07.759
+element in that collection. Yes, you could write all that
+
+00:03:07.760 --> 00:03:11.839
+with for loops, but these kind of common patterns were
+
+00:03:11.840 --> 00:03:18.559
+identified and given names decades ago. So why not use them?
+
+00:03:18.560 --> 00:03:21.879
+They say that there are two major problems in computer
+
+00:03:21.880 --> 00:03:25.759
+science, one being cache validation and the other being
+
+00:03:25.760 --> 00:03:27.589
+naming things.
+
+NOTE Common issues
+
+00:03:27.590 --> 00:03:29.799
+I've identified five other problems that
+
+00:03:29.800 --> 00:03:33.199
+come up when we're trying to deal with collections of data,
+
+00:03:33.200 --> 00:03:40.599
+or big streams of data. One is that if we were trying to
+
+00:03:40.600 --> 00:03:45.279
+load a file all into memory all at once and process the whole
+
+00:03:45.280 --> 00:03:48.279
+thing, sometimes we can have memory problems. You've
+
+00:03:48.280 --> 00:03:54.999
+probably seen out-of-memory errors or such things.
+
+00:03:55.000 --> 00:03:58.199
+A second issue that comes up is that if we were looking at a
+
+00:03:58.200 --> 00:04:01.799
+giant for loop, in particular a nested for loop or such
+
+00:04:01.800 --> 00:04:06.079
+things, it can be hard to tell just by looking at the code what
+
+00:04:06.080 --> 00:04:11.039
+it's trying to do, what it intends. If we don't go character
+
+00:04:11.040 --> 00:04:16.439
+by character or line by line, it can be hard to understand it.
+
+00:04:16.440 --> 00:04:20.039
+Furthermore, and this is particularly an issue with Emacs
+
+00:04:20.040 --> 00:04:26.399
+Lisp, is that if one call, for instance, to seq-map, then
+
+00:04:26.400 --> 00:04:29.319
+piped into seq-filter, for instance, will have an
+
+00:04:29.320 --> 00:04:33.599
+intermediate allocation, the map will take the source
+
+00:04:33.600 --> 00:04:37.639
+container, allocate a new one, and then the filter will
+
+00:04:37.640 --> 00:04:40.319
+operate over the second one. This is wasteful.
+
+00:04:40.320 --> 00:04:48.879
+Furthermore, it can often be difficult to abort a stream.
+
+00:04:48.880 --> 00:04:53.199
+For instance, if we were filtering through our collection,
+
+00:04:53.200 --> 00:04:57.319
+but we knew we only wanted to go halfway, for instance, for
+
+00:04:57.320 --> 00:05:01.759
+some reason, we have no way to stop it halfway through. We
+
+00:05:01.760 --> 00:05:05.479
+just have to process the whole thing, even if we know we don't
+
+00:05:05.480 --> 00:05:11.919
+need to. Another issue is that for languages that have
+
+00:05:11.920 --> 00:05:18.039
+traits, or in Haskell they're called type classes, if you
+
+00:05:18.040 --> 00:05:22.399
+are defining what it means to map over something, you often
+
+00:05:22.400 --> 00:05:27.039
+have to redefine that for every kind of container or thing
+
+00:05:27.040 --> 00:05:31.239
+that you're iterating over. Wouldn't it be nice if we could
+
+00:05:31.240 --> 00:05:34.719
+define things like map just once and then reuse them
+
+00:05:34.720 --> 00:05:39.839
+everywhere? Now, transducers solve all five of these,
+
+00:05:39.840 --> 00:05:44.039
+without the addition of new language features, and with
+
+00:05:44.040 --> 00:05:47.279
+little more than plain old function composition.
+
+NOTE Transducers
+
+00:05:47.280 --> 00:05:53.119
+If this is your first time hearing of transducers, yeah,
+
+00:05:53.120 --> 00:05:57.439
+no problem. They were originally invented in Clojure by
+
+00:05:57.440 --> 00:06:01.039
+Rich Hickey, and this is a quote from him. He thinks
+
+00:06:01.040 --> 00:06:05.439
+transducers are a fundamental primitive that decouple
+
+00:06:05.440 --> 00:06:10.079
+critical logic from list or sequence processing, and if he
+
+00:06:10.080 --> 00:06:13.999
+had to do Clojure all over, he'd put them at the bottom, at the
+
+00:06:14.000 --> 00:06:19.279
+very bottom of all the fundamental primitives. Now, that's
+
+00:06:19.280 --> 00:06:24.599
+Rich speaking quite highly of them. And I think he has a point
+
+00:06:24.600 --> 00:06:25.159
+here.
+
+00:06:25.160 --> 00:06:32.399
+They were invented originally in Clojure. In more
+
+00:06:32.400 --> 00:06:34.772
+recent years, they were brought over to Scheme
+
+00:06:34.773 --> 00:06:38.774
+via SRFI 171. That's where I found them
+
+00:06:38.775 --> 00:06:41.521
+when I was learning the Guile language.
+
+00:06:41.522 --> 00:06:43.919
+In the process of submitting a patch, I realized
+
+00:06:43.920 --> 00:06:48.199
+that there were other things to be improved. So I ported the
+
+00:06:48.200 --> 00:06:51.399
+pattern to Common Lisp, then Fennel, and then more
+
+00:06:51.400 --> 00:06:56.639
+recently, Emacs Lisp. The Common Lisp and Emacs Lisp APIs
+
+00:06:56.640 --> 00:07:01.199
+are identical. And the Fennel one is not identical, but
+
+00:07:01.200 --> 00:07:05.799
+fairly similar. Overall, everywhere you find
+
+00:07:05.800 --> 00:07:10.279
+transducers, they should basically be fairly uniform.
+
+00:07:10.280 --> 00:07:15.759
+When I originally made the Common Lisp variant first, I
+
+00:07:15.760 --> 00:07:18.799
+sampled the APIs from a number of different languages and
+
+00:07:18.800 --> 00:07:23.439
+came up with what I believed to be a representative sample of
+
+00:07:23.440 --> 00:07:27.959
+what most people would want out of such a library. I gave
+
+00:07:27.960 --> 00:07:32.439
+functions their common modern names. For instance, map
+
+00:07:32.440 --> 00:07:35.279
+is map and filter is filter and so on.
+
+NOTE Using transducers
+
+00:07:35.280 --> 00:07:42.599
+What does the usage of transducers look like? Well,
+
+00:07:42.600 --> 00:07:48.959
+these examples will all be the Emacs Lisp variant, but the
+
+00:07:48.960 --> 00:07:52.359
+Common Lisp will look basically exactly the same, minus
+
+00:07:52.360 --> 00:07:54.079
+this little t- prefix.
+
+00:07:54.080 --> 00:08:00.919
+Running transducers requires three things. It requires a
+
+00:08:00.920 --> 00:08:06.439
+source. This could be an obvious thing like a list or a
+
+00:08:06.440 --> 00:08:11.479
+vector, but it could be other things like a file, or in Emacs
+
+00:08:11.480 --> 00:08:16.348
+list in particular, a buffer.
+
+00:08:16.349 --> 00:08:20.112
+A reducer is a function. It's something like
+
+00:08:20.113 --> 00:08:22.639
+the + operator or the * operator,
+
+00:08:22.640 --> 00:08:26.785
+or certain constructors of various containers.
+
+00:08:26.786 --> 00:08:32.125
+It takes values and collates them into some final version.
+
+00:08:32.126 --> 00:08:33.946
+Now, finally, we have what we're calling here
+
+00:08:33.947 --> 00:08:37.567
+a transducer chain. This could be one transducer function
+
+00:08:37.568 --> 00:08:43.479
+or it could be multiple composed together. These are the
+
+00:08:43.480 --> 00:08:47.079
+functions that actually take data and transform them
+
+00:08:47.080 --> 00:08:55.279
+somehow. For instance, this. We have a list of three
+
+00:08:55.280 --> 00:09:04.199
+elements. We want to reduce it into a vector. How we are
+
+00:09:04.200 --> 00:09:07.519
+going to transform the elements along the way: we are doing
+
+00:09:07.520 --> 00:09:13.359
+plus one to each of them. If this syntax is new to you, just
+
+00:09:13.360 --> 00:09:18.039
+know that this #' just means that this thing that
+
+00:09:18.040 --> 00:09:22.079
+comes after it is the name of the function. In Common Lisp and
+
+00:09:22.080 --> 00:09:26.079
+Emacs Lisp, this is necessary, but for Clojure and Scheme,
+
+00:09:26.080 --> 00:09:32.719
+it is not. So we can see here that just this example is not much
+
+00:09:32.720 --> 00:09:36.119
+different than any other normal map call you might see made,
+
+00:09:36.120 --> 00:09:40.239
+but if nothing else, it's a handy way to convert a list to a
+
+00:09:40.240 --> 00:09:44.999
+vector or anything else. There are many, many reducers
+
+00:09:45.000 --> 00:09:48.239
+available and many different forms that we can
+
+00:09:48.240 --> 00:09:52.624
+collate the final value into.
+
+NOTE A more involved example with comp
+
+00:09:52.625 --> 00:09:55.086
+Let's see a more involved example.
+
+00:09:55.087 --> 00:09:58.049
+Okay, now we've got some more meat here.
+
+00:09:58.050 --> 00:10:01.772
+Here we can see usage of the comp function
+
+00:10:01.773 --> 00:10:05.255
+and a custom source, ints.
+
+00:10:05.256 --> 00:10:11.079
+Ints is an infinite generator of integer values. That's not
+
+00:10:11.080 --> 00:10:14.783
+like a list or a file. It will generate infinitely.
+
+00:10:14.784 --> 00:10:19.439
+Comp is letting us compose multiple transducer functions
+
+00:10:19.440 --> 00:10:23.759
+together. Notice that this is the opposite order of what
+
+00:10:23.760 --> 00:10:28.079
+we'd usually be used to from a function like comp. The order
+
+00:10:28.080 --> 00:10:32.679
+here is top to bottom, basically, so that the map goes first,
+
+00:10:32.680 --> 00:10:37.839
+then the filter, and then the take. So effectively is what
+
+00:10:37.840 --> 00:10:40.919
+we're doing is taking all the integers that exist,
+
+00:10:40.920 --> 00:10:45.399
+positive, adding one to them, filtering out only the even
+
+00:10:45.400 --> 00:10:50.039
+ones, but then just taking 10. Cons here is a function that
+
+00:10:50.040 --> 00:10:57.039
+just produces the ending result as a list. So what happens
+
+00:10:57.040 --> 00:11:00.479
+here specifically is how we are avoiding intermediate
+
+00:11:00.480 --> 00:11:04.238
+allocations. First, the number 0 will come through.
+
+00:11:04.239 --> 00:11:07.879
+It will be pulled out of this source internally by transduce.
+
+00:11:07.880 --> 00:11:10.919
+It will make its way into the map. The map will add it. Then it
+
+00:11:10.920 --> 00:11:15.799
+will immediately go into this filter step. So it's not like
+
+00:11:15.800 --> 00:11:19.119
+all the maps occur, and then all the filters occur. We do
+
+00:11:19.120 --> 00:11:24.039
+everything for each element. So the 0 comes in, now it's 1.
+
+00:11:24.040 --> 00:11:27.559
+The filter would occur. Well, it's going to fail that
+
+00:11:27.560 --> 00:11:31.119
+because it's not even, so it will just bail there. Now we'll
+
+00:11:31.120 --> 00:11:35.239
+go to the next one. Now 1 will come, it will become 2, then
+
+00:11:35.240 --> 00:11:39.119
+it will be saved by this evenp call, and then the take will
+
+00:11:39.120 --> 00:11:42.599
+capture it, because we only want 10 values here. You can
+
+00:11:42.600 --> 00:11:45.239
+see 2, 4, 6, 8, and so on is the result that we
+
+00:11:45.240 --> 00:11:49.332
+expect. So let's play around a little bit.
+
+NOTE In Emacs
+
+00:11:49.333 --> 00:11:53.336
+Let's jump into Emacs and see what we can do.
+
+00:11:53.337 --> 00:11:58.500
+Alright, you should see my Emacs screen here.
+
+00:11:58.501 --> 00:12:04.359
+These are the actual notes for the actual
+
+00:12:04.360 --> 00:12:08.959
+presentation done in Org Mode. I'll boost that up in size for
+
+00:12:08.960 --> 00:12:12.639
+a little bit. That should be more than big enough for you.
+
+00:12:12.640 --> 00:12:17.719
+Just by changing the reducer, we can change the result.
+
+00:12:17.720 --> 00:12:21.079
+Okay, now it's a vector. Well, what else can we do to it? Well,
+
+00:12:21.080 --> 00:12:25.959
+let's just add up the results. Maybe we just want to count the
+
+00:12:25.960 --> 00:12:30.919
+results. Oh, indeed, there were 10. What if we want to find
+
+00:12:30.920 --> 00:12:36.959
+the average of the results? What if we want to find the median
+
+00:12:36.960 --> 00:12:40.959
+of the results? And so on. Here's some more interesting
+
+00:12:40.960 --> 00:12:45.839
+things that we could do. We could add different steps. So
+
+00:12:45.840 --> 00:12:51.239
+here we have all the integers. Let's add, hmm, okay, we'll
+
+00:12:51.240 --> 00:12:57.399
+keep that. We're going to add t-enumerate. What enumerate does
+
+00:12:57.400 --> 00:13:00.879
+is for each item that comes through, it is
+
+00:13:00.880 --> 00:13:06.039
+going to add a sort of index to it and make it a pair. In this
+
+00:13:06.040 --> 00:13:08.719
+case, it's going to be equal to what came in here. Well, we can
+
+00:13:08.720 --> 00:13:12.399
+change it. If we start this at 1, now it will be different.
+
+00:13:12.400 --> 00:13:15.519
+1 will be paired with 0, and then 2 would be paired
+
+00:13:15.520 --> 00:13:19.559
+with 1, and so on. We'll accept that the even call will change
+
+00:13:19.560 --> 00:13:24.039
+that a little bit. Why we're doing this is because we want
+
+00:13:24.040 --> 00:13:27.279
+to form a hash table. Let's move that down to 3, maybe
+
+00:13:27.280 --> 00:13:31.439
+we'll get a better result. What do we see? Okay, here now the
+
+00:13:31.440 --> 00:13:37.359
+result is a hash table. What are its values? Well, 0 seems
+
+00:13:37.360 --> 00:13:40.479
+to have... The key of 0 seems to be paired with 2, the key of
+
+00:13:40.480 --> 00:13:42.909
+1 seems to be paired with 4,
+
+00:13:42.910 --> 00:13:47.411
+and 2 seems to be paired with 6.
+
+00:13:47.412 --> 00:13:51.293
+Maybe let's jazz that up even a little bit more.
+
+00:13:51.294 --> 00:13:52.973
+We're going to start from a string
+
+00:13:52.974 --> 00:13:57.943
+and we'll call it hello.
+
+00:13:57.944 --> 00:13:59.564
+That's not going to work anymore
+
+00:13:59.565 --> 00:14:02.585
+and neither is that, but what we could do is
+
+00:14:02.586 --> 00:14:05.498
+we could say t-map #'string.
+
+00:14:05.499 --> 00:14:08.627
+I believe we'll do that.
+
+00:14:08.628 --> 00:14:08.959
+Let's see if that works. It did. So that's
+
+00:14:08.960 --> 00:14:13.589
+going to convert a character into a string.
+
+00:14:13.590 --> 00:14:14.679
+Let's just go two
+
+00:14:14.680 --> 00:14:18.399
+just to make it a little easier. Now you can see that we've
+
+00:14:18.400 --> 00:14:21.919
+constructed a hash table here. The key of 0 is mapped to the
+
+00:14:21.920 --> 00:14:27.079
+string of h and 1 is mapped to e. Now, I really like having
+
+00:14:27.080 --> 00:14:29.468
+this reducer in particular.
+
+NOTE Hash tables
+
+00:14:29.469 --> 00:14:30.639
+Know that hash tables are
+
+00:14:30.640 --> 00:14:34.199
+also legal sources. I find that both in Emacs Lisp and in
+
+00:14:34.200 --> 00:14:37.119
+Common Lisp, dealing with hash tables--like creating them
+
+00:14:37.120 --> 00:14:41.599
+and altering them--can be a bit of a pain. Having them
+
+00:14:41.600 --> 00:14:45.679
+immediately available like this with transducers is very
+
+00:14:45.680 --> 00:14:49.079
+handy, I find. We can work with something that wasn't a hash
+
+00:14:49.080 --> 00:14:53.279
+table. We can construct it in a way that makes it amenable to
+
+00:14:53.280 --> 00:14:56.199
+that, and then reduce it down into a hash table, and here you
+
+00:14:56.200 --> 00:14:58.039
+go. Very handy.
+
+NOTE Clarity
+
+00:14:58.040 --> 00:15:06.399
+One last point is that you can see very clearly what
+
+00:15:06.400 --> 00:15:10.479
+this is attempting to do, as opposed to, say, a for loop. It's
+
+00:15:10.480 --> 00:15:12.719
+very clear what that step is doing, and then you can see what
+
+00:15:12.720 --> 00:15:15.119
+that is doing, and you know that the result is going to be two.
+
+00:15:15.120 --> 00:15:18.559
+Each line is kind of its own declarative step, and it should
+
+00:15:18.560 --> 00:15:22.159
+be clear, just by staring at this, basically what you're
+
+00:15:22.160 --> 00:15:25.399
+going to get out. This is one main difference from other
+
+00:15:25.400 --> 00:15:29.599
+languages that have things--say, for instance, Rust's
+
+00:15:29.600 --> 00:15:35.439
+iterator API--is the difference between the transducers
+
+00:15:35.440 --> 00:15:41.639
+and the reducers. If we go up here, for example, the
+
+00:15:41.640 --> 00:15:44.679
+difference between the transducers and the reducers and
+
+00:15:44.680 --> 00:15:48.119
+the sources is not explicitly laid out, whereas with
+
+00:15:48.120 --> 00:15:53.119
+transducers, it is. You have to be aware of how these things
+
+00:15:53.120 --> 00:15:55.799
+are different. I think that that helps clarity.
+
+NOTE How do transducers work?
+
+00:15:55.800 --> 00:16:01.999
+Moving on. How do transducers work? Well,
+
+00:16:02.000 --> 00:16:09.857
+we want to go see the README.
+
+00:16:09.858 --> 00:16:11.399
+So, what we're going to do is
+
+00:16:11.400 --> 00:16:19.102
+we're going to go to here.
+
+00:16:19.103 --> 00:16:21.959
+You should still be able to see this.
+
+00:16:21.960 --> 00:16:28.583
+This is the CL example, actually.
+
+00:16:28.584 --> 00:16:32.279
+Let's go to transducers.el.
+
+00:16:32.280 --> 00:16:37.744
+Their APIs and READMEs are the same,
+
+00:16:37.745 --> 00:16:39.919
+but just for the sake of it, we will go see
+
+00:16:39.920 --> 00:16:45.726
+how this looks on the Emacs side,
+
+00:16:45.727 --> 00:16:48.046
+just so that nothing is a surprise.
+
+00:16:48.047 --> 00:16:50.239
+But recall that the APIs are essentially the same
+
+00:16:50.240 --> 00:16:53.679
+between the two. If you go to this section, writing your
+
+00:16:53.680 --> 00:16:56.839
+own primitives, you can read about how transducers are
+
+00:16:56.840 --> 00:17:00.999
+actually formed, whether or not you want to write them
+
+00:17:01.000 --> 00:17:06.799
+yourself or not. We can see here t-map. We accept the
+
+00:17:06.800 --> 00:17:10.239
+function that you want to operate with. Then you've got
+
+00:17:10.240 --> 00:17:13.319
+this extra little lambda here that's coming in, and it's
+
+00:17:13.320 --> 00:17:17.079
+receiving a thing that is named reducer. Now, while here
+
+00:17:17.080 --> 00:17:20.439
+we're calling it reducer, it's actually the chain of all the
+
+00:17:20.440 --> 00:17:25.159
+composed functions together. It's all those main
+
+00:17:25.160 --> 00:17:28.479
+transducer steps. Finally, it's the reducer all
+
+00:17:28.480 --> 00:17:31.879
+composed together with normal function composition.
+
+00:17:31.880 --> 00:17:35.877
+That will matter very soon. Now here's the actual meat.
+
+00:17:35.878 --> 00:17:40.519
+We can see the accumulative result that's coming in with the
+
+00:17:40.520 --> 00:17:45.739
+current element. Now we need to operate on this.
+
+00:17:45.740 --> 00:17:47.840
+Were it normally mapped, we would see us
+
+00:17:47.841 --> 00:17:49.919
+applying the F to the input.
+
+00:17:49.920 --> 00:17:53.519
+But here, you can see us applying the F to the input and then
+
+00:17:53.520 --> 00:17:58.679
+continuing on. So us calling the rest of the composed chain
+
+00:17:58.680 --> 00:18:03.159
+here is the effect of, in the previous slide, moving to the
+
+00:18:03.160 --> 00:18:07.156
+next step. We could ignore this line for now.
+
+00:18:07.157 --> 00:18:13.819
+If you're curious, please read the README in detail.
+
+00:18:13.820 --> 00:18:15.579
+Now, what about reducers?
+
+00:18:15.580 --> 00:18:18.879
+What do those look like? Well, let's just scroll
+
+00:18:18.880 --> 00:18:22.439
+down here. Recall that a reducer is a function that's
+
+00:18:22.440 --> 00:18:26.959
+consuming a stream, right? Zoom that up for you a little bit.
+
+00:18:26.960 --> 00:18:33.919
+Now, in the case of count, recall that this is how it's
+
+00:18:33.920 --> 00:18:37.679
+working, how we saw a moment ago. So clearly this list of five
+
+00:18:37.680 --> 00:18:42.199
+elements only has five things in it. Well, a reducer by
+
+00:18:42.200 --> 00:18:47.599
+structure is a function of two, one, or zero arguments. So we
+
+00:18:47.600 --> 00:18:50.639
+can see here in the case of two, this is the normal iterative
+
+00:18:50.640 --> 00:18:54.519
+case. We don't care about the input for count, we just care
+
+00:18:54.520 --> 00:18:58.559
+about the current accumulated count that we're doing, and
+
+00:18:58.560 --> 00:19:02.879
+we add one to it, and that's it. This then goes back to
+
+00:19:02.880 --> 00:19:06.359
+the loop and the whole process starts again with the next
+
+00:19:06.360 --> 00:19:10.879
+element. In this kind of done case, this is used internal to
+
+00:19:10.880 --> 00:19:16.879
+that sort of the supervising function transduce. It's just
+
+00:19:16.880 --> 00:19:19.639
+confirming the final result. Sometimes some
+
+00:19:19.640 --> 00:19:21.839
+post-processing is necessary here, but in the case of
+
+00:19:21.840 --> 00:19:26.039
+count, as it is so simple, that is not necessary. And now
+
+00:19:26.040 --> 00:19:29.359
+here's the base case. This is also used within that
+
+00:19:29.360 --> 00:19:34.319
+supervising transduce function at the very top. Well, if
+
+00:19:34.320 --> 00:19:36.679
+you're counting, you have to start from somewhere, right?
+
+00:19:36.680 --> 00:19:37.349
+In this case, well, what you're starting with is zero.
+
+00:19:37.350 --> 00:19:40.251
+In the case of cons, you'd be starting with an empty list.
+
+00:19:40.252 --> 00:19:44.434
+In the case of vector, you'd be starting
+
+00:19:44.435 --> 00:19:53.999
+with an empty vector and so on.
+
+00:19:54.000 --> 00:19:56.799
+Once again, if you are more curious, please take a look at
+
+00:19:56.800 --> 00:19:57.679
+the README.
+
+NOTE Transducers in the wild - CSV
+
+00:20:00.520 --> 00:20:06.039
+Okay, transducers in the wild. Well, let's go take a look at
+
+00:20:06.040 --> 00:20:07.639
+processing some CSV data.
+
+00:20:07.640 --> 00:20:21.319
+We're going to open up a new Emacs Lisp bracket here. So I have
+
+00:20:21.320 --> 00:20:28.839
+a file. And in this file, let's just go look at C-x b right
+
+00:20:28.840 --> 00:20:34.839
+there, you will see that we've got some bank transaction
+
+00:20:34.840 --> 00:20:37.879
+information. It's got these transactions from a whole
+
+00:20:37.880 --> 00:20:40.199
+bunch of different people into different accounts,
+
+00:20:40.200 --> 00:20:43.879
+whether it's money coming in, money going out, and then a
+
+00:20:43.880 --> 00:20:47.839
+basic description. How's your Latin? But for this little
+
+00:20:47.840 --> 00:20:53.679
+test, what we want to do is we want to find Bob's final bank
+
+00:20:53.680 --> 00:20:59.679
+balance. Let's get on to it. First of all, let's
+
+00:20:59.680 --> 00:21:04.444
+just confirm, let's do some basic stuff.
+
+00:21:04.445 --> 00:21:10.844
+with-current-buffer, find-file-noselect.
+
+00:21:10.845 --> 00:21:15.542
+What's the name of that file?
+
+00:21:15.543 --> 00:21:17.439
+This is pre-organized, so you
+
+00:21:17.440 --> 00:21:20.879
+will just see it right here.
+
+00:21:20.880 --> 00:21:26.999
+t-transduce and t-comp. We don't know what we're going to comp
+
+00:21:27.000 --> 00:21:33.039
+yet. Actually, I'll just pass to show you. And then we will
+
+00:21:33.040 --> 00:21:36.999
+see, let's just do a little t-count just to confirm. What's
+
+00:21:37.000 --> 00:21:45.112
+our source? Well, our source is a buffer, t-buffer-read.
+
+00:21:45.113 --> 00:21:50.153
+And note that because we're using with-current-buffer,
+
+00:21:50.154 --> 00:21:55.079
+if we go like this, if we go current-buffer, this will just work. So
+
+00:21:55.080 --> 00:21:59.919
+now let's... Well, that was odd. I should have done it like
+
+00:21:59.920 --> 00:22:02.159
+that. There we go. So now we should make that a little smaller
+
+00:22:02.160 --> 00:22:04.799
+so you can see what it is. Now if we hit RET, we should get the
+
+00:22:04.800 --> 00:22:09.559
+right result. Okay, so there are 50,001 lines in this file,
+
+00:22:09.560 --> 00:22:13.516
+but the one extra one is the name of the headers, right?
+
+00:22:13.517 --> 00:22:18.079
+We want to process this file in more detail. So how can we do
+
+00:22:18.080 --> 00:22:22.079
+that? Well, let's start by just automatically
+
+00:22:22.080 --> 00:22:28.799
+interpreting the results as CSV. If we do that, okay, well
+
+00:22:28.800 --> 00:22:31.559
+now we only have 50,000 entries as we expected, right?
+
+00:22:31.560 --> 00:22:36.759
+Because it's going to pull out the header line. If we now say
+
+00:22:36.760 --> 00:22:42.679
+we want to just filter out, you know, We only want Bob, right?
+
+00:22:42.680 --> 00:22:53.679
+So if... gethash, it was in the row of name. Each line here is
+
+00:22:53.680 --> 00:22:57.079
+made into, at least by default, is made into a hash map. So if
+
+00:22:57.080 --> 00:23:02.759
+we go like this, we should see that. Okay, so 12,000 of these
+
+00:23:02.760 --> 00:23:05.639
+lines or thereabout belong to Bob.
+
+00:23:05.640 --> 00:23:13.839
+Let's just move that over a little bit. Actually, I suppose we don't even
+
+00:23:13.840 --> 00:23:17.799
+need that anymore. I'll just keep that full size for you.
+
+00:23:17.800 --> 00:23:24.399
+Okay, so all right, there's about 12,000 results for Bob of
+
+00:23:24.400 --> 00:23:32.479
+the 50,000. What's next? Well, we want to confirm,
+
+00:23:32.480 --> 00:23:40.039
+we want to pull out everything,
+
+00:23:40.040 --> 00:23:43.079
+all of the in and the out entries.
+
+00:23:43.080 --> 00:23:56.279
+Thank you. So, string to number, because we know that
+
+00:23:56.280 --> 00:24:01.239
+everything came in as strings. Unfortunately, the from-csv
+
+00:24:01.240 --> 00:24:03.799
+doesn't try to be smart at all, it's just pulling everything
+
+00:24:03.800 --> 00:24:09.479
+in as string values. If you want actual things to be
+
+00:24:09.480 --> 00:24:13.399
+numbers or whatever, that is up to you to do the parsing
+
+00:24:13.400 --> 00:24:20.679
+yourself. Okay, so we have those two values now. We know
+
+00:24:20.680 --> 00:24:23.879
+that we saw from the data just a moment ago that you're only
+
+00:24:23.880 --> 00:24:26.999
+going to have a value in one column or the other. It's either
+
+00:24:27.000 --> 00:24:29.119
+going to be 0 in the empty one, or you're going to have some
+
+00:24:29.120 --> 00:24:32.159
+number in the other. So we know that we can just naively add
+
+00:24:32.160 --> 00:24:35.479
+them. If it was in, it would always be positive. So we'll just
+
+00:24:35.480 --> 00:24:41.519
+add that. But in the negative case, we want to just make it
+
+00:24:41.520 --> 00:24:45.279
+negative really briefly before we add them all together.
+
+00:24:45.280 --> 00:24:50.519
+let's now just prove to ourselves that we are sane here. What
+
+00:24:50.520 --> 00:24:52.479
+we're going to do is we're going to quickly go say take
+
+00:24:52.480 --> 00:24:57.039
+5 just to convince ourselves, and we'll go cons, and let's
+
+00:24:57.040 --> 00:24:59.839
+see if we get kind of results that make sense. Okay, these
+
+00:24:59.840 --> 00:25:02.799
+sort of make sense. It looks like you know Bob's got some big
+
+00:25:02.800 --> 00:25:07.679
+expenses here. If we take say 15, does it look any better?
+
+00:25:07.680 --> 00:25:10.319
+Okay, looks like he had a payday. All right, good job Bob.
+
+00:25:10.320 --> 00:25:15.439
+Let's get back in there. Now we only really care about
+
+00:25:15.440 --> 00:25:20.119
+adding the final result, right? So there we go. Add that all
+
+00:25:20.120 --> 00:25:24.559
+together and we'll see what we get in a moment. Okay, wow,
+
+00:25:24.560 --> 00:25:27.519
+Bob's rich. Okay, so it looks like in his 12,000
+
+00:25:27.520 --> 00:25:32.279
+transaction, Bob has an overall net worth of $8.5 million.
+
+00:25:32.280 --> 00:25:34.439
+Looking pretty good.
+
+00:25:34.440 --> 00:25:38.999
+So here's an example of how you can, particularly in Emacs
+
+00:25:39.000 --> 00:25:42.959
+Lisp, how you can very easily just get a file, consider it the
+
+00:25:42.960 --> 00:25:45.879
+current buffer, and then just do whatever you want to it.
+
+00:25:45.880 --> 00:25:50.359
+Note that there is sort of first-class support for both CSV
+
+00:25:50.360 --> 00:25:54.359
+and JSON, and then you have, and both of those bring in their
+
+00:25:54.360 --> 00:25:57.719
+values as hash maps, and then you're just free to do whatever
+
+00:25:57.720 --> 00:26:00.439
+you want and process them, potentially both writing them
+
+00:26:00.440 --> 00:26:03.239
+back out as CSV or JSON once again.
+
+NOTE Issues and next steps
+
+00:26:03.240 --> 00:26:10.719
+Some issues with transducers that can come up is
+
+00:26:10.720 --> 00:26:14.919
+that one, a zip operator is missing, but I'm working on it.
+
+00:26:14.920 --> 00:26:19.399
+Two is that performance, particularly in Emacs Lisp, isn't
+
+00:26:19.400 --> 00:26:24.119
+that great. It could be due to the sort of nested lambda calls
+
+00:26:24.120 --> 00:26:27.759
+that have to occur internally, but the common Lisp
+
+00:26:27.760 --> 00:26:32.239
+implementation is quite good. and there's yet no support
+
+00:26:32.240 --> 00:26:35.399
+for parallelism. You can imagine that a lot of those steps
+
+00:26:35.400 --> 00:26:38.559
+you could potentially perform in parallel depending on the
+
+00:26:38.560 --> 00:26:44.399
+platform, but research has not yet gotten that far. Okay,
+
+00:26:44.400 --> 00:26:47.639
+that's all. Thank you very much. If you have any questions,
+
+00:26:47.640 --> 00:26:51.240
+please contact me.
diff --git a/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt
new file mode 100644
index 00000000..cb5646ed
--- /dev/null
+++ b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:02.679 --> 00:00:25.676
+Introduction
+
+00:00:28.823 --> 00:00:47.234
+What is Astrobotany?
+
+00:00:48.914 --> 00:01:22.096
+What is Gemini?
+
+00:01:25.337 --> 00:03:34.999
+How do you play Astrobotany?
+
+00:03:37.000 --> 00:06:35.750
+Timers
+
+00:06:37.792 --> 00:09:03.843
+The code
+
+00:09:05.724 --> 00:13:02.246
+Managing the plant
+
+00:13:09.560 --> 00:13:47.471
+Conclusion
diff --git a/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt
new file mode 100644
index 00000000..2293a61e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt
@@ -0,0 +1,662 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:02.679 --> 00:00:06.782
+Welcome to Watering My Digital Plant with Emacs Timers,
+
+00:00:07.503 --> 00:00:11.384
+a talk by Christopher Howard for Emacs Conference 2024.
+
+00:00:11.385 --> 00:00:16.989
+The goal of this talk is to give
+
+00:00:17.010 --> 00:00:19.431
+a brief introduction to Emacs timers
+
+00:00:20.892 --> 00:00:23.334
+using the illustration of how I created
+
+00:00:23.394 --> 00:00:25.676
+a bot for the Astrobotany service.
+
+NOTE What is Astrobotany?
+
+00:00:28.823 --> 00:00:30.004
+What is Astrobotany?
+
+00:00:30.924 --> 00:00:32.384
+Let me jump to the home page.
+
+00:00:38.649 --> 00:00:42.411
+Astrobotany is a botany game or a simulation
+
+00:00:42.611 --> 00:00:45.072
+that is played using the Gemini protocol
+
+00:00:45.893 --> 00:00:47.234
+and gemtext documents.
+
+NOTE What is Gemini?
+
+00:00:48.914 --> 00:00:49.615
+What is Gemini?
+
+00:00:50.700 --> 00:00:53.563
+The Gemini protocol is a small web protocol,
+
+00:00:54.263 --> 00:00:57.246
+similar to the HyperText Transfer Protocol,
+
+00:00:58.047 --> 00:01:00.109
+but with differing goals of simplicity,
+
+00:01:00.789 --> 00:01:03.712
+non-extensibility, and protecting privacy.
+
+00:01:05.453 --> 00:01:09.057
+Gemtext is a simple hyperlinking document format,
+
+00:01:09.557 --> 00:01:14.242
+the analog of the HyperText Markup Language, or HTML.
+
+00:01:16.095 --> 00:01:17.075
+Much more could be said
+
+00:01:17.135 --> 00:01:18.516
+about the design and goals
+
+00:01:18.576 --> 00:01:19.756
+of the Gemini project,
+
+00:01:20.236 --> 00:01:22.096
+but that is not the focus of this talk.
+
+NOTE How do you play Astrobotany?
+
+00:01:25.337 --> 00:01:27.057
+And how do you play Astrobotany?
+
+00:01:28.418 --> 00:01:30.518
+First, you need to get a Gemini client
+
+00:01:31.138 --> 00:01:32.838
+or what you might call a browser.
+
+00:01:34.079 --> 00:01:35.599
+Many clients are available,
+
+00:01:36.259 --> 00:01:39.860
+but I am using Elpher, a Gemini client for Emacs.
+
+00:01:41.340 --> 00:01:43.161
+Once you have your client running,
+
+00:01:43.801 --> 00:01:46.361
+navigate to the home page for Astrobotany,
+
+00:01:46.782 --> 00:01:48.842
+which is shown in this window.
+
+00:01:50.783 --> 00:01:53.023
+You'll see the URL for the home page
+
+00:01:53.103 --> 00:01:54.704
+displayed at the top of the window.
+
+00:01:57.865 --> 00:01:59.625
+On your first visit to Astrobotany,
+
+00:02:00.406 --> 00:02:02.586
+you will need to create a client certificate,
+
+00:02:03.426 --> 00:02:05.507
+which will be used instead of a password.
+
+00:02:06.067 --> 00:02:07.548
+Your Gemini client will help you
+
+00:02:07.588 --> 00:02:08.768
+to create the certificate.
+
+00:02:12.102 --> 00:02:16.306
+Then you will go to the Visit Your Plant page
+
+00:02:22.472 --> 00:02:24.553
+in order to view your plant,
+
+00:02:28.297 --> 00:02:32.781
+to water it, and to collect things from it,
+
+00:02:33.141 --> 00:02:37.928
+including money. So here you see
+
+00:02:37.968 --> 00:02:39.429
+the plant that I'm currently growing
+
+00:02:40.229 --> 00:02:41.910
+in glorious ASCII graphics.
+
+00:02:43.070 --> 00:02:46.691
+There's also a color version available from this page.
+
+00:02:56.895 --> 00:02:57.935
+Back at the home page,
+
+00:02:59.536 --> 00:03:00.836
+you can do other things
+
+00:03:02.537 --> 00:03:05.358
+like go to the item shop,
+
+00:03:07.165 --> 00:03:10.247
+to buy items like badges, fertilizer,
+
+00:03:11.607 --> 00:03:13.348
+or post on the message board.
+
+00:03:15.849 --> 00:03:18.991
+In Astrobotany, gardener bots are fully legal.
+
+00:03:20.852 --> 00:03:23.153
+And to do an action on your plant,
+
+00:03:23.693 --> 00:03:24.814
+like watering the plant,
+
+00:03:25.454 --> 00:03:26.915
+all your bot needs to do is
+
+00:03:27.035 --> 00:03:30.917
+to access the appropriate Gemini URL or page
+
+00:03:31.537 --> 00:03:33.998
+while presenting the appropriate certificate
+
+00:03:34.419 --> 00:03:34.999
+for your plant.
+
+NOTE Timers
+
+00:03:37.000 --> 00:03:39.862
+And this brings us to Emacs timers.
+
+00:03:42.904 --> 00:03:45.906
+So the main function of interest to us
+
+00:03:46.626 --> 00:03:49.288
+is the run-at-time function.
+
+00:04:00.714 --> 00:04:03.235
+Here is the help documentation,
+
+00:04:03.395 --> 00:04:07.036
+which is available in any recent Emacs installation.
+
+00:04:10.157 --> 00:04:13.277
+As you see, the purpose of the function
+
+00:04:13.498 --> 00:04:16.718
+is to perform an action at a specific time
+
+00:04:20.920 --> 00:04:25.801
+to repeat it after a specific number of seconds.
+
+00:04:29.770 --> 00:04:32.573
+And so basically, all you have to do is
+
+00:04:32.673 --> 00:04:35.795
+pass in a function to run-at-time,
+
+00:04:36.436 --> 00:04:39.058
+telling Emacs how soon you want to run the function,
+
+00:04:39.999 --> 00:04:41.541
+and then how often you want to run the
+
+00:04:41.581 --> 00:04:42.461
+function after that.
+
+00:04:44.403 --> 00:04:46.605
+The function has a variety of options for
+
+00:04:46.645 --> 00:04:48.887
+specifying the time parameter,
+
+00:04:49.347 --> 00:04:52.030
+that is, how soon you want the function to run.
+
+00:04:55.307 --> 00:04:57.428
+For our application, in which we'll be
+
+00:04:57.508 --> 00:04:58.409
+running our functions
+
+00:04:58.649 --> 00:05:01.030
+once or twice a day at specific times,
+
+00:05:03.152 --> 00:05:04.513
+it is most useful to
+
+00:05:04.553 --> 00:05:06.954
+specify the number of seconds until the event.
+
+00:05:08.515 --> 00:05:09.876
+This does, however, require
+
+00:05:10.436 --> 00:05:11.977
+calculating the number of seconds
+
+00:05:12.097 --> 00:05:15.399
+until a specific time of day. I will
+
+00:05:15.419 --> 00:05:16.800
+provide code for this shortly.
+
+00:05:18.860 --> 00:05:20.803
+The run-at-time function does allow you to
+
+00:05:20.864 --> 00:05:23.308
+specify the time parameter as a string,
+
+00:05:24.029 --> 00:05:25.672
+representing the hours and minutes.
+
+00:05:26.413 --> 00:05:32.149
+For example, 05:40.
+
+00:05:32.150 --> 00:05:34.051
+However, there is an oddity in the
+
+00:05:34.091 --> 00:05:35.392
+design of run-at-time,
+
+00:05:36.372 --> 00:05:41.395
+such that if the specified time of day has
+
+00:05:41.455 --> 00:05:42.216
+already passed,
+
+00:05:43.196 --> 00:05:44.877
+then the timer will run immediately,
+
+00:05:45.578 --> 00:05:46.638
+rather than in the future,
+
+00:05:46.958 --> 00:05:47.839
+as you might expect.
+
+00:05:49.280 --> 00:05:51.441
+This can be problematic, for example,
+
+00:05:51.661 --> 00:05:54.663
+if run-at-time is being called from your init file,
+
+00:05:55.583 --> 00:05:57.624
+since the timer will run immediately
+
+00:05:58.245 --> 00:06:00.426
+every time you restart Emacs for any reason.
+
+00:06:02.526 --> 00:06:04.691
+I noticed recently that run-at-time
+
+00:06:04.791 --> 00:06:07.217
+also allows you to pass in a value
+
+00:06:07.317 --> 00:06:17.657
+from encode-time, which maybe does what we want,
+
+00:06:18.378 --> 00:06:20.760
+but I never bothered with testing that.
+
+00:06:21.340 --> 00:06:23.041
+Actually, I have a vague memory of
+
+00:06:23.181 --> 00:06:25.743
+once looking into it and it didn't seem to do what I
+
+00:06:25.783 --> 00:06:29.286
+wanted, but honestly I can't clearly remember,
+
+00:06:29.946 --> 00:06:31.667
+so you may want to look into that yourself.
+
+00:06:32.728 --> 00:06:34.209
+What I ended up using was just
+
+00:06:34.309 --> 00:06:35.750
+passing in a number of seconds.
+
+NOTE The code
+
+00:06:37.792 --> 00:06:39.413
+So now we'll move over to the code.
+
+00:06:46.764 --> 00:06:49.426
+So I'll skip down here first
+
+00:06:49.966 --> 00:06:52.447
+to the code that I wrote for calculating the number of
+
+00:06:52.527 --> 00:06:52.887
+seconds.
+
+00:06:54.408 --> 00:06:57.790
+It's a function that calculates the number of seconds
+
+00:06:58.050 --> 00:07:01.012
+until a particular time of day in the future.
+
+00:07:04.214 --> 00:07:09.277
+You can see that you pass in the hour as a number from
+
+00:07:09.278 --> 00:07:19.137
+0 to 23 and the minutes as a number from 0 to 59. And
+
+00:07:20.078 --> 00:07:22.539
+here's the code, which will also be available later.
+
+00:07:25.700 --> 00:07:29.202
+I wrote another function, secs-until-weekly,
+
+00:07:29.522 --> 00:07:32.464
+which we do not need for this talk,
+
+00:07:32.604 --> 00:07:34.685
+but which is useful if you're running
+
+00:07:34.745 --> 00:07:36.746
+events which need to happen once per week.
+
+00:07:39.264 --> 00:07:44.025
+This function also requires a target hour
+
+00:07:44.085 --> 00:07:48.926
+and a target minute, but also requires passing in a
+
+00:07:48.966 --> 00:08:00.548
+target day. And while we're on the subject of timers
+
+00:08:00.568 --> 00:08:02.588
+specifically, I should mention that
+
+00:08:02.648 --> 00:08:05.929
+Emacs has a very useful function called list-timers.
+
+00:08:07.577 --> 00:08:09.959
+So if I call the interactive function list-timers,
+
+00:08:11.560 --> 00:08:14.542
+it will give me a list of all the timers
+
+00:08:14.842 --> 00:08:15.542
+currently running.
+
+00:08:16.723 --> 00:08:19.625
+This page shows not only which timers exist,
+
+00:08:20.186 --> 00:08:22.807
+but also how long it will be until they run again,
+
+00:08:23.848 --> 00:08:26.750
+along with the periodic repeat value that you
+
+00:08:26.770 --> 00:08:27.390
+specified.
+
+00:08:29.992 --> 00:08:33.034
+Furthermore, any timer can be canceled by moving point
+
+00:08:33.514 --> 00:08:38.515
+over the timer and running timer-list-cancel,
+
+00:08:38.696 --> 00:08:42.556
+which on my system is bound to the letter c by default.
+
+00:08:43.537 --> 00:08:45.417
+This is very helpful while you are developing
+
+00:08:45.497 --> 00:08:46.537
+some timer function.
+
+00:08:48.438 --> 00:08:52.158
+So I could cancel the timer that I already have running
+
+00:08:53.779 --> 00:08:55.059
+for shaking the plant,
+
+00:08:57.420 --> 00:08:59.360
+as well as the one for watering the plant.
+
+00:09:02.842 --> 00:09:03.843
+and back to the code.
+
+NOTE Managing the plant
+
+00:09:05.724 --> 00:09:08.566
+So now we'll talk about the actual code for
+
+00:09:08.646 --> 00:09:09.567
+managing the plant.
+
+00:09:14.210 --> 00:09:16.031
+So you see I have a variable set up here
+
+00:09:16.471 --> 00:09:19.353
+that specifies where the certificate file,
+
+00:09:20.994 --> 00:09:23.836
+the public certificate file, as well as
+
+00:09:23.936 --> 00:09:26.458
+the secret key file is located.
+
+00:09:27.918 --> 00:09:29.459
+This is where it is in my system.
+
+00:09:30.119 --> 00:09:33.181
+Of course, depending on your specific Gemini client,
+
+00:09:33.481 --> 00:09:36.722
+it may be in a different space and will likely have a
+
+00:09:36.762 --> 00:09:37.303
+different name.
+
+00:09:41.045 --> 00:09:43.486
+And here is the code for watering the plant,
+
+00:09:44.526 --> 00:09:45.967
+which I can call interactively.
+
+00:09:49.412 --> 00:09:52.334
+And the core of it here is that it uses the
+
+00:09:52.834 --> 00:09:57.937
+gmni utility, a command line utility to
+
+00:10:00.998 --> 00:10:06.982
+call a particular URL while also loading up
+
+00:10:07.702 --> 00:10:10.564
+or presenting the required certificate.
+
+00:10:12.505 --> 00:10:16.447
+So in this case, you can see it is the URL that is
+
+00:10:16.567 --> 00:10:18.088
+required for watering the plant.
+
+00:10:19.827 --> 00:10:24.952
+This idea is very simple and the gmni client
+
+00:10:26.353 --> 00:10:30.097
+or gmni command line program
+
+00:10:30.758 --> 00:10:31.999
+makes this very simple to do.
+
+00:10:34.554 --> 00:10:36.535
+Here's another function for shaking the plant.
+
+00:10:37.696 --> 00:10:40.758
+Again it is almost identical except that we
+
+00:10:40.958 --> 00:10:43.300
+use a different URL,
+
+00:10:44.180 --> 00:10:46.982
+one for shaking the plant instead of watering it.
+
+00:10:47.562 --> 00:10:49.183
+And again we want to shake the plant
+
+00:10:50.044 --> 00:10:51.745
+in order to get money to fall off of it.
+
+00:10:55.847 --> 00:10:59.290
+You need to water your plant at least once per day or
+
+00:11:00.791 --> 00:11:01.251
+it'll die.
+
+00:11:02.930 --> 00:11:09.953
+I usually water mine twice and just in case something
+
+00:11:10.013 --> 00:11:13.314
+happens where Emacs was turned off because of
+
+00:11:13.414 --> 00:11:15.035
+power outage or something like that
+
+00:11:15.595 --> 00:11:17.196
+that I'm more likely to get it watered,
+
+00:11:19.036 --> 00:11:21.957
+and I shake it once per day because there isn't
+
+00:11:23.398 --> 00:11:25.339
+any purpose to shaking it more than that.
+
+00:11:25.619 --> 00:11:27.240
+If you try to shake it more than that,
+
+00:11:27.420 --> 00:11:29.560
+then money no more money will fall off,
+
+00:11:30.321 --> 00:11:30.821
+or not much.
+
+00:11:37.242 --> 00:11:39.526
+So you see down here, I have the code that
+
+00:11:39.627 --> 00:11:41.209
+actually calls run-at-time.
+
+00:11:42.560 --> 00:11:45.141
+I left here commented my original forms of this
+
+00:11:45.661 --> 00:11:50.024
+which used the just specify directly the time of day.
+
+00:11:50.644 --> 00:11:52.225
+As I mentioned the problem with that
+
+00:11:53.505 --> 00:11:54.466
+was that it would...
+
+00:11:54.786 --> 00:11:57.187
+these functions would also get called
+
+00:11:59.208 --> 00:12:02.649
+whenever I restarted Emacs for any
+
+00:12:02.709 --> 00:12:04.250
+reason and that was kind of annoying.
+
+00:12:05.011 --> 00:12:07.352
+So instead we have here the functions down here
+
+00:12:07.452 --> 00:12:09.533
+which uses secs-until-daily
+
+00:12:10.913 --> 00:12:11.754
+to water the plant
+
+00:12:12.294 --> 00:12:14.756
+and then secs-until-daily to shake the plant.
+
+00:12:16.057 --> 00:12:20.821
+You see, I've specified the plant to get watered
+
+00:12:21.181 --> 00:12:26.025
+at 4 in the morning and then the function is run again
+
+00:12:26.125 --> 00:12:31.269
+after that, every 43,200 seconds, which translates to
+
+00:12:31.389 --> 00:12:32.270
+every 12 hours,
+
+00:12:33.711 --> 00:12:36.353
+and then I shake the plants, shake the plant
+
+00:12:38.760 --> 00:12:43.341
+every morning at 4.15 a.m. and once every [24] hours.
+
+00:12:45.742 --> 00:12:46.802
+With a little bit more
+
+00:12:46.902 --> 00:12:49.483
+sophistication, a little bit more work on the code,
+
+00:12:50.143 --> 00:12:53.964
+I could actually have multiple plants be watering and
+
+00:12:54.264 --> 00:12:57.985
+shaking multiple plants with multiple certificates,
+
+00:12:58.105 --> 00:12:59.885
+but I never got around to that.
+
+00:13:00.946 --> 00:13:02.246
+Didn't seem worth the bother to me.
+
+NOTE Conclusion
+
+00:13:09.560 --> 00:13:12.964
+So thank you for watching my video,
+
+00:13:13.825 --> 00:13:16.227
+Watering My Digital Plant with Emacs Timers.
+
+00:13:16.628 --> 00:13:18.189
+You'll see at the bottom of this page
+
+00:13:19.491 --> 00:13:21.613
+links to the code for this talk
+
+00:13:22.354 --> 00:13:24.096
+as well as other things that I mentioned
+
+00:13:24.677 --> 00:13:27.819
+like the source code for the
+
+00:13:27.979 --> 00:13:30.100
+Elpher Gemini client,
+
+00:13:30.801 --> 00:13:33.282
+the URL for the Astrobotany capsule,
+
+00:13:34.203 --> 00:13:36.865
+as well as a link to more information about
+
+00:13:36.925 --> 00:13:41.407
+Project Gemini and my own personal Gemini capsule
+
+00:13:42.808 --> 00:13:45.129
+that's being run off my own server at home.
+
+00:13:46.790 --> 00:13:47.471
+Thank you very much.
diff --git a/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt
new file mode 100644
index 00000000..d14cc21e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:57.648
+Introduction
+
+00:00:57.649 --> 00:02:02.451
+Why?
+
+00:02:02.452 --> 00:02:50.071
+EWS configuration
+
+00:02:50.072 --> 00:03:21.953
+How did I develop EWS?
+
+00:03:21.954 --> 00:04:29.319
+Overall workflow
+
+00:04:29.320 --> 00:05:54.760
+Inspiration
+
+00:05:54.761 --> 00:07:39.112
+Ideation
+
+00:07:39.113 --> 00:08:54.580
+denote-explore
+
+00:08:54.581 --> 00:10:05.919
+Writing with Org
+
+00:10:05.920 --> 00:12:18.719
+The project file
+
+00:12:18.720 --> 00:13:30.720
+Conclusions
diff --git a/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt
new file mode 100644
index 00000000..15312686
--- /dev/null
+++ b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt
@@ -0,0 +1,677 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:02.799
+Hi, I'm Peter Prevos, and I'll be talking about Emacs
+
+00:00:02.800 --> 00:00:06.039
+Writing Studio. I'm a water engineer, a social scientist,
+
+00:00:06.040 --> 00:00:08.759
+and I dabble in theatrical magic. For each of those
+
+00:00:08.760 --> 00:00:11.399
+endeavors, I do a lot of writing. I take notes, I write
+
+00:00:11.400 --> 00:00:14.559
+reports, articles, books, and websites. I use Emacs for all
+
+00:00:14.560 --> 00:00:18.719
+my research, my writing, and my publishing. Emacs Writing
+
+00:00:18.720 --> 00:00:20.999
+Studio is an opinionated starter kit for authors who write
+
+00:00:21.000 --> 00:00:23.999
+for humans, not for programmers who write for computers.
+
+00:00:24.000 --> 00:00:26.879
+It consists of a configuration, some bespoke
+
+00:00:26.880 --> 00:00:31.119
+functions, but are not yet a package, a website, and a book.
+
+00:00:31.120 --> 00:00:36.279
+The book is completely written with EWS itself. The target
+
+00:00:36.280 --> 00:00:39.039
+audience are authors who are frustrated with using
+
+00:00:39.040 --> 00:00:41.239
+commercial software and hopping from application to
+
+00:00:41.240 --> 00:00:45.879
+application to achieve an objective. These are people
+
+00:00:45.880 --> 00:00:49.986
+without any Emacs experience or coding skills.
+
+00:00:49.987 --> 00:00:53.307
+The objective is to teach these people how to use Emacs,
+
+00:00:53.308 --> 00:00:57.648
+not how to configure Emacs to manage a complete writing project.
+
+NOTE Why?
+
+00:00:57.649 --> 00:01:00.479
+So why did I write a book about Emacs when the documentation is
+
+00:01:00.480 --> 00:01:04.719
+already so extensive? Most Emacs documentation focuses on
+
+00:01:04.720 --> 00:01:08.839
+configuration, burying potential new users with choices.
+
+00:01:08.840 --> 00:01:13.039
+It forces people to work on Emacs instead of with Emacs,
+
+00:01:13.040 --> 00:01:18.039
+and it quickly can become a productivity sink. Emacs is the
+
+00:01:18.040 --> 00:01:21.399
+ultimate free software platform, but with this freedom
+
+00:01:21.400 --> 00:01:25.879
+also comes a price. Barry Schwartz wrote about the
+
+00:01:25.880 --> 00:01:29.239
+paradox of choice, which is about the dramatic explosion in
+
+00:01:29.240 --> 00:01:32.119
+choices in the modern world. Just think about the amount of
+
+00:01:32.120 --> 00:01:34.599
+effort it can take to decide what cereal to buy in a
+
+00:01:34.600 --> 00:01:37.559
+supermarket that you haven't been before. So many
+
+00:01:37.560 --> 00:01:40.559
+different choices. Paradoxically, that's become a
+
+00:01:40.560 --> 00:01:44.239
+problem instead of a solution. Emacs can perhaps suffer
+
+00:01:44.240 --> 00:01:49.559
+from the same issue. Another objective, using a COVID-19
+
+00:01:49.560 --> 00:01:54.039
+trope: EWS is about flattening the curve--that is, the
+
+00:01:54.040 --> 00:01:56.727
+learning curve--by making these choices
+
+00:01:56.728 --> 00:02:02.451
+for the new Emacs user and avoiding the paradox.
+
+NOTE EWS configuration
+
+00:02:02.452 --> 00:02:05.593
+What about this EWS configuration?
+
+00:02:05.594 --> 00:02:07.839
+I decided to stay as close as humanly
+
+00:02:07.840 --> 00:02:11.039
+bearable to vanilla Emacs. I say that tongue-in-cheek,
+
+00:02:11.040 --> 00:02:16.026
+but also with some realism, centered around Org mode
+
+00:02:16.027 --> 00:02:18.279
+and Denote for note tagging, and citar for accessing
+
+00:02:18.280 --> 00:02:21.319
+bibliographies, and other convenience packages such as
+
+00:02:21.320 --> 00:02:24.959
+vertico for minibuffer completion. There's a
+
+00:02:24.960 --> 00:02:27.999
+dictionary, a thesaurus, and some other packages that are of
+
+00:02:28.000 --> 00:02:32.559
+interest to authors. EWS uses the standard keyboard
+
+00:02:32.560 --> 00:02:37.359
+shortcuts. Writing is much more about thinking than about
+
+00:02:37.360 --> 00:02:40.439
+maximizing the amount of words per minute. Just think
+
+00:02:40.440 --> 00:02:43.639
+about that the most used function for authors is
+
+00:02:43.640 --> 00:02:46.919
+self-insert. There's no need to use fancy keyboard
+
+00:02:46.920 --> 00:02:50.071
+shortcut systems when you write prose.
+
+NOTE How did I develop EWS?
+
+00:02:50.072 --> 00:02:54.534
+How did I go about developing Emacs? I declared Emacs bankruptcy,
+
+00:02:54.535 --> 00:02:57.096
+like we all have every now and then.
+
+00:02:57.097 --> 00:02:58.479
+I decided to write this book with
+
+00:02:58.480 --> 00:03:02.119
+vanilla Emacs and only configure the system as was
+
+00:03:02.120 --> 00:03:04.919
+required. The first thing I did, I hooked visual-line-mode
+
+00:03:04.920 --> 00:03:08.999
+to text-mode and off I went. The configuration grew as the
+
+00:03:09.000 --> 00:03:13.119
+need arose. I was actually surprised with how far you can
+
+00:03:13.120 --> 00:03:17.759
+get with just using Vanilla Emacs. I also developed two
+
+00:03:17.760 --> 00:03:21.953
+packages to enhance how I can use Denote.
+
+NOTE Overall workflow
+
+00:03:21.954 --> 00:03:25.375
+Well, let's get to a demo.
+
+00:03:25.376 --> 00:03:30.157
+EWS is based on a typical research and writing workflow.
+
+00:03:30.158 --> 00:03:32.759
+First step is you need to get some inspiration.
+
+00:03:32.760 --> 00:03:35.479
+Usually we do that by reading, by watching, by
+
+00:03:35.480 --> 00:03:39.319
+listening. Then the next step is ideation. You develop your
+
+00:03:39.320 --> 00:03:42.679
+ideas, summarize ideas from other people, write down your
+
+00:03:42.680 --> 00:03:46.439
+own ideas. For that, you need a note-taking system. EWS
+
+00:03:46.440 --> 00:03:50.279
+also talks about managing bibliographies. The third step
+
+00:03:50.280 --> 00:03:53.439
+is production. This is the actual writing process where, in
+
+00:03:53.440 --> 00:03:57.479
+this case, the EWS book. Once that is finished, we
+
+00:03:57.480 --> 00:04:00.639
+convert this Org mode file into something that can be
+
+00:04:00.640 --> 00:04:04.119
+published. That might be an e-book in an EPUB format, or a
+
+00:04:04.120 --> 00:04:08.759
+PDF for the interior of a a paperback book or perhaps as an
+
+00:04:08.760 --> 00:04:12.159
+e-book as well. There's also configuration in Emacs to
+
+00:04:12.160 --> 00:04:16.759
+produce MS Word documents if you need to collaborate with
+
+00:04:16.760 --> 00:04:22.359
+other people. Let's jump in to Emacs and walk through this
+
+00:04:22.360 --> 00:04:25.399
+workflow, give you a very quick demonstration of what's in
+
+00:04:25.400 --> 00:04:29.319
+the box.
+
+NOTE Inspiration
+
+00:04:29.320 --> 00:04:32.879
+So the first step in the EWS workflow is inspiration. We all
+
+00:04:32.880 --> 00:04:35.319
+stand on the shoulders of each other. Some giants; most of
+
+00:04:35.320 --> 00:04:38.079
+them are normal people. We get inspiration by reading,
+
+00:04:38.080 --> 00:04:40.799
+listening, and watching, and Emacs can help you access
+
+00:04:40.800 --> 00:04:44.279
+text, sound, and video. It depends on external software.
+
+00:04:44.280 --> 00:04:47.639
+Emacs acts as a beautiful interface, and EWS helps you
+
+00:04:47.640 --> 00:04:50.919
+with the configuration. But we also need a tool to manage our
+
+00:04:50.920 --> 00:04:53.631
+electronic library, and BibTeX
+
+00:04:53.632 --> 00:04:56.054
+and citar package by Bruce D'Arcus
+
+00:04:56.055 --> 00:04:58.119
+provides a perfect interface to manage this
+
+00:04:58.120 --> 00:05:02.959
+literature. If I open my bibliography here, you see that
+
+00:05:02.960 --> 00:05:06.959
+I've got 1864 references in my BibTeX files. There's a
+
+00:05:06.960 --> 00:05:11.999
+whole bunch of stuff about, I guess, the weird things that I
+
+00:05:12.000 --> 00:05:14.479
+read. Let's look for Emacs, right, because that's a joint
+
+00:05:14.480 --> 00:05:18.679
+interest that we have. Let's open here this paper by
+
+00:05:18.680 --> 00:05:23.799
+Marcus Birkenkrahe, who did some research using Emacs to teach
+
+00:05:23.800 --> 00:05:26.679
+data science. Data science is my day job, so that had my
+
+00:05:26.680 --> 00:05:29.759
+interest. We have here a Denote file, which I'll talk
+
+00:05:29.760 --> 00:05:33.399
+about in a second. There's a library file, which is a PDF, but
+
+00:05:33.400 --> 00:05:35.599
+it could be a whole collection of different files in
+
+00:05:35.600 --> 00:05:39.119
+different formats, even video or sound. We can create a new
+
+00:05:39.120 --> 00:05:42.279
+Denote file, or there's a link to the document object
+
+00:05:42.280 --> 00:05:46.959
+identifier. Let's go to the PDF. Here we can now do our
+
+00:05:46.960 --> 00:05:50.479
+reading. We can get our inspiration by what Marcus has
+
+00:05:50.480 --> 00:05:52.679
+written here about teaching data science with literary
+
+00:05:52.680 --> 00:05:54.760
+programming tools.
+
+NOTE Ideation
+
+00:05:54.761 --> 00:05:57.599
+Next step is ideation. Taking notes is
+
+00:05:57.600 --> 00:06:00.999
+the core of all creativity. When I read that paper, I might
+
+00:06:01.000 --> 00:06:05.079
+want to copy some ideas, I might get some of my own ideas, and I
+
+00:06:05.080 --> 00:06:07.679
+need to write that down. I basically write everything in a
+
+00:06:07.680 --> 00:06:10.919
+paper notebook, but then I transfer the things that are
+
+00:06:10.920 --> 00:06:14.079
+worth keeping to the Denote note-taking system. Now, there
+
+00:06:14.080 --> 00:06:17.519
+are many systems that exist out there that promise you
+
+00:06:17.520 --> 00:06:20.639
+note-taking heaven when you just follow a certain process.
+
+00:06:20.640 --> 00:06:24.919
+My advice: don't worry about Zettelkasten, PARA, or
+
+00:06:24.920 --> 00:06:28.479
+whatever is out there. Just write your notes and worry about
+
+00:06:28.480 --> 00:06:31.479
+structure and all that later. Even Niklas Luhmann, the
+
+00:06:31.480 --> 00:06:34.639
+inventor of Zettelkasten, called his system a septic tank
+
+00:06:34.640 --> 00:06:38.319
+of ideas. I call my collection of notes a primordial soup
+
+00:06:38.320 --> 00:06:43.439
+from which my books emerge. Now, Denote by Prot Stavrou is a
+
+00:06:43.440 --> 00:06:45.919
+flexible note-taking system that can implement any of the
+
+00:06:45.920 --> 00:06:49.119
+popular methods. I transferred thousands of files to
+
+00:06:49.120 --> 00:06:54.319
+this format, so all my information is at my fingertips. We
+
+00:06:54.320 --> 00:06:59.759
+can jump to the Denote directory. In my case, that's
+
+00:06:59.760 --> 00:07:04.279
+~/documents/notes. We see here the marvel that is Denote,
+
+00:07:04.280 --> 00:07:09.759
+which is its ingenious file naming convention that has a
+
+00:07:09.760 --> 00:07:15.279
+timestamp, a title, and some (what do we call them) tags or
+
+00:07:15.280 --> 00:07:18.559
+categories, whatever you please. This is a very quick way
+
+00:07:18.560 --> 00:07:28.763
+to find things. Then there is an ews-dired-narrow function.
+
+00:07:28.764 --> 00:07:30.799
+For example, I can find anything,
+
+00:07:30.800 --> 00:07:34.679
+_ews means anything that has the EWS tag, and
+
+00:07:34.680 --> 00:07:39.112
+there we go, it's narrowed down in my EWS notes.
+
+NOTE denote-explore
+
+00:07:39.113 --> 00:07:45.040
+Now, this is all very well, but I also decided to
+
+00:07:45.041 --> 00:07:47.102
+write a package called denote-explore,
+
+00:07:47.103 --> 00:07:54.071
+which helps us sort of explore these collections of notes.
+
+00:07:54.072 --> 00:07:55.519
+One of the fancy things we can do is
+
+00:07:55.520 --> 00:07:56.519
+do some visualization.
+
+00:07:56.520 --> 00:08:02.159
+Let's go to the network function and create a community of
+
+00:08:02.160 --> 00:08:05.359
+notes. A community is a collection of notes that match a
+
+00:08:05.360 --> 00:08:10.039
+regular expression, _ews. All the notes here
+
+00:08:10.040 --> 00:08:15.599
+that are on this list, the ones with the EWS tag. In a second,
+
+00:08:15.600 --> 00:08:22.159
+my browser pops up. I shall move that to my other window in a
+
+00:08:22.160 --> 00:08:28.599
+second. There we go. denote-explore creates a SVG file and
+
+00:08:28.600 --> 00:08:33.213
+it creates an arrow between all the nodes that are linked.
+
+00:08:33.214 --> 00:08:36.199
+It puts a title up there when the node has more than two links
+
+00:08:36.200 --> 00:08:39.599
+going in or out. We can also click on the note to read it in
+
+00:08:39.600 --> 00:08:43.679
+the browser, if you choose. If you set up Firefox properly,
+
+00:08:43.680 --> 00:08:49.639
+I'm sure it can also go into Emacs. This is the note tagging
+
+00:08:49.640 --> 00:08:54.580
+that's available within EWS.
+
+NOTE Writing with Org
+
+00:08:54.581 --> 00:08:57.021
+Now, we've taken all these notes. Now we need to
+
+00:08:57.022 --> 00:09:00.518
+start writing stuff. Org mode, for me,
+
+00:09:00.519 --> 00:09:03.559
+is the ideal tool. Org mode is what you see is what you
+
+00:09:03.560 --> 00:09:06.919
+mean. The text and the syntax instruct the computer on how to
+
+00:09:06.920 --> 00:09:10.479
+produce the final result. This means that one file can
+
+00:09:10.480 --> 00:09:12.879
+become many different formats, an e-book, a printed book,
+
+00:09:12.880 --> 00:09:16.759
+or a website. It doesn't matter. Now, a lot of people talk
+
+00:09:16.760 --> 00:09:18.959
+about what you see, what you get, and that we should have a
+
+00:09:18.960 --> 00:09:21.079
+what you see, what you get mode in Emacs. I think that's
+
+00:09:21.080 --> 00:09:24.799
+irrelevant, because showing the final result while you're
+
+00:09:24.800 --> 00:09:28.639
+writing is actually a distraction. Traditional writing,
+
+00:09:28.640 --> 00:09:31.359
+producing the content, and designing the layout and
+
+00:09:31.360 --> 00:09:34.119
+typesetting are separate processes done by different
+
+00:09:34.120 --> 00:09:38.079
+professionals. In Emacs Writing Studio, the writing is
+
+00:09:38.080 --> 00:09:40.359
+still done by a human. There are no provisions for large
+
+00:09:40.360 --> 00:09:45.039
+language models in EWS. But layout and typesetting is done
+
+00:09:45.040 --> 00:09:49.599
+by external software, be it CSS, LaTeX, or XML, all mediated
+
+00:09:49.600 --> 00:09:50.359
+by Org mode.
+
+00:09:50.360 --> 00:09:57.399
+EWS also has some other tools for case conversion,
+
+00:09:57.400 --> 00:09:59.799
+thesaurus, a dictionary that I haven't got time to show,
+
+00:09:59.800 --> 00:10:02.909
+but what I will show you is how the book functions,
+
+00:10:02.910 --> 00:10:05.919
+and then how we create these publications.
+
+NOTE The project file
+
+00:10:05.920 --> 00:10:11.639
+Okay. Let's go to my project file.
+
+00:10:11.640 --> 00:10:17.058
+So these are the EWS chapters,
+
+00:10:17.059 --> 00:10:20.200
+and each chapter is an Org mode file.
+
+00:10:20.201 --> 00:10:25.079
+Let's go into the main document, which is set up with
+
+00:10:25.080 --> 00:10:30.359
+olivetti-mode just to make it easier to read. What we see
+
+00:10:30.360 --> 00:10:34.839
+here is all the fluff from Org mode. These are all the
+
+00:10:34.840 --> 00:10:37.719
+various bits of metadata that I used to create the final
+
+00:10:37.720 --> 00:10:43.439
+result. Then for each chapter, I have an inclusion.
+
+00:10:43.440 --> 00:10:46.721
+This references another file. I've got some properties.
+
+00:10:46.722 --> 00:10:49.839
+In this case, the forward is unnumbered. There's some notes.
+
+00:10:49.840 --> 00:10:53.599
+In this case, Prot actually wrote this for me. Then we
+
+00:10:53.600 --> 00:10:59.039
+can jump into that text. Then what we see at the bottom
+
+00:10:59.040 --> 00:11:02.919
+here is some inclusions for HTML. This is the EPUB version,
+
+00:11:02.920 --> 00:11:07.159
+but it's different in LaTeX. Again, the same file can
+
+00:11:07.160 --> 00:11:09.479
+serve different purposes.
+
+00:11:09.480 --> 00:11:14.719
+So now let's, as the final part of this demonstration,
+
+00:11:14.720 --> 00:11:17.759
+actually create the book, because the book's freely
+
+00:11:17.760 --> 00:11:23.159
+available. You can download the source files from GitHub,
+
+00:11:23.160 --> 00:11:29.839
+and you can roll your own. Let's open the dispatcher.
+
+00:11:29.840 --> 00:11:33.468
+We'll export the LaTeX and we want to open the file.
+
+00:11:33.469 --> 00:11:37.349
+Now this takes a minute because there's a lot happening within
+
+00:11:37.350 --> 00:11:42.199
+all this code, so I'll shorten this video. I'll be silent now.
+
+00:11:42.200 --> 00:11:49.959
+There we are. This is the Emacs Writing Studio PDF version,
+
+00:11:49.960 --> 00:11:53.439
+which will eventually become the interior for the
+
+00:11:53.440 --> 00:11:55.159
+paperback version.
+
+00:11:55.160 --> 00:12:02.399
+So the EWS book is available in all major e-book shops.
+
+00:12:02.400 --> 00:12:05.319
+I'm also working on a paperback, which I hope to finish when
+
+00:12:05.320 --> 00:12:09.279
+Emacs 30 comes out. But the Org Mode files that I use to
+
+00:12:09.280 --> 00:12:11.039
+produce the book, they're available in the GitHub
+
+00:12:11.040 --> 00:12:13.999
+repository, so you can also roll your own, because the EWS
+
+00:12:14.000 --> 00:12:18.719
+configuration is the one that I use to produce the book.
+
+NOTE Conclusions
+
+00:12:18.720 --> 00:12:22.799
+Now, some conclusions from this journey is that the best way to
+
+00:12:22.800 --> 00:12:26.239
+learn is to teach. That was my personal objective. I
+
+00:12:26.240 --> 00:12:28.599
+learned a lot from systematically working out how to
+
+00:12:28.600 --> 00:12:33.559
+implement the EWS workflow. One of the surprising things
+
+00:12:33.560 --> 00:12:35.759
+that I learned is to have reliance on external software
+
+00:12:35.760 --> 00:12:39.359
+throughout the writing process. I spent a lot of time in
+
+00:12:39.360 --> 00:12:42.159
+the book about explaining these connections that Emacs is
+
+00:12:42.160 --> 00:12:46.399
+not just a text processor, it is also an interface with other
+
+00:12:46.400 --> 00:12:49.599
+software. Now, future developments, as I mentioned,
+
+00:12:49.600 --> 00:12:52.119
+there'll be a paperback version of the book when Emacs 30
+
+00:12:52.120 --> 00:12:55.959
+comes out, and I might reconfigure things a little bit. I'm
+
+00:12:55.960 --> 00:12:58.719
+only planning to update the configuration when packages
+
+00:12:58.720 --> 00:13:04.639
+break or with another major Emacs release, because I want to
+
+00:13:04.640 --> 00:13:08.079
+work with Emacs, not work on Emacs. A big thank you to
+
+00:13:08.080 --> 00:13:11.199
+Prot Stavrou, who helped me with Denote packages, and he
+
+00:13:11.200 --> 00:13:14.999
+also wrote the forward to the book. There's also several
+
+00:13:15.000 --> 00:13:18.119
+test readers that I met through Mastodon that helped me out
+
+00:13:18.120 --> 00:13:20.719
+quite a bit. Of course, all the Emacs and package
+
+00:13:20.720 --> 00:13:25.519
+developers without which none of this would exist. Thank
+
+00:13:25.520 --> 00:13:27.559
+you all for your attention, and I look forward to your
+
+00:13:27.560 --> 00:13:30.720
+questions and suggestions.
diff --git a/2024/draft-schedule.md b/2024/draft-schedule.md
index 90d5bd3d..41ef8291 100644
--- a/2024/draft-schedule.md
+++ b/2024/draft-schedule.md
@@ -6,42 +6,48 @@ 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://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=""""""]]
-[[!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=""""""]]
-[[!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=""""""]]
-[[!template id=sched time="""20""" 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-07T15:40:00+0000""" start="""10:20""" end="""10:40""" title="""The Future of Org""" url="""/2024/talks/org-update""" speakers="""Ihor Radchenko and Bastien Guerry""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""org-update""" note=""""""]]
-[[!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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: aindilis</a>""" startutc="""2024-12-07T16:00:00+0000""" endutc="""2024-12-07T16:20:00+0000""" start="""11:00""" end="""11:20""" title="""The Free Life Planner: Empowering lives with Emacs-based AI""" url="""/2024/talks/flp""" speakers="""Andrew Dougherty""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""flp""" note=""""""]]
-[[!template id=sched time="""20""" 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:40:00+0000""" start="""11:20""" end="""11:40""" 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=""""""]]
-[[!template id=sched time="""10""" q-and-a="""""" startutc="""2024-12-07T16:30:00+0000""" endutc="""2024-12-07T16:40:00+0000""" start="""11:30""" end="""11:40""" title="""Colour your Emacs with ease""" url="""/2024/talks/color""" speakers="""Ryota""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""color""" note=""""""]]
-[[!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: 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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: robin</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=""""""]]
-[[!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="""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=""""""]]
-[[!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=""""""]]
-[[!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=""""""]]
-[[!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=""""""]]
-[[!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: org-transclusion, easy installation, and more!""" url="""/2024/talks/hyperdrive""" speakers="""Joseph Turner""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hyperdrive""" note=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-repro.html">BBB</a>""" startutc="""2024-12-07T20:45:00+0000""" endutc="""2024-12-07T21:05:00+0000""" start="""3:45""" end="""4:05""" title="""Reproducibly building Emacs: “Hey your checksum is the same as mine!”""" url="""/2024/talks/repro""" speakers="""Aaron Grothe""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""repro""" note=""""""]]
-[[!template id=sched time="""10""" q-and-a="""none""" 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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""""" startutc="""2024-12-07T21:25:00+0000""" endutc="""2024-12-07T21:45:00+0000""" start="""4:25""" end="""4:45""" title="""Emacs 30 Highlights""" url="""/2024/talks/emacs30""" speakers="""Philip Kaludercic""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""emacs30""" note=""""""]]</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 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=""""""]]
-[[!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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://pad.emacsconf.org/2024-learning">Etherpad</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=""""""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-language">Etherpad</a>""" startutc="""2024-12-08T15:30:00+0000""" endutc="""2024-12-08T15:40:00+0000""" start="""10:30""" end="""10:40""" title="""Immersive language learning with Emacs""" url="""/2024/talks/language""" speakers="""Sebastian Dümcke""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""language""" note=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-org-teach.html">BBB</a>""" startutc="""2024-12-08T15:50:00+0000""" endutc="""2024-12-08T16:10:00+0000""" start="""10:50""" end="""11:10""" title="""org-teach: a minor mode for writing course materials in Emacs""" url="""/2024/talks/org-teach""" speakers="""James Endres Howell""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""org-teach""" note=""""""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-hyperbole.html">BBB</a>""" startutc="""2024-12-08T16:25:00+0000""" endutc="""2024-12-08T16:35:00+0000""" start="""11:25""" end="""11:35""" 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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-hywiki.html">BBB</a>""" startutc="""2024-12-08T18:00:00+0000""" endutc="""2024-12-08T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""HyWiki: Fast, hyperlinked note-taking with no markup required""" url="""/2024/talks/hywiki""" speakers="""Bob Weiner""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hywiki""" note=""""""]]
-[[!template id=sched time="""10""" 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:35:00+0000""" endutc="""2024-12-08T18:45:00+0000""" start="""1:35""" end="""1:45""" 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=""""""]]
-[[!template id=sched time="""40""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-blee.html">BBB</a>""" startutc="""2024-12-08T19:00:00+0000""" endutc="""2024-12-08T19:40:00+0000""" start="""2:00""" end="""2:40""" title="""About Blee: towards an integrated Emacs environment for enveloping our own autonomy directed digital ecosystem""" url="""/2024/talks/blee""" speakers="""Mohsen BANAN""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""blee""" note=""""""]]
-[[!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:50:00+0000""" endutc="""2024-12-08T20:10:00+0000""" start="""2:50""" end="""3:10""" 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=""""""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: bardman</a>""" startutc="""2024-12-08T20:25:00+0000""" endutc="""2024-12-08T20:35:00+0000""" start="""3:25""" end="""3:35""" 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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sharing">Etherpad</a>""" startutc="""2024-12-08T20:45:00+0000""" endutc="""2024-12-08T21:05:00+0000""" start="""3:45""" end="""4:05""" 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=""""""]]
-[[!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:15:00+0000""" endutc="""2024-12-08T21:45:00+0000""" start="""4:15""" end="""4:45""" 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=""""""]]</div> \ No newline at end of file
+[[!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>
+<li>Graph mode: a major mode to create, edit and display discrete element graphs - John Darrington</li>
+<li>org-teach: a minor mode for writing course materials in Emacs - James Endres Howell</li></ul></div> \ No newline at end of file
diff --git a/2024/info/blee-after.md b/2024/info/blee-after.md
index f096aa8a..933840ee 100644
--- a/2024/info/blee-after.md
+++ b/2024/info/blee-after.md
@@ -1,7 +1,994 @@
<!-- 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%20blee%3A%20About%20Blee%3A%20enveloping%20our%20own%20autonomy%20directed%20digital%20ecosystem%20with%20Emacs)
+<div class="transcript transcript-mainVideo"><a name="blee-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Greetings. Salaam. This is Mohsen Banan.""" start="00:00:03.659" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I am a software and internet engineer.""" start="00:00:08.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The title of this presentation is &quot;About Blee&quot;.""" start="00:00:11.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Blee stands for""" start="00:00:16.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ByStar Libre-Halaal Emacs Environment.""" start="00:00:17.260" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In this presentation I want to look""" start="00:00:22.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""at Emacs as a primary ingredient for the usage""" start="00:00:24.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""environment of an autonomy and morality""" start="00:00:28.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""directed digital ecosystem.""" start="00:00:32.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""My focus here is not just Emacs.""" start="00:00:35.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This is about augmenting Emacs in the context of""" start="00:00:38.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""our own specific digital ecosystem.""" start="00:00:42.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This presentation is part theoretical""" start="00:00:46.716" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and part practical.""" start="00:00:48.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I spend about half of my time on the""" start="00:00:50.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""theory and the bigger picture.""" start="00:00:53.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The second half is hands on and Emacs centric.""" start="00:00:55.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Emacs has long been recognized as the ultimate""" start="00:01:01.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""integration platform, enabling the creation of an""" start="00:01:04.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""unparalleled user environment.""" start="00:01:09.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Tomohiro is right on the mark when he says:""" start="00:01:12.820" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;The reason why Emacs platform is good""" start="00:01:16.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""is that it cooperates with OS,""" start="00:01:19.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""not because it is good by itself.&quot;""" start="00:01:21.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""But this recognition has often been in the""" start="00:01:25.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""context of a generic and abstract &quot;OS&quot;""" start="00:01:27.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""So, I am updating MATSUYAMA's observation as:""" start="00:01:31.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;The reason why Emacs platform is good is that""" start="00:01:36.460" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""it facilitates creation of specific integrated""" start="00:01:39.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""usage environments like Blee, which cooperate""" start="00:01:43.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""with Debian and BISOS as part of""" start="00:01:48.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the Libre-Halaal ByStar Digital Ecosystem.&quot;""" start="00:01:51.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Emacs is an especially good choice as the universal core of""" start="00:01:57.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""user environments of a digital ecosystem, because it has an""" start="00:02:01.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""incredibly powerful display engine, and an incredibly""" start="00:02:07.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""powerful Elisp engine, and an incredibly powerful input""" start="00:02:12.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""methods engine, and an incredibly powerful common agents""" start="00:02:16.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""paradigm, and a very rich set of mature and convivial idioms""" start="00:02:20.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and means for absorption and integration of external""" start="00:02:26.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""software services continuum capabilities.""" start="00:02:31.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In our model, we first augment Emacs with a set""" start="00:02:35.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""of cohesive elisp capabilities and create Blee --""" start="00:02:40.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ByStar Libre-Halaal Emacs Environment.""" start="00:02:45.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We then further enhance Blee with an integrated""" start="00:02:48.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""framework on top of Debian called BISOS ---""" start="00:02:52.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ByStar Internet Services Operating System.""" start="00:02:57.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Blee is inherently intertwined""" start="00:03:02.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and integrated with BISOS.""" start="00:03:04.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This combination of the universal BISOS and Blee""" start="00:03:07.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""then forms a foundation for creation of an""" start="00:03:12.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""autonomy directed digital ecosystem that we call""" start="00:03:15.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ByStar.""" start="00:03:19.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Over the past two decades, I have been working on""" start="00:03:23.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""creating a comprehensive, interdisciplinary, and""" start="00:03:26.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""non-proprietary digital ecosystem.""" start="00:03:30.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We call it ByStar (By*).""" start="00:03:34.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ByStar challenges the existing""" start="00:03:36.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""proprietary American digital ecosystem""" start="00:03:38.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""while operating concurrently alongside it.""" start="00:03:41.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ByStar's primary offerings are tangible autonomy""" start="00:03:46.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and genuine privacy on a very large scale.""" start="00:03:50.472" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""By* is about redecentralization of internet""" start="00:03:54.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""application services.""" start="00:03:59.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The * in ByStar stands for Unix's globing symbol.""" start="00:04:01.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Signifying that our scope is everything.""" start="00:04:06.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Blee is a bigger and different vision for Emacs.""" start="00:04:11.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's compare and contrast""" start="00:04:16.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""what I am proposing against""" start="00:04:17.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""common current practices of the Emacs culture.""" start="00:04:19.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Please permit me to be slightly cynical.""" start="00:04:24.500" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Much of what we have been seeing in the""" start="00:04:28.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Emacs culture and in emacsConf""" start="00:04:30.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""can be characterized as""" start="00:04:33.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""stories of tunnel vision engineers""" start="00:04:35.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""scratching various itches""" start="00:04:38.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""by integrating various capabilities""" start="00:04:40.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and providing DIY recipes.""" start="00:04:43.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Emacs and Lisp are so powerful that""" start="00:04:47.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""people have come up""" start="00:04:50.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""with catch phrases like the""" start="00:04:51.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Curse of Lisp&quot;.""" start="00:04:53.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The curse is that""" start="00:04:56.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the power of Lisp breeds individualism.""" start="00:04:57.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Because you can be so powerful alone,""" start="00:05:01.580" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""you work longer alone.""" start="00:05:04.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Because it is easy to spin""" start="00:05:06.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""your own whatever library,""" start="00:05:08.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""many people do.""" start="00:05:10.973" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I am suggesting that we should raise the bar.""" start="00:05:13.220" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's cultivate Emacs in the context""" start="00:05:15.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""of our own digital ecosystem instead.""" start="00:05:19.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Do more and do more outside of Emacs and""" start="00:05:22.860" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""recognize that a well integrated""" start="00:05:26.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""smaller Emacs leads to a better usage environment.""" start="00:05:29.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Broadly speaking, digital ecosystems are viewed""" start="00:05:35.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""as consisting of 4 parts.""" start="00:05:39.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Ideology, Software, Services and Content.""" start="00:05:41.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Software, Services and Content are polyexistentials""" start="00:05:45.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and can be analyzed from 3 different aspects:""" start="00:05:49.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Functionality, Usage and Manner-of-Existence.""" start="00:05:53.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""By &quot;manner-of-existence&quot; of polyexistentials""" start="00:05:57.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""we mean everything relating to how the""" start="00:06:00.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""polyexistential exists within society.""" start="00:06:03.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This includes for example,""" start="00:06:06.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""are polyexistentials internally transparent?""" start="00:06:08.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Societal ideology determines manner-of-existence""" start="00:06:12.900" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""of Software, Services and Content.""" start="00:06:16.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""And in turn, manner-of-existence of Software,""" start="00:06:19.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Services and Content impacts society.""" start="00:06:22.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In the American model,""" start="00:06:26.574" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""loss of privacy and autonomy are direct""" start="00:06:28.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""consequences of the IPR regime.""" start="00:06:31.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Based on this characterization, let's consider""" start="00:06:36.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""these three Digital Ecosystems:""" start="00:06:39.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the Proprietary American Digital Ecosystem,""" start="00:06:42.500" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""FOSS and ByStar.""" start="00:06:45.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The 5 big American proprietary tech companies,""" start="00:06:48.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Google, Microsoft, Apple, Facebook and Amazon""" start="00:06:51.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""have created 5 competing enclaves as mostly""" start="00:06:54.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""separate and isolated digital ecosystem.""" start="00:06:59.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In this slide, I am focusing on the first 3""" start="00:07:03.395" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and each of their OSs,""" start="00:07:06.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""their usage environments""" start="00:07:08.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and their clouds.""" start="00:07:10.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's clearly recognize that the economic model""" start="00:07:12.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""of these proprietary digital ecosystems is""" start="00:07:15.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Surveillance Capitalism&quot;.""" start="00:07:19.075" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Now, let's focus on""" start="00:07:21.695" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the right side of this picture.""" start="00:07:23.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""On the non-proprietary side,""" start="00:07:24.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""based on the FOSS model,""" start="00:07:27.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""we have ended up with lots of components.""" start="00:07:29.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We have Debian as a platform,""" start="00:07:32.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""we have Emacs as""" start="00:07:34.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""an editor-centered usage environment.""" start="00:07:35.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""But on the non-proprietary side we don't have""" start="00:07:38.890" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""anything that can""" start="00:07:42.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""reasonably be considered a digital ecosystem.""" start="00:07:43.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I mean, the services aspect is missing.""" start="00:07:46.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ByStar aspires to be""" start="00:07:52.140" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""a complete non-proprietary digital ecosystem.""" start="00:07:54.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We were all born into the belief system of""" start="00:07:58.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""intellectual property rights,""" start="00:08:01.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""making it exceedingly difficult for us""" start="00:08:03.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""to even imagine that this""" start="00:08:07.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""foundational ownership framework""" start="00:08:08.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""could be fundamentally flawed.""" start="00:08:12.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I am delighted to announce the availability of my""" start="00:08:15.759" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""recent book,""" start="00:08:19.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Nature of Polyexistentials&quot;.""" start="00:08:20.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The full title of my book is:""" start="00:08:24.100" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Nature of Polyexistentials""" start="00:08:26.743" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Basis for Abolishment of the""" start="00:08:28.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Western Intellectual Property Rights Regime""" start="00:08:31.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""And Introduction of""" start="00:08:35.460" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the Libre-Halaal ByStar Digital Ecosystem.""" start="00:08:37.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Knowledge, know-how, uses of know-how, ideas,""" start="00:08:42.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""formulas, software and information are inherently""" start="00:08:45.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""non-scarce.""" start="00:08:49.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""They are polyexistentials.""" start="00:08:50.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Unlike monoexistentials which exist in singular,""" start="00:08:53.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""polyexistentials naturally exist in multiples.""" start="00:08:58.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""What is abundant in nature is being made""" start="00:09:03.500" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""artificially scarce through man-made ownership""" start="00:09:06.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""rules called copyright and patents.""" start="00:09:10.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let me provide a brief overview.""" start="00:09:15.282" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This book is divided into five parts,""" start="00:09:18.300" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""each representing a layer of interest to you""" start="00:09:20.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and to our societal policymakers.""" start="00:09:24.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Part I, the philosophical layer""" start="00:09:28.351" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""delves into the concept of polyexistence.""" start="00:09:31.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In this part, I introduce,""" start="00:09:34.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""for the very first time,""" start="00:09:37.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the concepts and terminology of &quot;polyexistentials&quot;.""" start="00:09:39.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The topic of restriction of polyexistentals""" start="00:09:43.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and the Western IPR is one and the same.""" start="00:09:47.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Comprehending polyexistence invalidates""" start="00:09:50.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the Western IPR model.""" start="00:09:55.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We are living inside of an ownership fallacy.""" start="00:09:57.633" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The Western IPR regime is a sin of our times.""" start="00:10:00.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Part II is the pathology layer.""" start="00:10:06.147" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Over the course of the past two centuries,""" start="00:10:09.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""numerous theories have been proposed to justify""" start="00:10:12.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""intellectual property.""" start="00:10:16.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In this Part, I offer""" start="00:10:18.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""my perspective on the weaknesses inherent""" start="00:10:20.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""in each of these theories.""" start="00:10:23.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Part III, the ethics layer,""" start="00:10:26.700" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""focuses on contours of cures.""" start="00:10:29.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Having dismissed the Western intellectual""" start="00:10:32.500" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""property rights regime as an erroneous""" start="00:10:35.221" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""governance model for polyexistentials,""" start="00:10:38.641" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I propose the""" start="00:10:42.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Libre-Halaal model of governance of polyexistentials""" start="00:10:43.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""towards facilitating conviviality of tools.""" start="00:10:48.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Part IV, the engineering layer, introduces the""" start="00:10:53.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Libre-Halaal ByStar Digital Ecosystem.""" start="00:10:57.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""as an ethical alternative to the prevailing""" start="00:11:00.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""proprietary American digital ecosystem.""" start="00:11:04.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Part V, the sociology layer,""" start="00:11:08.071" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""delves into formulation of""" start="00:11:11.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Libre-Halaal oriented societal policies.""" start="00:11:13.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""It is evident that the abolition of intellectual""" start="00:11:17.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""property carries significant consequences.""" start="00:11:21.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In this Part, I present my thoughts on this""" start="00:11:25.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""particular dimension for Eastern societies.""" start="00:11:29.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""For Western societies I confine myself to""" start="00:11:33.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""inside of IPR strategies.""" start="00:11:37.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""You can think of this book as being in two volumes.""" start="00:11:41.500" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Our focus is Blee in Volume II.""" start="00:11:44.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""But as our blueprint needs to be interdisciplinary,""" start="00:11:48.980" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""there are some key concepts of Volume I that I'll""" start="00:11:52.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""briefly discuss here.""" start="00:11:56.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Volume I deals with the general concept of""" start="00:12:00.359" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""polyexistence and invalidity of IPR.""" start="00:12:03.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In Chapter 11, I introduce the very sensitive and potent""" start="00:12:07.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""vocabulary of Halaal and Libre-Halaal.""" start="00:12:13.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Volume II is backed by software and internet""" start="00:12:17.780" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""services.""" start="00:12:20.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The contents of this book""" start="00:12:22.602" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""belong to all of humanity""" start="00:12:23.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and verbatim copying of it is unrestricted.""" start="00:12:26.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""If you want to read it, this book is yours.""" start="00:12:29.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The &quot;Nature of Polyexistentials&quot; book is""" start="00:12:33.681" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""available both online and in print.""" start="00:12:36.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This book is available as two editions.""" start="00:12:41.500" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The US Edition and the International edition.""" start="00:12:44.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The US Edition is written with""" start="00:12:48.082" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""a slightly milder Western unfriendly tone,""" start="00:12:50.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""while the International Edition""" start="00:12:54.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""includes additional original content in Farsi.""" start="00:12:57.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I consider the International Edition to be the""" start="00:13:02.324" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""authoritative version.""" start="00:13:05.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""However, many readers in""" start="00:13:07.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the US and Western countries""" start="00:13:09.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""may prefer the US Edition.""" start="00:13:12.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I maintain separate Git repositories""" start="00:13:15.614" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""for each edition on GitHub.""" start="00:13:18.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""US Edition is at bxplpc/120033 and""" start="00:13:21.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""International Edition is at bxplpc/120074""" start="00:13:28.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Cloning these repositories will give you access""" start="00:13:36.140" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""to the book in PDF format (suitable for both A4""" start="00:13:40.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and US Letter printing) and in EPUB format.""" start="00:13:45.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Alternatively, the content can be downloaded""" start="00:13:50.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""directly from your browser without needing to""" start="00:13:54.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""clone the repositories.""" start="00:13:58.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""To ensure broader online availability and""" start="00:14:01.948" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""stability, I have also published the book on""" start="00:14:05.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Zenodo, complete with a""" start="00:14:09.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""DOI (Digital Object Identifier).""" start="00:14:11.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""You can download both the A4 and""" start="00:14:16.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""8.5 x 11 PDFs from there as well.""" start="00:14:20.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The book is also available in print on Amazon and""" start="00:14:25.290" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""at most major bookstores in""" start="00:14:28.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the US and Western regions.""" start="00:14:30.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The ISBNs for both editions""" start="00:14:34.140" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""are included in this slide.""" start="00:14:36.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Additionally, I have published""" start="00:14:38.900" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""this book in Iran through Jangal Publishers.""" start="00:14:41.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I did not write this book for profit.""" start="00:14:45.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""My aim is to share my thoughts""" start="00:14:47.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and encourage readers to""" start="00:14:50.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""engage with my views and ideas.""" start="00:14:52.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Your feedback is welcome, and""" start="00:14:54.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I am genuinely interested in""" start="00:14:57.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""hearing your perspectives.""" start="00:14:59.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In Western markets, I have priced the print""" start="00:15:02.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""edition somewhat above production costs.""" start="00:15:05.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""If you find value in the""" start="00:15:09.220" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""book and the ByStar project,""" start="00:15:10.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""purchasing a copy will help support my work.""" start="00:15:13.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Thanks in advance for your support.""" start="00:15:16.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""And here are the same links""" start="00:15:22.315" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""as a native Reveal slide.""" start="00:15:24.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""If instead of a video, you are viewing this""" start="00:15:26.900" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""presentation as a Reveal web page,""" start="00:15:29.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""you can just click on the pointers and URLs.""" start="00:15:32.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The concept of polyexistentials has not appeared""" start="00:15:37.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""in prior discussions of validity of IPR.""" start="00:15:41.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Once you start thinking in terms of monoexistence""" start="00:15:46.340" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and polyexistence, the recognition of""" start="00:15:49.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""illegitimacy of Western IPR becomes very simple.""" start="00:15:53.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I want to very quickly give you a taste of that.""" start="00:15:58.949" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""You can of course dig deeper in the book.""" start="00:16:03.060" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Existence and possession are aspects of nature.""" start="00:16:06.495" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Ownership are man-made rules.""" start="00:16:10.620" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""All material objects exist in singular""" start="00:16:13.780" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and are monoexistentials.""" start="00:16:16.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""For monoexistentials, things are simple.""" start="00:16:19.481" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Monoexsitentials, say paper,""" start="00:16:22.971" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""exists in singular.""" start="00:16:25.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""It naturally has a single possessor.""" start="00:16:27.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""A single owner can be assigned to it""" start="00:16:31.776" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""which then makes that single possession lawful.""" start="00:16:35.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Polyexistentials naturally exist in multiples.""" start="00:16:40.580" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Much of our world is actually a mixture of""" start="00:16:45.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""monoexistentials and polyexistentials,""" start="00:16:48.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""which we call mixed-existentials.""" start="00:16:51.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Possession of polyexistentials is naturally""" start="00:16:57.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""many-to-many. Without any conflict,""" start="00:17:01.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""polyexistentials can have many possessors.""" start="00:17:04.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Polyexistentials are inherently Non-Rivalry.""" start="00:17:07.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The requirement for ownership to be in harmony""" start="00:17:13.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""with the nature of possession and existence is""" start="00:17:17.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""violated by the Western IPR regime which assigns""" start="00:17:20.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""a single owner to what exists""" start="00:17:26.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and is possessed in multiples.""" start="00:17:28.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The end result is""" start="00:17:32.340" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""creation of Artificial Scarcity.""" start="00:17:33.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Ramification of ownership mistakes""" start="00:17:37.140" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""are usually catastrophic.""" start="00:17:39.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Consider the previous Western and American""" start="00:17:41.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ownership mistake -- that of American Slavery --""" start="00:17:45.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ownership of Africans by Americans and Europeans.""" start="00:17:50.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""See Chapter 7 -""" start="00:17:55.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Western Slavery and the Western IPR Regime&quot;""" start="00:17:56.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""of the book for some parallels""" start="00:18:00.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""between these mistakes.""" start="00:18:02.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This time with the Western IPR ownership mistake""" start="00:18:04.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""all of humanity is in danger.""" start="00:18:09.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""So, how are we to""" start="00:18:13.780" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""correct this catastrophic mistake?""" start="00:18:15.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The strategies of Public Licenses and""" start="00:18:18.740" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""FOSS are not sufficient.""" start="00:18:21.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""hese are minor band-aids.""" start="00:18:24.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We need to do a lot more.""" start="00:18:26.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We need to understand what are we going to""" start="00:18:28.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""replace the mistaken Western IPR regime with.""" start="00:18:31.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""My answer is:""" start="00:18:36.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Libre-Halaal Governance of Polyexistentials&quot;.""" start="00:18:37.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Much of my book revolves around that.""" start="00:18:41.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We need to fully reject ownership of""" start="00:18:44.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""polyexistentals and replace it with attribution""" start="00:18:47.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""machinaries towards just rewards.""" start="00:18:52.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We need to abolish the &quot;Artificial Scarcity&quot; of""" start="00:18:56.090" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""polyexistentials that the Western IPR regime""" start="00:19:00.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""has created and restore""" start="00:19:04.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""polyexistentals back to their natural state,""" start="00:19:06.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""that of &quot;Non-Rivalrous Public Goods&quot;.""" start="00:19:10.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""By now many Westerners and many West-Toxicated""" start="00:19:16.940" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""are thinking: these are empty slogans that are""" start="00:19:20.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""going no where.""" start="00:19:24.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""And they are right.""" start="00:19:25.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Copyright and Patents are""" start="00:19:26.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""fully entrenched in the West.""" start="00:19:28.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""But what about the rest of the world,""" start="00:19:30.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""what about the""" start="00:19:33.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Chinese, the Iranians, Brazilians, Cubans""" start="00:19:34.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and the rest.""" start="00:19:37.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The Intellectual Property Rights""" start="00:19:39.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""regime is not universal.""" start="00:19:41.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""There is more to the World than the West.""" start="00:19:43.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""What if the WTO was to be recognized""" start="00:19:47.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""for what it is:""" start="00:19:50.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the Western Trade Organization?""" start="00:19:52.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Thus far, I have been discussing the nature of""" start="00:19:56.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""all polyexistentials -- any formula in any form.""" start="00:19:58.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Next, I want to turn our attention to""" start="00:20:04.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""digitals in general and Software in particular.""" start="00:20:07.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Software is a""" start="00:20:12.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""very special form of polyexistentials.""" start="00:20:13.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Software is immediately useful.""" start="00:20:16.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Software produces tools.""" start="00:20:18.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Digitals as text, music, video, etc.""" start="00:20:21.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""are pure forms of polyexistentials""" start="00:20:25.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""that are controlled by software.""" start="00:20:28.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""As developers we know well that we can best""" start="00:20:31.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""produce good software through collaboration.""" start="00:20:35.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In that collaborative model,""" start="00:20:38.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the software itself performs a collaborative role.""" start="00:20:41.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Software functions as a vessel for accumulation""" start="00:20:45.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""of our expert component contributions.""" start="00:20:50.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The Western IPR model cultivates""" start="00:20:54.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Artificial Scarcities&quot; and &quot;competition&quot;,""" start="00:20:57.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""but software developers instinctly""" start="00:21:00.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""recognized the superiority of""" start="00:21:04.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the natural collaborative model.""" start="00:21:07.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Through Public Licenses, us software developers,""" start="00:21:10.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""have done a jujitsu on the IPR model and have""" start="00:21:14.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""created a collaborative framework inside of the""" start="00:21:19.230" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""copyright model. Based on that,""" start="00:21:22.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Natural Public Goods""" start="00:21:25.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""have defeated Artificial Scarcity.""" start="00:21:27.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Our success with software is proof that the""" start="00:21:31.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""entirety of the Western IPR regime is flawed.""" start="00:21:34.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""As a profession, us Software Engineers, need to""" start="00:21:40.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""create a relationship with society.""" start="00:21:44.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We need to demand for societal rules""" start="00:21:47.380" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""which establish proper manner-of-existence""" start="00:21:50.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""of software and internet application services.""" start="00:21:53.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In return, based on that,""" start="00:21:57.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""we should fulfill our guardianship role and make""" start="00:21:59.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""sure that autonomy and privacy are preserved and""" start="00:22:03.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""that practiced digital ecosystems are healthy.""" start="00:22:07.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""To get there we need to come up with the right""" start="00:22:11.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""label that represents the proper""" start="00:22:15.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""manner-of-existence of software.""" start="00:22:18.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Thus far, two labels""" start="00:22:20.940" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""have appeared on the scene:""" start="00:22:23.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Free Software and Open Source.""" start="00:22:24.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I am saying that both are problematic.""" start="00:22:28.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Free Software is ill directed.""" start="00:22:32.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""It is based on the model of granting users,""" start="00:22:34.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""freedoms that are irrelevant to most software users.""" start="00:22:38.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Perhaps Copyleft or Ethical Software""" start="00:22:43.610" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""could have been better labels.""" start="00:22:46.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Open Source is a moral compromise.""" start="00:22:49.700" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""It rejects the requirement for perpetuity of Copyleft.""" start="00:22:52.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""It facilitates convergence of corporate interest""" start="00:22:58.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and surrogate activities of software developers.""" start="00:23:02.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Over time, proprietary corporations too""" start="00:23:06.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""have come to recognize the""" start="00:23:09.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""superiority of the collaborative model.""" start="00:23:11.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""These proprietary corporations then derailed""" start="00:23:15.820" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the original intent that all software""" start="00:23:18.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""should always remain open-source.""" start="00:23:21.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""With permissive public licenses which""" start="00:23:24.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""permit open-source becoming proprietary,""" start="00:23:27.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the intent of Free Software has been""" start="00:23:31.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""marginalized and permissive open-source""" start="00:23:34.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""has become the norm.""" start="00:23:37.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I expand on all of this in Chapter 12,""" start="00:23:40.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Digital Non-Proprietary Movements&quot;.""" start="00:23:42.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Instead of Free Software and Open Source,""" start="00:23:46.900" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the label that I introduce is: &quot;Libre-Halaal&quot;.""" start="00:23:49.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The Libre-Halaal label is distinct and""" start="00:23:55.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""different from FOSS labels.""" start="00:23:58.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""As an inside-of-IPR strategy,""" start="00:24:00.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the Libre-Halaal label maps""" start="00:24:03.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""to a single public license ---""" start="00:24:06.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the Affero GPL (AGPL).""" start="00:24:08.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In the Libre-Halaal model,""" start="00:24:11.780" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""it is not up to developers to""" start="00:24:13.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""choose their own licenses.""" start="00:24:15.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""There is only one correct license that conveys the""" start="00:24:18.230" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Libre-Halaal manner-of-existence of software.""" start="00:24:21.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Also, unlike the FOSS labels that dance around""" start="00:24:25.830" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the validity of the Western IPR regime,""" start="00:24:29.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the Libre-Halaal label recognizes""" start="00:24:33.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the invalidity of the Western IPR regime,""" start="00:24:37.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""calls for abolishment of Western IPR""" start="00:24:40.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and suggests various outside-of-IPR strategies.""" start="00:24:43.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""See Part V, &quot;Formulation of Societal Policies&quot;""" start="00:24:49.780" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""for details.""" start="00:24:54.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Furthermore, unlike FOSS which is""" start="00:24:55.860" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""just software oriented, the Libre-Halaal label goes""" start="00:24:59.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""beyond software and also""" start="00:25:03.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""applies to internet application services.""" start="00:25:05.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In many ways, software is yesterday's news.""" start="00:25:11.060" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Much of what we are experiencing""" start="00:25:15.010" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""today is in the form of""" start="00:25:17.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""internet application services.""" start="00:25:18.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Internet application services provide""" start="00:25:21.610" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""remote access to execution of software.""" start="00:25:24.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""As such, much of FOSS has become proprietary""" start="00:25:28.140" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""internet application services""" start="00:25:31.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""as AGPL is rarely used.""" start="00:25:33.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This is why the Libre-Halaal definitions and labels""" start="00:25:38.900" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""span software and Internet Application Services.""" start="00:25:42.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Based on the interdisciplinary stage setting that""" start="00:25:48.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the &quot;Nature of Polyexistentials&quot; book provided""" start="00:25:52.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and the ByStar blueprint that we reviewed, we can""" start="00:25:55.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""now focus on Blee.""" start="00:25:59.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Think of Blee as a layer on top of Emacs and""" start="00:26:01.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""think of BISOS as a layer on top of Debian.""" start="00:26:04.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's bootstrap Raw-BISOS and Raw-Blee.""" start="00:26:09.590" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Starting from scratch,""" start="00:26:13.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""get yourself a fresh copy of Debian 12.""" start="00:26:15.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Then go to https://github.com/bxGenesis/start""" start="00:26:19.460" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The README.org file of that github repo is same""" start="00:26:26.220" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""as Chapter 18,""" start="00:26:29.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Engineering Adoption of BISOS and ByStar&quot;""" start="00:26:30.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""of the book.""" start="00:26:32.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We will next run &quot;raw-bisos.sh&quot;, but prior to""" start="00:26:35.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""that let's take a quick look.""" start="00:26:41.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This bootstrap scripts will""" start="00:26:44.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""do a lot as root on your Fresh-Debian.""" start="00:26:47.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""It is best to first try it on a disposable VM.""" start="00:26:50.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""raw-bisos.sh adds""" start="00:26:54.950" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the current debian user to sudoers.""" start="00:26:58.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Then it installs pipx.""" start="00:27:00.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""And then with pipx""" start="00:27:04.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""it installs from PyPI bisos.provision.""" start="00:27:06.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""bisos.provision includes additional""" start="00:27:12.710" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""bash scripts that are then executed.""" start="00:27:15.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Full installation involves setting up various""" start="00:27:19.820" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""accounts, groups, various directory hierarchies,""" start="00:27:23.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""lots of apt packages and lots of python packages""" start="00:27:26.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""from the bisos namespace.""" start="00:27:31.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""If you are ready, copy and paste this line and""" start="00:27:35.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""run it.""" start="00:27:38.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""You will be prompted for the root password.""" start="00:27:40.460" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Then be patient.""" start="00:27:43.420" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Full installation can take 15 minutes or so.""" start="00:27:45.170" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The logs of this script are also captured in""" start="00:27:49.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""~/raw-bisos-${dateTag}-log.org""" start="00:27:52.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""What has been installed on your system are""" start="00:27:59.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Raw-BISOS and Raw-Blee.""" start="00:28:02.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The universality of Debian let's us build on""" start="00:28:05.250" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""BISOS and Blee both in the usage environment and""" start="00:28:09.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the service environment.""" start="00:28:13.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""With Emacs 30 now available on Android and with""" start="00:28:16.570" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Termux apt packages infrastructure in place, it""" start="00:28:20.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""will be very viable to""" start="00:28:25.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""port BISOS and Blee to Android.""" start="00:28:27.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We have not done so yet.""" start="00:28:30.380" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We are waiting for Emacs-30 to mature up.""" start="00:28:32.580" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This is ByStar's &quot;Mobile Second&quot; strategy.""" start="00:28:36.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Upon completion of the bootstrapping process, you""" start="00:28:40.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""end up with Raw-BISOS and Raw-Blee.""" start="00:28:44.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""You then need to relogin.""" start="00:28:47.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""At which point you notice that a new account""" start="00:28:49.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""called bystar has been created.""" start="00:28:52.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;bystar&quot; is the default usage account.""" start="00:28:56.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's login into it.""" start="00:28:59.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""You will see a customized ByStar Gnome Desktop.""" start="00:29:01.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""You will also notice a &quot;Blee Startup&quot; icon.""" start="00:29:06.100" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's use it and start Blee.""" start="00:29:10.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Notice that the Emacs splash-screen has been""" start="00:29:13.620" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""replaced and also note that the splash-screen is""" start="00:29:17.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""in org-mode.""" start="00:29:20.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""All the original Emacs splash-screen""" start="00:29:23.300" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""info is kept under &quot;About Emacs&quot;.""" start="00:29:26.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let me enlarge the screen.""" start="00:29:32.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Now we can live inside of Blee.""" start="00:29:34.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Notice that the top""" start="00:29:37.620" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""drop down Emacs menus have been augmented.""" start="00:29:38.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Everything to the left of the &quot;File&quot; menu, is new.""" start="00:29:43.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Notice the &quot;Panels&quot; menus.""" start="00:29:48.660" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""More on these later.""" start="00:29:51.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Now let me get myself a shell.""" start="00:29:54.020" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""And run tail /etc/passwd.""" start="00:29:56.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Notice that a number of""" start="00:30:02.660" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""new accounts have been created.""" start="00:30:04.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Notably: bisos, bystar and bpos-delimiter.""" start="00:30:06.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's next cd to /bisos.""" start="00:30:14.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Everything related to bisos is in here.""" start="00:30:18.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The rest is as Debian was.""" start="00:30:21.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's take a look at /bisos/blee/env3.""" start="00:30:26.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""All the elisp code for Blee is in here.""" start="00:30:33.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""For now, Blee is layered on top of Doom.""" start="00:30:37.140" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Raw-BISOS and Raw-Blee are starting points.""" start="00:30:41.300" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""They are meant to be customized.""" start="00:30:45.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's next see how that is done.""" start="00:30:47.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Raw-BISOS and Raw-Blee are foundational layers.""" start="00:30:53.740" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""They can be augmented in a variety of ways.""" start="00:30:58.850" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The basic unit in the ByStar model is the""" start="00:31:01.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Autonomous Site&quot;.""" start="00:31:05.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Think of the &quot;Autonomous Site&quot; as the""" start="00:31:07.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""totality of computing and communication""" start="00:31:10.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""capabilities in a modern family""" start="00:31:13.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""home plus the ability of that family to host""" start="00:31:16.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""their own internet application services.""" start="00:31:20.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let's walk through how Raw-BISOS and Raw-Blee are""" start="00:31:24.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""used to construct an Autonomous Site.""" start="00:31:28.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""BISOS augmentation model is based on""" start="00:31:32.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;BISOS Capability Bundles&quot; BCBs.""" start="00:31:36.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Raw-BISOS can be augmented to""" start="00:31:40.300" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""become a Virtual Machines Hosting service.""" start="00:31:43.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""From there on we can use reproducible images to""" start="00:31:46.660" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""implement the infrastructure of sites.""" start="00:31:50.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Two key site services are the""" start="00:31:54.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Site BPOs Gitlab Server&quot;""" start="00:31:56.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and &quot;Site Registrars&quot;.""" start="00:32:01.220" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""With these in place we can facilitate""" start="00:32:04.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""self-hosting, which in the BISOS model is called""" start="00:32:06.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Possession Assertable Libre Services (PALS).""" start="00:32:10.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""These topics and these concepts are described in""" start="00:32:15.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Chapter 17, &quot;Technology of ByStar: BISOS&quot;.""" start="00:32:18.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The concepts of Service Portability, Service""" start="00:32:25.220" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Possession Assertion, Autonomous Site and Inner,""" start="00:32:28.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Outer and Exposed Rims of Autonomous Site are""" start="00:32:32.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""fundamental to ByStar.""" start="00:32:37.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""These are shown in this figure as""" start="00:32:39.900" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Network Abodes&quot;.""" start="00:32:42.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Chapter 17 of the book provides more details.""" start="00:32:43.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Blee introduces a number of new concepts that""" start="00:32:49.490" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""augment Emacs. Some of these are intertwined with""" start="00:32:52.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""BISOS and ByStar. But some are not.""" start="00:32:57.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Here, I provide some examples of these new""" start="00:33:01.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""general concepts.""" start="00:33:04.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We love Emacs and we love Unix because their""" start="00:33:07.020" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""design is convivial. By convivial, I am referring""" start="00:33:10.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""to Ivan Illich's concept and terminology of""" start="00:33:14.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Tools for Conviviality&quot;. It was first""" start="00:33:17.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""published in 1973. It's a must read.""" start="00:33:21.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""A goal of the design of the ByStar Digital""" start="00:33:25.220" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Ecosystem is to enlarge aggregated conviviality.""" start="00:33:28.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Here, let's start by reviewing the idioms and""" start="00:33:32.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""means that have made Emacs and Unix so very""" start="00:33:37.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""convivial and some of the key idioms that have""" start="00:33:40.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""augmented them over the years -- I am showing""" start="00:33:44.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""them as &quot;Linux PlusPlus&quot;""" start="00:33:48.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and &quot;Emacs PlusPlus&quot;.""" start="00:33:50.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""For the most part these""" start="00:33:52.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""two philosophies have not been combined.""" start="00:33:54.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""They were developed and have""" start="00:33:57.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""evolved mostly separately.""" start="00:33:59.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Think of BISOS idioms as an extension of Linux""" start="00:34:01.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""PlusPlus idioms and think of Blee idioms as an""" start="00:34:06.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""extension of Emacs PlusPlus.""" start="00:34:10.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Then intertwine BISOS and Blee.""" start="00:34:14.180" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This aggregated convivial tools powers ByStar.""" start="00:34:16.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let me first explain what I mean by aggregated""" start="00:34:22.179" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""convivial tools, and then""" start="00:34:25.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""let me give some examples.""" start="00:34:28.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Here is a key sentence from Illich's,""" start="00:34:32.140" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Tools for Conviviality&quot; 1973 essay:""" start="00:34:34.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Convivial tools are those which give each person""" start="00:34:39.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""who uses them the greatest opportunity to enrich""" start="00:34:43.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the environment with the""" start="00:34:47.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""fruits of his or her vision.""" start="00:34:48.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Proprietary manner-of-existence of software""" start="00:34:52.740" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""makes them industrial.""" start="00:34:55.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Libre-Halaal manner-of-existence""" start="00:34:58.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""of software is a prerequisite for conviviality.""" start="00:35:00.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The concept of""" start="00:35:03.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Org Dynamic Blocks&quot; is very powerful.""" start="00:35:07.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""But, why should they be primarily used""" start="00:35:10.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""in Org-Mode.""" start="00:35:14.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I say let's generalize them to""" start="00:35:16.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Emacs Dynamic Blocks&quot;.""" start="00:35:18.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Have defaults for org-dblock-start-re in""" start="00:35:20.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""every relevant mode and use them everywhere.""" start="00:35:24.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Blee does that.""" start="00:35:29.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In programming languages, Dynamic""" start="00:35:30.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Blocks can be used as visible macros.""" start="00:35:33.240" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let me give you an example of how I use them.""" start="00:35:34.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""For those of us who live inside of Emacs,""" start="00:35:38.940" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""enhancing programming with org-mode capabilities""" start="00:35:41.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""is awesome.""" start="00:35:46.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Incredibly awesome!""" start="00:35:47.860" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This can be done in two ways.""" start="00:35:50.380" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""(1) With Literate Programming and org-babel.""" start="00:35:52.820" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and (2) with""" start="00:35:57.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Traditional/Surrounded Programming and COMEEGA.""" start="00:35:58.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""COMEEGA stands for""" start="00:36:03.460" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Collaborative Org-Mode Enhanced Emacs""" start="00:36:04.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Generalized Authorship.""" start="00:36:08.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""It is just an acronym that I have come up with.""" start="00:36:10.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Literate Programming and org-babel""" start="00:36:15.260" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""are well established.""" start="00:36:18.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""There is a related talk in EmacsConf-2024 titled:""" start="00:36:20.060" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Literate Programming for the 21st Century&quot;.""" start="00:36:25.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""COMEEGA is the inverse of org-babel.""" start="00:36:30.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I prefer COMEEGA over org-babel,""" start="00:36:34.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""because I prefer""" start="00:36:38.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Traditional/Surrounded Programming""" start="00:36:39.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""over Literate Programming.""" start="00:36:41.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""To each his own.""" start="00:36:44.900" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This is not about that debate.""" start="00:36:46.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This is about mixing your""" start="00:36:49.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""programming-mode with org-mode.""" start="00:36:51.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Much of Blee and BISOS""" start="00:36:55.020" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""are implemented in COMEEGA.""" start="00:36:56.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Almost all of our Elisp, Python, Bash""" start="00:36:58.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and LaTeX work uses COMEEGA.""" start="00:37:02.408" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Full and proper use of COMEEGA,""" start="00:37:06.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""requires Polymode. Let's call that Poly-COMEEGA.""" start="00:37:08.175" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""But Emacs's Polymode is work-in-progress,""" start="00:37:13.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""particularly now with the new tree-sitter.""" start="00:37:16.740" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""So, in the interim, my usage of""" start="00:37:20.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""COMEEGA has been in the form of Toggle-COMEEGA.""" start="00:37:23.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Where I manually switch between the""" start="00:37:28.780" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""programming-mode and org-mode.""" start="00:37:30.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""For me this has""" start="00:37:33.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""proved to be a fine interim solution.""" start="00:37:34.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In Emacs, the way that we have been""" start="00:37:41.700" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""dealing with documentation and""" start="00:37:43.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""information retrieval is archaic.""" start="00:37:45.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Man-pages, TeXInfo, Helpful-Mode and""" start="00:37:49.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""convention based Doc-Strings are old and""" start="00:37:52.730" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""limited.""" start="00:37:56.441" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In BISOS and Blee, we use Blee-Panels for all""" start="00:37:57.700" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""kinds of documentation.""" start="00:38:01.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Let me show you some examples.""" start="00:38:03.780" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Two fundamental autonomy oriented capabilities""" start="00:38:09.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""that ByStar offers to individuals are:""" start="00:38:12.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Email and Content Generation and Publication.""" start="00:38:16.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I'll give a quick overview of""" start="00:38:20.740" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""these two important capabilities.""" start="00:38:22.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""At the EmacsConf-2022, the title of my""" start="00:38:26.300" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""presentation was:""" start="00:38:30.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Revisiting the anatomy of Emacs mail user agents&quot;.""" start="00:38:32.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In that presentation I""" start="00:38:37.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""gave a brief overview of BISOS-MARMEE""" start="00:38:39.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""(Multi-Account Resident Mail Exchange Environment)""" start="00:38:43.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and Blee-Gnus.""" start="00:38:47.740" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In ByStar, these are typically paired with""" start="00:38:49.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""byname.net autonomous email services.""" start="00:38:53.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Content Production and Self-Publication is a""" start="00:38:58.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""foundational Blee and BISOS Capability Bundle.""" start="00:39:00.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Both this presentation and""" start="00:39:06.060" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the Nature of Polyexistentials book""" start="00:39:08.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""were developed with Blee LCNT.""" start="00:39:11.740" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The original text is always in COMEEGA-LaTeX --""" start="00:39:15.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""LaTeX augmented by Org-Mode.""" start="00:39:18.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This is the inverse""" start="00:39:22.300" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""direction of exporting LaTeX from Org-Mode.""" start="00:39:23.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""For typesetting,""" start="00:39:27.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the LaTeX syntax is far more""" start="00:39:28.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""powerful than org-mode.""" start="00:39:31.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""And with COMEEGA-LaTeX,""" start="00:39:33.540" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""you can also benefit from""" start="00:39:35.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""all that org-mode offers.""" start="00:39:37.000" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""For presentation/screen-casting,""" start="00:39:41.340" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the original text is then augmented in layers""" start="00:39:44.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""by images, audio voice-overs, screen captures,""" start="00:39:48.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""videos and captions.""" start="00:39:53.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The Beamer LaTeX file is then processed""" start="00:39:56.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""by both LaTeX and HeVeA.""" start="00:39:59.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""LaTeX produced slides are then""" start="00:40:02.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""absorbed in html by HeVeA as images.""" start="00:40:05.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""HeVeA is a LaTeX to html translator.""" start="00:40:10.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""HeVeA output is destined to be dispensed by Reveal.js.""" start="00:40:13.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""This video is just a screen capture of the autoplay of""" start="00:40:19.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""reveal file.""" start="00:40:25.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Viewing this presentation in its""" start="00:40:27.340" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""original Reveal form is a richer experience.""" start="00:40:30.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""All of this involves a whole lot of integration""" start="00:40:36.010" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""scripting. In Raw-BISOS these scripts are in""" start="00:40:39.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""file:/bisos/core/lcnt/bin""" start="00:40:44.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""To say that ByStar, BISOS and Blee are big and""" start="00:40:53.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ambitious is an understatement.""" start="00:40:57.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""And clearly, a small team won't be able to""" start="00:41:00.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""deliver the outlandish blueprint that is outlined""" start="00:41:04.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""in the Nature of Polyexistentials book.""" start="00:41:07.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""We have been at this for over two decades and we""" start="00:41:12.380" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""feel that now in 2024,""" start="00:41:15.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""it makes sense to involve you.""" start="00:41:18.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The pointers and instructions for installation""" start="00:41:23.060" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""and usage of BISOS and Blee that I have provided,""" start="00:41:26.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""produce systems that are minimally functional,""" start="00:41:31.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""but are not clean.""" start="00:41:34.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""At this time don't expect software and services""" start="00:41:37.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""stability and support.""" start="00:41:40.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Throughout this presentation, I have been""" start="00:41:42.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""emphasizing Service Portability and Possession""" start="00:41:45.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Assertable Libre Services (PALS).""" start="00:41:49.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""But, a complete digital ecosystem includes various other types of""" start="00:41:52.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""internet application services as well.""" start="00:41:58.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In this slide PALS are the center and are then""" start="00:42:01.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""augmented by different other type of services.""" start="00:42:05.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""In the ByStar model, equivalent of Facebook style""" start="00:42:09.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""application services are called:""" start="00:42:13.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Inter-Autonomous Interactions&quot;.""" start="00:42:16.360" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""With individual oriented PALS in place, using""" start="00:42:19.620" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""OAuth of PALS, resources can be shared.""" start="00:42:23.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Based on that we can then structure Inter-Autonomous""" start="00:42:28.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Interactions while preserving much privacy.""" start="00:42:32.480" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Any blueprint for a digital ecosystem must also""" start="00:42:37.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""consider the economic and business dimensions.""" start="00:42:41.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Chapter 13, &quot;Polyexistential Capitalism&quot;,""" start="00:42:46.040" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""delves into proper economic models for""" start="00:42:50.380" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""polyexsitentials.""" start="00:42:52.960" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The concept of Attribution""" start="00:42:55.580" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Based Economics (ABE) which has been discussed in""" start="00:42:57.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""this forum before is included.""" start="00:43:02.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Chapter 21,""" start="00:43:05.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""&quot;Private Sector Strategies:""" start="00:43:06.840" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""ByStar Open Business Plan&quot;""" start="00:43:09.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""deals with the business dimension of ByStar.""" start="00:43:12.900" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""What if in addition to being ethics oriented,""" start="00:43:17.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""the entirety of this book could also be""" start="00:43:20.660" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""considered a sophisticated business plan?""" start="00:43:24.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Are there any Venture Capitalists that use Emacs?""" start="00:43:28.740" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Here is a set of relatively complete domains and""" start="00:43:34.140" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""links for digging deeper. These pointers are""" start="00:43:37.640" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""structured in 4 layers. Ideology, Software,""" start="00:43:41.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Services and Guardianship.""" start="00:43:46.120" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""If Blee, BISOS, ByStar, Libre-Halaal and""" start="00:43:50.160" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Polyexistentials have piqued your interest and if""" start="00:43:53.680" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""you wish to participate in making these ideas""" start="00:43:57.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""more widespread and want to further cultivate""" start="00:44:00.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""them, here are some suggestions.""" start="00:44:04.200" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""The examples of the Blee concepts that I chose""" start="00:44:06.920" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""were purposeful and targeted.""" start="00:44:11.720" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I am hopeful that org-mode developers and emacs""" start="00:44:15.180" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""developers would recognize that it makes good""" start="00:44:18.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""sense to expand the scope of org dynamic blocks""" start="00:44:22.320" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""to the entirety of emacs.""" start="00:44:25.600" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I am hopeful that the concept of polymode -- a""" start="00:44:28.780" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""single buffer with regions in different modes and""" start="00:44:31.400" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""org-mode in particular -- would receive a high""" start="00:44:35.280" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""priority in our tree-sitter transition. I am""" start="00:44:39.760" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""hopeful that Blee-COMEEGA can become a""" start="00:44:44.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""generalized form of polymode.""" start="00:44:47.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I am hopeful that we can build on Blee-Panels and""" start="00:44:52.260" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""move towards having a richer base for a universal""" start="00:44:55.560" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Emacs documentation framework.""" start="00:44:59.440" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""If participation in any of these is of interest""" start="00:45:03.880" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""to you, please feel welcome to contact me.""" start="00:45:07.080" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""Emacs Conferences have proven to be""" start="00:45:10.660" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""very useful and productive.""" start="00:45:13.520" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I look forward to your thoughts, feedback and questions.""" start="00:45:16.660" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""I want to thank all the EmacsConf Organizers for""" start="00:45:21.540" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""their great work.""" start="00:45:24.800" video="mainVideo-blee" id="subtitle"]]
+[[!template text="""And Sacha, Leo and Amin in particular.""" start="00:45:26.140" video="mainVideo-blee" id="subtitle"]]
+
+</div>
+
+Captioner: mohsen
+
+<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="""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"]]
+[[!template text="""presentation, something that perhaps would not have fit in""" start="00:00:25.080" video="qanda-blee" id="subtitle"]]
+[[!template text="""the actual presentation format? Sure, but prior to that,""" start="00:00:27.760" video="qanda-blee" id="subtitle"]]
+[[!template text="""félicitations à tous les Français pour le rouvrir de""" start="00:00:33.400" video="qanda-blee" id="subtitle"]]
+[[!template text="""Notre-Dame. Thank you. I'll say thank you because I'm a""" start="00:00:37.840" video="qanda-blee" id="subtitle"]]
+[[!template text="""Francophone and I'm also French, but OK.""" start="00:00:42.720" video="qanda-blee" id="subtitle"]]
+[[!template text="""Yeah, so a few things have come up in various other talks,""" start="00:00:48.040" video="qanda-blee" id="subtitle"]]
+[[!template text="""that kind of EmacsConf 2024 talks, that kind of dovetail""" start="00:00:58.160" video="qanda-blee" id="subtitle"]]
+[[!template text="""with what I was saying. One idea was Peter Prevos's""" start="00:01:04.360" video="qanda-blee" id="subtitle"]]
+[[!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 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"]]
+[[!template text="""Not always too much choice is the right thing to have. And""" start="00:01:59.800" video="qanda-blee" id="subtitle"]]
+[[!template text="""packaging Emacs with a layer on top of Debian gives you a""" start="00:02:08.920" video="qanda-blee" id="subtitle"]]
+[[!template text="""platform and an environment where the choices are a lot""" start="00:02:18.280" video="qanda-blee" id="subtitle"]]
+[[!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="""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. 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, 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"]]
+[[!template text="""about hyperbole this year, right after this Q&A session.""" start="00:03:59.960" video="qanda-blee" id="subtitle"]]
+[[!template text="""And hyperbole, it's not Org Mode, but I'm not sure if you're""" start="00:04:04.200" video="qanda-blee" id="subtitle"]]
+[[!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="""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 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"]]
+[[!template text="""suggest we perhaps leave the screen sharing until later if""" start="00:05:19.000" video="qanda-blee" id="subtitle"]]
+[[!template text="""people are interested. I mean this Q&A can last as long as you""" start="00:05:22.600" video="qanda-blee" id="subtitle"]]
+[[!template text="""want. That makes perfect sense. OK, cool. So how about we""" start="00:05:25.400" video="qanda-blee" id="subtitle"]]
+[[!template text="""focus on the question now and starting with the first one.""" start="00:05:30.080" video="qanda-blee" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I'm from Brazil, which edition would you recommend?""" start="00:05:33.280" video="qanda-blee" id="subtitle"]]</div>[[!template text="""You mentioned that there are two editions, one named at""" start="00:05:33.280" video="qanda-blee" id="subtitle"]]
+[[!template text="""Westerners and one for worldwide readers. I'm from Brazil.""" start="00:05:36.280" video="qanda-blee" id="subtitle"]]
+[[!template text="""Which edition would you recommend? It's a Western country,""" start="00:05:40.160" video="qanda-blee" id="subtitle"]]
+[[!template text="""but you didn't make the distinction exclusive for the""" start="00:05:42.600" video="qanda-blee" id="subtitle"]]
+[[!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 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"]]
+[[!template text="""is thick enough to deal with what I consider reasonable""" start="00:06:36.400" video="qanda-blee" id="subtitle"]]
+[[!template text="""criticism, then the International Edition is definitely""" start="00:06:43.280" video="qanda-blee" id="subtitle"]]
+[[!template text="""the better choice. Right. So yeah, I believe you also""" start="00:06:48.320" video="qanda-blee" id="subtitle"]]
+[[!template text="""mentioned it. Pretty much exactly the same thing in your""" start="00:06:54.440" video="qanda-blee" id="subtitle"]]
+[[!template text="""talk. So if you need to review, just watch the talk. And I""" start="00:06:56.960" video="qanda-blee" id="subtitle"]]
+[[!template text="""think Mohsen also provides extra information about this.""" start="00:07:00.240" video="qanda-blee" id="subtitle"]]
+[[!template text="""Moving on to the second question. Thank you for this talk.""" start="00:07:03.440" video="qanda-blee" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Thank you for this talk! How does your perspective interface with works such as Yanis Varoufakis' Technofeudalism?""" start="00:07:07.080" video="qanda-blee" id="subtitle"]]</div>[[!template text="""How does your perspective interface with work such as Yanis""" start="00:07:07.080" video="qanda-blee" id="subtitle"]]
+[[!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="""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"]]
+[[!template text="""If the person who asked the question has any additional""" start="00:08:03.240" video="qanda-blee" id="subtitle"]]
+[[!template text="""information, I'll be happy to hear it. Sure. We'll see if the""" start="00:08:10.120" video="qanda-blee" id="subtitle"]]
+[[!template text="""person actually comes back to this. All right. In the""" start="00:08:16.120" video="qanda-blee" id="subtitle"]]
+[[!template text="""meantime, moving on to the next question.""" start="00:08:19.560" video="qanda-blee" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:08:21.980" video="qanda-blee" id="subtitle"]]</div>[[!template text="""To what extent do""" start="00:08:21.980" video="qanda-blee" id="subtitle"]]
+[[!template text="""you agree that the introduction of proprietary systems in""" start="00:08:22.960" video="qanda-blee" id="subtitle"]]
+[[!template text="""education creates an environment for exploitation whilst""" start="00:08:25.520" video="qanda-blee" id="subtitle"]]
+[[!template text="""at the same time diluting the learning value of the""" start="00:08:29.280" video="qanda-blee" id="subtitle"]]
+[[!template text="""curriculum? My computing education at school amounted to""" start="00:08:31.680" video="qanda-blee" id="subtitle"]]
+[[!template text="""learning how to use the Microsoft Office suite, i.e. the""" start="00:08:34.880" video="qanda-blee" id="subtitle"]]
+[[!template text="""opposite of lasting open knowledge. Yeah, that's right on""" start="00:08:38.400" video="qanda-blee" id="subtitle"]]
+[[!template text="""the mark. That's right on the mark. So the idea is that""" start="00:08:44.680" video="qanda-blee" id="subtitle"]]
+[[!template text="""teaching and learning should be unrestricted. In the""" start="00:08:49.720" video="qanda-blee" id="subtitle"]]
+[[!template text="""Muslim tradition and in Iranian tradition, we say that""" start="00:08:55.920" video="qanda-blee" id="subtitle"]]
+[[!template text="""passing along the learning is the tax on having learned. So""" start="00:09:02.480" video="qanda-blee" id="subtitle"]]
+[[!template text="""absolutely. I think it makes very little sense for the""" start="00:09:12.920" video="qanda-blee" id="subtitle"]]
+[[!template text="""proprietary Microsoft software to be used as part of""" start="00:09:20.360" video="qanda-blee" id="subtitle"]]
+[[!template text="""education. So the question is right on the mark. Okay,""" start="00:09:27.040" video="qanda-blee" id="subtitle"]]
+[[!template text="""great. Let me just take a note of this. All right, moving on to""" start="00:09:33.520" video="qanda-blee" id="subtitle"]]
+[[!template text="""the next question.""" start="00:09:38.520" video="qanda-blee" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: As a specific example of how "ownership is not clean" ...""" start="00:09:40.053" video="qanda-blee" id="subtitle"]]</div>[[!template text="""As a specific example of how ownership is""" start="00:09:40.053" video="qanda-blee" id="subtitle"]]
+[[!template text="""not something clean, look at the Star Trek Picard series.""" start="00:09:43.360" video="qanda-blee" id="subtitle"]]
+[[!template text="""They continuously asked Patrick Stewart to come to do""" start="00:09:46.240" video="qanda-blee" id="subtitle"]]
+[[!template text="""another Star Trek series, but he couldn't because Star Trek""" start="00:09:48.840" video="qanda-blee" id="subtitle"]]
+[[!template text="""changed from what it used to be, at least until they came up""" start="00:09:52.160" video="qanda-blee" id="subtitle"]]
+[[!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 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 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 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="""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"]]
+[[!template text="""So there's a whole chapter in the book dedicated to this""" start="00:12:10.000" video="qanda-blee" id="subtitle"]]
+[[!template text="""topic. What I'm not sure about is if I got the point of the""" start="00:12:16.440" video="qanda-blee" id="subtitle"]]
+[[!template text="""question correctly. So again, if the person who asked the""" start="00:12:23.960" video="qanda-blee" id="subtitle"]]
+[[!template text="""question could clarify, I'll be happy to further expand.""" start="00:12:30.280" video="qanda-blee" id="subtitle"]]
+[[!template text="""Okay, considering the time, we only have about one minute to""" start="00:12:35.680" video="qanda-blee" id="subtitle"]]
+[[!template text="""ten seconds until we go. So what we're going to do, as we""" start="00:12:40.280" video="qanda-blee" id="subtitle"]]
+[[!template text="""usually do, Mohsen, is that we're going to move the stream""" start="00:12:42.960" video="qanda-blee" id="subtitle"]]
+[[!template text="""onto the next talk. And if you want to take a little bit of time""" start="00:12:45.440" video="qanda-blee" id="subtitle"]]
+[[!template text="""in this room to answer the question, I'm putting a link to the""" start="00:12:47.840" video="qanda-blee" id="subtitle"]]
+[[!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="""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"]]
+[[!template text="""have you. And thank you for your thankings. So we'll be""" start="00:13:33.560" video="qanda-blee" id="subtitle"]]
+[[!template text="""moving to the next talk in 10 seconds. Mohsen, thank you so""" start="00:13:36.120" video="qanda-blee" id="subtitle"]]
+[[!template text="""much. And I'll see you later. Thank you. Bye-bye. Bye.""" start="00:13:38.440" video="qanda-blee" id="subtitle"]]
+[[!template text="""All right. We are off air. So thank you so much, Mohsen. I'll""" start="00:13:47.560" video="qanda-blee" id="subtitle"]]
+[[!template text="""need to get moving to get ready for the next talk. So again,""" start="00:13:50.160" video="qanda-blee" id="subtitle"]]
+[[!template text="""feel free to take the time you need to answer the questions.""" start="00:13:52.560" video="qanda-blee" id="subtitle"]]
+[[!template text="""I'm going to stop sharing my screen because I need to leave.""" start="00:13:54.520" video="qanda-blee" id="subtitle"]]
+[[!template text="""But take all the time you need. And when you're finished, you""" start="00:13:56.720" video="qanda-blee" id="subtitle"]]
+[[!template text="""can just leave the room. OK. All right, bye-bye. Thank you.""" start="00:13:59.320" video="qanda-blee" id="subtitle"]]
+[[!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="""through the regard of societal impacts on ethical,""" start="00:14:46.240" 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="""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"]]
+[[!template text="""yeah, this is with regard to the last question""" start="00:15:12.360" video="qanda-blee" id="subtitle"]]
+[[!template text="""that's on the etherpad at this moment. The idea is""" start="00:15:18.000" video="qanda-blee" id="subtitle"]]
+[[!template text="""that my own book would be an excellent resource. I'd""" start="00:15:24.440" video="qanda-blee" id="subtitle"]]
+[[!template text="""say the bibliography in the book contains various""" start="00:15:32.200" video="qanda-blee" id="subtitle"]]
+[[!template text="""other pointers that could be quite useful.""" start="00:15:39.280" video="qanda-blee" id="subtitle"]]
+[[!template text="""I'm reading again.""" start="00:15:43.040" video="qanda-blee" id="subtitle"]]
+[[!template text="""Yeah.""" start="00:15:55.400" video="qanda-blee" id="subtitle"]]
+[[!template text="""Very good. If there are no other questions,""" start="00:15:57.800" video="qanda-blee" id="subtitle"]]
+[[!template text="""I think I'm going to consider this a day and move on.""" start="00:16:20.160" video="qanda-blee" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:16:31.840" video="qanda-blee" 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%20blee%3A%20About%20Blee%3A%20enveloping%20our%20own%20autonomy%20directed%20digital%20ecosystem%20with%20Emacs)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/blee-before.md b/2024/info/blee-before.md
index 6d09a08f..e96b5b09 100644
--- a/2024/info/blee-before.md
+++ b/2024/info/blee-before.md
@@ -1,18 +1,42 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 46-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect stroke-width="3" x="411" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 40-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-blee.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="2024-12-08T19:00:00Z" end="2024-12-08T19:40:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~2:00 PM - 2:40 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~1:00 PM - 1:40 PM CST (US/Central)<br />Sunday, Dec 8 2024, ~12:00 PM - 12:40 PM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~11:00 AM - 11:40 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~7:00 PM - 7:40 PM UTC <br />Sunday, Dec 8 2024, ~8:00 PM - 8:40 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~9:00 PM - 9:40 PM EET (Europe/Athens)<br />Monday, Dec 9 2024, ~12:30 AM - 1:10 AM IST (Asia/Kolkata)<br />Monday, Dec 9 2024, ~3:00 AM - 3:40 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~4:00 AM - 4:40 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+15:49.850 Governance of Polyexistentials
+20:04.600 Proper Governance of Manner-of-Existence of Software
+26:00.083 Blee Overview
+26:25.083 Bootstrapping: From Fresh Debian to Raw-BISOS and Raw-Blee
+33:27.667 Some Blee Concepts
+35:14.050 Blee Org Dynamic Blocks --- Everywhere
+35:59.150 COMEEGA -- Collaborative Org-Mode Enhanced Emacs Generalized Authorship
+37:51.850 Blee Panels: Active Org-Mode Universal Self-Documentation
+38:12.233 Some BISOS and Blee Capability Bundles
+41:04.950 Next Steps (2024)
+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://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 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="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/blee-nav.md b/2024/info/blee-nav.md
index 64f5fbf1..38e81394 100644
--- a/2024/info/blee-nav.md
+++ b/2024/info/blee-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/pgmacs">PGmacs: browsing and editing PostgreSQL databases from Emacs</a>
-Next by time: <a href="/2024/talks/literate">Literate programming for the 21st Century</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/learning">Survival of the skillest: Thriving in the learning jungle</a>
+Next by track: <a href="/2024/talks/hyperbole">Fun things with GNU Hyperbole</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/casual-after.md b/2024/info/casual-after.md
index abb1f6fd..ef776189 100644
--- a/2024/info/casual-after.md
+++ b/2024/info/casual-after.md
@@ -1,7 +1,599 @@
<!-- 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%20casual%3A%20Re-imagining%20the%20Emacs%20user%20experience%20with%20Casual%20Suite)
+<div class="transcript transcript-mainVideo"><a name="casual-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""introduction""" start="00:00:00.000" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Hello, my name is Charles Choi and welcome to my talk:""" start="00:00:00.000" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""&quot;Reimagining the Emacs user experience with Casual Suite.&quot;""" start="00:00:05.080" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Casual Suite is a set of opinionated user interfaces to""" start="00:00:11.360" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""different modes offered in Emacs. Before I get into""" start="00:00:14.920" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""describing Casual in detail, let's first talk about the""" start="00:00:18.400" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""existing Emacs user experience. To make Emacs go, people""" start="00:00:22.200" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""can either invoke commands by name with""" start="00:00:27.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""execute-extended-command,""" start="00:00:31.080" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""run a command directly with a pre-assigned""" start="00:00:34.082" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""key binding, finally, use a mouse menu if it's available.""" start="00:00:36.404" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Recall vs recognition""" start="00:00:43.800" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""From human-computer interface research, there is a""" start="00:00:43.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""concept of recall versus recognition in user interface""" start="00:00:46.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""design. Let's show their distinction by example. A common""" start="00:00:50.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""recall interface is password entry. Absent any historical""" start="00:00:56.600" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""affordances, a user must directly remember information to""" start="00:01:00.840" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""succeed with this interface. In contrast, menus offer""" start="00:01:04.640" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""immediate visual cues on what commands are available. This""" start="00:01:09.840" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""allows a user to recognize familiar behavior to support""" start="00:01:13.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""successful selection of it. From user interface research,""" start="00:01:16.840" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""the key finding is this. Interfaces emphasizing""" start="00:01:21.880" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""recognition are much easier to use than those relying on""" start="00:01:26.120" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""recall. In this light, we see that the Emacs user experience""" start="00:01:30.000" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""leans too much towards recall. Completion in history can""" start="00:01:35.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""help tip the scales towards recognition, but only by a""" start="00:01:41.280" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""little bit.""" start="00:01:44.480" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""This reliance on recall is discouraging to users both new""" start="00:01:47.960" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""and old, and that's a shame because Emacs has so many useful""" start="00:01:52.400" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""commands. But the kicker is that most of them are""" start="00:01:56.840" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""infrequently used. You can't recall them all. At least I""" start="00:02:00.760" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""can't. So, a conundrum. While I've been using Emacs since""" start="00:02:05.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""the early 90s, truthfully, it's been only in this past""" start="00:02:11.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""decade that I've leveled up in using it. Org Mode, Magit,""" start="00:02:15.160" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Eglot, Avy, and many other packages have transformed how I""" start="00:02:19.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""use it. I can only deal with so much cognitive load and""" start="00:02:23.200" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""physically straining key bindings. So, what to do about it?""" start="00:02:28.640" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Emacs with keyboard-driven menus""" start="00:02:34.800" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Let's bring back an old ideal.""" start="00:02:34.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Keyboard-driven menus have been around since TTY video""" start="00:02:36.160" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""terminals with mainframes. If you're old enough to recall""" start="00:02:42.360" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""working with such interfaces, these terms will seem""" start="00:02:47.360" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""familiar. They all worked with the limitations of""" start="00:02:50.080" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""text-based video displays.""" start="00:02:53.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""With keyboard-driven menus, if a command exists but nobody""" start="00:02:57.640" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""can find it, it's not really useful. A well-designed menu""" start="00:03:01.600" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""can make a command discoverable. If the command is""" start="00:03:05.520" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""infrequently used, making it recognizable helps a lot. And""" start="00:03:09.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""for working primarily with text, having keyboard-only""" start="00:03:15.200" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""interactions encourages flow. Given the above, the next""" start="00:03:18.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""steps seem natural:""" start="00:03:24.120" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""augment Emacs with keyboard-driven menus. This is not""" start="00:03:28.480" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""saying that I want to obsolete name commands, keybindings,""" start="00:03:32.760" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""and mouse menus. They all can happily coexist. Emacs is""" start="00:03:36.640" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""large. It can contain multitudes.""" start="00:03:41.080" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Transient""" start="00:03:43.400" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Conveniently, Emacs has a built-in library for building""" start="00:03:43.400" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""such menus. It's called Transient, and it's been around""" start="00:03:49.880" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""since Emacs 28. Developed primarily by Jonas Bernoulli as a""" start="00:03:53.840" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""UI toolkit for Magit, Transient has an essential feature""" start="00:03:59.320" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""for building great keyboard-driven interfaces.""" start="00:04:03.200" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""A Transient menu can be pinned""" start="00:04:08.200" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""A transient menu can be pinned and their state updated as""" start="00:04:08.200" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""commands are issued from them. This lets us build""" start="00:04:11.920" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""interfaces that reflect internal state changes made by""" start="00:04:15.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""commands issued from the user. This is great because many""" start="00:04:18.400" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""modes have stateful behavior, and guess what? Emacs has a lot""" start="00:04:21.920" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""of modes.""" start="00:04:26.600" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Modes are apps, really""" start="00:04:29.303" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""If you think about it, Emacs modes are akin to the""" start="00:04:29.303" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""ecosystem of apps that we see today, but with far less""" start="00:04:32.000" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""structure and packaging. A mode, like an app, focuses on""" start="00:04:35.080" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""delivering specific behavior to the user. There are many""" start="00:04:39.320" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""built-in modes in Emacs, and these modes are complex with""" start="00:04:42.960" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""dozens, if not hundreds, of commands. Calc itself has over""" start="00:04:46.000" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""1,000 of them. It's frustrating to know that these commands""" start="00:04:50.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""are there, but I really can't access them via recall.""" start="00:04:54.880" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Transient all the modes!""" start="00:04:59.527" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""So I decided to do something about it, and that was to transient""" start="00:04:59.527" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""all the modes, or at least the most major ones. This past""" start="00:05:05.080" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""summer, I had the time and resources to start building""" start="00:05:10.000" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Transient interfaces for modes that I wanted to more""" start="00:05:12.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""elegantly use. I decided to call this work Casual. Given its""" start="00:05:15.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""definition, it seemed like a good fit for the vibe that I""" start="00:05:22.320" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""wanted these interfaces to embody.""" start="00:05:25.520" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Casual design principles""" start="00:05:28.040" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Design principles that I embraced up front were""" start="00:05:28.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""handcrafted information architecture and layout. This is""" start="00:05:35.000" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""largely an exercise in mapping a mode's command set to a""" start="00:05:38.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""hierarchical menu structure. I wanted these menus to make""" start="00:05:41.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""sense to most people. Ideally, users would not have to read""" start="00:05:47.120" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""documentation to get at the command that they wanted. Early""" start="00:05:50.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""on, I quickly learned that it was impossible to maintain the""" start="00:05:55.840" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""existing default key bindings when mapping them over to a""" start="00:05:59.360" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""hierarchical menu. Also, some bindings I just flat out""" start="00:06:02.480" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""disagreed with. I resolved to be friendly, but not""" start="00:06:06.760" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""beholden to them. In all of the above, I've gone out of my way""" start="00:06:10.200" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""to make clear that my design decisions are opinionated.""" start="00:06:14.920" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Casual design conventions""" start="00:06:17.960" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Using casual.""" start="00:06:17.960" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""To reinforce habit, a common key binding is used per mode to""" start="00:06:21.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""raise a main menu. This key binding is left to user""" start="00:06:30.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""preference. For me, that binding is C-o.""" start="00:06:33.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Command bindings are mnemonic when possible.""" start="00:06:36.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Mode-specific settings are given their own menu. Since""" start="00:06:44.640" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""transient menus can be pinned, we can support repeat or""" start="00:06:49.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""stateful behavior in a mode.""" start="00:06:53.320" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""As of this writing, there are 11 modes supported by Casual,""" start="00:06:58.480" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""with several more on the way.""" start="00:07:02.320" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Casual Dired""" start="00:07:04.366" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Let's look at the Casual menu""" start="00:07:04.366" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""for Dired to highlight the design conventions previously""" start="00:07:05.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""mentioned.""" start="00:07:12.480" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""In a Dired Emacs window, the user can invoke their preferred""" start="00:07:13.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""key binding to call a top-level Casual main menu. This main""" start="00:07:17.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""menu is displayed at the bottom of the Emacs frame. Zooming""" start="00:07:22.280" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""into this menu, we see the commands offered in it""" start="00:07:27.920" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""categorized into different sections. Each command has a""" start="00:07:30.840" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""key binding, usually a single character shown before its""" start="00:07:34.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""label. The File section holds commands that act upon the""" start="00:07:38.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""currently selected item or marked items. The Directory""" start="00:07:42.600" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""section holds commands that affect the current directory""" start="00:07:47.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""or its subdirs within it. The Mark section has marking""" start="00:07:50.320" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""commands that allow for aggregate operations. The""" start="00:07:55.600" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Navigation section shows commands that move the point in a""" start="00:08:00.280" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""direct buffer. The quick section provides access to""" start="00:08:03.400" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""bookmark and buffer list commands. Search and replace""" start="00:08:09.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""commands are grouped in the search section. New directory""" start="00:08:14.520" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""and file creation are given their own section. Finally, at""" start="00:08:19.120" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""the bottom of the menu are commands dedicated to Casual menu""" start="00:08:24.080" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""navigation.""" start="00:08:27.600" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Casual is conformant to Transient conventions where the""" start="00:08:28.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""key binding C-g for dismiss one and C-q to dismiss all""" start="00:08:34.080" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""menus are honored. Another transient convention is to""" start="00:08:39.480" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""reserve the key binding q to quit the current mode. For most""" start="00:08:43.640" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""main menus, casual uses the , key binding to invoke a""" start="00:08:49.520" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""mode-specific settings menu. Casual also adopts the""" start="00:08:53.960" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""common UI convention of using ... >""" start="00:08:59.000" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""symbols to denote required input and submenus""" start="00:09:02.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""respectively.""" start="00:09:05.880" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Casual EditKit""" start="00:09:06.640" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Some commands are more global or non-mode specific in""" start="00:09:06.640" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""nature. A great deal of these commands relate to editing,""" start="00:09:13.920" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""which I find to be a prime motivation for using Emacs. Let's""" start="00:09:18.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""examine one such menu that supports this.""" start="00:09:23.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""The main menu for Casual EditKit is designed to provide easy""" start="00:09:25.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""access to editing and editing-related commands. Like the""" start="00:09:31.600" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""previous Dired menu, it organizes commands into different""" start="00:09:36.280" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""sections.""" start="00:09:39.960" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Commands related to file and buffer operations are in the""" start="00:09:40.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""File section. Commands for editing text are in the Edit""" start="00:09:46.000" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""section. S- or balanced expression commands are given a""" start="00:09:50.520" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""dedicated section for their own. More often than not, in""" start="00:09:55.600" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""many modes, I find them to do what I want.""" start="00:09:59.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""The tools section provides access to common tools.""" start="00:10:02.160" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Bookmarks I consider to be an essential feature. If you""" start="00:10:08.880" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""haven't used them, it's never too late to start. Emacs""" start="00:10:13.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""window management commands are given this section.""" start="00:10:18.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Commands for search and replace, macros, and projects can""" start="00:10:20.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""be accessed from here. Finally, the menu navigation""" start="00:10:25.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""section. Note that register commands can be accessed from""" start="00:10:32.200" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""here.""" start="00:10:35.720" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""EditKit demo""" start="00:10:36.200" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Okay, enough screenshots. Let's look at Casual in action""" start="00:10:36.200" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""with a demo of the EditKit menus. Let's start our demo of""" start="00:10:42.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""casual-editkit with raising the menu, which is bound to""" start="00:10:48.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""C-o. You'll see the menu pop up here. In""" start="00:10:54.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""particular, we want to look at the edit operation. We'll""" start="00:10:58.920" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""press e and we'll see a number of menu items that allow you to""" start="00:11:02.520" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""make editing transformations to the text, be it marking,""" start="00:11:08.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""copying, killing, transposing, transforming, moving, or""" start="00:11:16.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""deleting the text. You'll see also that there is a submenu""" start="00:11:20.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""for rectangle operations. Let's first...""" start="00:11:24.280" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Marking and moving""" start="00:11:31.997" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Let's actually dig through and look at what's in the Mark submenu.""" start="00:11:31.997" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""You'll see that there are increments of text in which you can""" start="00:11:37.407" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""mark. You can mark a word, a sentence, a paragraph, and""" start="00:11:42.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""balanced expression. If we go back, you'll see a similar""" start="00:11:45.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""pattern for copying as well as killing. Transposing.""" start="00:11:49.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Let's go and try to move a sentence. We have the point there at""" start="00:11:57.340" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""hello there. We'll move that sentence around. If we""" start="00:12:02.880" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""press s, we can move it backward or forward. In this case,""" start="00:12:07.120" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""let's move it forward. We'll press f. You'll see hello""" start="00:12:12.120" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""there move up a sentence. Then we can also press b to move""" start="00:12:16.280" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""it back. Then press RET to dismiss. Also, if we wanted""" start="00:12:21.640" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""to, we can... In this menu particularly, you'll see that we""" start="00:12:29.880" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""also have cursor navigation, so we can move the point there.""" start="00:12:35.200" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""That's not in all the menus, but in a good part number of the""" start="00:12:38.840" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""menus in Casual Edit Kit, you'll see that here. Let's press""" start="00:12:43.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""RET to dismiss that.""" start="00:12:47.920" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Rectangles""" start="00:12:53.140" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Let's actually look at some rectangle operations here.""" start="00:12:53.140" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""In this case, we have a list with""" start="00:12:58.644" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""items x, y, and z. Let's say we wanted to prefix each item""" start="00:13:01.760" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""here with a string. We'll say we want to put in there""" start="00:13:08.520" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""hello. One way of doing that is to make a rectangle. So""" start="00:13:14.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""if we go into our rectangle menu, first off, what we need to do""" start="00:13:21.160" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""is define that rectangle region. We'll press m to mark""" start="00:13:25.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""where the point is right there. Then we can use our cursor""" start="00:13:31.200" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""operation to move the point to define the rectangle. In this""" start="00:13:35.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""case, it's right at the start there. We can use the string""" start="00:13:39.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""insert command, i, to insert hello, colon, and then we'll""" start="00:13:43.840" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""put a space there to make it look a little nicer. Sure""" start="00:13:49.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""enough, that's in there.""" start="00:13:54.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""We can have access to a number of rectangle commands here.""" start="00:13:58.120" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Numbering""" start="00:14:04.976" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""If we wanted to, let's say, number, we can go through that same""" start="00:14:04.976" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""operation here, define a region, a rectangle region that""" start="00:14:11.600" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""is, and press n. You'll see that it has incremented a""" start="00:14:16.720" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""number for each item in that rectangle region. We can also""" start="00:14:22.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""tap u to undo these operations""" start="00:14:28.640" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""and leave that at that.""" start="00:14:32.469" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Sorting""" start="00:14:36.600" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Sorting. If we select a region here, And we go back. You'll""" start="00:14:36.600" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""see that the sort submenu is now enabled. Sorting won't work""" start="00:14:47.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""unless you have a region started. That's one of the nice""" start="00:14:52.400" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""things about transient is that it allows you to visually""" start="00:14:56.240" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""enable or disable command items with regards to whatever""" start="00:15:01.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""the current state or context is here. In this case is""" start="00:15:09.080" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""whether or not you have a region highlighted. Let's say we""" start="00:15:12.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""want to sort these two columns of numbers and so there's a""" start="00:15:17.360" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""command called n here which is numeric fields. Let's choose that""" start="00:15:22.880" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""here. Sure enough we get that. But there's a nice twist""" start="00:15:29.760" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""there. Let's say we wanted to sort on the second column.""" start="00:15:35.920" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Let's move our point back up to here and we'll mark that.""" start="00:15:39.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Since everything is in a continuous line, we can sort of""" start="00:15:48.920" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""pretend that this region is actually a paragraph""" start="00:15:52.800" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""and mark that.""" start="00:15:55.949" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""We'll go and select our sorting routine. But now we need to""" start="00:15:59.360" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""figure out how to make numeric fields sort on the second""" start="00:16:07.000" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""column. In transient, if we press a ?, that""" start="00:16:11.320" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""gives us basically a intermediate help section where, if we""" start="00:16:16.360" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""press a key binding, it will tell us or load the docstring for""" start="00:16:21.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""the command that's there. That command in this case is""" start="00:16:27.280" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""sort-numeric-fields. It requires an argument. That""" start="00:16:33.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""argument can be passed using the prefix argument,""" start="00:16:40.040" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""C-u. Press q. Let's do that. In this case, we""" start="00:16:44.080" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""want to check or use the value 2 and press n. Sure enough,""" start="00:16:52.120" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""that region is sorted with respect to the second column.""" start="00:16:58.680" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Casual has transformed my user experience with Emacs""" start="00:17:04.340" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Before Casual, so many powerful Emacs commands were not""" start="00:17:04.340" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""available to me because they were too hard to recall or I""" start="00:17:12.160" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""could not discover them. Making Casual has changed that,""" start="00:17:15.560" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""letting me reimagine more positively my user experience""" start="00:17:19.880" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""with Emacs. If you're interested in any of what I've shown""" start="00:17:24.360" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""today, I invite you to try out Casual.""" start="00:17:29.200" video="mainVideo-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Thanks and acknowledgements""" start="00:17:34.451" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Before I leave, my thanks and acknowledgments""" start="00:17:34.451" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""go out to the following people.""" start="00:17:37.033" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""First, to Jonas Bernoulli for making Transient and Magit.""" start="00:17:38.680" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Casual would not be possible without your work. Next, to""" start="00:17:43.400" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Psionic-k for writing Transient Showcase. It showed me how I""" start="00:17:49.320" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""could build casual. To all the casual users and their""" start="00:17:54.400" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""support, I am genuinely appreciative. Finally, to Jon""" start="00:17:59.440" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Snader for writing the kind posts on Casual on the Irreal""" start="00:18:05.320" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""website. Thank you.""" start="00:18:08.760" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""Casual can be found on MELPA,""" start="00:18:10.520" video="mainVideo-casual" id="subtitle"]]
+[[!template text="""and its repository is hosted on GitHub.""" start="00:18:15.798" video="mainVideo-casual" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+<div class="transcript transcript-qanda"><a name="casual-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Opening""" start="00:00:00.000" video="qanda-casual" id="subtitle"]]</div>[[!template text="""Leo? I'm doing well as well and I'm so happy to have seen your""" start="00:00:00.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""talk because the interaction with Emacs is always""" start="00:00:05.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""something that I find very interesting, and stuff like""" start="00:00:10.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""Transient, stuff like Hydra before, I think they really""" start="00:00:13.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""improve the user experience of users, and I'm really glad""" start="00:00:18.840" video="qanda-casual" id="subtitle"]]
+[[!template text="""that I've seen you talk. Perhaps just starting with the""" start="00:00:22.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""first question, do you have anything else that you'd like to""" start="00:00:24.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""add on your talk? Because we are pretty stringent with the""" start="00:00:27.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""amount of time that we give for talks, but is there anything""" start="00:00:30.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""that you would have liked to mention to people that you""" start="00:00:33.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""weren't able to fit into the talk? I think probably one of the""" start="00:00:35.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""design considerations I've done is that many of the""" start="00:00:42.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""commands that I've exposed through my casual interfaces""" start="00:00:46.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""have been in Emacs. They've been in there forever, but very""" start="00:00:49.360" video="qanda-casual" id="subtitle"]]
+[[!template text="""few people uh, myself included really know that they're""" start="00:00:56.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""there, uh, because they're just not discoverable through,""" start="00:01:00.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""uh, basically the existing mechanisms, you know, prior to""" start="00:01:06.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""transient and which key to, to even know that those, those""" start="00:01:09.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""functions are there. Yeah. So I think I'm going to start""" start="00:01:13.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""asking you questions whilst people start writing them in a""" start="00:01:19.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""pad. But yeah, I also think that discoverability is a very""" start="00:01:21.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""huge point that having stuff like the stuff that you've""" start="00:01:25.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""showed today actually allows. One example that I'd like to""" start="00:01:29.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""give that many people tend to forget, and you've already""" start="00:01:32.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""mentioned it in your presentation, is that I've learned so""" start="00:01:35.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""much about using git in general thanks to Magit, for the""" start="00:01:39.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""reason that it shows you so many options that you might not be""" start="00:01:43.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""aware of. For instance, I like to really think about when""" start="00:01:46.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""you think about logging in git, Magit allows you to""" start="00:01:50.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""discover so many of the finer options, like I only want to""" start="00:01:54.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""see the first commit since the merge, or I only want to""" start="00:01:58.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""consider this subsection of commits going from master or""" start="00:02:01.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""main to the point of your branch. So many things like this""" start="00:02:06.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""that you get to discover thanks to Transient. So do you have""" start="00:02:09.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""any similar experience on your end? Oh yeah, far too""" start="00:02:11.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""many, particularly with EditKit,""" start="00:02:16.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""having access to these commands,""" start="00:02:22.360" video="qanda-casual" id="subtitle"]]
+[[!template text="""particularly with different granularity on""" start="00:02:28.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""S-expressions, sentences, words...""" start="00:02:31.772" video="qanda-casual" id="subtitle"]]
+[[!template text="""Probably the most surprising thing I found""" start="00:02:34.774" video="qanda-casual" id="subtitle"]]
+[[!template text="""was just how how compelling the""" start="00:02:37.396" video="qanda-casual" id="subtitle"]]
+[[!template text="""S-expression would be as a unit of text for working with.""" start="00:02:43.022" video="qanda-casual" id="subtitle"]]
+[[!template text="""I found that in most contexts, or in many places,""" start="00:02:49.055" video="qanda-casual" id="subtitle"]]
+[[!template text="""it did what I wanted. I found that to be very surprising.""" start="00:02:53.989" video="qanda-casual" id="subtitle"]]
+[[!template text="""So unless you've got anything else to add, I think we can just""" start="00:03:02.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""jump into questions. Okay, certainly. I'll be reading them""" start="00:03:06.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""for you so that it's easier for you. So the first question is,""" start="00:03:10.640" video="qanda-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I wonder whether casual can only be used with the packages you""" start="00:03:13.600" video="qanda-casual" id="subtitle"]]</div>[[!template text="""I wonder whether casual can only be used with the packages""" start="00:03:13.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""you mentioned or whether it can be used with whatever""" start="00:03:17.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""packages you like. I think it's really the latter. I'm not""" start="00:03:19.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""quite sure what the... What the question was really""" start="00:03:25.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""pointing at, you know, is the question asking for why I chose""" start="00:03:29.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""the packages or the different modes that I did? Or is it, are""" start="00:03:35.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""they looking at it from a developer perspective of, can we""" start="00:03:41.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""integrate casual with other packages? I mean, since we've""" start="00:03:45.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""got a little bit of time ahead of us, feel free to answer both""" start="00:03:50.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""questions. Um, I think the answer is, uh. Well, for the 1st,""" start="00:03:52.840" video="qanda-casual" id="subtitle"]]
+[[!template text="""1, I've, I've generally tried to stick with using. The modes""" start="00:03:59.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""that are already packaged in, um, and so there was a. A big""" start="00:04:05.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""refactoring of it where. Initially, I made separate repos""" start="00:04:11.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""for the different modes that I supported. And then through a""" start="00:04:16.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""discussion, which I won't go into here, that got changed""" start="00:04:20.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""where I consolidated all of the different transient menus""" start="00:04:24.960" video="qanda-casual" id="subtitle"]]
+[[!template text="""for modes that are built in for behavior that's built into""" start="00:04:30.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""the Emacs. I put that into a single package called casual.""" start="00:04:35.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""And then integrations with other third party packages that""" start="00:04:39.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""are not built in were given the same standalone repo here. In""" start="00:04:44.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""terms of folks wanting to integrate that, it's the beauty of""" start="00:04:49.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""open source. They can get the repo and uh, and basically""" start="00:04:55.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""study that the code base, uh, actually, if they even install""" start="00:05:01.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""it through, uh, you know, the package manager in this case,""" start="00:05:05.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""uh, coming from the Melbourne distribution, um, they can""" start="00:05:08.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""inspect that code and, and, um, make modifications or even.""" start="00:05:12.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""uh, you know, integrate that with their other packages and,""" start="00:05:17.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""uh, do that to their heart's content. Um, I think one of the""" start="00:05:21.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""things that I need to, or at least, uh, you know, that I, I, I""" start="00:05:25.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""planned on sort of elaborating further on in the""" start="00:05:29.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""documentation is, is that transient already has built in""" start="00:05:32.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""mechanisms for modifying an existing transient. So you can""" start="00:05:36.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""add commands or, uh, re redefine the bindings. And so. That""" start="00:05:41.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""mechanism is available for users if they're not happy with""" start="00:05:47.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""those bindings or they want to add their own commands to a""" start="00:05:51.960" video="qanda-casual" id="subtitle"]]
+[[!template text="""menu. Yeah, and people are... I'm personally familiar with""" start="00:05:57.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""this, again, with Magit, because sometimes, even though""" start="00:06:01.960" video="qanda-casual" id="subtitle"]]
+[[!template text="""you have a lot of discoverability for functions that you may""" start="00:06:05.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""not know, sometimes you also happen to realize that""" start="00:06:07.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""something is missing in the list of available options. I'm""" start="00:06:10.360" video="qanda-casual" id="subtitle"]]
+[[!template text="""not sure if Casual actually supports something similar to""" start="00:06:14.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""Magit, which is levels of options being displayed.""" start="00:06:16.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""Actually, I'm not sure if it's transient native or if it's""" start="00:06:21.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""just something that Magit adds over this. No, transient""" start="00:06:24.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""supports levels. I've decided""" start="00:06:27.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""in large part, I've tried to avoid that just to avoid the""" start="00:06:30.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""added complexity of trying to define those levels. Yeah, I""" start="00:06:36.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""was going to say that perhaps it doesn't gel very well with""" start="00:06:43.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""the notion of casualness that you seem to be introducing the""" start="00:06:47.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""package. On one end, you've got something that is supposed""" start="00:06:49.840" video="qanda-casual" id="subtitle"]]
+[[!template text="""to be very casual, very easy to use, and on the other end, you""" start="00:06:52.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""add levels for stuff that is fairly advanced. So advanced""" start="00:06:56.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""versus casual, kind of makes sense that you check this over.""" start="00:06:59.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""Alright, moving to the second question which is related to""" start="00:07:05.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""the previous one.""" start="00:07:09.360" video="qanda-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:07:10.854" video="qanda-casual" id="subtitle"]]</div>[[!template text="""Are there any patterns emerging such that""" start="00:07:10.854" video="qanda-casual" id="subtitle"]]
+[[!template text="""it would be impossible, sorry, such that it would be""" start="00:07:13.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""possible to once systematize and to automate the mapping of""" start="00:07:15.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""mode commands to keyboard-driven menus, possibly even""" start="00:07:19.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""have an auto-casual wrapper for an uncovered mode? Does it""" start="00:07:23.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""make sense to you? Yes, and I've gotten these comments from a""" start="00:07:26.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""number of different folks who really want to see some sort""" start="00:07:35.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""of design rule to, or basically, what is it? Some sort of""" start="00:07:42.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""design system to be able to generate the UI.""" start="00:07:49.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""Conceptually, I think it's doable, but on the flip side, it""" start="00:07:54.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""just requires so much coordination that it makes it really""" start="00:08:01.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""untenable. In this case, I have very strong opinions. I""" start="00:08:05.320" video="qanda-casual" id="subtitle"]]
+[[!template text="""think we're better off trying to handcraft the user""" start="00:08:11.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""interface to get basically the best user experience. To try""" start="00:08:15.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""to emulate that with a design system, good luck, but I'm not""" start="00:08:20.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""I'm not interested in working on that. Right, yeah. I think""" start="00:08:26.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""if I try to think a little more about this, it feels like""" start="00:08:31.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""there's a notion of intention that is very important when""" start="00:08:34.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""you are designing UI and UX. And to have this intention, it""" start="00:08:36.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""feels like you cannot just base yourself of a design idea to""" start="00:08:41.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""organize the options. You cannot just work off a pattern. I""" start="00:08:45.320" video="qanda-casual" id="subtitle"]]
+[[!template text="""think you need to have the trace of human understanding in""" start="00:08:48.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""order to have a UX that really works. And judging by the""" start="00:08:53.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""option that you've picked in the demos that you've showed""" start="00:08:56.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""today, I don't think it'd be particularly easy to organize""" start="00:08:59.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""them in a UX just casually for any mode. I think you need some""" start="00:09:04.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""human introspection to understand this, if that makes""" start="00:09:07.960" video="qanda-casual" id="subtitle"]]
+[[!template text="""sense.""" start="00:09:14.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""Moving to the next question, which is related to something""" start="00:09:14.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""we discussed about with Magit.""" start="00:09:17.280" video="qanda-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Does Casual have a log where you can see what commands were invoked?""" start="00:09:19.606" video="qanda-casual" id="subtitle"]]</div>[[!template text="""Does Casual have a log where""" start="00:09:19.606" video="qanda-casual" id="subtitle"]]
+[[!template text="""you can see what commands were invoked? This is always""" start="00:09:21.080" video="qanda-casual" id="subtitle"]]
+[[!template text="""available via M-x view-lossage or via the command-log-mode,""" start="00:09:23.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""but I'm wondering if it can do for Emacs command what""" start="00:09:27.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""magit-process-buffer does for learning Git commands. And for""" start="00:09:30.994" video="qanda-casual" id="subtitle"]]
+[[!template text="""everyone who's currently in Emacs, whenever you're""" start="00:09:34.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""running a command in Magit, it's always printing the exact""" start="00:09:37.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""command that was run in a shell, inside this $""" start="00:09:40.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""menu. So does Casual actually provide something similar,""" start="00:09:44.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""Charles? I don't know. In general, because I'm building off""" start="00:09:47.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""of transient, it would have to be a mechanism that's""" start="00:09:52.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""available through transient. And You know, I would let""" start="00:09:55.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""Jonas speak more on that capability, because to be honest, I""" start="00:10:01.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""mean, even to my knowledge of transient is not that deep,""" start="00:10:06.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""actually.""" start="00:10:14.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""Well, it's funny that you say this because even though you""" start="00:10:16.840" video="qanda-casual" id="subtitle"]]
+[[!template text="""say your knowledge might not be that big, you still managed""" start="00:10:21.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""to develop a whole suite of tools on top of it. So as far as""" start="00:10:23.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""people who do not know transient a whole lot, you're doing a""" start="00:10:27.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""pretty damn good job. Let me tell you that much. Thank you.""" start="00:10:29.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""Yeah, I think sort of what I bring to the table is, you know,""" start="00:10:33.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""quite a considerable career in software development on""" start="00:10:37.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""other software ecosystems. And as of late, I've spent""" start="00:10:41.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""basically the past decade working on iOS apps. Right. I""" start="00:10:47.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""think it's refreshing to be able to go back to something that""" start="00:10:52.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""looks like Emacs after iOS.""" start="00:10:55.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""Well, that's perhaps another longer conversation there.""" start="00:10:56.840" video="qanda-casual" id="subtitle"]]
+[[!template text="""Speaking of longer conversation, we have only about 10""" start="00:11:03.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""minutes left until we need to move on to the next talk. But""" start="00:11:08.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""thank you everyone for all the questions you're asking. I'm""" start="00:11:11.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""not saying this because we finished, but it's good to see so""" start="00:11:13.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""many people writing in the chat and asking questions. It""" start="00:11:17.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""always shows that you're interested and that's always""" start="00:11:19.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""lovely to us. And you've mentioned Jonas. Obviously, we're""" start="00:11:23.080" video="qanda-casual" id="subtitle"]]
+[[!template text="""talking about Jonas Bernoulli, i.e. Tarsius, the""" start="00:11:26.080" video="qanda-casual" id="subtitle"]]
+[[!template text="""maintainer of transient. And what Charles just mentioned""" start="00:11:29.360" video="qanda-casual" id="subtitle"]]
+[[!template text="""about having a transient tooling to print the lossage,""" start="00:11:33.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""basically, of which sex were run by which command, feels""" start="00:11:37.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""like this is something that would be interesting. So,""" start="00:11:43.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""perhaps, I'm not sure if Tarsius is still on the chat""" start="00:11:44.840" video="qanda-casual" id="subtitle"]]
+[[!template text="""currently, but he was definitely around earlier today, so""" start="00:11:50.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""we'll make sure that the ID lands on his lap later on. All""" start="00:11:52.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""right, moving to the next question.""" start="00:11:55.840" video="qanda-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there a setting to close menu after executing command?""" start="00:12:00.204" video="qanda-casual" id="subtitle"]]</div>[[!template text="""Is there a setting to""" start="00:12:00.204" video="qanda-casual" id="subtitle"]]
+[[!template text="""close menu after executing a command? By default, it will.""" start="00:12:00.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""There's a slot that you can define in a transient""" start="00:12:07.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""prefix called :transient. And if you set that to true,""" start="00:12:10.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""then it will persist the menu after executing the command.""" start="00:12:17.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""But by default, it will actually dismiss the menu. This""" start="00:12:20.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""feels... Did you actually get to play with Hydra before""" start="00:12:26.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""playing with transients? To be honest, no. Yeah, I kind of""" start="00:12:29.360" video="qanda-casual" id="subtitle"]]
+[[!template text="""slept on Hydra or at least, you know, I really wasn't all that""" start="00:12:36.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""ambitious with working with different packages until""" start="00:12:41.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""about like, a little less than 2 years ago or so.""" start="00:12:44.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""And then the other part was also, um. You know, not not really""" start="00:12:48.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""a technical. Start a comparison because I really don't want""" start="00:12:57.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""to upset folks here, but, uh. But more along the lines of just""" start="00:13:02.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""going with the notion that transient was being built in or""" start="00:13:05.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""packaged as a built in package for Emacs. I went with using""" start="00:13:09.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""that for my implementation. Cool. And I don't think there's""" start="00:13:15.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""anything controversial with what you're saying right now""" start="00:13:20.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""because, you know, we had earlier today, Euro Rechenko, the""" start="00:13:23.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""new maintainer of Augment, mentioning that he'd like to""" start="00:13:28.840" video="qanda-casual" id="subtitle"]]
+[[!template text="""have a better integration with Transient because""" start="00:13:32.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""Transient is, it looks like it's here to stay for a long time""" start="00:13:34.320" video="qanda-casual" id="subtitle"]]
+[[!template text="""and might even land in core at some point. So, it definitely""" start="00:13:39.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""feels comparing Hydra because for me, most of my UI needs in""" start="00:13:42.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""Emacs prior to Transient were done via Hydra because it was a""" start="00:13:49.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""very convenient tooling. For people who do not know, Hydra""" start="00:13:54.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""is written by AboAbo. who's also authored packages like""" start="00:13:57.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""Lispy, an interactive Lisp mode, also for Ivy, which you""" start="00:14:02.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""might know as the counterpart of Helm, maybe five years ago.""" start="00:14:08.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""So all those packages, they were very innovative for the""" start="00:14:14.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""time and it's cool to see that some of the ideas which were""" start="00:14:17.960" video="qanda-casual" id="subtitle"]]
+[[!template text="""introduced by IV and Helm and all this are then taken by tools""" start="00:14:21.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""like Transient and done perhaps with a little more""" start="00:14:28.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""hindsight now that people have experienced a little more of""" start="00:14:30.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""it. Okay, we have still a little bit of time. Moving on to the""" start="00:14:33.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""next question.""" start="00:14:38.360" video="qanda-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What modes are you working on at the moment for casual / are excited to explore?""" start="00:14:40.282" video="qanda-casual" id="subtitle"]]</div>[[!template text="""What modes are you working on at the moment""" start="00:14:40.282" video="qanda-casual" id="subtitle"]]
+[[!template text="""for Casual or are you excited to explore?""" start="00:14:41.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""Well, so I just recently published one for calendar. And so I""" start="00:14:44.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""think the calendar interface has a lot of really""" start="00:14:54.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""interesting behavior, particularly its support for""" start="00:14:56.840" video="qanda-casual" id="subtitle"]]
+[[!template text="""non-Gregorian events, which is, you know, for folks who'd""" start="00:15:00.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""like, in my case, looking at the lunar calendar, it's great""" start="00:15:07.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""to have tooling to be able to not have to leave Emacs to figure""" start="00:15:13.080" video="qanda-casual" id="subtitle"]]
+[[!template text="""out when a lunar date is.""" start="00:15:17.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""Then, I think, you know, for the most part, My work on casual""" start="00:15:19.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""was really kind of my summer of code for Emacs here. And so in""" start="00:15:29.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""many ways, the velocity of casual development is going to""" start="00:15:34.960" video="qanda-casual" id="subtitle"]]
+[[!template text="""slow down where I've got a big bulk of the modes that I really""" start="00:15:41.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""wanted to take care of. Um, I think one experimental thing""" start="00:15:48.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""that I think is very unbaked, but I would, you know, if folks""" start="00:15:57.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""are interested, uh, maybe looking at it is, uh, taking a look""" start="00:16:01.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""at edebug and trying to make that an easier thing to do. Um,""" start="00:16:06.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""that is ambitious. Uh, yeah, so maybe too ambitious.""" start="00:16:13.080" video="qanda-casual" id="subtitle"]]
+[[!template text="""Uh, other things are like really scary projects.""" start="00:16:18.360" video="qanda-casual" id="subtitle"]]
+[[!template text="""And so, not to say that""" start="00:16:23.714" video="qanda-casual" id="subtitle"]]
+[[!template text="""I really have a desire to do it, but another""" start="00:16:25.196" video="qanda-casual" id="subtitle"]]
+[[!template text="""one would be ediff. Right. Okay. Relitigating it's""" start="00:16:28.320" video="qanda-casual" id="subtitle"]]
+[[!template text="""interface, um, to have a transient menu. I say""" start="00:16:33.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""these things, but I'm also scared of those things. Yeah, I""" start="00:16:43.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""mean, I think it's a lovely way to tackle the project,""" start="00:16:47.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""really, because you are fully aware that edebug and ediffs""" start="00:16:50.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""are mastodons when it comes to Emacs. They work very well. If""" start="00:16:55.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""you've ever tried to do a conflict resolution in Magit and""" start="00:16:59.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""you've pressed e, that usually opens ediff for you. If you""" start="00:17:02.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""happen to know how it works, it's amazing, but if you do not know""" start="00:17:07.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""it works, the interface is a little... It's a lot to take in""" start="00:17:09.960" video="qanda-casual" id="subtitle"]]
+[[!template text="""at the moment. You have to know a, b, w... I can, and I""" start="00:17:13.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""can never remember which one is the lower and which one is the""" start="00:17:20.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""upper. Like, it constantly goes in different directions. I""" start="00:17:24.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""can never remember which is the commit I'm trying to merge,""" start="00:17:27.360" video="qanda-casual" id="subtitle"]]
+[[!template text="""which is the commit I'm currently being on. It has nothing to""" start="00:17:29.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""do with Magit. It's merely Git and the way they conceive""" start="00:17:32.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""this. And probably, there might be a very nice way to""" start="00:17:36.840" video="qanda-casual" id="subtitle"]]
+[[!template text="""remember it, but I still haven't found it after 10 years as a""" start="00:17:39.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""software developer. So, I guess I need to dig a little""" start="00:17:42.080" video="qanda-casual" id="subtitle"]]
+[[!template text="""deeper. But what I find lovely about the approach is that for""" start="00:17:44.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""you, working on the interface to those tools is actually""" start="00:17:48.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""something that allows you to discover how they work, but""" start="00:17:52.600" video="qanda-casual" id="subtitle"]]
+[[!template text="""also how to make it more easy for people to understand how""" start="00:17:55.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""those tools work. So you're doing the work of""" start="00:17:59.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""understanding, of digesting a lot of the commands, so that""" start="00:18:02.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""people do not have to go through the same pain as you have. So I""" start="00:18:05.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""find this a very noble endeavor in a way.""" start="00:18:08.600" video="qanda-casual" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Getting older""" start="00:18:14.280" video="qanda-casual" id="subtitle"]]</div>[[!template text="""In so many ways, as perhaps I've mentioned""" start="00:18:14.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""in my talk, I'm getting older. I can't remember all""" start="00:18:18.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""these damn commands and my hand dexterity is failing. I""" start="00:18:23.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""mean, there's so many. Like multiple keystroke""" start="00:18:28.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""bindings, which I absolutely loathe. At most,""" start="00:18:33.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""like I can, I can only physically handle like, two""" start="00:18:37.480" video="qanda-casual" id="subtitle"]]
+[[!template text="""characters, three maybe, at a time. So maybe""" start="00:18:40.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""that's just me, and others may""" start="00:18:47.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""feel differently, but at the same time,""" start="00:18:51.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""the work that I've invested here is has been very personal""" start="00:18:56.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""for me because I just don't want to work that hard, and I want to""" start="00:19:01.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""keep using Emacs. Yeah, and that's again a very good""" start="00:19:06.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""endeavor, I think, to have. And there's one last thing that""" start="00:19:11.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""I'd like to mention, because you've mentioned this project""" start="00:19:13.720" video="qanda-casual" id="subtitle"]]
+[[!template text="""of yours, Casual, being some kind of summer of code, with the""" start="00:19:16.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""implication that you've worked a whole lot of it during the""" start="00:19:19.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""summer or during this period. and perhaps investment will""" start="00:19:22.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""die down a little bit now. But I think it's completely fine to""" start="00:19:26.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""have moments when you feel particularly excited and you do a""" start="00:19:31.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""lot of work, and sometimes it dies down a little bit.""" start="00:19:33.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""Personally, I've been... Four years ago, I was working a lot""" start="00:19:36.960" video="qanda-casual" id="subtitle"]]
+[[!template text="""on Org Roam and I had my Summer of Code on Org Roam. And that was""" start="00:19:41.440" video="qanda-casual" id="subtitle"]]
+[[!template text="""great. I was able to do a lot of things, to get a lot of things""" start="00:19:44.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""out of my head. But eventually, you know, you have to go make""" start="00:19:47.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""some money to survive or you have to take care of family and""" start="00:19:50.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""stuff like this. So, life tends to get in the way of your""" start="00:19:53.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""hobbies, especially when, you know, it's so... It's""" start="00:19:56.400" video="qanda-casual" id="subtitle"]]
+[[!template text="""hobbies that involve so much of your time to get things""" start="00:20:00.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""right, like programming does. But, you know, we appreciate""" start="00:20:03.240" video="qanda-casual" id="subtitle"]]
+[[!template text="""all the work you've done, Charles, and the fact that you've""" start="00:20:07.880" video="qanda-casual" id="subtitle"]]
+[[!template text="""put it out there for people to enjoy. It's already a victory.""" start="00:20:09.800" video="qanda-casual" id="subtitle"]]
+[[!template text="""You don't need to feel compelled to keep working on it""" start="00:20:12.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""because ultimately, as you said, the beauty of open source""" start="00:20:15.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""is that people can just send PRs and get the project going""" start="00:20:18.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""again. Yeah. I mean, and if anything, you know, folks have""" start="00:20:21.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""expressed to me that, you know, in many ways, a lot of this""" start="00:20:28.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""stuff should be, you know, sort of folded in the core. And,""" start="00:20:33.320" video="qanda-casual" id="subtitle"]]
+[[!template text="""you know, I would love to see at least the ideals of, or at""" start="00:20:37.960" video="qanda-casual" id="subtitle"]]
+[[!template text="""least an openness into thinking, rethinking the interface""" start="00:20:45.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""for Emacs. So, you know, it doesn't have to be, basically""" start="00:20:49.320" video="qanda-casual" id="subtitle"]]
+[[!template text="""work the way it worked for basically the last half of the 20th""" start="00:20:54.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""century here. Yeah, Emacs is flexible enough to have""" start="00:20:59.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""different approaches and, you know, transient is one""" start="00:21:03.520" video="qanda-casual" id="subtitle"]]
+[[!template text="""approach, but at the same time, you know, the ability to""" start="00:21:10.280" video="qanda-casual" id="subtitle"]]
+[[!template text="""reimagine the user interface for, you know, the computing""" start="00:21:17.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""needs, you know, for basically users needs today, whether""" start="00:21:22.560" video="qanda-casual" id="subtitle"]]
+[[!template text="""you write or code or anything of that nature, I think is an""" start="00:21:28.160" video="qanda-casual" id="subtitle"]]
+[[!template text="""exciting and great thing. Yeah, well, thank you so much for""" start="00:21:33.120" video="qanda-casual" id="subtitle"]]
+[[!template text="""this conclusion. So I'm a little sorry, because sadly, we""" start="00:21:39.040" video="qanda-casual" id="subtitle"]]
+[[!template text="""needed to move the stream to the next talk. So we've lost""" start="00:21:41.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""about 20 seconds of what you said. But don't worry, whatever""" start="00:21:45.920" video="qanda-casual" id="subtitle"]]
+[[!template text="""you've said will be available on the website. I didn't want""" start="00:21:49.640" video="qanda-casual" id="subtitle"]]
+[[!template text="""to interrupt, sadly, because I didn't want to be rude. But I""" start="00:21:52.000" video="qanda-casual" id="subtitle"]]
+[[!template text="""think we did a great job answering the questions. So thank""" start="00:21:55.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""you so much for taking the time. I'll need to get going,""" start="00:21:58.680" video="qanda-casual" id="subtitle"]]
+[[!template text="""because we might have a problem with the next talk. So thank""" start="00:22:01.200" video="qanda-casual" id="subtitle"]]
+[[!template text="""you so much, Charles. Certainly. Take care. Thank you.""" start="00:22:02.760" video="qanda-casual" id="subtitle"]]
+[[!template text="""Appreciate it. Bye.""" start="00:22:05.920" video="qanda-casual" 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%20casual%3A%20Re-imagining%20the%20Emacs%20user%20experience%20with%20Casual%20Suite)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/casual-before.md b/2024/info/casual-before.md
index 9ea7c07e..c580fe70 100644
--- a/2024/info/casual-before.md
+++ b/2024/info/casual-before.md
@@ -1,18 +1,47 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 19-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="casual">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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 stroke-width="3" x="473" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 20-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-casual.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="2024-12-07T19:45:00Z" end="2024-12-07T20:05:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~2:45 PM - 3:05 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~1:45 PM - 2:05 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~12:45 PM - 1:05 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~11:45 AM - 12:05 PM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~7:45 PM - 8:05 PM UTC <br />Saturday, Dec 7 2024, ~8:45 PM - 9:05 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~9:45 PM - 10:05 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~1:15 AM - 1:35 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~3:45 AM - 4:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~4:45 AM - 5:05 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+03:43.400 Transient
+04:08.200 A Transient menu can be pinned
+04:29.303 Modes are apps, really
+04:59.527 Transient all the modes!
+05:28.040 Casual design principles
+06:17.960 Casual design conventions
+07:04.366 Casual Dired
+09:06.640 Casual EditKit
+10:36.200 EditKit demo
+11:31.997 Marking and moving
+12:53.140 Rectangles
+14:04.976 Numbering
+14:36.600 Sorting
+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://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 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?
+09:19.606 Q: Does Casual have a log where you can see what commands were invoked?
+12:00.204 Q: Is there a setting to close menu after executing command?
+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="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/casual-nav.md b/2024/info/casual-nav.md
index 79f70094..feda8341 100644
--- a/2024/info/casual-nav.md
+++ b/2024/info/casual-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/mcclim">Elisp and McCLIM</a>
-Next by time: <a href="/2024/talks/hyperdrive">New in hyperdrive.el: org-transclusion, easy installation, and more!</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/shell">Emacs as a shell</a>
+Next by track: <a href="/2024/talks/hyperdrive">New in hyperdrive.el: quick install, peer graph, transclusion!</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/color-after.md b/2024/info/color-after.md
index dbd67a8e..a6726801 100644
--- a/2024/info/color-after.md
+++ b/2024/info/color-after.md
@@ -1,7 +1,449 @@
<!-- 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%20color%3A%20Colour%20your%20Emacs%20with%20ease)
+<div class="transcript transcript-mainVideo"><a name="color-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-color" id="subtitle"]]</div>[[!template text="""Hi, EmacsConf. This is &quot;Colour your Emacs with ease&quot;.""" start="00:00:00.000" video="mainVideo-color" id="subtitle"]]
+[[!template text="""I'm Ryota Sawada, and today's agenda is:""" start="00:00:11.328" video="mainVideo-color" id="subtitle"]]
+[[!template text="""start with a brief introduction.""" start="00:00:14.849" video="mainVideo-color" id="subtitle"]]
+[[!template text="""I will be talking about colours quite a bit.""" start="00:00:16.650" video="mainVideo-color" id="subtitle"]]
+[[!template text="""What colours do you like?""" start="00:00:19.720" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Colour spaces and some packages such""" start="00:00:21.453" video="mainVideo-color" id="subtitle"]]
+[[!template text="""as color.el, ct.el. I'll be touching on a theme called""" start="00:00:23.600" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Hasliberg theme, which I created,""" start="00:00:27.880" video="mainVideo-color" id="subtitle"]]
+[[!template text="""before wrapping up the talk.""" start="00:00:31.057" video="mainVideo-color" id="subtitle"]]
+[[!template text="""A quick introduction about the talk. The slide is""" start="00:00:34.140" video="mainVideo-color" id="subtitle"]]
+[[!template text="""available as an Org mode file at Codeberg. If you're""" start="00:00:36.960" video="mainVideo-color" id="subtitle"]]
+[[!template text="""looking at it from Org mode, you probably want to have""" start="00:00:40.560" video="mainVideo-color" id="subtitle"]]
+[[!template text="""rainbow mode turned on for the best viewing. This is the""" start="00:00:43.520" video="mainVideo-color" id="subtitle"]]
+[[!template text="""case with the presentation today. I'm Ryota Sawada and I'm""" start="00:00:47.640" video="mainVideo-color" id="subtitle"]]
+[[!template text="""available at rytswd at usual places.""" start="00:00:52.560" video="mainVideo-color" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What colour do you like?""" start="00:00:58.668" video="mainVideo-color" id="subtitle"]]</div>[[!template text="""What colour do you like?""" start="00:00:58.668" video="mainVideo-color" id="subtitle"]]
+[[!template text="""You might be able to tell I like orange. That's""" start="00:01:01.291" video="mainVideo-color" id="subtitle"]]
+[[!template text="""the colour that I use often.""" start="00:01:05.000" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Emacs gives me all the control I want,""" start="00:01:07.857" video="mainVideo-color" id="subtitle"]]
+[[!template text="""so naturally I wanted to make it aesthetically""" start="00:01:09.959" video="mainVideo-color" id="subtitle"]]
+[[!template text="""pleasing to my taste, which meant that""" start="00:01:13.120" video="mainVideo-color" id="subtitle"]]
+[[!template text="""I would like to have a dark theme, subtle theme""" start="00:01:16.024" video="mainVideo-color" id="subtitle"]]
+[[!template text="""with orange as a main accent colour, but not""" start="00:01:19.726" video="mainVideo-color" id="subtitle"]]
+[[!template text="""too orange, so not everything very orange.""" start="00:01:23.768" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Maybe use another blue-ish colour""" start="00:01:26.804" video="mainVideo-color" id="subtitle"]]
+[[!template text="""as another accent. Note that this presentation is""" start="00:01:29.674" video="mainVideo-color" id="subtitle"]]
+[[!template text="""based on the Hasliberg theme, more on that""" start="00:01:32.930" video="mainVideo-color" id="subtitle"]]
+[[!template text="""later. But when I started my Emacs journey, I didn't start""" start="00:01:36.200" video="mainVideo-color" id="subtitle"]]
+[[!template text="""with creating a new theme from get-go. I started with a theme""" start="00:01:40.600" video="mainVideo-color" id="subtitle"]]
+[[!template text="""called Nova Theme. I really liked it. I made a few tweaks""" start="00:01:45.200" video="mainVideo-color" id="subtitle"]]
+[[!template text="""around Org Mode and headings, so that they were a bit more was""" start="00:01:49.480" video="mainVideo-color" id="subtitle"]]
+[[!template text="""my liking, which was around orange being sprinkled across.""" start="00:01:55.040" video="mainVideo-color" id="subtitle"]]
+[[!template text="""I got to it very nice looking and I really liked it, but when""" start="00:02:00.760" video="mainVideo-color" id="subtitle"]]
+[[!template text="""I started a lot of coding tasks with it, I realized one""" start="00:02:07.960" video="mainVideo-color" id="subtitle"]]
+[[!template text="""thing: that it was very colourful, and in a way, distracting.""" start="00:02:13.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""it actually wasn't about Nova Theme's fault. It was just""" start="00:02:19.800" video="mainVideo-color" id="subtitle"]]
+[[!template text="""many editors, including Emacs and VS Code and other editors""" start="00:02:24.040" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and modern themes, are filled with colours. Let's have a""" start="00:02:27.480" video="mainVideo-color" id="subtitle"]]
+[[!template text="""look. At the top left, you can see Nova theme with a bit of a""" start="00:02:31.680" video="mainVideo-color" id="subtitle"]]
+[[!template text="""pale greenish background with a few colours. Purple,""" start="00:02:38.040" video="mainVideo-color" id="subtitle"]]
+[[!template text="""pink, blue, green. You can see some colours like that with""" start="00:02:42.240" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Nova theme. Nice looking colours, but still colourful. Modus""" start="00:02:47.400" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Vivendi Tinted, bottom left, is also very nice looking""" start="00:02:51.520" video="mainVideo-color" id="subtitle"]]
+[[!template text="""modern theme, but quite colourful. The same can be said""" start="00:02:56.080" video="mainVideo-color" id="subtitle"]]
+[[!template text="""for ef-themes, owl edition at top right,""" start="00:02:59.361" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and Doom Noe as another, bottom right.""" start="00:03:03.135" video="mainVideo-color" id="subtitle"]]
+[[!template text="""That led me to think: how can I make my code editing""" start="00:03:07.980" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and coding tasks not too distracting, and I can focus on""" start="00:03:13.760" video="mainVideo-color" id="subtitle"]]
+[[!template text="""writing code. That was something I could manage with Org""" start="00:03:18.600" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Mode, where I just specifically, basically used orange""" start="00:03:22.760" video="mainVideo-color" id="subtitle"]]
+[[!template text="""shades and not too much more. That's what you're seeing at""" start="00:03:26.400" video="mainVideo-color" id="subtitle"]]
+[[!template text="""the moment. I wanted to do something similar with coding""" start="00:03:29.400" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and any general code. That led me to the journey of""" start="00:03:33.520" video="mainVideo-color" id="subtitle"]]
+[[!template text="""creating my own theme.""" start="00:03:37.960" video="mainVideo-color" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Colour spaces: HSL, LCH , and more""" start="00:03:42.120" video="mainVideo-color" id="subtitle"]]</div>[[!template text="""But before going to the theme, I need to talk about colour""" start="00:03:42.120" video="mainVideo-color" id="subtitle"]]
+[[!template text="""spaces. sRGB, standard RGB, is probably something that""" start="00:03:44.680" video="mainVideo-color" id="subtitle"]]
+[[!template text="""many people are familiar with. HSL is for hue, saturation,""" start="00:03:49.080" video="mainVideo-color" id="subtitle"]]
+[[!template text="""lightness. LCH is for luminance or lightness, chroma, and""" start="00:03:53.440" video="mainVideo-color" id="subtitle"]]
+[[!template text="""hue. Those are the colour spaces probably common used in""" start="00:03:58.360" video="mainVideo-color" id="subtitle"]]
+[[!template text="""various spaces, but when it comes to perceptual uniformity,""" start="00:04:03.320" video="mainVideo-color" id="subtitle"]]
+[[!template text="""there is an important difference between the colour""" start="00:04:08.000" video="mainVideo-color" id="subtitle"]]
+[[!template text="""spaces. Human perception of colour is not very""" start="00:04:11.600" video="mainVideo-color" id="subtitle"]]
+[[!template text="""straightforward. We can see in the reference here...""" start="00:04:14.800" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Let's have a look.""" start="00:04:17.880" video="mainVideo-color" id="subtitle"]]
+[[!template text="""At the top you can see the shade coming from left""" start="00:04:19.507" video="mainVideo-color" id="subtitle"]]
+[[!template text="""green to the right blue,""" start="00:04:23.160" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and in the top image, you can see half of""" start="00:04:26.371" video="mainVideo-color" id="subtitle"]]
+[[!template text="""it, perhaps, is very similar green colour""" start="00:04:30.960" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and then when it comes to blue,""" start="00:04:34.521" video="mainVideo-color" id="subtitle"]]
+[[!template text="""you can see more of the different colour gradients""" start="00:04:36.142" video="mainVideo-color" id="subtitle"]]
+[[!template text="""coming into play. The bottom colour space is based on a""" start="00:04:40.240" video="mainVideo-color" id="subtitle"]]
+[[!template text="""perceptually uniform colour space, which gives us a bit more""" start="00:04:45.560" video="mainVideo-color" id="subtitle"]]
+[[!template text="""evenly distributed colour gradient, which will be""" start="00:04:50.480" video="mainVideo-color" id="subtitle"]]
+[[!template text="""something more suitable for deciding on the theme setup and""" start="00:04:55.040" video="mainVideo-color" id="subtitle"]]
+[[!template text="""the colour setup, where you can have various themes that are""" start="00:04:59.040" video="mainVideo-color" id="subtitle"]]
+[[!template text="""defined for human perceptions.""" start="00:05:04.000" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Perceptual uniformity is important. For that, it is""" start="00:05:10.440" video="mainVideo-color" id="subtitle"]]
+[[!template text="""important to mention about CIE, or &quot;International""" start="00:05:14.320" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Commission of Illumination&quot; in English. They created""" start="00:05:17.880" video="mainVideo-color" id="subtitle"]]
+[[!template text="""important colour spaces called CIE XYZ which was from 1931,""" start="00:05:23.480" video="mainVideo-color" id="subtitle"]]
+[[!template text="""CIELAB, and LUV, 1976,""" start="00:05:29.480" video="mainVideo-color" id="subtitle"]]
+[[!template text="""respectively. Those are the colour spaces used in various""" start="00:05:33.320" video="mainVideo-color" id="subtitle"]]
+[[!template text="""fields and industries and still relevant. There is a""" start="00:05:37.520" video="mainVideo-color" id="subtitle"]]
+[[!template text="""quite a bit that you can read up on.""" start="00:05:41.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""I'm not a colour expert so have some references here,""" start="00:05:44.899" video="mainVideo-color" id="subtitle"]]
+[[!template text="""but the TLDR of all of that is""" start="00:05:48.961" video="mainVideo-color" id="subtitle"]]
+[[!template text="""consider using LCH variants over RGB or HSL""" start="00:05:52.520" video="mainVideo-color" id="subtitle"]]
+[[!template text="""for better perceptual uniformity.""" start="00:05:57.526" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Specifically CIE Lab-based LCH,""" start="00:06:00.607" video="mainVideo-color" id="subtitle"]]
+[[!template text="""which is often called Lab LCH""" start="00:06:03.960" video="mainVideo-color" id="subtitle"]]
+[[!template text="""or just LCH. CIELUV-based LCH""" start="00:06:06.710" video="mainVideo-color" id="subtitle"]]
+[[!template text="""is called LUV LCH. There is a new rather modern LCH setup""" start="00:06:10.360" video="mainVideo-color" id="subtitle"]]
+[[!template text="""called OK LCH which is based on OK Lab.""" start="00:06:16.520" video="mainVideo-color" id="subtitle"]]
+[[!template text="""So those are the colour spaces""" start="00:06:19.997" video="mainVideo-color" id="subtitle"]]
+[[!template text="""that are worth looking at when it comes to creating""" start="00:06:22.100" video="mainVideo-color" id="subtitle"]]
+[[!template text="""shades.""" start="00:06:24.280" video="mainVideo-color" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""color.el and ct.el""" start="00:06:25.885" video="mainVideo-color" id="subtitle"]]</div>[[!template text="""How do you create shades? Color.el and ct.el are""" start="00:06:25.885" video="mainVideo-color" id="subtitle"]]
+[[!template text="""great solutions. You can create shades and different""" start="00:06:29.760" video="mainVideo-color" id="subtitle"]]
+[[!template text="""colours based on RGB and hex. You can see in the red example""" start="00:06:33.200" video="mainVideo-color" id="subtitle"]]
+[[!template text="""here, FF0000 is a bright red. You can darken it by providing""" start="00:06:37.800" video="mainVideo-color" id="subtitle"]]
+[[!template text="""less red values like CC or 88. You can see that the colours""" start="00:06:43.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""are slightly darker than the FF0000. But what if you are""" start="00:06:48.640" video="mainVideo-color" id="subtitle"]]
+[[!template text="""working with the complex colours such as FBB151, this""" start="00:06:52.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""particular orange? That's where color.el, ct.el come""" start="00:06:57.440" video="mainVideo-color" id="subtitle"]]
+[[!template text="""into play. Color.el is a built-in package in Emacs,""" start="00:07:01.880" video="mainVideo-color" id="subtitle"]]
+[[!template text="""so you can use it by just requiring it.""" start="00:07:05.744" video="mainVideo-color" id="subtitle"]]
+[[!template text="""color-darken-name and""" start="00:07:08.341" video="mainVideo-color" id="subtitle"]]
+[[!template text="""providing the colour with the hex value with 40%""" start="00:07:10.400" video="mainVideo-color" id="subtitle"]]
+[[!template text="""gives you a darker orange""" start="00:07:13.906" video="mainVideo-color" id="subtitle"]]
+[[!template text="""without doing too much of a colour computation""" start="00:07:16.887" video="mainVideo-color" id="subtitle"]]
+[[!template text="""by hand. This hex value is something that Emacs""" start="00:07:20.040" video="mainVideo-color" id="subtitle"]]
+[[!template text="""understands and rainbow mode does as well. When it comes""" start="00:07:23.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""to ct.el, it's not a built-in solution, but it's more""" start="00:07:27.320" video="mainVideo-color" id="subtitle"]]
+[[!template text="""versatile. It works with various colour spaces so you can""" start="00:07:30.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""see that ct-edit-hsl-l-dec by 40% would give""" start="00:07:34.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""us a darker colour by 40%. We can also use LCH variant which""" start="00:07:41.240" video="mainVideo-color" id="subtitle"]]
+[[!template text="""can use the LCH colour spaces for darkening the colour. This""" start="00:07:47.760" video="mainVideo-color" id="subtitle"]]
+[[!template text="""results in slightly different colours for this particular""" start="00:07:53.480" video="mainVideo-color" id="subtitle"]]
+[[!template text="""orange, but if you're working with the green or blue or some""" start="00:07:56.920" video="mainVideo-color" id="subtitle"]]
+[[!template text="""other colours, it might be worth looking at LCH variant""" start="00:08:00.200" video="mainVideo-color" id="subtitle"]]
+[[!template text="""rather than other colour spaces.""" start="00:08:04.178" video="mainVideo-color" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Hasliberg theme""" start="00:08:08.400" video="mainVideo-color" id="subtitle"]]</div>[[!template text="""With that, let's have a look at Hasliberg theme.""" start="00:08:08.400" video="mainVideo-color" id="subtitle"]]
+[[!template text="""This is a theme that I created personally""" start="00:08:11.204" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and the name is based on the Swiss Alps""" start="00:08:13.708" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and with the following ideas in mind. It focuses""" start="00:08:16.410" video="mainVideo-color" id="subtitle"]]
+[[!template text="""on setting up shades. Shades, by that...""" start="00:08:20.480" video="mainVideo-color" id="subtitle"]]
+[[!template text="""You can see how the top""" start="00:08:25.032" video="mainVideo-color" id="subtitle"]]
+[[!template text="""of the heading here is a bright orange colour, and""" start="00:08:27.000" video="mainVideo-color" id="subtitle"]]
+[[!template text="""other orange colours, this heading and this heading""" start="00:08:31.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""are based on the top""" start="00:08:35.759" video="mainVideo-color" id="subtitle"]]
+[[!template text="""orange colour and then giving some shade and the luminance""" start="00:08:37.720" video="mainVideo-color" id="subtitle"]]
+[[!template text="""adjustment essentially. It follows a pattern from web""" start="00:08:40.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""design and tailwind colour shades are a great example that""" start="00:08:44.640" video="mainVideo-color" id="subtitle"]]
+[[!template text="""you can have a look.""" start="00:08:49.040" video="mainVideo-color" id="subtitle"]]
+[[!template text="""It does not use ct.el as it aims to be fully""" start="00:08:50.816" video="mainVideo-color" id="subtitle"]]
+[[!template text="""dependency free and does not consider colour contrast for""" start="00:08:54.440" video="mainVideo-color" id="subtitle"]]
+[[!template text="""accessibility. This is because it's personal and I""" start="00:08:58.000" video="mainVideo-color" id="subtitle"]]
+[[!template text="""don't have that particular need.""" start="00:09:02.120" video="mainVideo-color" id="subtitle"]]
+[[!template text="""This is based on LuvLCh rather""" start="00:09:04.747" video="mainVideo-color" id="subtitle"]]
+[[!template text="""than LAB LCH, and that's another reason""" start="00:09:06.840" video="mainVideo-color" id="subtitle"]]
+[[!template text="""why I didn't use ct.el,""" start="00:09:08.789" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and it is highly experimental. But the code is""" start="00:09:11.050" video="mainVideo-color" id="subtitle"]]
+[[!template text="""available at Codeberg and GitHub just for your reference.""" start="00:09:14.120" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Let's see Hasliberg theme in action. This is the theme""" start="00:09:18.280" video="mainVideo-color" id="subtitle"]]
+[[!template text="""that we were looking at for org-mode as well, but for the""" start="00:09:23.720" video="mainVideo-color" id="subtitle"]]
+[[!template text="""code, in this case Elisp. You can see that the colour is""" start="00:09:27.160" video="mainVideo-color" id="subtitle"]]
+[[!template text="""mostly white and blue with orange sprinkled across for""" start="00:09:32.200" video="mainVideo-color" id="subtitle"]]
+[[!template text="""string input. You can see some pink showing up as well.""" start="00:09:37.560" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Essentially, all the colour setup is done by shades, so most of""" start="00:09:41.560" video="mainVideo-color" id="subtitle"]]
+[[!template text="""it is based on white or neutral, and there will be lighter and""" start="00:09:46.400" video="mainVideo-color" id="subtitle"]]
+[[!template text="""darker variants that can be set for the primary colour of blue.""" start="00:09:51.320" video="mainVideo-color" id="subtitle"]]
+[[!template text="""You can see the darker and brighter and lighter colours""" start="00:09:56.160" video="mainVideo-color" id="subtitle"]]
+[[!template text="""being used. With that shade setup, I only have to provide a""" start="00:09:59.960" video="mainVideo-color" id="subtitle"]]
+[[!template text="""few colours as the base colours. From there, I can define the""" start="00:10:05.280" video="mainVideo-color" id="subtitle"]]
+[[!template text="""shades for the theme setup, which leads to creating a more""" start="00:10:09.600" video="mainVideo-color" id="subtitle"]]
+[[!template text="""monotonic colour setup, where this one is a very monotonic,""" start="00:10:15.960" video="mainVideo-color" id="subtitle"]]
+[[!template text="""very subtle difference of white colours used for the base""" start="00:10:20.360" video="mainVideo-color" id="subtitle"]]
+[[!template text="""colours. I don't have to make too many changes to the colour""" start="00:10:25.060" video="mainVideo-color" id="subtitle"]]
+[[!template text="""setup. I just have to provide the base colours that are""" start="00:10:29.040" video="mainVideo-color" id="subtitle"]]
+[[!template text="""different. The same can be said for this orange, very orange""" start="00:10:32.080" video="mainVideo-color" id="subtitle"]]
+[[!template text="""colour theme, which is based on the base colours of""" start="00:10:36.400" video="mainVideo-color" id="subtitle"]]
+[[!template text="""orange-like colours and gives the shade of various""" start="00:10:39.360" video="mainVideo-color" id="subtitle"]]
+[[!template text="""different setup. This means that I can use Hasliberg""" start="00:10:43.640" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Theme Nature colour palette, and that gives me more of a green""" start="00:10:50.720" video="mainVideo-color" id="subtitle"]]
+[[!template text="""based colour where all the base colours are set up with a""" start="00:10:56.160" video="mainVideo-color" id="subtitle"]]
+[[!template text="""greenish colour setup.""" start="00:11:00.840" video="mainVideo-color" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrap up""" start="00:11:06.240" video="mainVideo-color" id="subtitle"]]</div>[[!template text="""With that, I would like to wrap up with a few ideas when""" start="00:11:06.240" video="mainVideo-color" id="subtitle"]]
+[[!template text="""adjusting themes and working with colours. Maybe consider""" start="00:11:10.400" video="mainVideo-color" id="subtitle"]]
+[[!template text="""using CIELAB, CIELUV, or OKLab-based colour spaces that""" start="00:11:13.760" video="mainVideo-color" id="subtitle"]]
+[[!template text="""would give you different shades which are easier to work""" start="00:11:19.360" video="mainVideo-color" id="subtitle"]]
+[[!template text="""with for human perceptions. color.el and ct.el can be a""" start="00:11:24.720" video="mainVideo-color" id="subtitle"]]
+[[!template text="""great tool for making shades and working with colour spaces.""" start="00:11:29.200" video="mainVideo-color" id="subtitle"]]
+[[!template text="""Hasliberg theme is yet another theme, highly personal""" start="00:11:32.560" video="mainVideo-color" id="subtitle"]]
+[[!template text="""and experimental, but could be an inspiration for your""" start="00:11:36.240" video="mainVideo-color" id="subtitle"]]
+[[!template text="""theme journey. With that, why not sprinkle your Emacs with""" start="00:11:39.000" video="mainVideo-color" id="subtitle"]]
+[[!template text="""your favourite colours? Thank you.""" start="00:11:44.120" video="mainVideo-color" id="subtitle"]]
+
+</div>
+
+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.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: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: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.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.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.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.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.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.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.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.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)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/color-before.md b/2024/info/color-before.md
index 44200ba6..89145fbd 100644
--- a/2024/info/color-before.md
+++ b/2024/info/color-before.md
@@ -1,18 +1,32 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 12-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="color">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect stroke-width="3" x="205" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 10-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-color.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="2024-12-07T16:30:00Z" end="2024-12-07T16:40:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~11:30 AM - 11:40 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~10:30 AM - 10:40 AM CST (US/Central)<br />Saturday, Dec 7 2024, ~9:30 AM - 9:40 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~8:30 AM - 8:40 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~4:30 PM - 4:40 PM UTC <br />Saturday, Dec 7 2024, ~5:30 PM - 5:40 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~6:30 PM - 6:40 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~10:00 PM - 10:10 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~12:30 AM - 12:40 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~1:30 AM - 1:40 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+06:25.885 color.el and ct.el
+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://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 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="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/color-nav.md b/2024/info/color-nav.md
index d94e71c8..fad13907 100644
--- a/2024/info/color-nav.md
+++ b/2024/info/color-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/p-search">p-search: a local search engine in Emacs</a>
-Next by time: <a href="/2024/talks/julia">Exploring shared philosophies in Julia and Emacs</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/org-update">The Future of Org</a>
+Next by track: <a href="/2024/talks/theme">My journey of finding and creating the “perfect” Emacs theme</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/emacs30-after.md b/2024/info/emacs30-after.md
index c854e4a5..7c4c24b3 100644
--- a/2024/info/emacs30-after.md
+++ b/2024/info/emacs30-after.md
@@ -1,7 +1,795 @@
<!-- 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%20emacs30%3A%20Emacs%2030%20Highlights)
+<div class="transcript transcript-mainVideo"><a name="emacs30-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<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.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.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.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.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.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: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.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.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.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: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: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.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.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.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.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.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: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.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: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.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.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.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.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:41.940" video="mainVideo-emacs30" id="subtitle"]]
+
+</div>
+
+Captioner: anush
+
+<div class="transcript transcript-qanda"><a name="emacs30-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""You sound great. And on the stream, my eyeball says it looks""" start="00:00:00.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""great with Leo doing the streaming. So I say let's dive right""" start="00:00:05.080" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""in. You got a long, huge line. And in order to be a little more""" start="00:00:08.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""dialectical, I'll be reading the questions. So first""" start="00:00:12.640" video="qanda-emacs30" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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)""" start="00:00:16.280" video="qanda-emacs30" id="subtitle"]]</div>[[!template text="""question, which key was a third party package for a long""" start="00:00:16.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""time? Is there work to bring any other popular packages into""" start="00:00:18.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""the core of Emacs for Emacs 31 plus, like Magit or Counsel?""" start="00:00:21.880" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Uh, right. I already answered that one on the, as you can see,""" start="00:00:25.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""uh, right. Yeah. Do you want to quickly read the answer so""" start="00:00:30.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""that everyone, I just can read it out again. Um, as far as I""" start="00:00:34.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""remember, the one package that was being discussed just""" start="00:00:38.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""around the time that the Emacs 30 branch was cut was macro""" start="00:00:41.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""step. That's the package that was like, does an overlay, uh,""" start="00:00:44.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""replaces a macro with the macro expansion using overlays.""" start="00:00:47.600" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""So you don't have to pop up another buffer, modified,""" start="00:00:51.480" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""modified current buffer. But we didn't manage to address""" start="00:00:53.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""all the concerns in time for the Emacs 30 cuts and I believe""" start="00:00:57.600" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""it's sort of stagnated around that but it might be picked up""" start="00:01:00.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""anytime someone mentions it on Emacs Devil again. Another""" start="00:01:03.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""package question mentioned was Magit. That's a constant""" start="00:01:07.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""discussion regarding Magit. And actually, from the top of""" start="00:01:11.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""my head, I can't recall if Magit is on NonGNU ELPA or GNU ELPA""" start="00:01:14.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""right now. It's still on NonGNU ELPA.""" start="00:01:19.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""For those who don't know, only packages which are in ELPA are""" start="00:01:23.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""considered for addition, considered to be added to the""" start="00:01:29.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Emacs core, to be bundled along with Emacs. And then there's""" start="00:01:33.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""another totally parallel discussion about having a sort of""" start="00:01:36.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""fat Emacs distribution, I call it fat Emacs distribution,""" start="00:01:40.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""where Emacs comes with a lot of ELPA packages or the""" start="00:01:43.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""pre-installed by default. Part of Emacs itself. Yeah.""" start="00:01:48.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Maybe I could jump in with an active listening style,""" start="00:01:55.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""you know, kind of follow up question almost. You know, I""" start="00:01:59.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""understand the kind of different repositories. We have""" start="00:02:03.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""things that aren't maintained by GNU at all, you know, most""" start="00:02:07.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""notably MELPA. And then we have kind of NonGNU ELPA, which""" start="00:02:13.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""is sort of an entryway project where it's not necessarily""" start="00:02:17.920" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""curated, but there'll be some advice given, which you can""" start="00:02:21.640" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""take or leave. And that's the repository where anything""" start="00:02:24.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""that was the newer repository that represents, you know,""" start="00:02:28.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""help, you know, help, help supplied from GNU. And then""" start="00:02:32.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""there's the, actually the GNU, the GNU ELPA, what most of us""" start="00:02:36.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""are used to calling just ELPA. And that's what you're""" start="00:02:41.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""talking about there when you say,""" start="00:02:46.480" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""I mean, all packages on ELPA are officially considered to be""" start="00:02:50.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""part of Emacs, they're licensed under the same conditions""" start="00:02:53.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""as Emacs itself, same license, same everything. And""" start="00:02:56.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""they're more likely to be, to drop, to kind of be dropping""" start="00:03:00.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""patched. Oh yeah, it's time for this to move to core. Is that""" start="00:03:03.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""right? They have the legal conditions for that to be done.""" start="00:03:07.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Everything's necessary from a paperwork standpoint. I""" start="00:03:12.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""mean, but other than that, there's not really a big""" start="00:03:15.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""difference between GNU ELPA and NonGNU ELPA. It's""" start="00:03:17.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""really just the main thing is this copyrights notice. So if""" start="00:03:21.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""you want to add a package to ELPA, to GNU ELPA, then all""" start="00:03:23.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""significance contributors have to have signed the FSF""" start="00:03:28.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""copyright assignment and the package script, actually the""" start="00:03:32.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""ELPA build script, checks if the copyright lines are all""" start="00:03:36.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""attributed to the Free Software Foundation.""" start="00:03:41.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""But that's not going to attach, right? So because that's not""" start="00:03:43.880" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""in place, it'd be a lot more work to merge it to core. I didn't""" start="00:03:52.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""hear the beginning. Nevermind. I think I understood. You""" start="00:03:57.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""made your point well. Okay. All right, moving on to the""" start="00:04:01.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""second question.""" start="00:04:05.560" video="qanda-emacs30" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Any way to get the goodness of Emacs for android with this other stuff?""" start="00:04:06.467" video="qanda-emacs30" id="subtitle"]]</div>[[!template text="""When thinking about using Emacs on""" start="00:04:06.467" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Android, I started realizing all the other software I also""" start="00:04:08.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""want on it. For example, PDF Tools wants a small additional""" start="00:04:11.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Emacs-specific program to be installed on, and notmuch""" start="00:04:15.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""obviously wants notmuch. Any way to get the goodness of""" start="00:04:18.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Emacs for Android with this other stuff, using either Nix OS""" start="00:04:21.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""or Guix or nix-on-droid to make an APK with extra stuff? Are you""" start="00:04:25.640" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""familiar with this topic? Absolutely not. The extent to""" start="00:04:29.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""which I have used Emacs on Android was entirely""" start="00:04:34.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""demonstrated in this video, I think. In my previous video. I""" start="00:04:39.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""mean, I know it does a few scrolling stuff, but I have no idea""" start="00:04:43.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""how external stuff, because I mean, Android is, it's a Unix""" start="00:04:48.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""or it's a Linux based system, but it's really heavily""" start="00:04:52.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""modified to the preferences of Google, which includes not""" start="00:04:55.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""being able to have your own software on it. Yeah,""" start="00:05:01.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""definitely. All right, moving on to the next question. Does""" start="00:05:04.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""package-vc... Oh, no, that's fine. I mean, you can't answer""" start="00:05:08.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""all the questions. I mean, it wouldn't be fun for me""" start="00:05:12.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""otherwise.""" start="00:05:15.200" video="qanda-emacs30" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Does package-vc download a tarball from the specified git repository or clone the repository itself?""" start="00:05:15.754" video="qanda-emacs30" id="subtitle"]]</div>[[!template text="""Does package-vc download a tarball from the""" start="00:05:15.754" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""specified Git repository or clone the repository itself?""" start="00:05:17.920" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""It clones the repository. That's the VC part in the name.""" start="00:05:21.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""package-vc uses VC, the C-x v stuff. In Emacs 29, there's a""" start="00:05:25.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""new command called vc-clone, which in Emacs 31, it was""" start="00:05:33.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""actually exposed as an interactive command. And when you""" start="00:05:37.680" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""clone the repository, or when you, you can give it any URL of a""" start="00:05:42.480" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Git repository or a CVS repository or subversion""" start="00:05:47.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""repository. Interestingly enough, most people only use""" start="00:05:50.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Git, but anything that's, that implements this clone""" start="00:05:53.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""command for VC, and it could download it. So there's no""" start="00:05:57.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""tarballs involved. Which is also, one should emphasize,""" start="00:06:01.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""part of the difficulty of VC packages because when you have""" start="00:06:05.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""version control and you want to upgrade it, it might be that""" start="00:06:07.880" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""the upstream did a force push. For that, you make local""" start="00:06:10.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""changes and then you have to merge them upstream with the""" start="00:06:14.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""upstream changes when fetching stuff. It's one of the big""" start="00:06:17.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""downsides of version-controlled stuff, and I'm saying""" start="00:06:21.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""this as the guy who actually wrote package-vc. There's""" start="00:06:23.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""times to use it, there's advantages to it, but that's""" start="00:06:27.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""something you should keep in mind, why tarballs are""" start="00:06:29.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""interesting to have, in my opinion. Okay.""" start="00:06:32.960" video="qanda-emacs30" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How is the new behavior of M-q in prog-mode (prog-fill-reindent-defun or something like that) different from the behavior of C-M-q (indent-pp-sexp) in older Emacs versions?""" start="00:06:37.970" video="qanda-emacs30" id="subtitle"]]</div>[[!template text="""How is the new""" start="00:06:37.970" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""behavior of M-q in prog mode, prog-fill-reindent-defun""" start="00:06:39.640" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""or something like that, different from the behavior""" start="00:06:42.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""of C-M-q, i.e. indent-pp-sexp in older Emacs""" start="00:06:45.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""version? My apologies if indent-pp-sexp, it's really tough to""" start="00:06:48.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""read M-x commands out loud. It's not bound to""" start="00:06:52.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""C-M-q by default, I can't tell. Let me try that command""" start="00:06:55.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""out because I've never tried it, never used it before.""" start="00:07:01.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""You know, that isn't bound by default. I bind that up myself""" start="00:07:05.600" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""and I have that binding. I think that's, that's not right. It""" start="00:07:09.080" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""says so. I mean, I'm currently executing it here in Emacs and""" start="00:07:11.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""it says you can also run the commands indent-pp-sexp with""" start="00:07:15.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""M-q, C-M-q. Apparently it is. I mean, I""" start="00:07:20.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""didn't set it myself. I don't know what's up with that. to try""" start="00:07:26.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""and move it. And then each line started with points or pretty""" start="00:07:31.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""printed. I mean, the difference, the main difference""" start="00:07:35.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""between that and the command highlighted, what's the name""" start="00:07:37.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""again? I forget it all the time. The prog-mode command.""" start="00:07:41.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""prog-fill-reindent-defun is that""" start="00:07:47.480" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""it checks if it's in a string or not. If it's in a string or if""" start="00:07:50.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""it's in a comma, then it will refill. Otherwise, it's going""" start="00:07:56.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""to re-indent.""" start="00:07:58.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""That's, I think, as far as I see, that's going to be the main""" start="00:07:59.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""difference. If we have some long comments somewhere. Let's""" start="00:08:05.680" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""try that out. Yeah, that's the difference. I just, you can't""" start="00:08:09.600" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""see it, but I did try it. Okay, good. Thank you. You did a""" start="00:08:15.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""wonderful job describing visually what you're doing. All""" start="00:08:19.680" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""right, moving on to the next question, and we have about, we""" start="00:08:22.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""have just enough time to cover the last three questions,""" start="00:08:26.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""especially because the next one, I can pretty much surmise""" start="00:08:28.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""the answer.""" start="00:08:32.240" video="qanda-emacs30" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Any plans for Emacs running in iOS?""" start="00:08:33.144" video="qanda-emacs30" id="subtitle"]]</div>[[!template text="""Any plans for Emacs running on iOS? Probably not""" start="00:08:33.144" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""because it's not, I mean, as I emphasized in the video, the""" start="00:08:36.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Emacs port in Android is completely free. And to my""" start="00:08:40.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""knowledge, that's not something that's currently""" start="00:08:43.640" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""possible with iOS. You need Xcode or something like that to""" start="00:08:45.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""build iOS stuff. So that's a big no-no. I mean, maybe Apple's""" start="00:08:49.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""going to change their mind on that one. Well, I won't be the""" start="00:08:56.640" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""one liaising with Apple to make sure that they do, but PR""" start="00:09:00.920" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""welcomes, I guess, or motivated folks welcome. Second to""" start="00:09:04.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""last question.""" start="00:09:07.600" video="qanda-emacs30" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:09:08.648" video="qanda-emacs30" id="subtitle"]]</div>[[!template text="""I am worried about the situation on non-free""" start="00:09:08.648" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""systems. There was talk about the Windows and the macOS""" start="00:09:11.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""versions being as good as unmaintained. Where do we go from""" start="00:09:14.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""here? I gather that most users of Emacs are still on non-free""" start="00:09:17.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""platforms and will remain to be there. I don't know about the""" start="00:09:20.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""last point, if that's true, because there's no statistics""" start="00:09:24.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""on that matter. But the main, I mean, someone has to, I know""" start="00:09:28.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""that Corwin is involved with the Mac, with the Windows""" start="00:09:35.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""stuff. Modestly. Sure, I'd love to jump in, but I'm far more""" start="00:09:37.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""interested in your thoughts than mine. Please, please""" start="00:09:43.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""continue. Someone has to do the work. Eli uses, as far as I""" start="00:09:45.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""know, Eli's on the Windows XP system. So as long as he's doing""" start="00:09:51.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""that, there's going to be Windows support for one form or""" start="00:09:58.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""another, or at least DOS. All right. And now you put a quarter""" start="00:10:02.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""in me, so I'll jump right back in. That's perfect for where I""" start="00:10:07.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""guess I would take the question. To me, it's an""" start="00:10:12.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""accessibility issue. Think about it this way. Maybe that""" start="00:10:14.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Windows XP system is what someone can afford. Likewise,""" start="00:10:17.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""from a freedom versus I have to do my job and I have to use""" start="00:10:23.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""certain technology to do my job. Maybe Emacs is what""" start="00:10:27.680" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""somebody can afford right? It might be the only free tool""" start="00:10:31.680" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""that they use and they don't have a lot of choice about the""" start="00:10:35.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""operating system that they're in most of the day. In fact,""" start="00:10:37.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""somebody could be in the situation where their computing""" start="00:10:40.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""device at work is really their internet access, right? All""" start="00:10:42.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""of those situations are possible. Therefore, I tend to""" start="00:10:45.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""assume they all exist and when I ask, you know, how much It""" start="00:10:48.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""definitely is concerning when we hear about kind of black""" start="00:10:53.480" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""holes in the brain trust of something like support for the""" start="00:10:58.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Windows port. I feel like I've heard a lot of people""" start="00:11:02.080" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""answering that call, but the importance of that is that it""" start="00:11:06.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""doesn't stop echoing, right? Free software goes as long as""" start="00:11:10.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""there are people that are irritated enough about something""" start="00:11:14.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""to sort of come hack on it. Yeah. And the same applies to Mac""" start="00:11:16.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""OS. But I don't know any concrete details about who's""" start="00:11:20.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""currently working on it. I can't recollect any details on""" start="00:11:25.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""who's currently working on what.""" start="00:11:28.080" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Okay. And that leaves us with the last question of the day.""" start="00:11:29.440" video="qanda-emacs30" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there a best practice on what Org to use when following emacs-latest?""" start="00:11:35.280" video="qanda-emacs30" id="subtitle"]]</div>[[!template text="""I'm a bit confused about what version of Org that I should""" start="00:11:35.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""write towards because there's Org in Emacs, the one that""" start="00:11:38.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""ships built-in. There's the one in ELPA. There's the one in""" start="00:11:40.920" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Org, probably the Org ELPA, I assume. Is there a best""" start="00:11:44.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""practice on what Org to use when following Emacs latest?""" start="00:11:48.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""when following us latest. It depends on, I think, my rough""" start="00:11:51.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""heuristic is if you do use Org a lot and if you follow the""" start="00:11:58.920" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""newest features, then use the version on Elpa, because the""" start="00:12:02.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Elpa version should be the most up-to-date one. The Org Elpa""" start="00:12:06.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""was deprecated, to my knowledge. If that seems true, please""" start="00:12:09.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""someone interrupt me before I make a fool of myself.""" start="00:12:15.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""No one's done that yet.""" start="00:12:18.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""I think a couple of years ago there were chats and then we""" start="00:12:24.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""deprecated the all contrib ELPA, but I think all the ELPA is""" start="00:12:29.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""still alive. I didn't know that about that. Okay, in that""" start="00:12:34.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""case, that relativizes how absolute my answer is.""" start="00:12:40.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Personally, I just use the version in Emacs, which is""" start="00:12:44.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""bundled with Emacs, which is regularly updated on master""" start="00:12:49.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""whenever there's a release. But that might take maybe, it""" start="00:12:53.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""might be a short time behind the ELPA version, or the other""" start="00:12:58.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""ELPA, the Org ELPA, which we mentioned. But I'm a very light""" start="00:13:03.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Org mode user, so please don't take my word for that one. No,""" start="00:13:11.880" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""and I'm happy to come to you. Yeah. I""" start="00:13:16.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""feel like we lost Leo again. OK. Well, that's all right. I""" start="00:13:23.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""wanted a bite at that, Apple. I'm a little bit. Yeah, I also""" start="00:13:27.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""describe myself as a light org user, but somehow your""" start="00:13:31.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""comment made me think, well, maybe I do use it just a little""" start="00:13:34.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""bit more than you, Philip.""" start="00:13:37.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""From my standpoint, I'm using it as a technical basis for""" start="00:13:41.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""dungeon mode in order to keep the game notes for the games""" start="00:13:45.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""that are made using this game engine I'm making that I talked""" start="00:13:49.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""about a few years ago. As soon as you said technical grounds,""" start="00:13:52.480" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""you definitely use it more. Right, right. So I've studied""" start="00:13:56.080" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""its internals a bit, and I have my own thoughts about this or""" start="00:13:59.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""that. But of course, I'm rolling with the punches because""" start="00:14:04.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""I'm just grateful that the bear dances. What an amazing""" start="00:14:06.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""thing is Org Mode. But Leo knows far more than me,""" start="00:14:10.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""conveniently having his stage right here, so he can't""" start="00:14:14.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""defend himself from this. But I've had thoughts around this""" start="00:14:18.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""space. Are you back, Leo? Yeah, sorry, I'm back. You save us""" start="00:14:22.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""all. Maybe closing remarks. I was trying to clear my throat""" start="00:14:28.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""to be very inconspicuous about me coming back, but""" start="00:14:33.480" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""apparently I was ousted. Yeah, I was trying to answer the""" start="00:14:36.080" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""question and I was trying to desperately save you from""" start="00:14:39.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""answering, Philip, because yes, the thing about Org Mode is""" start="00:14:42.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""that if you are the kind of people who tend to check out master""" start="00:14:46.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""on Org Mode, generally it's roughly pretty stable. Like""" start="00:14:48.880" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""when we were working with Org Element and stuff like this,""" start="00:14:51.920" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Perhaps there were some elements of stability which""" start="00:14:54.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""weren't there quite yet, but usually now it's pretty""" start="00:14:56.480" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""stable. So I think that if you are really excited about""" start="00:14:59.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""contributing to Org Mode and stuff like this, I think there""" start="00:15:02.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""isn't all that many risks to just checking out Org Mode""" start="00:15:04.640" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Master, so cloning the repository and just keeping up to""" start="00:15:08.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""date. Otherwise, ELPA is a fairly safe bet if you want to have""" start="00:15:11.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""the latest stable version. And we've got a question about""" start="00:15:15.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""[??] as with Emacs itself. You can follow whatever is""" start="00:15:19.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""published in your package archives or in your system""" start="00:15:24.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""distribution package manager. You can build it yourself if""" start="00:15:28.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""you want to contribute and fix bugs, add features, and so on.""" start="00:15:32.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Yeah, and I don't think perhaps a little more with Emacs,""" start="00:15:36.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""because the features that tends to get introduced in Emacs""" start="00:15:40.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""are slightly more wild. Not wild in the sense that they are""" start="00:15:43.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""less stable, but wild in the sense that they tend to change a""" start="00:15:48.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""lot more stuff. The core of Org, at least during Bastien's""" start="00:15:50.680" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""maintenance ship, was very stable when you think about it.""" start="00:15:54.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""So things might change with Ihor right now in terms of how he""" start="00:15:56.880" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""wants to change some of the core behaviors, but it's usually""" start="00:15:59.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""pretty stable. And whether you use the latest major""" start="00:16:02.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""version, the latest minor version, things are probably""" start="00:16:06.080" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""going to be pretty stable. It's like you heard me while you""" start="00:16:09.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""were offline. And I do agree with that, in case you might have""" start="00:16:11.680" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""heard both our remarks and think we're talking different""" start="00:16:16.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""angles. Actually, I think we would tend to agree on this, Leo""" start="00:16:18.320" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""and I. For the record, when I'm saying, oh, I have to go keep up""" start="00:16:22.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""with org, that's because org grows behaviors that I've got""" start="00:16:26.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""my own. I had to figure out at some point my own way to do it, and""" start="00:16:30.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""now I'm learning how it's done, right? So I'm like, in my""" start="00:16:34.640" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""abstraction, blah, right? And those conversations""" start="00:16:38.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""usually end at, and somebody else took the time to figure out""" start="00:16:41.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""how to actually make Emacs do that. Go be quiet. And I do, and I""" start="00:16:44.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""do consider that under Bastien's tenure, it has been quite""" start="00:16:48.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""stable. We might notice the occasional like, oh, this""" start="00:16:53.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""highlights now and that didn't, right? But very often, very""" start="00:16:57.040" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""infrequently is it breaking my workflow as a user, any of it.""" start="00:17:00.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""It's interesting to me that this mirrors my experience with""" start="00:17:03.600" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Emacs itself, where I think, in my perception, Emacs master""" start="00:17:07.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""is very stable and I might notice the slight changes between""" start="00:17:12.680" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""git pulls. But otherwise, in my experience, Org mode""" start="00:17:17.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""suddenly changes something, I don't know what changed or""" start="00:17:21.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""what's going on or what caused it, and it seemed... I""" start="00:17:24.880" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""perceive it as being a sudden uncontrolled change or""" start="00:17:29.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""something. I think that's apt. Right. That gets""" start="00:17:33.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""right at it. If we're following, if we're pulling for more""" start="00:17:36.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""pretty regularly, cronjob every night or pulling a few""" start="00:17:40.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""times a day or something like that, we're going to the""" start="00:17:42.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""internals yeah, we'll have a different experience than,""" start="00:17:44.640" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""you know, if we only remember to update Org once every four""" start="00:17:48.640" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""months. It really pays to stick with everything. And""" start="00:17:51.960" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""suddenly lots of things might change. Whatever broke in my""" start="00:17:54.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""own config, right? And so a lot of, like a lot of things within""" start="00:17:59.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Emacs, but also within the free software tool chain, it's""" start="00:18:03.440" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""how much you're going to invent in the config, invest in the""" start="00:18:06.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""config, might limit you know, and maintaining your config""" start="00:18:09.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""may limit the depth of how far it makes sense for you to go with""" start="00:18:14.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""the tool at any given point in time. Actually just looked up""" start="00:18:17.200" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""my org config and it's four, I said four options, user""" start="00:18:21.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""options. So that's, if that's the measurements of org""" start="00:18:25.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""expertise, that's my level, it's four.""" start="00:18:29.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""That's all good then. Four of four, I'm assuming that is,""" start="00:18:32.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""right? Four of what? What was the metric there, four of like a""" start="00:18:38.560" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""thousand? Four out of the number of user options that Word""" start="00:18:44.280" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""provides. Oh, okay, I see. Four, yeah, more like 10,000. I'm""" start="00:18:48.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""there. Yeah. All right. On that note, I suggest we move to""" start="00:18:54.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""what's close because it's fairly late for me and I need to""" start="00:18:59.080" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""sleep. And Philip, I think it's pretty late for you as well,""" start="00:19:01.000" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""isn't it? I'm in Germany, so it's about... So it is pretty""" start="00:19:03.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""late. It's the same time zone as me. It's 11 p.m. for you.""" start="00:19:07.240" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Truly, yeah. Yeah, so I suggest we both take the chance to go""" start="00:19:09.800" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""to bed as soon as we can. But Philip, thank you so much for""" start="00:19:16.400" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""both the presentation and also the answers that you""" start="00:19:20.360" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""provided to us and the nice little chat we had at the end. We""" start="00:19:22.760" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""look forward to seeing you again next year, perhaps for""" start="00:19:26.120" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Emacs 31. I'm not sure. I was chatting with wasamasa""" start="00:19:29.520" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""trying to make prognostics about when Emacs 30 is going to be""" start="00:19:34.160" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""released. There's a pre-release coming soon. I should have""" start="00:19:37.680" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""mentioned that earlier. Well, there you go. Gone.""" start="00:19:40.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""All right. Well, thank you so much, Philip. We'll be moving""" start="00:19:46.720" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""towards close. Give us about two minutes to get set up in the""" start="00:19:51.840" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""other room. And Philip, we'll see you next time. Goodbye.""" start="00:19:54.480" video="qanda-emacs30" id="subtitle"]]
+[[!template text="""Bye-bye. Thank you.""" start="00:19:58.440" video="qanda-emacs30" 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%20emacs30%3A%20Emacs%2030%20Highlights)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/emacs30-before.md b/2024/info/emacs30-before.md
index 5b3e43d3..fbefd7b3 100644
--- a/2024/info/emacs30-before.md
+++ b/2024/info/emacs30-before.md
@@ -1,18 +1,40 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 25-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="emacs30">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect stroke-width="3" x="610" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 25-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-emacs30.html>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Waiting for a caption volunteer
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T21:25:00Z" end="2024-12-07T21:50:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~4:25 PM - 4:50 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~3:25 PM - 3:50 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~2:25 PM - 2:50 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~1:25 PM - 1:50 PM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~9:25 PM - 9:50 PM UTC <br />Saturday, Dec 7 2024, ~10:25 PM - 10:50 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~11:25 PM - 11:50 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~2:55 AM - 3:20 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~5:25 AM - 5:50 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~6:25 AM - 6:50 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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.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 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?
+06:37.970 How is the new behavior of M-q in prog-mode (prog-fill-reindent-defun or something like that) different from the behavior of C-M-q (indent-pp-sexp) in older Emacs versions?
+08:33.144 Q: Any plans for Emacs running in iOS?
+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="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/emacs30-nav.md b/2024/info/emacs30-nav.md
index db0453e0..633f4941 100644
--- a/2024/info/emacs30-nav.md
+++ b/2024/info/emacs30-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/writing">Emacs Writing Studio</a>
-Next by time: <a href="/2024/talks/sat-close">Saturday closing remarks</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/writing">Emacs Writing Studio</a>
+Next by track: <a href="/2024/talks/links">Unlocking linked data: replacing specialized apps with an Org-based semantic wiki</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/flp-before.md b/2024/info/flp-before.md
index fe68efbd..d9c35617 100644
--- a/2024/info/flp-before.md
+++ b/2024/info/flp-before.md
@@ -1,14 +1,9 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sat 2024-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="flp">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect stroke-width="3" x="164" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 20-min talk; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf>
+Format: 20-min talk cancelled
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="2024-12-07T16:00:00Z" end="2024-12-07T16:20:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~11:00 AM - 11:20 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~10:00 AM - 10:20 AM CST (US/Central)<br />Saturday, Dec 7 2024, ~9:00 AM - 9:20 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~8:00 AM - 8:20 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~4:00 PM - 4:20 PM UTC <br />Saturday, Dec 7 2024, ~5:00 PM - 5:20 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~6:00 PM - 6:20 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~9:30 PM - 9:50 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~12:00 AM - 12:20 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~1:00 AM - 1:20 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Status: Sorry, this talk has been cancelled
+
diff --git a/2024/info/flp-nav.md b/2024/info/flp-nav.md
index 034282f1..35ed938a 100644
--- a/2024/info/flp-nav.md
+++ b/2024/info/flp-nav.md
@@ -1,7 +1,4 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/rust">An experimental Emacs core in Rust</a>
-Next by time: <a href="/2024/talks/p-search">p-search: a local search engine in Emacs</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
-</div>
+</div> \ No newline at end of file
diff --git a/2024/info/guile-after.md b/2024/info/guile-after.md
index 7ffcb322..8145932f 100644
--- a/2024/info/guile-after.md
+++ b/2024/info/guile-after.md
@@ -1,7 +1,528 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [robin@terpri.org](mailto:robin@terpri.org?subject=Comment%20for%20EmacsConf%202023%20guile%3A%20Beguiling%20Emacs%3A%20Guile-Emacs%20relaunched%21)
+<div class="transcript transcript-mainVideo"><a name="guile-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hello everyone. I'm Robin Templeton,""" start="00:00:00.000" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and I'm going to talk about Emacs Beguiled""" start="00:00:03.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and recent progress on the Guile-Emacs project.""" start="00:00:05.766" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""First of all, if you're not familiar with Guile,""" start="00:00:13.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""it's an implementation of the Scheme programming language,""" start="00:00:16.450" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""which is a dialect of Lisp,""" start="00:00:19.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and in the same family as Emacs Lisp,""" start="00:00:22.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and Guile is GNU's official extension language.""" start="00:00:24.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The goal of the Guile-Emacs project""" start="00:00:28.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""is to use Guile as the basis for Emacs's Lisp support.""" start="00:00:30.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""It has two main components:""" start="00:00:34.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""a new Emacs Lisp compiler built on top of Guile,""" start="00:00:37.133" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and a variant of Emacs""" start="00:00:41.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""in which the built-in Lisp implementation""" start="00:00:42.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""is entirely replaced with Guile Elisp.""" start="00:00:45.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We expect the combination of these two projects""" start="00:00:49.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to have several benefits. One is improved performance.""" start="00:00:52.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Another is increased expressiveness for Elisp""" start="00:00:57.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and making it easier to extend""" start="00:01:00.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and experiment with the language.""" start="00:01:04.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Finally, it will reduce""" start="00:01:07.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Emacs's reliance on C for two reasons.""" start="00:01:08.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Guile will be responsible for the language implementation,""" start="00:01:12.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""so Emacs will no longer have to include a Lisp interpreter.""" start="00:01:16.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""It will also become possible""" start="00:01:21.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to implement much more of Emacs in Lisp""" start="00:01:23.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""than is currently feasible.""" start="00:01:25.683" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Of course, this raises the question of""" start="00:01:29.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""why Guile is suitable for this project.""" start="00:01:31.133" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""And we chose Guile for a few reasons.""" start="00:01:34.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Guile is primarily a Scheme implementation,""" start="00:01:36.683" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""but it also has built-in support for multiple languages""" start="00:01:39.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""using its compiler tower.""" start="00:01:42.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""To add support for a new language to Guile,""" start="00:01:43.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""you only have to write a compiler""" start="00:01:46.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""from the source language to Tree-IL,""" start="00:01:50.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""which is essentially a low-level,""" start="00:01:52.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""minimal representation of Scheme.""" start="00:01:55.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""All of Guile's compiler optimizations""" start="00:01:58.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""occur at the Tree-IL layer or lower,""" start="00:02:01.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""so you don't need to worry""" start="00:02:04.450" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""about the lower-level details of the compiler""" start="00:02:06.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""when initially implementing your language.""" start="00:02:09.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Guile also has some Lisp features""" start="00:02:12.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""that are very rare in Scheme implementations.""" start="00:02:14.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""For example, it has a nil value""" start="00:02:18.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""that counts as both false and an empty list,""" start="00:02:20.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""just like in Elisp,""" start="00:02:23.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and it also has a version of the Common Lisp Object System""" start="00:02:25.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and its metaobject protocol, which is called GOOPS.""" start="00:02:30.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The idea of Guile-Emacs has a pretty long history,""" start="00:02:37.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""going back at least three decades.""" start="00:02:40.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""There have been about""" start="00:02:43.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""half a dozen previous implementation attempts.""" start="00:02:44.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But the current iteration began with""" start="00:02:48.000" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""a series of six Summer of Code internships:""" start="00:02:49.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Daniel Kraft's in 2009,""" start="00:02:52.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and then my internships from 2010 to 2014.""" start="00:02:56.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""My basic implementation strategy""" start="00:03:01.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""was pretty straightforward.""" start="00:03:03.000" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""I implemented a core subset of Elisp,""" start="00:03:05.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""which was enough to run some batch mode programs""" start="00:03:07.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""outside of Emacs.""" start="00:03:10.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""In Emacs, I modified the garbage collector""" start="00:03:12.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and the data structures for Lisp objects""" start="00:03:15.283" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to use their libguile equivalents.""" start="00:03:18.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""I replaced Emacs' Lisp evaluator""" start="00:03:23.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""with the one provided by Guile Elisp.""" start="00:03:26.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""After a little over a year of work,""" start="00:03:32.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""at the end of the 2014 internship,""" start="00:03:34.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""I ended up with a fully functional prototype of Guile-Emacs.""" start="00:03:37.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""It used Guile Elisp alone as its Lisp implementation""" start="00:03:44.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and was completely compatible with Emacs functionality""" start="00:03:48.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and with external extensions.""" start="00:03:53.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""One caveat was that performance was pretty bad,""" start="00:03:56.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""because I was focused on correctness,""" start="00:03:59.450" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as well as ease of integration with the Emacs C code.""" start="00:04:03.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But it was nonetheless a major milestone for the project.""" start="00:04:07.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Let's take just a moment to look at Guile-Elisp.""" start="00:04:11.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""For starters, we have access to Guile modules.""" start="00:04:19.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""If we call Guile's <i>version</i> function,""" start="00:04:23.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""we can see that we're running under Guile 3.0.""" start="00:04:25.133" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We have access to some of the numeric tower""" start="00:04:30.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""via the arithmetic functions. We also have multiple values.""" start="00:04:33.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We have to be careful to use Guile's <i>values</i> procedure here,""" start="00:04:39.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""not the CL library's,""" start="00:04:43.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""but you can see that this works properly""" start="00:04:46.683" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""rather than being an emulation.""" start="00:04:48.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Finally, we have tail call elimination.""" start="00:04:51.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Naturally, we're going to use factorial to demonstrate it.""" start="00:04:54.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""If <i>n</i> is zero, return the answer,""" start="00:05:02.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""else recurse with <i>n</i> less one and <i>n</i> times <i>a</i>.""" start="00:05:05.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Of course, this definition works correctly,""" start="00:05:14.283" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""but it gets more interesting""" start="00:05:16.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""if we communicate the answer with an error,""" start="00:05:18.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""in order to look at a backtrace.""" start="00:05:25.100" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""You can see here that there are""" start="00:05:29.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""no calls to <i>fact</i> visible in between""" start="00:05:32.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""the request to evaluate""" start="00:05:35.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and the error communicating the answer.""" start="00:05:37.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""That's because this tail call""" start="00:05:42.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""has been optimized into effectively a goto.""" start="00:05:44.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""This is essential for any kind""" start="00:05:48.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""of serious functional programming.""" start="00:05:54.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""That's a peek at Guile-Elisp.""" start="00:06:00.116" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""In 2015, I left university to go work on web technologies,""" start="00:06:03.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and the project was dormant for a very long time.""" start="00:06:08.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But that's been changing recently.""" start="00:06:11.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""During the last few months,""" start="00:06:13.450" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""I've been working with Larry Valkama""" start="00:06:16.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to rebase Guile-Emacs""" start="00:06:17.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""onto the development branch of upstream Emacs,""" start="00:06:20.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""including the past decade's worth of upstream development.""" start="00:06:24.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""What we've ended up with is a series of""" start="00:06:29.683" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""rebases onto different versions of Emacs.""" start="00:06:34.267" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The older ones tend to work pretty well.""" start="00:06:37.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The newer ones have increasingly bad problems""" start="00:06:39.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""where they haven't been properly adjusted""" start="00:06:46.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""for changes in the Emacs implementation.""" start="00:06:49.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But we do have by now a version of Emacs 30""" start="00:06:52.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""which boots correctly""" start="00:06:56.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and can be used for interactive debugging,""" start="00:06:57.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as well as the ability to bisect the revisions of Emacs""" start="00:06:59.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and find out where regressions were introduced.""" start="00:07:06.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Our immediate goal is of course to complete the rebase.""" start="00:07:10.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""At the same time,""" start="00:07:14.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""we want to improve Guile Elisp's performance""" start="00:07:16.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to at least be competitive with ordinary Emacs Lisp.""" start="00:07:20.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Just to characterize the performance situation,""" start="00:07:24.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Guile Elisp is usually about half""" start="00:07:29.283" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as fast as ordinary Elisp,""" start="00:07:32.766" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""while Guile Scheme is quite often""" start="00:07:34.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""an order of magnitude faster than ordinary Elisp,""" start="00:07:37.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and that's based on micro benchmarks""" start="00:07:41.350" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""like the Gabriel benchmarks.""" start="00:07:43.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But there's clearly a lot of room""" start="00:07:46.233" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to improve our compiler's output.""" start="00:07:50.900" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""If you want to mark your calendars,""" start="00:07:53.350" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""we're expecting to have a usable version of Guile-Emacs 30""" start="00:07:56.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""out sometime next spring.""" start="00:08:00.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We're also going to put some effort""" start="00:08:03.116" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""into either extracting old work""" start="00:08:05.450" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""or doing new work that could be contributed upstream.""" start="00:08:09.100" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""On the Guile side, we'll probably start out with""" start="00:08:12.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""optimizing the dynamic binding facilities,""" start="00:08:16.750" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""which are used very seldom in Scheme,""" start="00:08:21.233" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""but are used all the time in traditional Lisp dialects.""" start="00:08:23.450" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""On the Emacs side, we'll be working initially""" start="00:08:27.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""on abstracting away the details of the Lisp implementation""" start="00:08:31.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""where they're not relevant.""" start="00:08:35.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""And that will clean up the Emacs code base a bit.""" start="00:08:37.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""It'll make it easier to integrate Emacs and Guile Elisp.""" start="00:08:40.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""It will probably be helpful for anyone""" start="00:08:45.000" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""who is working on ordinary Elisp on their own.""" start="00:08:47.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We're also going to be adding new features to Emacs Lisp.""" start="00:08:51.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We've seen a few of them already.""" start="00:08:57.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The numeric tower, tail call optimization,""" start="00:08:59.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Common Lisp compatibility.""" start="00:09:02.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We're also going to provide access to Fibers,""" start="00:09:04.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""which is a Guile library based on ideas from Concurrent ML""" start="00:09:07.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""that provides much more powerful facilities""" start="00:09:12.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""for concurrent and parallel programming""" start="00:09:15.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""than what Emacs currently offers.""" start="00:09:18.283" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""This plan meets Guile-Emacs' basic goals,""" start="00:09:24.666" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and it's work that we could maybe get integrated upstream""" start="00:09:32.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""in a reasonable amount of time.""" start="00:09:36.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But it's also worth considering what more we can do,""" start="00:09:38.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and what effect Guile-Emacs might have on Emacs""" start="00:09:42.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""if it becomes simply Emacs.""" start="00:09:46.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""For context, the amount of C code in Emacs""" start="00:09:50.666" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""has increased by around 50% in the last decade,""" start="00:09:54.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and now it constitutes around a quarter of the code base.""" start="00:09:57.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""C can be a bit of a barrier""" start="00:09:59.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to customizing and extending Emacs.""" start="00:10:06.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""For example, there are about 1500 C subroutines.""" start="00:10:11.000" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Around 500 are used in C code,""" start="00:10:15.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as well as available to Lisp code,""" start="00:10:19.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and being written in C means""" start="00:10:23.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""that they can't be practically redefined.""" start="00:10:25.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""The use of C can become a barrier to extending Emacs""" start="00:10:28.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""or customizing its behavior.""" start="00:10:34.450" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We might consider writing""" start="00:10:36.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as much of Emacs as possible in Lisp.""" start="00:10:39.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""One way to speed up this process""" start="00:10:42.916" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""would be to provide a Common Lisp implementation for Guile.""" start="00:10:46.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Note that between Guile Elisp and Guile Scheme,""" start="00:10:49.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""we have all of the essential ingredients""" start="00:10:54.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""for a Common Lisp environment. We can also share code""" start="00:10:57.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""with other Common Lisp implementations""" start="00:11:03.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""such as SBCL and SICL.""" start="00:11:06.016" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Overall, the duration of the project""" start="00:11:10.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""will be better measured in months rather than years,""" start="00:11:13.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""despite Common Lisp's reputation""" start="00:11:16.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""for being a large language.""" start="00:11:19.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""This could have multiple uses, of course.""" start="00:11:21.216" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""It could be a model for future improvements to Elisp,""" start="00:11:24.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""because Elisp and CL can interact directly without problems.""" start="00:11:29.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""And it would be very easy for Elisp""" start="00:11:34.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to borrow language features from Common Lisp.""" start="00:11:38.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But for the purpose of a C to Lisp transition,""" start="00:11:41.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""it would also provide us with instant access""" start="00:11:46.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to a huge number of high-quality libraries""" start="00:11:50.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""for things that""" start="00:11:52.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Guile is not necessarily equipped to deal with,""" start="00:11:54.850" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""such as access to low-level Windows APIs,""" start="00:11:58.133" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as well as lots of other libraries,""" start="00:12:01.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""such as interfaces to GUI toolkits""" start="00:12:05.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""for a variety of operating systems.""" start="00:12:10.000" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""At a certain point, this has technical advantages.""" start="00:12:13.866" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""If most of Emacs is written in Lisp,""" start="00:12:20.566" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""then we could consider using Guile Hoot""" start="00:12:24.216" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""to compile Emacs to WebAssembly,""" start="00:12:27.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""making it available perhaps in web browsers""" start="00:12:29.683" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""or on systems with the WebAssembly System Interface.""" start="00:12:33.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""But it would also be a great victory""" start="00:12:37.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""for practical software freedom.""" start="00:12:41.283" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""That's the idea that Freedom One,""" start="00:12:43.050" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""the freedom to study and modify programs,""" start="00:12:45.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""should not just be legally and technically possible,""" start="00:12:48.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""but should be actively encouraged""" start="00:12:51.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""by our computing environments.""" start="00:12:53.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Emacs is really one of the archetypal examples of this,""" start="00:12:57.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""but we can and should go further.""" start="00:13:00.133" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""When Emacs is implemented primarily in Lisp,""" start="00:13:03.216" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""the entirety of the system""" start="00:13:08.400" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""will be transparent to examination""" start="00:13:11.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and open to modification.""" start="00:13:14.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Every part of Emacs will be instantaneously inspectable,""" start="00:13:16.083" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""redefinable, and debuggable.""" start="00:13:21.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""This will be a fundamental change""" start="00:13:25.016" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""in what is possible to do with Emacs extensions.""" start="00:13:28.283" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""For example, one experiment I'd be interested in""" start="00:13:32.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""is using the Common Lisp Interface Manager""" start="00:13:37.000" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as the basis for Emacs's user interface.""" start="00:13:40.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Screwlisp is giving a talk about McCLIM later today,""" start="00:13:43.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""but for present purposes,""" start="00:13:48.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""just think of it as a super-powered version""" start="00:13:53.250" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""of Emacs's concept of interactive functions.""" start="00:13:55.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""It would be a pretty long-term project""" start="00:13:58.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""in Emacs as it currently exists,""" start="00:14:02.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""but it would be almost trivial""" start="00:14:04.800" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""if Emacs were customizable at the lowest layers via Lisp.""" start="00:14:06.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We'll certainly be looking at the practicality""" start="00:14:12.650" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""of these kinds of changes""" start="00:14:19.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as we continue developing Guile-Emacs.""" start="00:14:20.966" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Finally, how can you get involved""" start="00:14:25.133" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""with and support Guile Emacs?""" start="00:14:30.033" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""One way to help is just by trying it out""" start="00:14:32.500" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and letting us know what your experiences are like.""" start="00:14:35.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""There will be a snapshot available""" start="00:14:37.816" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""on the Codeberg project site""" start="00:14:41.483" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""of the version that I'm using to give this presentation.""" start="00:14:44.266" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""It will be available both as a Guix package""" start="00:14:47.000" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and as a portable tarball. This will be more interesting""" start="00:14:51.133" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""as we get closer to a complete rebase.""" start="00:14:55.933" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We're also always happy to talk to potential contributors""" start="00:15:00.366" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""or potential collaborators from other projects.""" start="00:15:06.533" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""We can always use bug reports,""" start="00:15:12.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and we're interested in what kind of features""" start="00:15:16.450" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""people actually want to see in Guile-Emacs.""" start="00:15:18.883" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""Guile-Emacs is also being developed""" start="00:15:21.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""by a small worker cooperative,""" start="00:15:25.300" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""so donations are a pretty direct way to support the project.""" start="00:15:27.916" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""If you do nothing else, I recommend going to the website""" start="00:15:33.200" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and subscribing to our mailing lists""" start="00:15:37.166" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""so that you can keep up with news on the project.""" start="00:15:40.733" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""If you're watching this at EmacsConf,""" start="00:15:45.600" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""there will be a Q&A session immediately following this,""" start="00:15:47.333" video="mainVideo-guile" id="subtitle"]]
+[[!template text="""and thanks for watching!""" start="00:15:50.483" video="mainVideo-guile" id="subtitle"]]
+
+</div>
+
+Captioner: sachac and robin
+
+<div class="transcript transcript-qanda"><a name="guile-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""All right. Hey, thanks for bearing with us there. We had a""" start="00:00:00.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""couple of bumps in the road, a cross between a couple of""" start="00:00:08.120" video="qanda-guile" id="subtitle"]]
+[[!template text="""different versions of our program that we deliver here,""" start="00:00:11.240" video="qanda-guile" id="subtitle"]]
+[[!template text="""different ways that we bring this stream together between""" start="00:00:13.480" video="qanda-guile" id="subtitle"]]
+[[!template text="""the recorded content that that speakers are putting""" start="00:00:17.960" video="qanda-guile" id="subtitle"]]
+[[!template text="""together in advance in the live content, such as what you're""" start="00:00:22.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""seeing right here. So thanks go to Sacha and Leo, and""" start="00:00:26.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""everybody behind the stages gluing it all together. And""" start="00:00:31.040" video="qanda-guile" id="subtitle"]]
+[[!template text="""we're back here now, and I'm speaking with Robin, who us""" start="00:00:34.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""ready to take on some of your questions and address some of""" start="00:00:40.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""the comments over here on the etherpad. If you want to jump in""" start="00:00:42.800" video="qanda-guile" id="subtitle"]]
+[[!template text="""there, there's links in the chat. And thanks so much, Robin,""" start="00:00:46.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""for your talk. And it's also been a pleasure chatting with""" start="00:00:51.320" video="qanda-guile" id="subtitle"]]
+[[!template text="""you just a little bit over the last couple of months on IRC.""" start="00:00:54.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""Yeah, absolutely. Great meeting you.""" start="00:00:57.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""All right. All right, everyone. I think I am streaming now.""" start="00:01:33.320" video="qanda-guile" id="subtitle"]]
+[[!template text="""So let's look at it. Let's see. I see the IRC scrolling. So""" start="00:01:37.680" video="qanda-guile" id="subtitle"]]
+[[!template text="""let's see where that's going. Yes, the Common Lisp is what I""" start="00:01:42.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""thought would piss people off. And because it's not part of""" start="00:01:47.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""either community, but I think it would be a good compromise""" start="00:01:50.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""for building a Lisp into a language that's more suitable for""" start="00:01:54.240" video="qanda-guile" id="subtitle"]]
+[[!template text="""building large systems like the kind that we are building in""" start="00:01:57.840" video="qanda-guile" id="subtitle"]]
+[[!template text="""Emacs today. I also left out an important part of the talk,""" start="00:02:01.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""which is part of the motivation for transitioning from C to""" start="00:02:07.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""Lisp. And that's the performance characteristics""" start="00:02:12.080" video="qanda-guile" id="subtitle"]]
+[[!template text="""fundamentally change when you get a modern and high""" start="00:02:15.600" video="qanda-guile" id="subtitle"]]
+[[!template text="""performance Lisp system involved. it starts getting less""" start="00:02:19.400" video="qanda-guile" id="subtitle"]]
+[[!template text="""practical to just call out to C to speed up every operation.""" start="00:02:23.560" video="qanda-guile" id="subtitle"]]
+[[!template text="""Among other things, you lose the ability to use more""" start="00:02:27.800" video="qanda-guile" id="subtitle"]]
+[[!template text="""advanced control structures, like the limited""" start="00:02:31.560" video="qanda-guile" id="subtitle"]]
+[[!template text="""continuations. And you also have to pay the overhead of""" start="00:02:34.760" video="qanda-guile" id="subtitle"]]
+[[!template text="""calling out to our foreign function. So it gets to be an""" start="00:02:40.040" video="qanda-guile" id="subtitle"]]
+[[!template text="""increasingly better deal to optimize your list""" start="00:02:43.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""implementation and provide ways for building faster list""" start="00:02:47.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""programs, such as type annotations, once you've gotten""" start="00:02:52.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""over a certain threshold of performance.""" start="00:02:55.880" video="qanda-guile" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:03:01.480" video="qanda-guile" id="subtitle"]]</div>[[!template text="""I'm going to look at the pad. Here we go. The first question is""" start="00:03:01.480" video="qanda-guile" id="subtitle"]]
+[[!template text="""about fibers and whether they help with making Elisp""" start="00:03:07.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""concurrent in terms of its data structures. Yes, that's""" start="00:03:12.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""absolutely correct. Fibers by themselves do not provide""" start="00:03:18.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""thread safety for any of the existing Emacs data""" start="00:03:23.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""structures. What they are useful for is building things""" start="00:03:26.800" video="qanda-guile" id="subtitle"]]
+[[!template text="""that don't use Emacs data structures, say a network client""" start="00:03:32.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""that reads input from a stream or in scheme, a port or a stream""" start="00:03:38.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""instead of a buffer. And we can also take a look at options for""" start="00:03:44.560" video="qanda-guile" id="subtitle"]]
+[[!template text="""making more Emacs features concurrency safe or thread""" start="00:03:49.680" video="qanda-guile" id="subtitle"]]
+[[!template text="""safe. For example, we could introduce the idea of a thread""" start="00:03:54.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""local buffer that didn't require locks for sharing between""" start="00:03:58.080" video="qanda-guile" id="subtitle"]]
+[[!template text="""different threads. And I'm not sure how that would develop,""" start="00:04:03.040" video="qanda-guile" id="subtitle"]]
+[[!template text="""but I'm sure the Emacs maintainers already have some ideas""" start="00:04:09.240" video="qanda-guile" id="subtitle"]]
+[[!template text="""in this direction. Fibers will basically provide a""" start="00:04:12.320" video="qanda-guile" id="subtitle"]]
+[[!template text="""high-performance system that you can use apart from""" start="00:04:17.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""ordinary Emacs-less constructs.""" start="00:04:22.160" video="qanda-guile" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you have a rough idea of how much of Guile is written in C?""" start="00:04:28.080" video="qanda-guile" id="subtitle"]]</div>[[!template text="""Let's see. We have another question. Emacs is roughly 25% C.""" start="00:04:28.080" video="qanda-guile" id="subtitle"]]
+[[!template text="""How much of Guile is in C?""" start="00:04:34.840" video="qanda-guile" id="subtitle"]]
+[[!template text="""Well, part of my point about C is not so much that there, well,""" start="00:04:38.840" video="qanda-guile" id="subtitle"]]
+[[!template text="""obviously, I phrased it a little provocatively, but the""" start="00:04:45.680" video="qanda-guile" id="subtitle"]]
+[[!template text="""problem is not so much that there is C, but that there is so""" start="00:04:50.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""much C involved in every single layer of the application.""" start="00:04:54.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""So, for example, we're limited in our ability to use tools""" start="00:05:00.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""like limit continuations, which can be used to express""" start="00:05:04.560" video="qanda-guile" id="subtitle"]]
+[[!template text="""buffer local variable binding in a few dozen lines, because""" start="00:05:08.160" video="qanda-guile" id="subtitle"]]
+[[!template text="""Emacs has so much calling back and forth between guile and C,""" start="00:05:13.600" video="qanda-guile" id="subtitle"]]
+[[!template text="""due to so much basic functionality being in primitive C""" start="00:05:21.840" video="qanda-guile" id="subtitle"]]
+[[!template text="""subroutines. So that's one issue apart from the question of""" start="00:05:26.600" video="qanda-guile" id="subtitle"]]
+[[!template text="""how much is in a particular language. To answer the question""" start="00:05:34.120" video="qanda-guile" id="subtitle"]]
+[[!template text="""about Guile, Guile has about 165,000 lines of scheme code""" start="00:05:38.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""and about 160,000 lines of C code, so it's about half and""" start="00:05:45.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""half. And that shouldn't really be surprising given that it""" start="00:05:51.600" video="qanda-guile" id="subtitle"]]
+[[!template text="""is actually focused on low-level things like building a""" start="00:05:55.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""high-performance bytecode compiler, and a just-in-time""" start="00:06:00.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""compiler, and so on, as well as providing its own fairly""" start="00:06:05.080" video="qanda-guile" id="subtitle"]]
+[[!template text="""rich, but still far less complete than Emacs's standard""" start="00:06:09.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""library, in terms of Ice9 and other system libraries""" start="00:06:15.000" video="qanda-guile" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: A Common Lisp implementation for Guile sounds really cool! Is there already work on this underway?""" start="00:06:19.240" video="qanda-guile" id="subtitle"]]</div>[[!template text="""shipped with Guile. The next question is on a Common Lisp""" start="00:06:19.240" video="qanda-guile" id="subtitle"]]
+[[!template text="""implementation for Guile, and whether work on it is""" start="00:06:24.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""underway. In fact, work on it is already underway. I've been""" start="00:06:27.760" video="qanda-guile" id="subtitle"]]
+[[!template text="""working on it on and off in my spare time for a couple of years""" start="00:06:33.080" video="qanda-guile" id="subtitle"]]
+[[!template text="""now. I've gotten, I think, a couple of chapters of the""" start="00:06:36.400" video="qanda-guile" id="subtitle"]]
+[[!template text="""hyperspectin, if you want to measure it that way. But I've""" start="00:06:40.040" video="qanda-guile" id="subtitle"]]
+[[!template text="""been focusing my work more on research and on what we need to""" start="00:06:43.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""do to have a LISP environment, a polyglot LISP environment,""" start="00:06:51.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""wherein the features of Common Lisp and Scheme and Emacs""" start="00:06:57.400" video="qanda-guile" id="subtitle"]]
+[[!template text="""Lisp can all work easily and ergonomically together. So""" start="00:07:02.760" video="qanda-guile" id="subtitle"]]
+[[!template text="""this involves things like the question of Lisps having""" start="00:07:08.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""Lisp1s versus Lisp2s. That is, a Lisp1-like scheme has one""" start="00:07:13.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""namespace, like every variable is a single name that can""" start="00:07:22.080" video="qanda-guile" id="subtitle"]]
+[[!template text="""refer to one value, whereas in Lisp2s like EmacsLisp,""" start="00:07:27.600" video="qanda-guile" id="subtitle"]]
+[[!template text="""symbols can have different definitions as functions and as""" start="00:07:32.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""variables, as well as other namespaces like property""" start="00:07:37.400" video="qanda-guile" id="subtitle"]]
+[[!template text="""lists. So Kent Pittman has some interesting thoughts on""" start="00:07:41.120" video="qanda-guile" id="subtitle"]]
+[[!template text="""this that I've been looking into. Another issue is the""" start="00:07:45.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""interaction between package and module systems. So I don't""" start="00:07:51.040" video="qanda-guile" id="subtitle"]]
+[[!template text="""have really anything ready to publish just yet on this, but I""" start="00:07:57.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""have been looking into the background issues of""" start="00:08:01.840" video="qanda-guile" id="subtitle"]]
+[[!template text="""integrating this into Guile in a useful way.""" start="00:08:05.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""And let's see, one other thing I was going to mention.""" start="00:08:08.120" video="qanda-guile" id="subtitle"]]
+[[!template text="""Okay, I've lost it. But yeah, there is some work already. And""" start="00:08:15.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""if people are interested in moving Emacs in this direction,""" start="00:08:27.680" video="qanda-guile" id="subtitle"]]
+[[!template text="""then we'll certainly start working on it in earnest.""" start="00:08:30.400" video="qanda-guile" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Did switching from guile 2 to 3 give any performance benefits?""" start="00:08:34.480" video="qanda-guile" id="subtitle"]]</div>[[!template text="""Another question, did switching from Guile 2 to 3 give any""" start="00:08:34.480" video="qanda-guile" id="subtitle"]]
+[[!template text="""performance benefits? Well, honestly, we're not really""" start="00:08:41.120" video="qanda-guile" id="subtitle"]]
+[[!template text="""benchmarking stuff here because Guile Emacs has so much""" start="00:08:46.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""overhead from structuring the compiler to closely conform""" start="00:08:50.760" video="qanda-guile" id="subtitle"]]
+[[!template text="""to Emacs in terms of like even things as simple as metadata""" start="00:08:55.760" video="qanda-guile" id="subtitle"]]
+[[!template text="""layout for variable information.""" start="00:08:59.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""So I haven't actually noticed a perceptual change. I would""" start="00:09:03.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""guess based on the Gabriel benchmark results that is""" start="00:09:12.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""benefited from what somewhat from Gal 3's performance""" start="00:09:15.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""improvements but for Emacs I just don't know yet and working""" start="00:09:21.400" video="qanda-guile" id="subtitle"]]
+[[!template text="""on the compiler's code generation and lowering the""" start="00:09:27.480" video="qanda-guile" id="subtitle"]]
+[[!template text="""overhead is going to be the thing that provides the most""" start="00:09:30.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""return for improving that aspect of Gal Emacs.""" start="00:09:33.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""Let's see, I see SICL mentioned here, as well as SPCL. And it""" start="00:09:37.320" video="qanda-guile" id="subtitle"]]
+[[!template text="""could certainly help with the implementation of""" start="00:09:54.080" video="qanda-guile" id="subtitle"]]
+[[!template text="""Commonwealth and Guile, because a lot of the basic stuff is""" start="00:09:56.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""just providing a new interface to some bit of""" start="00:10:01.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""functionality. Like the sequence library, it's mostly""" start="00:10:05.560" video="qanda-guile" id="subtitle"]]
+[[!template text="""stuff that we already have through SR5 and so on. The""" start="00:10:08.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""difficult, well, not the difficult but the time consuming""" start="00:10:13.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""parts are going to be all the little DSL sitcom on this path""" start="00:10:16.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""packed up inside it like pretty printing format loop and so""" start="00:10:21.600" video="qanda-guile" id="subtitle"]]
+[[!template text="""on. It's for those high-level features that I think we could""" start="00:10:27.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""potentially share code with other Common Lisp""" start="00:10:32.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""implementations. And Common Lisp implementations do tend""" start="00:10:34.960" video="qanda-guile" id="subtitle"]]
+[[!template text="""to be permissively licensed, SPCL's public domain, for""" start="00:10:39.040" video="qanda-guile" id="subtitle"]]
+[[!template text="""example, so there's no barrier to sharing code with them.""" start="00:10:43.240" video="qanda-guile" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you know if the Emacs maintainers are interested in switching to Guile as the engine for Emacs Lisp?""" start="00:10:46.440" video="qanda-guile" id="subtitle"]]</div>[[!template text="""There's another question about whether the Emacs""" start="00:10:46.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""maintainers are interested in switching to Guile as the""" start="00:10:52.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""engine for Emacs Lisp. I can't speak for the current""" start="00:10:55.680" video="qanda-guile" id="subtitle"]]
+[[!template text="""maintainers. I can say that people have talked to previous""" start="00:10:59.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""Emacs maintainers about the whole idea, and their attitude""" start="00:11:05.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""was generally cautiously optimistic. As in, it's not""" start="00:11:10.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""something they, it's somewhat political, they didn't want""" start="00:11:15.480" video="qanda-guile" id="subtitle"]]
+[[!template text="""to get into it, but they didn't think that it was a bad idea,""" start="00:11:18.800" video="qanda-guile" id="subtitle"]]
+[[!template text="""and they wanted to know more about how it might evolve in the""" start="00:11:23.480" video="qanda-guile" id="subtitle"]]
+[[!template text="""future. I can comment that Eli Zaretsky, who I believe is the""" start="00:11:25.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""current Emacs maintainer, is very concerned about""" start="00:11:31.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""cross-platform compatibility. And so if I can guess at his""" start="00:11:36.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""priorities correctly, I think that that's something that""" start="00:11:44.680" video="qanda-guile" id="subtitle"]]
+[[!template text="""we'll have to make sure is rock solid before we propose any""" start="00:11:48.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""kind of upstreaming of Gala Emacs. but in general""" start="00:11:52.600" video="qanda-guile" id="subtitle"]]
+[[!template text="""maintainers have been cautious but curious. So I just""" start="00:11:58.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""wanted to break in and note at this point that as lives I""" start="00:12:03.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""didn't sorry I couldn't do so more gracefully while we were""" start="00:12:06.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""still on stream but I wanted to let you know that just as of 10""" start="00:12:09.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""seconds ago or so we've had to cut away into our next talk but""" start="00:12:13.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""we can keep going here as long as we like. Okay, let's wrap up.""" start="00:12:17.400" video="qanda-guile" id="subtitle"]]
+[[!template text="""There's only a couple questions left on the pad, so I'll""" start="00:12:22.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""answer those, and then I'll be available on IRC. So, the next""" start="00:12:25.400" video="qanda-guile" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think guile-emacs will be able to use or (collaborate with) some of the other awesome projects around Emacs Lisp?""" start="00:12:30.000" video="qanda-guile" id="subtitle"]]</div>[[!template text="""question is whether Guile Emacs will be able to collaborate""" start="00:12:30.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""with projects like Gypsum and""" start="00:12:33.320" video="qanda-guile" id="subtitle"]]
+[[!template text="""the native compilation projects or the pre-scheme""" start="00:12:35.960" video="qanda-guile" id="subtitle"]]
+[[!template text="""efforts. Oh, yes, that is one of the things I forgot to bring""" start="00:12:44.320" video="qanda-guile" id="subtitle"]]
+[[!template text="""up in my talk. So, first of all, Gypsum is approaching a""" start="00:12:48.040" video="qanda-guile" id="subtitle"]]
+[[!template text="""similar idea from a different direction. And we clearly""" start="00:12:53.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""have a different focus. My focus is on improving Emacs Lisp""" start="00:12:58.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""and making Emacs itself better by integrating Guile Elisp""" start="00:13:03.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""and Emacs, rather than replacing eLisp or deprecating it in""" start="00:13:09.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""any way. But given gypsum's requirements, I do think that we""" start="00:13:15.160" video="qanda-guile" id="subtitle"]]
+[[!template text="""could share a lot of code required for emulating basic Emacs""" start="00:13:20.160" video="qanda-guile" id="subtitle"]]
+[[!template text="""functionality. And this could even become interesting if""" start="00:13:26.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""we get to the point of rewriting parts of Emacs in Lisp. With""" start="00:13:29.840" video="qanda-guile" id="subtitle"]]
+[[!template text="""respect to the native compilation effort, I'm familiar""" start="00:13:35.800" video="qanda-guile" id="subtitle"]]
+[[!template text="""with it. I'm not that impressed with the results of it. It's a""" start="00:13:41.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""very impressive effort, but as far as I can tell, it's""" start="00:13:45.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""accelerating a bytecode interpreter that just simply has""" start="00:13:52.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""an out-of-date design, to be quite blunt. It's possible""" start="00:13:57.240" video="qanda-guile" id="subtitle"]]
+[[!template text="""that Emacs's JIT has ideas that Guile should adopt, like""" start="00:14:02.720" video="qanda-guile" id="subtitle"]]
+[[!template text="""perhaps libgccjit might perhaps be better than GNU""" start="00:14:08.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""Lightning, which is a relatively simple JIT that Guile""" start="00:14:14.040" video="qanda-guile" id="subtitle"]]
+[[!template text="""uses.""" start="00:14:17.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""But it doesn't have to have a direct relationship to Guile""" start="00:14:17.640" video="qanda-guile" id="subtitle"]]
+[[!template text="""Emacs. And as far as pre-scheme goes, I have been watching""" start="00:14:25.840" video="qanda-guile" id="subtitle"]]
+[[!template text="""Flat Watson's work on pre-scheme with great interest""" start="00:14:31.160" video="qanda-guile" id="subtitle"]]
+[[!template text="""because Scheme 48 used to be my favorite implementation.""" start="00:14:36.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""And I do think that it could be, it's a tool that we should look""" start="00:14:40.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""at when we're thinking about moving functionality into""" start="00:14:44.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""Lisp and could certainly make it easier to upstream some of""" start="00:14:47.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""the work we may end up doing.""" start="00:14:53.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""All right, do we have more questions?""" start="00:14:54.520" video="qanda-guile" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: SBCL, ...You mentioned Robert Strandh's SICL along with SBCL---does that work help with the implementation of CL in Guile?""" start="00:15:04.200" video="qanda-guile" id="subtitle"]]</div>[[!template text="""There's a question about SICL and SBCL. I think I answered""" start="00:15:04.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""that earlier. It should help us implement Common Lisp when""" start="00:15:13.160" video="qanda-guile" id="subtitle"]]
+[[!template text="""it comes to high-level features and the various large""" start="00:15:17.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""subcomponents of Common Lisp. Another important factor is""" start="00:15:25.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""that Guile already has decent support for the Common Lisp""" start="00:15:28.760" video="qanda-guile" id="subtitle"]]
+[[!template text="""object system. Without that, it would be far more""" start="00:15:32.280" video="qanda-guile" id="subtitle"]]
+[[!template text="""difficult. But I do expect that we can share code with other""" start="00:15:35.800" video="qanda-guile" id="subtitle"]]
+[[!template text="""Common Lisp implementations. I've personally rated""" start="00:15:41.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""Common Lisp compiler code when working on Guile Hoot, for""" start="00:15:44.800" video="qanda-guile" id="subtitle"]]
+[[!template text="""example. So there are definitely places where they can""" start="00:15:49.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""contribute.""" start="00:15:52.960" video="qanda-guile" id="subtitle"]]
+[[!template text="""Regarding the Hoot project and its relationship to""" start="00:15:54.040" video="qanda-guile" id="subtitle"]]
+[[!template text="""Galimax, it's a purely speculative thing. First of all,""" start="00:16:02.840" video="qanda-guile" id="subtitle"]]
+[[!template text="""Hoot is only tested on Scheme-to-WebAssembly""" start="00:16:11.080" video="qanda-guile" id="subtitle"]]
+[[!template text="""compilations. I've heard some suggestions that some uses""" start="00:16:17.080" video="qanda-guile" id="subtitle"]]
+[[!template text="""of Tree.io may not be compatible with the Hoot compiler. I'm""" start="00:16:22.600" video="qanda-guile" id="subtitle"]]
+[[!template text="""not sure if that's the case or not.""" start="00:16:26.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""But it is a complete enough project that if Emacs is, say, 90%""" start="00:16:30.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""Lisp, there's only a few thousand lines of C code to""" start="00:16:41.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""implement, then it would be entirely practical to compile""" start="00:16:45.120" video="qanda-guile" id="subtitle"]]
+[[!template text="""Emacs WebAssembly, as long as we had a back end, like one""" start="00:16:49.160" video="qanda-guile" id="subtitle"]]
+[[!template text="""based on the browser's document object model, or some sort""" start="00:16:54.160" video="qanda-guile" id="subtitle"]]
+[[!template text="""of graphical interface through WASI. And that may have some""" start="00:16:58.120" video="qanda-guile" id="subtitle"]]
+[[!template text="""interesting applications for portability to unusual""" start="00:17:04.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""platforms. It may even bring performance advantages in""" start="00:17:07.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""cases where the WebAssembly implementation is connected""" start="00:17:11.360" video="qanda-guile" id="subtitle"]]
+[[!template text="""to a tracing just-in-time compiler, because that may be""" start="00:17:18.960" video="qanda-guile" id="subtitle"]]
+[[!template text="""more appropriate to the high level of dynamism the Emacs""" start="00:17:22.760" video="qanda-guile" id="subtitle"]]
+[[!template text="""list has than the kind of simple template JITs that both""" start="00:17:26.840" video="qanda-guile" id="subtitle"]]
+[[!template text="""Emacs and Guile are using.""" start="00:17:32.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""What a fascinating point. Just to break into active""" start="00:17:34.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""listening a little so this doesn't, to you, feel like you're""" start="00:17:39.800" video="qanda-guile" id="subtitle"]]
+[[!template text="""talking to yourself. I can see from chat and the questions""" start="00:17:44.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""still coming in, you know, comments. You know, it isn't, but""" start="00:17:46.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""I just want you to be able to hear and feel that. Yeah, great,""" start="00:17:51.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""great point there. All right. Thank you. And yes, if there""" start="00:17:55.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""are more questions, keep throwing them at me. I should""" start="00:18:00.680" video="qanda-guile" id="subtitle"]]
+[[!template text="""probably also mention I will have to jump out myself, but the""" start="00:18:04.680" video="qanda-guile" id="subtitle"]]
+[[!template text="""recording will automatically end when we all jump out or""" start="00:18:08.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""just drop a note anywhere, ping me, whatever. And I'll come""" start="00:18:10.800" video="qanda-guile" id="subtitle"]]
+[[!template text="""along and shut off the recording and we'll trim it up before""" start="00:18:15.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""we publish it. I'm looking forward to reading through""" start="00:18:18.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""anything I do miss. Thank you. Sounds good.""" start="00:18:21.880" video="qanda-guile" id="subtitle"]]
+[[!template text="""All right, I'm not seeing changes in the etherpad. So I'm""" start="00:18:30.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""going to close this in maybe 30 seconds if there are no more""" start="00:19:08.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""additions. Thanks, everyone, for the interesting and very""" start="00:19:15.000" video="qanda-guile" id="subtitle"]]
+[[!template text="""pointed questions on some of the most significant areas. I""" start="00:19:21.160" video="qanda-guile" id="subtitle"]]
+[[!template text="""appreciate everyone's feedback. I'm glad this provoked so""" start="00:19:26.400" video="qanda-guile" id="subtitle"]]
+[[!template text="""much curiosity in people.""" start="00:19:31.920" video="qanda-guile" id="subtitle"]]
+[[!template text="""Thank you, janneke.""" start="00:19:33.680" video="qanda-guile" id="subtitle"]]
+[[!template text="""All right, I think we are done with the Q&A session, so I'm""" start="00:19:44.520" video="qanda-guile" id="subtitle"]]
+[[!template text="""going to close this BBB and we can continue with the rest of""" start="00:19:51.440" video="qanda-guile" id="subtitle"]]
+[[!template text="""EmacsConf.""" start="00:19:57.200" video="qanda-guile" id="subtitle"]]
+[[!template text="""You are currently the only person in this conference.""" start="00:19:58.720" video="qanda-guile" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [robin@terpri.org](mailto:robin@terpri.org?subject=Comment%20for%20EmacsConf%202023%20guile%3A%20Beguiling%20Emacs%3A%20Guile-Emacs%20relaunched%21)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/guile-before.md b/2024/info/guile-before.md
index 32e9538c..d3d7099f 100644
--- a/2024/info/guile-before.md
+++ b/2024/info/guile-before.md
@@ -1,18 +1,27 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 16-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
+
+
-The following image shows where the talk is in the schedule for Sat 2024-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="guile">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/2024/talks/guile" title="Beguiling Emacs: Guile-Emacs relaunched!" data-slug="guile"><title> 1:25- 1:45 Beguiling Emacs: Guile-Emacs relaunched!</title><rect stroke-width="3" x="363" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 20-min talk; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf>
-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="2024-12-07T18:25:00Z" end="2024-12-07T18:45:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~1:25 PM - 1:45 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~12:25 PM - 12:45 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~11:25 AM - 11:45 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~10:25 AM - 10:45 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~6:25 PM - 6:45 PM UTC <br />Saturday, Dec 7 2024, ~7:25 PM - 7:45 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~8:25 PM - 8:45 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~11:55 PM - 12:15 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~2:25 AM - 2:45 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~3:25 AM - 3:45 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/dev/">Find out how to watch and participate</a></strong></div>
+# Talk
+<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 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?
+08:34.480 Q: Did switching from guile 2 to 3 give any performance benefits?
+10:46.440 Q: Do you know if the Emacs maintainers are interested in switching to Guile as the engine for Emacs Lisp?
+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="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/guile-nav.md b/2024/info/guile-nav.md
index e5de6fae..5163f06b 100644
--- a/2024/info/guile-nav.md
+++ b/2024/info/guile-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/theme">My journey of finding and creating the “perfect” Emacs theme</a>
-Next by time: <a href="/2024/talks/water">Watering my (digital) plant with Emacs timers</a>
-Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2024/watch/dev">Watch</a></strong>
+Previous by track: <a href="/2024/talks/julia">Exploring shared philosophies in Julia and Emacs</a>
+Next by track: <a href="/2024/talks/secrets">Committing secrets with git using sops-mode</a>
+Track: <span class="sched-track Development">Development</span>
</div>
diff --git a/2024/info/gypsum-after.md b/2024/info/gypsum-after.md
index 9f7ec514..2cb0cbd8 100644
--- a/2024/info/gypsum-after.md
+++ b/2024/info/gypsum-after.md
@@ -1,7 +1,630 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-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)
+<div class="transcript transcript-mainVideo"><a name="gypsum-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hi, my name is Ramin Honary,""" start="00:00:00.000" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and I'm here to talk to you today""" start="00:00:02.781" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""about my clone of Emacs and Emacs Lisp that I've written in""" start="00:00:04.481" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Scheme so far.""" start="00:00:08.941" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So I am an Emacs enthusiast since 2017,""" start="00:00:12.981" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""currently employed as a full stack developer,""" start="00:00:19.103" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""mostly working with Python and JavaScript,""" start="00:00:22.665" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""although my true love is functional""" start="00:00:25.226" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""programming, especially Haskell, and Scheme. I started""" start="00:00:27.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""learning Scheme about two years ago. And for the past year,""" start="00:00:30.560" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I've been working on a project that I'm tentatively calling""" start="00:00:33.680" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Gypsum. Naming things is hard. It's not a great name.""" start="00:00:36.280" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I'm open to suggestions.""" start="00:00:40.795" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""But yes, this is the project in which""" start="00:00:43.377" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I am trying to write an Emacs Lisp interpreter in Scheme.""" start="00:00:45.898" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""There are many clones already of Emacs. You've probably""" start="00:00:53.320" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""heard of Edwin, Jed, Jedit, Jove, Lem, MG, Yi, Zile. Edwin""" start="00:00:58.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""itself is also written in Scheme--MIT Scheme. These only""" start="00:01:04.800" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""clone the key bindings of Emacs and not Emacs Lisp itself.""" start="00:01:10.520" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""The only alternative to GNU Emacs that I'm aware of is""" start="00:01:16.160" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""XEmacs, which is a fork of GNU Emacs.""" start="00:01:21.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Most people don't use Emacs for the key bindings. I mean,""" start="00:01:26.680" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""this is anecdotally speaking, but the people who I've""" start="00:01:30.360" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""talked to, I would say don't use Emacs for the key bindings.""" start="00:01:34.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""They use it really more because of the power of Emacs Lisp.""" start="00:01:39.520" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Emacs is as powerful as any system shell, perhaps even more""" start="00:01:42.680" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""powerful than system shells like Bash.""" start="00:01:48.440" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""The reason why it's so powerful is because""" start="00:01:53.106" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""there's a good programming language""" start="00:01:55.208" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""which you can use to control everything on your system. You""" start="00:01:56.960" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""can control processes. You can load and save files.""" start="00:02:00.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""You can create files. You can configure things.""" start="00:02:01.733" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""You can capture the output of processes in buffers.""" start="00:02:06.417" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""You can filter text through buffers.""" start="00:02:10.220" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And a good programming language is what""" start="00:02:13.422" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""you need in order to do all of this. So one big goal of this""" start="00:02:17.840" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""project is to try to stick as closely as possible to the R7RS""" start="00:02:23.480" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""standard Scheme definition. That is the latest Scheme""" start="00:02:29.240" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""standard: R7. And this is just because I want my project to""" start="00:02:33.860" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""work on many scheme implementations, not just Guile.""" start="00:02:38.920" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Although Guile certainly is the reference""" start="00:02:43.520" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""implementation.""" start="00:02:45.500" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So another goal is to be able to run any &quot;init.el&quot;.""" start="00:02:50.240" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So you can take your existing &quot;init.el&quot;""" start="00:02:56.460" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and run it in my program without""" start="00:02:59.741" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""significant changes. That's one of my goals in the end.""" start="00:03:01.721" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I should be able to do that.""" start="00:03:05.341" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""A lot of people invest significant""" start="00:03:07.316" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""time in their configs, and it's kind of disruptive""" start="00:03:09.120" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""if you want to change editors,""" start="00:03:12.718" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""not be able to use your Emacs Lisp""" start="00:03:14.301" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""config. And so I think a useful Emacs clone""" start="00:03:16.501" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""would be able to clone Emacs Lisp well enough""" start="00:03:21.647" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""that you can run your &quot;init.el&quot;.""" start="00:03:25.128" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And so overall, why am I doing this? It's just because I like""" start="00:03:29.800" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""the Scheme programming language. I love its simplicity and""" start="00:03:33.880" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""its power. It's an extremely well thought-out language.""" start="00:03:38.000" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""It's one of those languages where you can understand the""" start="00:03:42.440" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""entire language from top to bottom. You can read the entire""" start="00:03:46.160" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""specification and understand it yourself.""" start="00:03:48.740" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""It's like the computers I grew up with when I was a kid.""" start="00:03:52.880" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""They were all very simple computers""" start="00:03:57.240" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""in the late 80s, early 90s. And back then,""" start="00:03:59.320" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""theoretically, an engineer could understand the entire""" start="00:04:02.560" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""system at the software level all the way down to the circuit""" start="00:04:05.580" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""level. You can't do that nowadays. And so nowadays, my""" start="00:04:07.960" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""computer is not really a physical computer anymore. It's""" start="00:04:12.160" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""the Scheme language standard itself. That is the core of""" start="00:04:16.860" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""computation, of all of computation for me. And I would like""" start="00:04:21.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""to use it as more than just an academic curiosity. It was""" start="00:04:25.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""originally designed for teaching at MIT, but it's found use""" start="00:04:30.580" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""in industry. And the R7RS standard is still""" start="00:04:36.360" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""relatively new. It's over 10 years old at this point,""" start="00:04:41.400" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""but hasn't, I mean, the""" start="00:04:44.271" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Scheme ecosystem itself is already fairly small.""" start="00:04:48.000" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""There still, I don't think,""" start="00:04:52.981" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""has been a whole lot of adoption of R7RS""" start="00:04:54.342" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""quite yet. Kind of a shame.""" start="00:04:56.360" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So I'd like a project like this, a""" start="00:04:58.786" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""very large scale, kind of a killer-app-like project""" start="00:05:01.120" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""where you're developing a text editor""" start="00:05:04.010" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and perhaps even an integrated development environment""" start="00:05:05.921" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""in Scheme, I think would be very useful""" start="00:05:09.061" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""just even as a study of, you know, what""" start="00:05:11.921" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""can this language do? And just overall,""" start="00:05:13.800" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""there seems to be a lot of interest in""" start="00:05:18.462" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Guile-based Emacs and well, maybe a""" start="00:05:21.221" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Scheme-based Emacs, but Guile in particular.""" start="00:05:24.321" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""There has been talk of""" start="00:05:27.164" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""changing Emacs Lisp or the core of the Emacs Lisp over to""" start="00:05:28.221" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Guile for about 30 years or so,""" start="00:05:33.661" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""talks originally in the early""" start="00:05:38.470" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""mid 90s. There were discussions between Richard Stallman,""" start="00:05:41.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Tom Lord, and Aubrey Jaffer. They considered""" start="00:05:44.800" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""actually replacing Emacs Lisp with Scheme.""" start="00:05:49.920" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""In 1999, and going for about 10 years,""" start="00:05:53.220" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""someone named Ken Raeburn actually started""" start="00:05:56.828" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""a project where he started writing Emacs in Guile.""" start="00:06:01.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""My project is very similar to this.""" start="00:06:07.241" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Here's a quote from his webpage, which is still up, even""" start="00:06:11.860" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""though it hasn't been updated in 15 years.""" start="00:06:15.121" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""This project that I have started""" start="00:06:18.400" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""is for converting GNU Emacs to Guile""" start="00:06:20.520" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""as its programming language.""" start="00:06:23.102" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Support for Emacs Lisp will continue to exist,""" start="00:06:24.122" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""of course, but it may be through""" start="00:06:26.083" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""translation and/or interpretation.""" start="00:06:27.761" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""The Lisp engine itself""" start="00:06:29.245" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""may no longer be the core of the program.""" start="00:06:30.340" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And this is my goal as well. In 2010,""" start="00:06:32.907" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Andy Wingo and Ludovic Courtes""" start="00:06:38.539" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""took maintainership of the Guile project.""" start="00:06:41.880" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""From 2009, so while Andy... 2009""" start="00:06:46.403" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""to 2011, the first Emacs Lisp interpreter was already being""" start="00:06:52.720" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""implemented in Guile. And even to this day,""" start="00:06:59.400" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""this Emacs Lisp interpreter ships with Guile.""" start="00:07:02.090" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And so this was happening""" start="00:07:05.652" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""while Andy Wingo took control of the project.""" start="00:07:06.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""In 2011, so shortly after Andy Wingo""" start="00:07:10.113" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""took control of the project,""" start="00:07:13.834" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Guile 2.0 was released. And also in 2011, in the summertime,""" start="00:07:15.120" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""someone named Robin Templeton, I believe it was a Google""" start="00:07:22.280" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Summer of Code project, started actually trying to""" start="00:07:27.280" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""incorporate libguile, that's the guile interpreter, as a""" start="00:07:33.520" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""linkable or loadable library, linking it to the Emacs""" start="00:07:38.720" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""executable, and then providing some built-in functions in""" start="00:07:45.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Emacs that allows you to call the scheme""" start="00:07:49.180" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""interpreter, the Guile Scheme interpreter, from Emacs.""" start="00:07:54.760" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And so it's not like a wrapper around the REPL like Geiser or""" start="00:07:58.740" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""SLIME. It's actually the whole Scheme interpreter loaded""" start="00:08:02.240" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""into your Emacs process. And that means your Emacs will have""" start="00:08:08.960" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""the ability to actually load compiled Scheme programs and""" start="00:08:13.940" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""actually run them and share memory with Emacs Lisp""" start="00:08:20.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""processes. And, well, Robin Templeton will explain all of""" start="00:08:25.880" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""this. They're presenting today, and I'm very excited to""" start="00:08:29.800" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""actually see their presentation. They'll explain""" start="00:08:33.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""everything.""" start="00:08:37.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So, let's see. Moving on. 2020, someone named Vasilij""" start="00:08:40.180" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Schneidermann, I'm not sure how you pronounce that, published""" start="00:08:45.680" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""an overview called The State of Emacs Lisp on Guile. Let's see""" start="00:08:49.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""if I have that here. Yep, it's this page right here. He goes""" start="00:08:53.640" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""into detail about who has done what so far, and what can you do""" start="00:08:58.400" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""in Guile with Emacs Lisp so far, and so on. Like, what is the""" start="00:09:04.880" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""state of the project overall?""" start="00:09:09.760" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And so (speak of the devil)""" start="00:09:12.718" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""(Andy Wingo on social media).""" start="00:09:15.900" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So, 2020 to present. Guile Emacs""" start="00:09:20.961" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""is dead? So there's GCC Emacs now.""" start="00:09:24.340" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Emacs Lisp now has its own JIT compiler.""" start="00:09:32.072" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And it seems like over the past few years,""" start="00:09:35.753" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Emacs Lisp has kind of moved off into the direction of""" start="00:09:39.260" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""becoming its own programming language in its own right,""" start="00:09:44.320" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and it is decidedly Common Lisp-flavored. It is""" start="00:09:48.440" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""very similar to Common Lisp,""" start="00:09:51.840" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and that seems to be the direction""" start="00:09:54.167" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""that it's headed now, and I don't know if there's really any""" start="00:09:56.520" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""interest anymore amongst the Emacs maintainers of""" start="00:10:00.720" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""continuing with a Guile-based Emacs.""" start="00:10:05.560" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""But as far as I know, there's still a lot of interest in the""" start="00:10:09.800" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""community amongst Scheme and Lisp and Emacs users who are""" start="00:10:13.320" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""interested in maybe continuing to try to get Guile to become""" start="00:10:19.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""the core of Emacs, or if not, you know, what Robin Templeton""" start="00:10:24.780" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""has been doing, at least trying to get Guile a""" start="00:10:28.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""language, a first class supported language in Emacs. So""" start="00:10:31.640" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""that's enough talking. Let me just show you what I have so""" start="00:10:37.280" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""far. The GUI is barely working, because I have very little""" start="00:10:40.000" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""experience with GTK or GObject Introspection. It's very""" start="00:10:45.240" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""difficult to debug, so it's very slow to develop. Any crash""" start="00:10:50.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""at C level produces no stack traces. So far, most of the""" start="00:10:53.640" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""crashes that I've experienced are due to simple mistakes""" start="00:10:58.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""like passing the wrong data type. So, so far, no, not a whole""" start="00:11:03.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""lot of need for GDB or rebuilding all GTK, glib,""" start="00:11:09.400" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and so on with the debugging symbols.""" start="00:11:14.175" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""But yes, still development's been""" start="00:11:17.878" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""very slow. I'm learning as I go. I've chosen to use Guile GI as""" start="00:11:19.320" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""the foundation for the GUI. Let me just load it up quick here.""" start="00:11:25.500" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""&quot;load main-guile.scm&quot;. And this will launch the GUI. I also""" start="00:11:30.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""happen to have a REPL that runs in a separate thread and""" start="00:11:39.900" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""submits any form that you type to be evaluated inside of the""" start="00:11:44.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""running GUI environment. But you can just type stuff. So""" start="00:11:49.760" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""&quot;hello world.&quot; And of course there is...""" start="00:11:57.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""as you can see, it's not quite rendering correctly.""" start="00:12:02.904" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""This &quot;*Messages*&quot; thing here,""" start="00:12:08.060" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""that should be over here, obviously. I haven't been able to""" start="00:12:11.091" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""figure out how to get those little details down. But yeah,""" start="00:12:13.761" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""you can do M-:, and you get your eval,""" start="00:12:17.821" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and you can just evaluate, like (what's an emacs,)""" start="00:12:23.216" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""(or what's a Scheme-specific thing?)""" start="00:12:26.638" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Like &quot;(import (srfi 1))&quot;, and""" start="00:12:29.281" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""let's see, do &quot;(iota 20)&quot;, for example.""" start="00:12:37.680" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And so that is the procedure""" start="00:12:44.889" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""that iterates and produces some 20 elements of a""" start="00:12:46.781" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""list. Or you can do something like, let's see,""" start="00:12:52.901" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""string-append &quot;hello&quot; with space &quot;world&quot;.""" start="00:12:58.420" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And you get the result and so on. And,""" start="00:13:08.115" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""you know, scheme allows you to return multiple values. So""" start="00:13:10.260" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""what I have done here is just""" start="00:13:13.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""every value is captured in a list""" start="00:13:14.999" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and it prints all of the return values in the list.""" start="00:13:17.980" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So if a procedure returns no values,""" start="00:13:21.002" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""you get an empty list.""" start="00:13:23.463" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And that's that. It's still quite buggy.""" start="00:13:26.145" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So like, here's a bug""" start="00:13:29.406" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""that I can reproduce fairly consistently.""" start="00:13:31.520" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I can, yeah, if you do...""" start="00:13:37.320" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""there seems to be a problem with a""" start="00:13:41.408" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""widget being freed too soon, so it will crash. I'm going to""" start="00:13:46.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""try and solve that, hopefully, before this presentation""" start="00:13:49.720" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""goes live. Let's see here.""" start="00:13:53.320" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""The Emacs Lisp parser is based on""" start="00:13:57.110" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Guile Emacs Lisp. So the Guile Emacs Lisp interpreter that""" start="00:13:59.840" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""ships with Guile, that is what I am using. I've actually""" start="00:14:04.400" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""copied and pasted the source code from the Guile source base""" start="00:14:09.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""into my own project so that I can iterate on it more quickly.""" start="00:14:15.720" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And I've already had to make some modifications to the""" start="00:14:20.640" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Emacs Lisp interpreter in Guile. So here's the evaluator.""" start="00:14:25.800" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I've actually already modified the parser and the lexer a""" start="00:14:29.900" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""little bit. And it's at least able to parse""" start="00:14:33.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""all of the &quot;subr.el&quot; program, the Emacs Lisp program.""" start="00:14:37.859" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""It can actually load that, but not""" start="00:14:43.150" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""evaluate it, or parse it, but not evaluate it...""" start="00:14:44.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Read, not eval.""" start="00:14:47.571" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""By the time this goes live, I will have submitted a patch""" start="00:14:51.720" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""upstream. And that's another goal of this project,""" start="00:14:53.960" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""incidentally, is that anything that we can contribute to""" start="00:14:57.560" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Guile and any built-in functions that we can implement""" start="00:15:01.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I would like to, for this project, I would like to try and""" start="00:15:08.360" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""contribute upstream to Guile. The Emacs Lisp interpreter""" start="00:15:11.000" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""is not working well, unfortunately. So this copy, this is""" start="00:15:15.680" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""the copy of the code base (from this commit in particular)""" start="00:15:21.360" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and well, I can't get it working. I can't actually get the""" start="00:15:29.480" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""non-copy, the actual built-in version of""" start="00:15:34.980" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""the Emacs Lisp interpreter to work properly quite yet.""" start="00:15:37.760" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So let me quick go to, (what is this here?)""" start="00:15:41.212" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Guile Elisp. So suppose you have this""" start="00:15:47.034" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""&quot;eval-elisp&quot; procedure here and it takes""" start="00:15:51.880" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""an Elisp environment and then it evaluates an expression in that""" start="00:15:56.000" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""environment. And evaluates to a value. So this""" start="00:16:00.640" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""is the standard way of doing it in Guile.""" start="00:16:03.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""If you can see here,""" start="00:16:05.085" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""you've got this expression, &quot;compile&quot; expression.""" start="00:16:06.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""This is like &quot;eval&quot;. And so actually trying to load this.""" start="00:16:09.947" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So let's do &quot;load gypsum&quot;. (Let's see here. This is, no),""" start="00:16:16.860" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I wanted to &quot;import gypsum backend guile Elisp&quot;.""" start="00:16:24.673" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And if I actually want to do this... So elisp eval, first of all,""" start="00:16:35.760" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""it says it failed because there's an unbound variable""" start="00:16:39.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""&quot;elisp-eval&quot;. Don't know what it's talking about.""" start="00:16:42.880" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""There's no such variable in any of my programs.""" start="00:16:45.349" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I have no idea what's going on here.""" start="00:16:48.230" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""You can try to run eval elisp on some simple form like""" start="00:16:51.152" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""(+ 1 2). And it gives you this exception. This works.""" start="00:16:59.280" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""This is the same issue that I have with all of the,""" start="00:17:04.760" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""every version of the Emacs Lisp Interpreter in Guile.""" start="00:17:09.580" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I can get it to work with this big &quot;,L&quot; mode.""" start="00:17:13.201" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So I can actually do (+ 1 2) here.""" start="00:17:18.752" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I can do &quot;princ&quot; like here.""" start="00:17:21.594" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""That all works fine. It gives me, for some reason,""" start="00:17:26.817" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""a stack trace here.""" start="00:17:30.120" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And yeah, so it's a bit, it's not well-documented.""" start="00:17:34.941" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""The code base is fairly old.""" start="00:17:43.927" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""As I said, it was developed around 2011,""" start="00:17:45.888" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and it's fairly opaque, and I have not been able to figure out""" start="00:17:50.400" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""how to get Emacs Lisp in Guile working smoothly. So I have""" start="00:17:53.240" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""started writing my own Emacs Lisp interpreter. And, uh,""" start="00:17:57.960" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""&quot;gypsum/elisp/eval-tests.scm&quot;.""" start="00:18:04.540" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""It's, uh, not entirely ready.""" start="00:18:13.400" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I can show you some of the tests at least.""" start="00:18:18.270" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Here is a simple Emacs Lisp program""" start="00:18:21.696" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""that you can evaluate.""" start="00:18:25.037" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""You got &quot;progn&quot;, &quot;setq&quot; a to 3, &quot;setq&quot; b to 5,""" start="00:18:25.857" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""&quot;setq&quot; c to the sum of a and b, return c.""" start="00:18:31.140" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And this at least works correctly.""" start="00:18:35.840" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""As you can see here, the result is eight. Um, but""" start="00:18:39.060" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""the &quot;let*&quot; semantics are not completed yet.""" start="00:18:43.280" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Lots of work left to do there.""" start="00:18:46.521" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So in the time I have left, I guess I can just,""" start="00:18:51.104" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""talk a little bit about what my plans""" start="00:18:54.465" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""are for the future.""" start="00:18:56.760" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I would like to begin by evaluating or""" start="00:18:59.388" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""actually loading the &quot;subr.el&quot; into my Emacs Lisp""" start="00:19:02.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""interpreter. I actually have tests set up for that as well,""" start="00:19:06.760" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""so I can actually select any form I want from &quot;subr.el&quot;.""" start="00:19:09.640" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I can just run this through my interpreter""" start="00:19:15.910" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and test to see if everything is working""" start="00:19:18.833" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""once I get that far.""" start="00:19:21.594" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And yeah, let me just say that this is my formal appeal to the""" start="00:19:28.780" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""community for help on this project. Emacs Lisp has""" start="00:19:33.240" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""1,393 built-in functions.""" start="00:19:37.800" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I could never implement that many functions on my own, so if""" start="00:19:41.180" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""this project is going to be useful to anybody in any""" start="00:19:45.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""reasonable amount of time, I'm going to need help.""" start="00:19:47.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And I know that there are people out there""" start="00:19:51.115" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""who are very interested in a Guile-based Emacs,""" start="00:19:53.477" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and so if you're watching this,""" start="00:19:56.399" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""please feel free to contact me""" start="00:19:59.000" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""on social media or over e-mail.""" start="00:20:00.522" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""My job, the way I see it, is if there's enough interest,""" start="00:20:05.700" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and I do get a lot of people interested in""" start="00:20:09.648" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""starting to contribute,""" start="00:20:12.065" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""my job will be to document the building and testing process""" start="00:20:13.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and make sure that it is as easy as possible to contribute""" start="00:20:17.920" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""code to this project. I want to document the system""" start="00:20:21.040" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""architecture. I'll write blog posts. I'll do videos on""" start="00:20:24.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""PeerTube explaining how everything works. And I will""" start="00:20:27.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""prioritize which built-in functions""" start="00:20:31.880" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I think are probably going to be the most necessary,""" start="00:20:34.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""the most essential to get the interpreter running,""" start="00:20:36.463" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and then find low-hanging fruit,""" start="00:20:40.879" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""functions that are easy for people to implement""" start="00:20:42.560" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""as a good introduction to getting them started""" start="00:20:46.520" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""on contributing to the project.""" start="00:20:50.846" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And then, of course, I will take""" start="00:20:53.948" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""responsibility myself of making sure that we can""" start="00:20:56.680" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""get the Elisp interpreter to the point""" start="00:21:01.720" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""where it can run the Emacs regression tests.""" start="00:21:03.775" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""These are the test suites that are used""" start="00:21:09.080" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""to test Emacs Lisp itself in the GNU Emacs code base. And so""" start="00:21:13.334" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""ERT is itself written in Emacs Lisp. And so""" start="00:21:20.360" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I think if we implement enough of the built-in functions""" start="00:21:24.560" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""to be able to run ERT,""" start="00:21:27.034" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""then we can actually start""" start="00:21:29.934" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""using the GNU Emacs regression tests""" start="00:21:31.196" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""to test our own interpreter, our own Emacs clone.""" start="00:21:33.618" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And of course, I'll make sure that there's at least""" start="00:21:39.249" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""one usable GUI. I'm currently working on Guile GI""" start="00:21:41.200" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and GTK. It would be great to have an...""" start="00:21:45.834" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""ANSI terminal based...""" start="00:21:51.397" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""something that works in your terminal emulator.""" start="00:21:53.880" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And yeah, it would be great if someday soon,""" start="00:21:58.220" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""hopefully, we get enough done""" start="00:22:00.284" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""that you can actually contribute a patch to this project""" start="00:22:03.160" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""from within the Gypsum editor itself.""" start="00:22:06.095" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I was going to do an overview,""" start="00:22:11.779" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""but that would be for more of an hour-long presentation.""" start="00:22:13.381" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So I'm out of time. I guess the last thing""" start="00:22:19.680" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""I should quickly say is there's no""" start="00:22:22.928" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""meta object protocol in this""" start="00:22:25.450" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""project. I think that's a little bit too difficult""" start="00:22:27.160" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""to port to various scheme implementations.""" start="00:22:29.002" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So I've created a substitute, which I'm""" start="00:22:30.963" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""calling &quot;functional lenses&quot;, which is inspired by the""" start="00:22:33.740" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Haskell project of the same name.""" start="00:22:36.960" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Everything in this project is based on functional lenses.""" start="00:22:42.060" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Yeah, also a lot a work went into the keymaps data structure.""" start="00:22:47.512" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""The point being that I think I have""" start="00:22:52.604" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""a pretty good foundation here upon which we can build,""" start="00:22:55.207" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""even though there isn't an actual, there isn't""" start="00:22:58.590" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""a lot done in the actual prototype itself, not yet anyway,""" start="00:23:00.840" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""but I made sure to get the fundamentals down""" start="00:23:04.700" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""from the beginning. And so I think we have something""" start="00:23:08.420" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""like a solid foundation on which to build.""" start="00:23:11.081" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So, I'm going to conclude it there.""" start="00:23:16.309" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""And here's my contact details. Like I said,""" start="00:23:21.231" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""this is a project, I'm appealing to the community of all""" start="00:23:24.600" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""people who are interested in Guile and Emacs to help""" start="00:23:29.320" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""contribute to this project. I see myself as just getting the""" start="00:23:31.900" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""ball rolling. Again, taking-off from the work""" start="00:23:35.840" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""that Ken Raeburn left behind, with my own""" start="00:23:40.601" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""from-the-ground-up implementation. So yeah,""" start="00:23:46.279" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""contact me: e-mail, you can take a look at my blog""" start="00:23:50.638" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""where I talk about what I have done.""" start="00:23:53.859" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""My source code, the code for this project, is up on""" start="00:23:57.420" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""Codeberg... The presentation... this""" start="00:24:00.760" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""presentation, the home page for this presentation, you""" start="00:24:06.140" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""can find more details there. Oh, I'm on""" start="00:24:09.380" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""ActivityPub as well, so my handle is""" start="00:24:15.560" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""@ramin_hal9001@fe.disroot.org, and I'm on everyday.""" start="00:24:19.140" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""So yeah, please feel free to contact me if you're interested,""" start="00:24:27.120" video="mainVideo-gypsum" id="subtitle"]]
+[[!template text="""and thank you for your attention.""" start="00:24:30.940" video="mainVideo-gypsum" id="subtitle"]]
+
+</div>
+
+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.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: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.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: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: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: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: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: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: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)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/gypsum-before.md b/2024/info/gypsum-before.md
index ed66895d..7f437b35 100644
--- a/2024/info/gypsum-before.md
+++ b/2024/info/gypsum-before.md
@@ -1,18 +1,28 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 25-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
+
+
-The following image shows where the talk is in the schedule for Sat 2024-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="gypsum">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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 stroke-width="3" x="82" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 20-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-gypsum.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="2024-12-07T15:00:00Z" end="2024-12-07T15:20:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~10:00 AM - 10:20 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~9:00 AM - 9:20 AM CST (US/Central)<br />Saturday, Dec 7 2024, ~8:00 AM - 8:20 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~7:00 AM - 7:20 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~3:00 PM - 3:20 PM UTC <br />Saturday, Dec 7 2024, ~4:00 PM - 4:20 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~5:00 PM - 5:20 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~8:30 PM - 8:50 PM IST (Asia/Kolkata)<br />Saturday, Dec 7 2024, ~11:00 PM - 11:20 PM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~12:00 AM - 12:20 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/dev/">Find out how to watch and participate</a></strong></div>
+# Talk
+<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 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/gypsum-nav.md b/2024/info/gypsum-nav.md
index 0a28649f..f4e22e7a 100644
--- a/2024/info/gypsum-nav.md
+++ b/2024/info/gypsum-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/project">Managing writing project metadata with org-mode</a>
-Next by time: <a href="/2024/talks/org-update">The Future of Org</a>
-Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2024/watch/dev">Watch</a></strong>
+Previous by track: <a href="/2024/talks/transducers">Transducers: finally, ergonomic data processing for Emacs!</a>
+Next by track: <a href="/2024/talks/rust">An experimental Emacs core in Rust</a>
+Track: <span class="sched-track Development">Development</span>
</div>
diff --git a/2024/info/hyperbole-after.md b/2024/info/hyperbole-after.md
index c837eacb..b5208e60 100644
--- a/2024/info/hyperbole-after.md
+++ b/2024/info/hyperbole-after.md
@@ -1,7 +1,403 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [matsl@gnu.org](mailto:matsl@gnu.org?subject=Comment%20for%20EmacsConf%202023%20hyperbole%3A%20Fun%20things%20with%20GNU%20Hyperbole)
+<div class="transcript transcript-mainVideo"><a name="hyperbole-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-hyperbole" id="subtitle"]]</div>[[!template text="""Hi, Emacs Conference. I'm Mats Lidell. I'm the maintainer""" start="00:00:00.000" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""of the GNU Hyperbole, together with the author, Bob""" start="00:00:08.240" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Weiner. The title of the talk is Fun Things with GNU""" start="00:00:13.400" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Hyperbole. With that, I intend to cover a different set of""" start="00:00:19.760" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""small things that is in the package. So this will not be a""" start="00:00:27.960" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""tutorial of Hyperbole.""" start="00:00:33.320" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""For that, you have to look for other sources.""" start="00:00:36.855" video="mainVideo-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The action key and the assist key""" start="00:00:41.299" video="mainVideo-hyperbole" id="subtitle"]]</div>[[!template text="""This is a short talk, so let's get started with""" start="00:00:41.299" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""the first thing. We're going to talk about scrolling and""" start="00:00:45.040" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""with the subtitle using the end of line. If you're new to""" start="00:00:50.880" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Hyperbole, you need to know about the action key and assist""" start="00:00:56.240" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""key. The action key is bound to M-RET and the assist key""" start="00:00:59.560" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""is bound by default to M-RET with the prefix argument.""" start="00:01:06.080" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Both of these keys are used for performing actions on""" start="00:01:10.280" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""different contexts. In this case, we'll look what""" start="00:01:15.560" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""happens when you use it on the end of a line.""" start="00:01:20.320" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""I have here the tutorial, the Emacs tutorial, and we see""" start="00:01:27.720" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""here a line inserting and deleting. I move there and put the""" start="00:01:35.440" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""cursor on the end of the line. I then hit M-RET, the""" start="00:01:40.600" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""action key, and it's moved to the top of the window. If I want""" start="00:01:45.440" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""to move it to the last row on the window I can press C-u and""" start="00:01:53.480" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""then M-RET, so I use the assist key. If I repeatedly hit""" start="00:01:58.920" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""M-RET, it will scroll so the first time it moves to the""" start="00:02:05.880" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""top of the window, but if I at the top of the window hit""" start="00:02:10.400" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""M-RET again it scrolls.""" start="00:02:16.160" video="mainVideo-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Composing an e-mail""" start="00:02:22.840" video="mainVideo-hyperbole" id="subtitle"]]</div>[[!template text="""Now over to the next thing.""" start="00:02:22.840" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""So next thing is to compose an email from an address""" start="00:02:27.800" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""of the style of username@domain. Let's look into""" start="00:02:34.560" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""that. Here I have entered the file in the Emacs""" start="00:02:42.600" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""distribution vc.el. At its top it has a lot of""" start="00:02:48.360" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""different email addresses from the contributors. This is, in""" start="00:02:54.240" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""principle, a normal text file. By placing the cursor over""" start="00:03:01.360" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""one of these addresses and hitting the action key, Hyperbole""" start="00:03:09.200" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""identifies that it's an email address and tries to open or""" start="00:03:13.520" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""opens the email composer with that, using that email address.""" start="00:03:17.840" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""If we'll go to the scratch buffer... Prepared another name""" start="00:03:28.520" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""there so just to demonstrate it works in a buffer the same""" start="00:03:33.720" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""way.""" start="00:03:38.120" video="mainVideo-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Inserting implicit links""" start="00:03:44.600" video="mainVideo-hyperbole" id="subtitle"]]</div>[[!template text="""The next fun thing is insert implicit link. I'm going to give""" start="00:03:44.600" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""you an example with email how to share an implicit link with""" start="00:03:51.080" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""someone. An implicit link is a text pattern, just as we saw""" start="00:03:56.280" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""with the email address, something that Hyperbole""" start="00:04:02.360" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""recognizes just by how the text looks. Here we have the""" start="00:04:05.160" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""example. We have started writing an email to""" start="00:04:13.320" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""the user@domain, and in the other window below,""" start="00:04:15.982" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""the vc.el file is open. It's now opened within the search path,""" start="00:04:20.663" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""the load path. That's why it's compressed. I want to tell""" start="00:04:27.424" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""my friend about the credit section. First, the cursor is""" start="00:04:34.280" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""placed here at your credit section. I move over to the other""" start="00:04:40.720" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""window and I use the Hyperbole menu system. By hitting""" start="00:04:44.560" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""C-h h, I go into the menu system. I press i for getting an""" start="00:04:48.880" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""i-button, implicit button, and I press l for creating a link.""" start="00:04:55.262" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""And there you have the link. What does the link mean? Well, it""" start="00:05:05.120" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""means that in the load for Hyperbole, Emacs lib files are""" start="00:05:12.160" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""special. If they are in the load path, they will use this short""" start="00:05:15.520" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""format. At the end, you have the L for the line number 24 and""" start="00:05:20.720" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""the C for the column. If I hit the action key on this line, you""" start="00:05:26.280" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""can see that the cursor moves over to the credit section. we""" start="00:05:31.440" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""can remove that file just to make sure that it works and move""" start="00:05:35.560" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""the cursor a little bit and hit M-RET again.""" start="00:05:44.920" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""M-RET and we moved over there. I mean, given that""" start="00:05:50.640" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""the receiver has a similar setup with Emacs, et cetera, that""" start="00:05:55.600" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""link will work there as well.""" start="00:06:00.040" video="mainVideo-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Window grid""" start="00:06:03.411" video="mainVideo-hyperbole" id="subtitle"]]</div>[[!template text="""Hi, Emacs Conference. It's a""" start="00:06:03.411" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""new recording day, the sun is shining, I'm wearing a new""" start="00:06:05.880" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""t-shirt but we're still cracking on with fun things in""" start="00:06:09.640" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Hyperbole. Our next subject is window grid. With""" start="00:06:14.360" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Hyperbole, it's easy to create a grid of windows. I'm going to""" start="00:06:21.240" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""show how you can do that and also moving on I'm going to show""" start="00:06:25.040" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""how you can use Dired or IBuffer to select what buffers to""" start="00:06:29.320" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""show in the grid. I will also show how you can save""" start="00:06:34.240" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""configuration for use later.""" start="00:06:39.960" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""You reach the window grid functionality through the""" start="00:06:46.080" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""hyperbole menu system. C-h h screen. There you have""" start="00:06:50.040" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""two submenus, frame control and window control. The grid""" start="00:06:56.840" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""functionality is part of both of these submenus. You can""" start="00:07:01.280" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""select either, but I'll go with window control here.""" start="00:07:05.040" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Down to the left, we see the @ character and the grid of""" start="00:07:09.360" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""windows, so hit @. I'm prompted with the number of""" start="00:07:15.240" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""columns and rows for the window grid.""" start="00:07:21.800" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""I select the 3x3 grid.""" start="00:07:25.804" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""We get the 3x3 grid, and it's populated with buffers I have""" start="00:07:34.360" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""loaded in Emacs.""" start="00:07:41.920" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Let's go back here to the scratch buffer.""" start="00:07:46.640" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Now, using all those keystrokes for the menu system is a""" start="00:07:52.320" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""little bit cumbersome, so there is a shortcut: C-c @.""" start="00:07:56.400" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""If I use that, C-c @, I get immediately prompted the""" start="00:08:01.600" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""number of rows and columns. If i use a prefix arg 0,""" start="00:08:08.520" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""C-u 0 C-c @, I get also prompted with what type of""" start="00:08:16.539" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""buffers I want to have populated in my grid. Let's select""" start="00:08:23.360" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""the emacs-lisp-mode. Again we do a 3x3 grid. Here""" start="00:08:28.720" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""you see all the grids. The whole grid is populated with Emacs""" start="00:08:36.600" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Lisp buffers.""" start="00:08:44.960" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""To get even finer control, you can go into IBuffer. I have""" start="00:08:45.920" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""pre-selected here all the Emacs Lisp files I have. Let's""" start="00:08:57.680" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""pick a few. I mark them like this. Let's pick three or maybe""" start="00:09:04.280" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""pick four. Then I hit the @ sign, and then it""" start="00:09:10.280" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""automatically shows a 2x2 grid""" start="00:09:16.880" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""with the selected buffers.""" start="00:09:22.369" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""We can go in again and maybe select a few more and do the same""" start="00:09:26.280" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""thing: hit add and it now becomes a 3x2 grid with these buffers""" start="00:09:35.240" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""The same thing is possible through Dired.""" start="00:09:44.400" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Let's just mark quite a few here and then hit @, and then it""" start="00:09:50.179" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""populates it with all the buffers. You see that if it's not""" start="00:10:00.640" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""enough buffer to fill the whole grid, there are blank grids or""" start="00:10:04.200" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""rectangles in the grid.""" start="00:10:10.680" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Now going back and forth like this, maybe if you want to work""" start="00:10:15.040" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""on some file and and then go over to Dired again to select this,""" start="00:10:20.520" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""can be a little bit cumbersome. You maybe have prepared a""" start="00:10:26.760" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""grid with the buffers you want to have there.""" start="00:10:31.760" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Hyperbole comes with a simple window configuration support.""" start="00:10:34.966" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""You reach that the same way through the Hyperbole menu, so""" start="00:10:42.560" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""C-h h and window, w for window, and there you can hit save to""" start="00:10:46.120" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""save the configuration to a ring of configurations.""" start="00:10:54.120" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Let's go back to the scratch buffer again here. Now we""" start="00:10:58.600" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""want to bring up our window configuration again, so we""" start="00:11:04.760" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""hit C-h h and window, and yank in the configuration. Boom,""" start="00:11:09.920" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""there is the grid again.""" start="00:11:15.080" video="mainVideo-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Select a thing""" start="00:11:19.720" video="mainVideo-hyperbole" id="subtitle"]]</div>[[!template text="""We're reaching the end of the talk. The last fun thing I want to""" start="00:11:19.720" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""talk about is the Hyperbole support for select a thing.""" start="00:11:23.320" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""We'll show some use of selections together with web search.""" start="00:11:27.640" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Here I have brought up the GNU General Public License for""" start="00:11:33.440" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""just getting some text that I can show the select a thing""" start="00:11:43.600" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""functionality. Let's move the cursor over the word""" start="00:11:48.120" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""versions. Then I hit C-c RET, which is bound for the""" start="00:11:52.920" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""select a thing functionality.""" start="00:11:59.400" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Then it selects the word that the cursor was at. If I hit it""" start="00:12:03.120" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""again, C-c RET, it selects the line. Again, it""" start="00:12:11.040" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""selects the sentence, and again, the whole paragraph. So""" start="00:12:15.200" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""that's a convenient way to extend your searches--your""" start="00:12:22.360" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""selections, rather--in a buffer.""" start="00:12:26.160" video="mainVideo-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Web search""" start="00:12:33.818" video="mainVideo-hyperbole" id="subtitle"]]</div>[[!template text="""Looking at selections, how you can use that from web search...""" start="00:12:33.818" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Let's mark some text and then hit C-c /, which is bound""" start="00:12:38.199" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""for the web search. Here you see the Hyperbole menu system again.""" start="00:12:44.322" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""It's slightly customized with things that I use, but the basic""" start="00:12:48.543" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""menus are the ones supported by Hyperbole. Let's look at""" start="00:12:54.960" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""searching DuckDuckGo. It then populates the prompt with""" start="00:13:00.520" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""the selection.""" start="00:13:08.000" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""I have configured it so it uses my Firefox for these""" start="00:13:08.840" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""searches. Here we have the GNU General Public License""" start="00:13:17.920" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""shown. I can also show that for like me, being not a native""" start="00:13:23.320" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""English speaker, let's look what &quot;take away your freedoms&quot;""" start="00:13:30.600" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""means in Swedish. So C-c /, and then I hit translate.""" start="00:13:36.320" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""Take away your freedom, yeah, what's the translation for""" start="00:13:41.680" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""that? Using Google Translate,""" start="00:13:45.880" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""I get it translated to Swedish.""" start="00:13:48.583" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""That was the whole talk. We reached the end,""" start="00:13:50.800" video="mainVideo-hyperbole" id="subtitle"]]
+[[!template text="""and thanks for listening. Bye.""" start="00:14:03.431" video="mainVideo-hyperbole" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+<div class="transcript transcript-qanda"><a name="hyperbole-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""And I believe we are live. Hi, Mats, how are you doing? Oh, I'm""" start="00:00:00.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""fine. It's a pleasure to see you again after last year. And I""" start="00:00:12.920" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""was trying to think about it. We saw you last year, but didn't""" start="00:00:17.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""we see you as well in 2022? Yes. This is my third year. Yeah,""" start="00:00:20.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""well, thank you for being a regular at EmacsConf. It's""" start="00:00:26.920" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""always a pleasure to have you chat about hyperbole.""" start="00:00:29.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Although I think you're the only one chatting about""" start="00:00:31.920" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""hyperbole this year compared to last year. Yes,""" start="00:00:33.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""unfortunately, that's, yeah, Bob has some family issues.""" start="00:00:37.160" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""So yeah, I'm here, but I'm here. Yeah, but we are happy to have""" start="00:00:41.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""you here. And as I was saying before, I'm not sure if you were,""" start="00:00:45.840" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""you had the time to watch the previous talk by Mohsen, you""" start="00:00:49.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""know, you had, there were plenty of ideas, I think that were""" start="00:00:52.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""very similar to what Hyperbole is trying to do by having""" start="00:00:56.240" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""buttons and having stuff that can be in any other mode that""" start="00:00:59.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""would allow you to supplement a coding file with extra""" start="00:01:04.400" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""information. So the ideas are living on. And even though""" start="00:01:08.400" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""hyperbole is one thing, I feel like other packages are also""" start="00:01:11.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""taking a lot of inspiration for it. So congratulations on""" start="00:01:15.240" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""being an inspiration, I suppose. Oh, thanks.""" start="00:01:17.760" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Unfortunately, I have not had any time to watch anything of""" start="00:01:21.440" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""the Emacs conference since apparently my life is like every""" start="00:01:24.840" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""time it's Emacs conference, I do something else. So I've been""" start="00:01:29.760" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""just moving this weekend. So, I'm in a new apartment, but I'm""" start="00:01:33.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""connected and everything seems to work okay. So, I can't""" start="00:01:37.920" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""relate to what we said in any of the other talks, I'm afraid.""" start="00:01:42.480" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""So, sorry about that. No, that's okay. No, but that's""" start="00:01:45.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""completely fine, because you may be able to watch the talks""" start="00:01:48.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""at any point later on, because I'll remind the viewers that""" start="00:01:51.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""the talks are currently available on EmacsConf or the""" start="00:01:54.600" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""pre-recorded one. And I think we only had one live talk""" start="00:01:57.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""yesterday. All of them are already available with""" start="00:02:01.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""subtitles and all the funny stuff that we usually put. So""" start="00:02:04.240" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""that's an invitation for people to watch it. All right. So,""" start="00:02:08.040" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Mats, before we start with the questions, I see people in the""" start="00:02:11.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""process of writing them. Was there anything else you wanted""" start="00:02:14.440" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""to add on top of your presentation? Maybe some supplements""" start="00:02:17.960" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""or whatnot? No, no. Nothing to add. Right. I mean, this year""" start="00:02:21.160" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""was more a bag of tricks, some new stuff that you've""" start="00:02:29.040" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""implemented in Hyperbole. And it's fun because I see the UI""" start="00:02:31.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""that you have for some of those modes. And earlier, you""" start="00:02:36.160" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""weren't able to watch those talks, but we were talking a lot""" start="00:02:40.160" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""about Transient and about what it allows you to do in terms of""" start="00:02:42.400" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""interactivity. I'm actually familiar with Transient. No,""" start="00:02:46.120" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""no, no. It's a mode written by Tarsius, so Jonas Bernoulli,""" start="00:02:51.040" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""the person behind Magit, and it's a very nice way to create""" start="00:02:56.280" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""menus for interactive setups. So, if you are interested in""" start="00:03:01.600" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""perhaps augmenting what you currently have with""" start="00:03:06.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Hyperbole, it might be nice to look into Transient because I""" start="00:03:10.040" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""think this is heading towards eventually being merged into""" start="00:03:12.960" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""the core of Emacs. I mean, don't quote me on this. and I'm not""" start="00:03:16.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""sure how Tarsius feels about it, but because of the""" start="00:03:18.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""adoption, because Magit obviously uses transient, Org is""" start="00:03:21.720" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""trying to make a move towards adopting transient, it feels""" start="00:03:25.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""like Hyperbole would do well as well to adopt it because it's""" start="00:03:28.840" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""starting to become a grammar of general UI at this point.""" start="00:03:32.480" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Yeah, now when you mention it, I remember because I'm a heavy""" start="00:03:36.800" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""user of Magic, of course. So I know Transient that way. I know""" start="00:03:40.840" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""also that people have been complaining about Hyperbole's""" start="00:03:47.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""menu system. You know that Hyperbole reach back to""" start="00:03:51.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""something like 1993, so it has some maybe things that are not""" start="00:03:56.080" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""modern in that sense. So we have it on the plate to maybe look""" start="00:04:02.640" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""into these things and how we can sort of make things modern,""" start="00:04:07.280" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""etc. Sure, but it's completely fine to take your time. You""" start="00:04:11.480" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""don't necessarily have to follow the latest fads when it""" start="00:04:16.280" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""comes to completion engines or interactive engines like""" start="00:04:19.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Transient is. I'm not actually sure how you would call""" start="00:04:24.440" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Transient. Is this a UI maker, an interaction engine? I""" start="00:04:26.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""don't know. I'll need to ask Tarsius at some point. All""" start="00:04:31.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""right. Okay. Okay so let's move on to the questions. We've""" start="00:04:36.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""got a couple of them and for the Q&A we'll have about five""" start="00:04:41.440" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""minutes and 30 seconds until we got to lunch. So starting""" start="00:04:45.720" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""with the first question.""" start="00:04:49.200" video="qanda-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How is the log buffer generated?""" start="00:04:51.194" video="qanda-hyperbole" id="subtitle"]]</div>[[!template text="""How is the log buffer generated in""" start="00:04:51.194" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""your presentation? But it's a very quick answer to this.""" start="00:04:52.680" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""We recommend at EmacsConf that speakers use the""" start="00:04:56.720" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""interaction-log package, which allows you to have a""" start="00:04:59.840" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""slightly prettier lossage. Lossage being in Emacs how you""" start="00:05:02.680" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""call the comments that you've used. And so if you're""" start="00:05:07.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""interested in using this for your own presentation,""" start="00:05:10.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""interaction log, and you'll be able to find it fairly""" start="00:05:12.440" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""easily.""" start="00:05:17.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Moving to the next question.""" start="00:05:19.000" video="qanda-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: So, the "select a thing" C-c RET is similar to expand-region? How does it behave in codes (functions, class, ...)""" start="00:05:21.051" video="qanda-hyperbole" id="subtitle"]]</div>[[!template text="""So the selector thing C-c RET""" start="00:05:21.051" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""is similar to expand-region. How does it behave in""" start="00:05:23.652" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""codes i.e functions or class?""" start="00:05:26.480" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Well I think it behaves exactly the same. I mean in the""" start="00:05:32.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""In any sort of buffer, it might depend on what""" start="00:05:45.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""constitutes a word, et cetera, and a sentence in the mood.""" start="00:05:50.080" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""That's how I would say it. Right.""" start="00:05:54.680" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""I'm just, in that sense, I'm just a user of the function. I""" start="00:06:00.800" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""haven't implemented it. I haven't tested it more than that.""" start="00:06:09.280" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""We can do this as a demo that you start with maybe select a""" start="00:06:12.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""small thing and by hitting it over and over again, you select""" start="00:06:17.960" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""more and more. Yeah, but it's completely fine sometimes to""" start="00:06:22.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""merely be a user of something, you know. It's easy. It's a""" start="00:06:26.400" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""testament to how amazing Emacs is because everything is""" start="00:06:30.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""written in Lisp in the background, that as soon as you start""" start="00:06:33.080" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""becoming a maintainer of something, you kind of expect it to""" start="00:06:35.760" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""just be able to understand everything else. And whilst it's""" start="00:06:38.120" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""technically true, the limiter here is the amount of time""" start="00:06:40.640" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""that you can invest looking at the definitions,""" start="00:06:43.920" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""understanding what they do, and sadly we don't have the time""" start="00:06:47.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""to do all of this. And especially with Hyperbole, which is""" start="00:06:50.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""obviously interacting with major modes in something that""" start="00:06:53.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""is more involved than Org mode, for instance. We do have""" start="00:06:55.960" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""another question. So, I know you Hyperbole devs are active""" start="00:07:01.240" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""and interested in sharing and interoperating with other""" start="00:07:05.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Emacs tools.""" start="00:07:08.920" video="qanda-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:07:09.972" video="qanda-hyperbole" id="subtitle"]]</div>[[!template text="""What is a recent tool that you find exciting to""" start="00:07:09.972" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""think about using in combination with Hyperbole or would""" start="00:07:11.840" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""like to suggest using in combination with it? Well, lately""" start="00:07:14.800" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""we've been focusing a lot of sort of trying to make Hyperbole""" start="00:07:21.600" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""work together with Org Mode and in in a good way so they can""" start="00:07:24.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""sort of, I mean... The idea with Hyperbole is not to be better""" start="00:07:29.640" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""than everything else, but more to be like the glue or spider""" start="00:07:36.120" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""that could integrate different modes in a good way together.""" start="00:07:40.120" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""So that being top of everything. And Org is a very""" start="00:07:46.350" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""popular mode, and there are a lot of sub-modes, or whatever""" start="00:07:51.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""you can call it, with Org for information management. And we""" start="00:07:55.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""would want Hyperbole to work together with Org in a good way,""" start="00:07:59.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""so Org users could benefit from Hyperbole as well. So we put""" start="00:08:03.120" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""in some effort in that. But I think there's a lot of way to go.""" start="00:08:09.120" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""There's much more that can be done there as well because""" start="00:08:13.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""different modes can easily compete in a bad way in the""" start="00:08:17.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""details. So it's a little bit of a tricky thing, especially""" start="00:08:21.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""like we have this and how probably we have this M-RET""" start="00:08:26.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""for the action production key and that's also used in many""" start="00:08:32.840" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""modes. So we would really, in the best of words, we would like""" start="00:08:36.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Emacs to sort of come to some agreement on using of the""" start="00:08:40.640" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""M-RET in a good way for modes to sort of be able to work and""" start="00:08:46.389" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""live together. Yeah, I mean it's a tough thing to share the""" start="00:08:52.760" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""key bindings and the grammar of interaction between""" start="00:08:58.120" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""packages because you tell me M-RET, I don't want you""" start="00:09:01.760" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""to touch M-RET. For me it's just inserting a new line""" start="00:09:04.720" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""and not adding indentation at the start and everyone is""" start="00:09:07.760" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""going to have their own you know, feelings and thoughts about""" start="00:09:10.640" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""this, so it's really hard to impose any kind of system on""" start="00:09:14.640" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""this. But I'm glad to hear that you're looking into""" start="00:09:17.960" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""interaction with Org Mode because I remember the questions""" start="00:09:20.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""we were having on your first conference when people were""" start="00:09:23.240" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""asking, oh I'm so glad that you're talking about Hyperbole""" start="00:09:26.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""because the only way I'm interacting with it is when people""" start="00:09:28.960" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""chat about Org Mode and then whenever we had announcements""" start="00:09:31.720" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""about Hyperbole, be it on Reddit, be it on Hacker News,""" start="00:09:35.600" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""people would say, but don't we already have Org Mode? And we""" start="00:09:39.040" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""won't get into the topic again, because I think you've done a""" start="00:09:42.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""wonderful job of explaining the differences in previous""" start="00:09:44.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""years. And today, the conference, your talk at the""" start="00:09:47.280" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""conference also made it obvious that it's doing something""" start="00:09:51.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""that Org Mode is not able to do. But ultimately, being able to""" start="00:09:54.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""interface between the two is something great.""" start="00:09:58.040" video="qanda-hyperbole" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""On Ihor as the new maintainer for Org Mode""" start="00:10:00.255" video="qanda-hyperbole" id="subtitle"]]</div>[[!template text="""And I kind of wanted to ask you as well the question,""" start="00:10:00.255" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""because you haven't""" start="00:10:02.677" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""seen the talk, but yesterday we had the announcement that""" start="00:10:04.720" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Ihor Radchenko was becoming the new maintainer of Org Mode.""" start="00:10:10.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""So obviously, a new maintainer introduces idea of changes""" start="00:10:13.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""of, you know, philosophy and strategy and all this. Is this""" start="00:10:18.800" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""somehow on your end with Hyperbole inspiring you perhaps to""" start="00:10:23.720" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""also innovate in a sense to maybe try to change the way some""" start="00:10:28.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""things are done?""" start="00:10:32.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Hmm, tricky question. I know, right? Yeah, no, well, I don't""" start="00:10:32.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""know.""" start="00:10:45.240" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""I don't know if it answers the question, but we have this""" start="00:10:46.160" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""idea that we meet and work from our point of view. And then we""" start="00:10:52.800" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""pick up maybe details from the outside world. So we're not""" start="00:11:02.920" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""heavily looking into what happens in the rest of the world""" start="00:11:07.680" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""when it comes to Emacs and personal information""" start="00:11:13.080" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""management, etc. But but we do pick up some ideas.""" start="00:11:17.240" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Sometimes. But yeah, we mostly do hacking and then we want to""" start="00:11:21.160" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""we meet once a week and work on hyperbole and you know, so""" start="00:11:26.720" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Yeah, that's already very cool. And the reason I'm""" start="00:11:31.640" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""mentioning this is not because I know that you are operating""" start="00:11:35.600" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""in a little bit of a silo when it comes to all of Hyperbole, but""" start="00:11:38.800" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""it's always nice for me personally to see a lot of energy""" start="00:11:42.080" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""being brought in by people. Whenever there's a new major""" start="00:11:45.400" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""version being published, be it Org Mode or be it Hyperbole,""" start="00:11:49.040" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""people are excited. There's a lot of energy in here because""" start="00:11:52.920" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""people are chatting about what you're doing. And that's why""" start="00:11:55.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""I find that people, a new maintenanceship for Org Mode""" start="00:11:58.040" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""actually benefits Hyperbole in a way because you get a lot of""" start="00:12:02.400" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""excitement, a lot of people thinking and bringing ideas to""" start="00:12:05.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""the table. And I think it's a prime time to actually try I'm""" start="00:12:07.560" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""using the word stealing, but in a very nice way, stealing in""" start="00:12:12.280" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""terms of floss, stealing some ideas and trying to see if you""" start="00:12:14.600" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""can run with them on your own end. And that's also why I was""" start="00:12:17.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""suggesting transient, because transient looks like it's""" start="00:12:21.200" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""on its path to reach core at some point. And it would be nice if""" start="00:12:24.480" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""you had the idea early on to integrate with it, because it""" start="00:12:28.760" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""might save you time later on and make your user happy,""" start="00:12:31.480" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""because they can find the same grammar between the Git,""" start="00:12:34.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""between org mode, and between hyperbole. All right. Is""" start="00:12:37.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""there... I don't think... Yeah, go on, please. Yeah, I just""" start="00:12:41.640" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""want to add on that, that, I mean, as an ultimate goal, in the""" start="00:12:46.440" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""far distance, we would want sort of Hyperbole or hyperbole""" start="00:12:49.880" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""type of functionality be part of the core Emacs. So in that""" start="00:12:56.680" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""sense, it's sort of totally sort of okay with us that""" start="00:13:00.400" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""different packages steal ideas and try to merge them into""" start="00:13:06.840" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""sort of the core system. Yeah. All right, I don't see any more""" start="00:13:10.600" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""questions, so I think we can move to close. Actually, we're""" start="00:13:16.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""actually three minutes over time, so I'm glad we managed to""" start="00:13:19.280" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""discuss a little more, but that's fine. Mats, do you have""" start="00:13:22.440" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""any last words? I'll try it out. Okay, well, then, you heard""" start="00:13:24.760" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""it, everyone. Just try it out. Try it out, and if you like it,""" start="00:13:31.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""you can join us on Sundays""" start="00:13:35.480" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Right. And every Sunday, well, if you do not know what to do,""" start="00:13:37.240" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""you know, here's an idea for you. All right. Thank you so""" start="00:13:41.960" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""much, Mats, for coming again to Emacs Conf. And we look""" start="00:13:44.920" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""forward, perhaps, to seeing you next year. Yes. I'll be""" start="00:13:47.080" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""there. Hopefully, I can see some of the presentations live""" start="00:13:50.320" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""then. OK. That's OK. You've got the entire year to catch up on""" start="00:13:55.120" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""the ones you haven't seen this year and next year. But you'll""" start="00:13:58.400" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""have the time to catch another one live. All right. Yes.""" start="00:14:01.160" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Great! For the folks watching, we will be taking a break, a""" start="00:14:04.360" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""one hour and one minute break. We'll be back at 1 p.m. EST and I""" start="00:14:09.520" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""think if my UTC conversion is working right, it should be 6""" start="00:14:14.040" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""p.m. UTC, so at least in one hour. All right, see you in a bit""" start="00:14:21.480" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""folks! Oh yes, and sorry, I've got a little elf speaking""" start="00:14:24.680" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""in my ears. In case you're interested in discussing further""" start="00:14:30.160" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""hyperbole with Mats, Mats is in the room right now and I see""" start="00:14:33.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""people have joined the BBB chat. So if you want to join and""" start="00:14:36.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""chat directly with Mats, I'm sure Mats would be more than""" start="00:14:39.920" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""happy to answer your questions. And obviously everything""" start="00:14:42.440" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""has been recorded and will be published later on. But for me,""" start="00:14:45.000" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""I will use the break to rest a little bit and I'll be back in the""" start="00:14:48.240" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""afternoon. All right, see you folks. Bye, take a break.""" start="00:14:54.120" video="qanda-hyperbole" id="subtitle"]]
+[[!template text="""Okay.""" start="00:14:59.040" video="qanda-hyperbole" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [matsl@gnu.org](mailto:matsl@gnu.org?subject=Comment%20for%20EmacsConf%202023%20hyperbole%3A%20Fun%20things%20with%20GNU%20Hyperbole)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/hyperbole-before.md b/2024/info/hyperbole-before.md
index fb1b015e..4f40ce4a 100644
--- a/2024/info/hyperbole-before.md
+++ b/2024/info/hyperbole-before.md
@@ -1,20 +1,35 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
May take questions after the event depending on how his move goes
+[[!toc ]]
+Format: 15-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="hyperbole">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect stroke-width="3" x="199" y="15" opacity="0.8" width="20" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(217,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 15-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-hyperbole.html>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Waiting for a caption volunteer
-<div>Times in different time zones:</div><div class="times" start="2024-12-08T16:25:00Z" end="2024-12-08T16:40:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~11:25 AM - 11:40 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~10:25 AM - 10:40 AM CST (US/Central)<br />Sunday, Dec 8 2024, ~9:25 AM - 9:40 AM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~8:25 AM - 8:40 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~4:25 PM - 4:40 PM UTC <br />Sunday, Dec 8 2024, ~5:25 PM - 5:40 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~6:25 PM - 6:40 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~9:55 PM - 10:10 PM IST (Asia/Kolkata)<br />Monday, Dec 9 2024, ~12:25 AM - 12:40 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~1:25 AM - 1:40 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+03:44.600 Inserting implicit links
+06:03.411 Window grid
+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://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 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="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/hyperbole-nav.md b/2024/info/hyperbole-nav.md
index 8dbc95a1..ba3561db 100644
--- a/2024/info/hyperbole-nav.md
+++ b/2024/info/hyperbole-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/org-teach">org-teach: a minor mode for writing course materials in Emacs</a>
-Next by time: <a href="/2024/talks/hywiki">HyWiki: Fast, hyperlinked note-taking with no markup required</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/blee">About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</a>
+Next by track: <a href="/2024/talks/pgmacs">PGmacs: browsing and editing PostgreSQL databases from Emacs</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/hyperdrive-after.md b/2024/info/hyperdrive-after.md
index 43a8a696..6727bb6e 100644
--- a/2024/info/hyperdrive-after.md
+++ b/2024/info/hyperdrive-after.md
@@ -1,7 +1,508 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [contact@ushin.org](mailto:contact@ushin.org?subject=Comment%20for%20EmacsConf%202023%20hyperdrive%3A%20New%20in%20hyperdrive.el%3A%20org-transclusion%2C%20easy%20installation%2C%20and%20more%21)
+<div class="transcript transcript-mainVideo"><a name="hyperdrive-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hello, welcome to this talk on hyperdrive.el. I'm Joseph""" start="00:00:00.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Turner presenting on behalf of ushin, a tiny independent""" start="00:00:03.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""information freedom nonprofit. hyperdrive.el is an Emacs""" start="00:00:07.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""interface to the hyperdrive peer-to-peer file sharing""" start="00:00:12.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""system built by Holepunch. Like other peer-to-peer file""" start="00:00:14.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""sharing tools, such as BitTorrent, hyperdrive lets you""" start="00:00:18.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""share unlimited files directly with other users without""" start="00:00:22.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""having to go through a central hub. One thing that sets""" start="00:00:25.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive apart is that the files you share can be""" start="00:00:29.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""modified. Since hyperdrive has built-in versioning,""" start="00:00:32.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can explore the history of changes that you make to your""" start="00:00:35.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""files or others make to theirs. You can stream video and""" start="00:00:38.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""audio. There's no sign-up or account creation process""" start="00:00:42.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""required. It's all free software. This means that the""" start="00:00:45.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""community has the legal right, the tools, and the""" start="00:00:49.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""information necessary to participate in the development""" start="00:00:52.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""process, or even fork the project""" start="00:00:55.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and go cimarron. Since""" start="00:00:58.338" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""last year's talk, we've added a few new features. It's now""" start="00:01:00.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""much easier to get started using hyperdrive.el, since we""" start="00:01:04.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""added the hyperdrive-install command, which downloads the""" start="00:01:08.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""gateway program and installs it on your machine. We added a""" start="00:01:12.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peer graph feature, which lets you visualize your network""" start="00:01:16.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of sources of information. We also published a new package,""" start="00:01:19.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive-org-transclusion, which lets you display live""" start="00:01:24.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""updating snippets of hyperdrive files in Org documents.""" start="00:01:29.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's get started. Let's say you get an email from your""" start="00:01:34.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""friend Alice inviting you to check out hyperdrive.el.""" start="00:01:37.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's click on the link here to look at the manual. Let's go""" start="00:01:41.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""down to the installation section. It says you need to have""" start="00:01:45.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""GNU Emacs version 28.1 or later. I'll assume you have it""" start="00:01:50.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""installed, but if not, you can click this link.""" start="00:01:54.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You need to have curl installed,""" start="00:01:57.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is likely already the case, but if not,""" start="00:01:59.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive.el will let you know.""" start="00:02:01.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now from within Emacs you can install hyperdrive.el.""" start="00:02:04.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Run M-x package-refresh-contents.""" start="00:02:10.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then, M-x package-install, type in hyperdrive,""" start="00:02:14.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and hit return. Next, we'll install hyper-gateway-ushin.""" start="00:02:20.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's run M-x hyperdrive-install. It's prompting me to""" start="00:02:26.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""download and install the gateway, which is 51 megabytes.""" start="00:02:33.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press y.""" start="00:02:35.881" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will skip most of the download process. The download is""" start="00:02:39.781" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""wrapping up.""" start="00:02:44.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, it's prompting me to start the gateway. I can either run""" start="00:02:49.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""M-x hyperdrive-start, or I can press this button. And""" start="00:02:53.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""after a few moments, we'll see that the gateway will start.""" start="00:02:59.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's ready. You can also click this button, &quot;View hyperdrive""" start="00:03:03.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""User Info Manual&quot;, to view the same manual that we were""" start="00:03:07.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""viewing in the browser. The info manual comes with""" start="00:03:10.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive.el and is available offline. Now that""" start="00:03:13.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""everything's installed and the gateway is running, we're""" start="00:03:17.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""back at Alice's email. Let's click on the link to her""" start="00:03:20.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive. Here's Alice's hyperdrive. Let's open her""" start="00:03:23.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hello.org file.""" start="00:03:28.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'm being prompted to mark Alice's hyperdrive. Currently,""" start="00:03:33.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it's unknown. I'll press ? to see more details.""" start="00:03:37.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;safe&quot;, &quot;unsafe&quot;, &quot;unknown&quot;. I'll press e for &quot;explain&quot;. In the info""" start="00:03:41.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""manual, it says that if a hyperdrive is marked as safe, that""" start="00:03:48.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""means files in that hyperdrive will automatically have""" start="00:03:54.140" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""their major mode enabled based on their file extension. In""" start="00:03:57.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this case, if I mark Alice's hyperdrive as safe and I click on""" start="00:04:02.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this hello.org file, Emacs will automatically enable Org""" start="00:04:06.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""mode in that file. Since I know Alice directly, I'll mark her""" start="00:04:10.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive as safe. I'll click on the file hello.org again,""" start="00:04:14.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and now I'll press Shift-s for safe.""" start="00:04:19.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'm going to set Alice's petname. hyperdrive.el has""" start="00:04:25.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""different ways to name a hyperdrive. The public key is the""" start="00:04:30.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""drive's unique identifier. You can also assign yourself a""" start="00:04:34.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""public nickname, which you announce to the world. Then""" start="00:04:38.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""users on their own machines can assign each hyperdrive that""" start="00:04:42.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""they are aware of a private petname. I'll assign Alice a""" start="00:04:45.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""petname, which is the way that I will identify Alice just on""" start="00:04:50.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""my own machine. I'll type in &quot;My Friend Alice&quot;.""" start="00:04:54.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then when I refresh her drive,""" start="00:05:01.907" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see that it says petname in the top left.""" start="00:05:03.708" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'll do what she asks,""" start="00:05:07.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is to right click on her name and""" start="00:05:09.393" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""open her peer graph. In the context menu, I see a few""" start="00:05:11.614" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""different actions I can take, but I'll click on &quot;Peer Graph&quot;.""" start="00:05:15.260" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's prompting me to pick the max hops for sources. Default 3.""" start="00:05:19.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll choose the default. Same for blockers. I'll explain""" start="00:05:22.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""what that means later.""" start="00:05:26.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is Alice's peer graph. Here we can see that Alice has two""" start="00:05:30.380" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""direct sources, Bob and Eve. Both Bob and Eve have assigned""" start="00:05:35.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""themselves nicknames, and so we see Bob and Eve here. Eve has""" start="00:05:41.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""assigned this other hyperdrive to be a source. But this""" start="00:05:45.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""other hyperdrive, whose public key is &quot;kb3zr6mq&quot;""" start="00:05:50.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and so on--if we hover over the hyperdrive, we'll see the full""" start="00:05:55.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""public key--has not assigned itself a nickname. So we""" start="00:05:59.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""just see the truncated short public key. Because we've""" start="00:06:03.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""assigned a petname for Alice,""" start="00:06:08.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see Alice's petname show up here.""" start="00:06:10.918" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'll open the peer list view to show the same""" start="00:06:14.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""information in a different way. Since I'm using a large""" start="00:06:17.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""font, I'll widen this window so we can see everything going""" start="00:06:21.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on in the peer list. We see that the root hyperdrive is""" start="00:06:25.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""petname &quot;My Friend Alice&quot;, nickname &quot;alice&quot;, public key &quot;dm1&quot;,""" start="00:06:29.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and so on. We've set the sources max hops to three, which means""" start="00:06:33.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that we will go out at most three hops from Alice in order to""" start="00:06:38.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""find sources. One hop from Alice are Bob and Eve. One hop""" start="00:06:42.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from Eve is &quot;kb3&quot;, which is two hops from Alice. Now we've set""" start="00:06:49.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the max hops for sources to three, but in this case, the""" start="00:06:55.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""network is small, and &quot;kb3&quot; has no sources. So we can only go""" start="00:06:59.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""out two hops from Alice until we run out of sources. In the""" start="00:07:04.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""future, we plan to add a search feature based on this list of""" start="00:07:07.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""sources. You type in a query, and you get back a list of""" start="00:07:11.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""results published by Eve, Bob, or &quot;kb3&quot;. It's also possible to""" start="00:07:14.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""block peers. I'll open the transient menu by pressing""" start="00:07:19.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""question mark. For now, let's turn on showing blocked""" start="00:07:23.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peers. I'll press &quot;s x&quot;, and now it says blocked sources.""" start="00:07:28.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now we can see Mallory also shows up. Mallory has been""" start="00:07:35.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""included as a source by Eve, but is blocked. So in the end""" start="00:07:38.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""result, she does not show up in the list of sources. Instead,""" start="00:07:43.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""she shows up as a blocked source. But how is it that Mallory""" start="00:07:47.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ended up being blocked? Let's open up the transient menu""" start="00:07:51.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""once more and click &quot;s b&quot; to show blockers. Now we can see that""" start="00:07:55.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Bob has blocked Mallory. This means that Bob is not""" start="00:08:02.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""interested in seeing search results from Mallory. Since""" start="00:08:07.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Alice has included Bob as a blocker, that means that Alice""" start="00:08:12.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""trusts Bob to block people on her behalf. So since Bob has""" start="00:08:17.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""blocked Mallory, Mallory does not show up in Alice's""" start="00:08:23.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peergraph as a source. Well, now I'm curious to see what it is""" start="00:08:27.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Mallory published that drove Bob to block her. I'll""" start="00:08:31.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""right-click on Mallory, and in the context menu, &quot;Open Hyperdrive&quot;""" start="00:08:35.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and... Wingsuit Flying Grand Canyon Point of View Not Clickbait?""" start="00:08:39.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I gotta check this out! [playing: Rick Astley's &quot;Never Gonna Give You Up&quot;]""" start="00:08:44.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""No! Disgusting! No wonder Bob blocked Mallory. Let's go""" start="00:08:49.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""back to Alice's peer graph. Mallory is a blocked source.""" start="00:08:56.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Are there any peers who are blocked but who aren't sources?""" start="00:09:01.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll open the transient menu and I'll press &quot;s x&quot;. Now we're""" start="00:09:05.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""looking at blocked non-sources. Darth, who's been blocked""" start="00:09:11.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""by Bob, has not been added by any of Alice's sources as a""" start="00:09:16.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""source. So Darth is a blocked non-source. I'll open the""" start="00:09:20.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""transient menu again and I'll press &quot;s x&quot;. Now we're""" start="00:09:25.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""looking at all blocked peers. Both Mallory and Darth show""" start="00:09:29.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""up. If I scroll down in the peer list, we'll see that Mallory""" start="00:09:34.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is listed under blocked sources, and Darth is listed under""" start="00:09:37.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""blocked non-sources. This view has gotten a little bit busy.""" start="00:09:42.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's say that we're only interested in how Alice""" start="00:09:45.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""relates to Mallory. I'll open the transient menu, and I""" start="00:09:49.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""will filter the graph to show paths only to Mallory. I'll""" start="00:09:54.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""press &quot;o a&quot;, type in Mallory, and hit enter. Now we see that""" start="00:09:58.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Mallory has a bold border and &quot;kb3&quot; and Darth are missing from""" start="00:10:05.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the graph. Eve shows up because there's a path from Alice to""" start="00:10:11.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Mallory that goes through Eve. Same for Bob. We can also add""" start="00:10:16.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""more than one peer in this view. I'll press &quot;o a&quot; again, and""" start="00:10:22.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this time I'll choose Darth. Now Darth and Mallory have bold""" start="00:10:28.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""borders, and &quot;kb3&quot; is still missing. We can remove Mallory and""" start="00:10:34.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Darth one at a time with &quot;o r&quot;, or we can press C-u, the""" start="00:10:38.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""universal prefix argument, and then &quot;o r&quot; to remove both""" start="00:10:42.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Mallory and Darth from the list. Now we're back to seeing""" start="00:10:47.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""everybody. This view of the graph is somewhat simplified""" start="00:10:51.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because we're showing only""" start="00:10:55.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the shortest paths between peers.""" start="00:10:57.538" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If I press Shift-s now we're looking at all paths.""" start="00:11:00.239" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here, we can see that in addition to going from Alice to""" start="00:11:06.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Bob as a source directly, we also go from Alice to Bob through""" start="00:11:10.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Eve as a source. Let's go back to showing only the shortest""" start="00:11:15.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""paths. Currently, the max hops for sources and for blockers""" start="00:11:21.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is set to 3. Let's see what happens if we set the""" start="00:11:27.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""blockers max hops to 0.""" start="00:11:31.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""After the graph reloads, we now see that Mallory""" start="00:11:35.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""shows up as a source, not as a blocked source.""" start="00:11:39.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is because Bob,""" start="00:11:43.287" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""who is one hop away from Alice, is no longer included as a""" start="00:11:44.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""blocker, because we've set the blockers max hops to 0. And""" start="00:11:49.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""since Bob is not a blocker, the fact that Bob blocks Mallory""" start="00:11:52.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""doesn't factor in. While Alice is the only one who gets to""" start="00:11:57.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""decide who her direct sources, blockers, and blocked peers""" start="00:12:01.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""are, anyone can view Alice's peer graph, tinker with the""" start="00:12:05.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""sources or blockers max hops, and use her list of sources to""" start="00:12:10.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""do a search. Let's see what happens if we set sources max""" start="00:12:14.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hops to 2. Well, the graph doesn't change, because we only""" start="00:12:19.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ever went out 2 hops anyway. Let's set source's max hops to 1.""" start="00:12:24.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now we only see Bob and Eve, since &quot;kb3&quot; and Mallory are""" start="00:12:30.140" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""2 hops out. Source hops 0. Now we're left with just Alice.""" start="00:12:35.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'd like to create a new hyperdrive and add Alice as a""" start="00:12:44.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""source. I'll run M-x hyperdrive-new.""" start="00:12:48.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now it's prompting me""" start="00:12:52.732" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for a new hyperdrive seed. A seed is a string of characters""" start="00:12:53.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that's combined with your secret key, which is generated""" start="00:12:57.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for you by the gateway program, in order to create a new""" start="00:13:01.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""public key for each new hyperdrive. I'll type in &quot;Joseph&quot;.""" start="00:13:04.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""A new drive. Now, I'll right-click on my own name, and in the""" start="00:13:10.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""context menu, I'll choose &quot;Set Relation From&quot;. From Joseph...""" start="00:13:15.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to Alice...as a source. Now, I'll right-click on my name again,""" start="00:13:21.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and click on &quot;Peer Graph&quot;. Sources max hops, let's say three""" start="00:13:32.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and [three] for blockers as well,""" start="00:13:40.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here's the peer graph from my newly created""" start="00:13:45.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive's perspective. Mallory is included as a""" start="00:13:49.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""source, three hops from the root. Let's open the list view.""" start="00:13:54.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If we were to mark Alice as a blocker by clicking on this""" start="00:14:01.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""button in the blocker column next to the petname for Alice,""" start="00:14:06.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then we see that Mallory shows up as a blocked source. Only""" start="00:14:12.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""now that Joseph includes Alice as a blocker does the fact""" start="00:14:16.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that Bob blocked Mallory take effect. You can click on""" start="00:14:21.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""another peer to set them as the root hyperdrive. I'll click""" start="00:14:26.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on Eve. Now we're looking at the peer graph from Eve's""" start="00:14:30.540" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""perspective. This peer graph view has a history. If I open""" start="00:14:35.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the transient menu, you'll see here there's a back and a""" start="00:14:39.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""forward button. Back is bound to &quot;l&quot; for &quot;left&quot;. If I press &quot;l&quot;,""" start="00:14:42.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we're looking at the graph from Joseph's perspective. If I""" start="00:14:48.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""press &quot;l&quot; again, now we're looking at Alice, as at the""" start="00:14:51.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""beginning. I'll press &quot;r&quot; to go forward, and &quot;r&quot; again, and now""" start="00:14:56.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we're back at Eve. Now, I'd like to show you""" start="00:15:01.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the hyperdrive-org-transclusion package we published.""" start="00:15:04.735" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll open up the hyperdrive manual""" start="00:15:08.338" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to see how to install it.""" start="00:15:10.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, from here, I'll press &quot;m&quot; and type in transclusion to jump""" start="00:15:15.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""straight to the &quot;Org-transclusion integration&quot; section of""" start="00:15:21.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the manual. To summarize, we can install""" start="00:15:23.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive-org-transclusion with""" start="00:15:27.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""M-x package-install RET hyperdrive-org-transclusion.""" start="00:15:32.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then, once this is done, we will copy the following snippet""" start="00:15:37.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and add it either to our init.el file or, in this case, I'll""" start="00:15:43.780" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""just evaluate it. Now, hyperdrive-org-transclusion-mode is""" start="00:15:47.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""enabled.""" start="00:15:52.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's go back to the hello.org file in Alice's hyperdrive.""" start="00:15:58.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll right-click on Alice, then click &quot;Open Hyperdrive&quot;, and""" start="00:16:01.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hit RET on hello.org. This time, I'm not prompted to mark""" start="00:16:07.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Alice's hyperdrive as safe, since we did it already. I'll""" start="00:16:11.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""navigate to the &quot;Check out my peers&quot; heading. Then I'll run""" start="00:16:16.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""M-x org-store-link. Now, I'll create a new file in my""" start="00:16:20.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive by running M-x hyperdrive-find-file. I'll""" start="00:16:28.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""select my hyperdrive and I'll call this new file""" start="00:16:32.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""response-to-alice.org.""" start="00:16:38.489" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, I'll paste in a response that I've written.""" start="00:16:45.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll go to the bottom and I will run M-x org-insert-link""" start="00:16:50.781" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll insert the link""" start="00:16:57.980" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I stored earlier. As a link""" start="00:16:59.424" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""description, I'll change it to""" start="00:17:02.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;Snippet from Alice's hyperdrive file&quot;.""" start="00:17:08.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll save my hyperdrive file.""" start="00:17:12.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, to show that the link works, I'll just kill this buffer""" start="00:17:18.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""showing the hello.org file, and I'll click on the link.""" start="00:17:21.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, in addition to linking from my file""" start="00:17:27.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the heading in Alice's file,""" start="00:17:29.488" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'd like to transclude this heading's content in my file.""" start="00:17:31.489" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll go to the link in my file and run""" start="00:17:35.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""M-x org-transclusion-make-from-link""" start="00:17:38.635" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll save my file again.""" start="00:17:45.401" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""All that's been added is another link,""" start="00:17:47.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""prefixed with this transclude keyword.""" start="00:17:50.505" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""To make the transclusion show up inline,""" start="00:17:54.434" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll run M-x org-transclusion-add. The content""" start="00:17:57.035" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of Alice's file hasn't been copied into mine. It's just""" start="00:18:02.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""being transcluded. If I run M-x org-transclusion-remove,""" start="00:18:05.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you'll see that the underlying content is still""" start="00:18:12.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""just the transclude keyword and the link.""" start="00:18:15.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now some time has passed and Alice has updated her""" start="00:18:21.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive file. She wrote, &quot;Please add me as a source.&quot; Since""" start="00:18:24.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the transclude link that I added in my file does not specify a""" start="00:18:29.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""version, it will always transclude the latest version of""" start="00:18:33.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Alice's hello.org file. If I run M-x org-transclusion-add""" start="00:18:36.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""once more, we'll see that the latest version of Alice's""" start="00:18:42.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""file gets transcluded into mine. Let's say that I want to""" start="00:18:46.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""transclude the previous version of Alice's hello.org""" start="00:18:51.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""file, and I don't want my transclusion to change when Alice""" start="00:18:54.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""updates her file. That's possible too. I'll go over to her""" start="00:18:58.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""file and run M-x hyperdrive-open-previous-version. Now""" start="00:19:02.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""when I widen the window a little, we can see in the mode line""" start="00:19:09.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that this is version 57. For an explanation of what the""" start="00:19:14.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""version numbers mean, check out the last video or the info""" start="00:19:18.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""manual. For now, I'll go down to her &quot;Check out my peers&quot;""" start="00:19:21.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""heading and run M-x org-store-link. Now, in my response to""" start="00:19:25.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Alice, I'll insert the link. I'll run org-transclusion-make-from-link.""" start="00:19:33.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now there are two transclusions. The first""" start="00:19:39.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""transclusion will update whenever Alice updates her file,""" start="00:19:44.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the second transclusion is pinned to version 57.""" start="00:19:47.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That covers hyperdrive-install, the peer graph, and""" start="00:19:52.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive-org-transclusion.""" start="00:19:53.357" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Feel free to check out the hyperdrive.el""" start="00:19:58.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""info manual in the ushin hyperdrive here, or on the""" start="00:20:00.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ushin.org website. Thanks to the folks at Sopranica, we""" start="00:20:04.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""have a public XMPP group chat you can join, either using an""" start="00:20:08.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""XMPP client or anonymously from your browser. If you use""" start="00:20:11.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Matrix, there's also a bridge. Thank you for watching, and""" start="00:20:15.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Thank you to the EmacsConf organizers and all the""" start="00:20:19.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""presenters who made this wonderful event possible.""" start="00:20:22.520" video="mainVideo-hyperdrive" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+<div class="transcript transcript-qanda"><a name="hyperdrive-qanda-transcript"></a><h1>Q&A transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""New version of hyperdrive.el""" start="00:00:00.000" video="qanda-hyperdrive" id="subtitle"]]</div>[[!template text="""One thing I wanted to mention was that""" start="00:00:00.000" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""as with last year, I just released a new version of""" start="00:00:02.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive.el and it depends on the latest release of""" start="00:00:08.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""transient.el and so if you are going to install this""" start="00:00:13.477" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""package, make sure that you restart your Emacs after you""" start="00:00:19.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""install it, if you aren't already up to date with transient,""" start="00:00:25.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""which was released yesterday. Otherwise, since it, this""" start="00:00:29.797" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""latest version of transient.el updates the transient""" start="00:00:35.317" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""prefix EIEIO class, and it won't work unless you restart""" start="00:00:40.877" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Emacs. Okay, well, good to know. I think that's a small price""" start="00:00:46.317" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to pay to be on a bleedingest of bleeding edges. All right, I""" start="00:00:50.997" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""see there's a question here. Let me see if I can read it. Yeah,""" start="00:00:57.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""sure. Do you want me to field it to you or do you want to read it?""" start="00:00:59.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Oh, sure. Go ahead. I'd love to hear you read it. Sure.""" start="00:01:01.277" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Thank you. So first question. Hi there.""" start="00:01:04.105" video="qanda-hyperdrive" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Network effects are tricky - do you know of any public shares people can join to try this tool out properly?""" start="00:01:06.687" video="qanda-hyperdrive" id="subtitle"]]</div>[[!template text="""Thank you for the talk.""" start="00:01:06.687" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I enjoyed watching it. I tried this tool last year and it""" start="00:01:07.788" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""seemed to work well, but I don't know anyone who actually""" start="00:01:10.757" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""uses it. Network effects are tricky. Do you know of any""" start="00:01:13.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""public shares people can join to try to try this tool out""" start="00:01:16.517" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""properly? Thank you. Network effects are indeed tricky.""" start="00:01:19.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Yeah. That's kind of part of the purpose of the peer graph is""" start="00:01:24.397" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to make it easier to discover peers in a way that's more, uh,""" start="00:01:29.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""more reliable and consistent than just somebody puts a""" start="00:01:34.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""public key on Reddit and then it's lost unless somebody""" start="00:01:37.957" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""finds it. Um, but the, the public keys that I know of are,""" start="00:01:42.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""there's the public key for the Ushin hyperdrive, which is""" start="00:01:50.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""basically just the same content that's on the website""" start="00:01:53.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""mirrored to a hyperdrive. Um, and then there are a few other""" start="00:01:56.237" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""ones. There's like, uh, hypha.coop has some WebZine""" start="00:02:00.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""content accessible via HyperDrive and also via IPFS. And""" start="00:02:07.317" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""then mauvesignweaver has a blog that's also available on""" start="00:02:13.797" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Hyper. So that's blog.mauve.moe .""" start="00:02:19.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But besides that, that's kind of the purpose of this""" start="00:02:23.197" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""peer graph thing is to make it easier to discover other""" start="00:02:28.277" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""peers. Yeah, to make it also very visual in a way, because,""" start="00:02:31.757" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you know, I personally, it's funny because it reminded me of""" start="00:02:36.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""talks that I did in the past about the trust system for PGP""" start="00:02:40.437" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""keychains, because at the end of the day, you know, this""" start="00:02:45.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""trust system, whether you trust someone absolutely or""" start="00:02:47.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""relatively, the blocking system, it feels very related.""" start="00:02:50.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Any kind of a chain of trust like this, feels very""" start="00:02:53.877" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""reminiscent, obviously, but it felt very nice that for you,""" start="00:02:57.357" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you had a dynamic display of this web of trust. Whereas for""" start="00:03:00.437" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""me, I had to make fancy diagram in ticks, in latex, just to""" start="00:03:04.677" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""make sure that people understood what was actually going""" start="00:03:08.837" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""on. Yeah, one thing I want to point out is just the difference""" start="00:03:14.957" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""in utility for something like the PGP web of trust versus""" start="00:03:21.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""this kind of network of peers is, if I understand right, the""" start="00:03:25.557" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""main purpose of web of trust is to identify that a certain""" start="00:03:29.957" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""public key is actually created by the person that they claim""" start="00:03:34.717" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to be. So you have a way of identifying that a key actually""" start="00:03:42.517" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""matches like a government identity. Whereas this kind of""" start="00:03:46.037" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""network of peers has nothing to do with authenticating a key""" start="00:03:49.997" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""or associating a key with an identity, like a government""" start="00:03:53.357" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""identity. The purpose is exclusively just to get more peers""" start="00:03:57.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to be able to discover more peers who have things that are""" start="00:04:03.397" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""worth reading.""" start="00:04:07.277" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Yeah, it's a different take on a concept, but even though the""" start="00:04:07.677" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""concept might be the same, I find there's a wealth of things""" start="00:04:14.357" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that can be done thanks to this, because as you said, you""" start="00:04:18.837" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""trust someone to send you a file that is trustworthy. Well,""" start="00:04:21.717" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""with PGP, it's mostly about communication, but about file""" start="00:04:25.397" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""sharing, it just opens up completely new avenues. Yeah. Do""" start="00:04:28.237" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you have anything else to add? And about that, I think one of""" start="00:04:33.357" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the barriers to the PGP web of trust is that it required""" start="00:04:40.517" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""getting together to have key parties to meet people and""" start="00:04:45.477" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""verify identities. Whereas with this kind of thing,""" start="00:04:48.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""there's no need to do that because so long as your content is""" start="00:04:51.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""interesting, it doesn't matter that you're not who you""" start="00:04:54.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""claim to be or that you don't even claim to be anybody. Yeah, I""" start="00:04:57.877" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""mean, again, as you mentioned, it's not about identifying""" start="00:05:01.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""people, it's just about identifying value, in a way, in the""" start="00:05:04.557" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""content that people share. It has nothing to do with""" start="00:05:08.197" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""verifying their actual identity. But again, it's the same""" start="00:05:10.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""technology, it's the same understanding, but for""" start="00:05:13.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""different applications, which is lovely because""" start="00:05:16.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""programming is fractals all over. The same problems repeat""" start="00:05:18.557" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""themselves and the same solutions show up for widely""" start="00:05:22.117" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""different scenarios, which is always good. Yeah. Anything""" start="00:05:24.837" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""else? One more thing. Yeah. One more thing is that I wanted to""" start="00:05:26.997" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""give some kudos to, um, some of the other projects that""" start="00:05:32.677" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""inspired the pure graph work. One of them is Adam Porter's or""" start="00:05:36.957" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""graph view, um, which is a, um, a tool for visualizing""" start="00:05:42.797" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""different nodes in an org file and how they link to one""" start="00:05:50.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""another. Um, he did. the pioneering work to figure out how to""" start="00:05:55.277" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""render interactive graphs with GraphViz. And so we worked""" start="00:06:01.877" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""together on it and kind of hacked down the last parts that""" start="00:06:07.317" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""weren't working correctly. And so this is inspired a lot.""" start="00:06:12.477" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""The user interface is inspired a lot by Adam's work. And then""" start="00:06:16.797" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""also the idea of having people that you mark as blockers and""" start="00:06:19.317" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""block is inspired by another project called TrustNet by""" start="00:06:26.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Alex Cobleigh. I can type in the link there. Alex, how do you""" start="00:06:31.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""spell it? Cobleigh? Yeah, I'll type it in here. Thank you. And I""" start="00:06:37.197" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""think the link is https://cblgh.org/trustnet. I think that is it.""" start="00:06:43.517" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I'm not totally sure. But yeah. Okay, well, that's very good.""" start="00:06:50.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and thank you for giving credits to the inspiration, because""" start="00:06:57.837" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""again, nothing is done without context, and it's always nice""" start="00:07:01.397" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""in the free software world to acknowledge people who have""" start="00:07:05.557" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""influenced us, because it's very nice when people start""" start="00:07:08.517" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""contributing, maintaining software, publishing stuff""" start="00:07:11.677" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that they actually start collaborating with people who've""" start="00:07:14.557" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""inspired them, which is a nice way to climb over the shoulders""" start="00:07:17.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""of giants, which this community likes so much. All right,""" start="00:07:21.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""moving on to the next question. We are, we have about seven""" start="00:07:25.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""more minutes for questions, so we're still good.""" start="00:07:28.677" video="qanda-hyperdrive" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: blocklist or whitelist so I can make them containing useful information for only me while also being useful with in a public sense""" start="00:07:31.064" video="qanda-hyperdrive" id="subtitle"]]</div>[[!template text="""Second question, one use case for this sharing and building upon""" start="00:07:31.064" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""second brain, sorry, one use case for this is sharing and""" start="00:07:33.957" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""building upon second brains, i.e. Zettelkasten, that's""" start="00:07:37.997" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""denote or what I'm actually doing, but a blocker for me""" start="00:07:41.437" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""wanting to make one public is wanting to use a block list or""" start="00:07:44.397" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""whitelist so that I can make them... Cautioning?""" start="00:07:46.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Quarantining? Containing. Yes, definitely containing.""" start="00:07:51.557" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Why did I go for quarantine rather than containing? I guess""" start="00:07:56.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""my brain went to a dark place from the 2020s. So I can make""" start="00:07:59.757" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""containing useful information for only me while also being""" start="00:08:04.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""useful in a public sense. Yes, I think your question is about""" start="00:08:08.997" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""how to keep some of the content of your Zettelkasten private""" start="00:08:16.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and only have certain parts of it be public. If your desire is""" start="00:08:22.277" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to only share certain files in your Zettelkasten, then you""" start="00:08:29.957" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""can use the hyperdrive mirror command that we demonstrated""" start="00:08:35.797" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""in the Emacs 2023 talk. In short,""" start="00:08:43.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""It lets you specify either a regular expression that""" start="00:08:48.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""matches only some of the files that'll get uploaded from a""" start="00:08:53.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""directory of files on your machine. And only the files that""" start="00:08:58.037" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""match that regex will be put into the hyperdrive and shared""" start="00:09:02.237" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""with the world. But it doesn't have to be a regex. It could be a""" start="00:09:05.717" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""lambda. So it could match based on file size or modification""" start="00:09:08.797" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""time or really whatever you like. So I hope that answers your""" start="00:09:13.277" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""question. Great. And I personally, as someone who loves""" start="00:09:18.997" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""tinkering with my Elisp, I particularly like the ability to""" start="00:09:23.957" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""specify things with a lambda because it just opens up the""" start="00:09:27.877" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""ceiling of the possibilities with interactions between""" start="00:09:31.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""different parts of software. And, you know, as I have worked""" start="00:09:34.357" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""significantly in Org Roam, I could definitely see""" start="00:09:37.317" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""interactions with lambdas here to make sure that we can send""" start="00:09:39.957" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and share files based on the filter list that is""" start="00:09:44.117" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""incrementally added to thanks to those lambdas. So thanks""" start="00:09:47.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""for this. One more thing I want to add about that is that the,""" start="00:09:51.037" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that same question of being able to upload only certain""" start="00:09:55.117" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""files while leaving others to be private was something""" start="00:10:00.117" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that was inspired by Karl Voit. I had an email thread with""" start="00:10:04.317" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""him in which he talked about how he uses his file tags project""" start="00:10:07.557" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to organize his files. And he'll put a public tag on the files""" start="00:10:16.037" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""in his org database that he wants to have be published to his""" start="00:10:21.677" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""website. And so you could very easily just set a regular""" start="00:10:26.477" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""expression matches that public tag and then all of the other""" start="00:10:29.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""files would be not shared. Yeah, and, oh, sorry, I was, I""" start="00:10:33.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""misclicked, I was talking to production for a second. First""" start="00:10:39.677" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""time it happens today, so I think this is a testament to the""" start="00:10:42.717" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""level of tightness. But yeah, as you were saying, whatever""" start="00:10:45.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""heuristics you want is actually a good thing. I think people""" start="00:10:47.997" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""are a little antsy because they tend to brain dump into their""" start="00:10:51.397" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Org Roam, Zettelkasten, Denote, and they""" start="00:10:54.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""really don't want some of their personal notes being out""" start="00:10:59.837" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""there. And well, if you are worried about this, I think""" start="00:11:02.517" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""learning some Elisp and implementing some Lambda function""" start="00:11:05.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that allows you to filter with intention might be the best""" start="00:11:09.357" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""solution for you. So I hope we've covered the question as""" start="00:11:13.117" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""well as we could have. Next question is more about an idea""" start="00:11:17.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""about trying hyperdrive to distribute the Worg. Does that""" start="00:11:21.437" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""make sense to you? Yeah, I mean, you could distribute""" start="00:11:24.997" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""whatever you wanted. I think that'd be a great idea. Okay,""" start="00:11:28.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""great. Moving to the next question, and we have about three""" start="00:11:32.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""minutes, so I think we'll cover the last two questions and""" start="00:11:36.117" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""we'll move on to the next talk after that.""" start="00:11:38.317" video="qanda-hyperdrive" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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.)?""" start="00:11:41.024" video="qanda-hyperdrive" id="subtitle"]]</div>[[!template text="""Could you comment on the visualization thing,""" start="00:11:41.024" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Org visualization, and your""" start="00:11:43.165" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""experience with this type of content in buffers and the""" start="00:11:44.717" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""various possibilities, SVG, et cetera?""" start="00:11:47.237" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Sure. So one thing that we worked on was I added a patch that""" start="00:11:52.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""was merged as part of Emacs 30, which fixes the way that image""" start="00:11:59.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""maps scale when images are scaled. So as an Emacs 30, if you""" start="00:12:05.157" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""zoom in on an image or shrink an image or rotate an image, now""" start="00:12:14.197" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the image map, which is the overlay, so it's not actually an""" start="00:12:19.277" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""overlay, but it's, so to speak, it's an overlay that allows""" start="00:12:24.277" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the images to be clickable based on, you know, where the""" start="00:12:26.717" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""actual visual display is. You can also click on it or hit help""" start="00:12:30.117" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""echo. And as of Emacs 30, now that scales with the image""" start="00:12:32.757" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""itself.""" start="00:12:37.357" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""The code to make that work on previous versions of Emacs, you""" start="00:12:37.797" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""can see the advice that we added in hyperdrive-sbb-view, that""" start="00:12:45.237" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""file in hyperdrive.el, if you're curious to see how you""" start="00:12:51.757" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""could polyfill that code, so to speak, to make it work on""" start="00:12:55.957" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""previous versions of Emacs before Emacs 30. But it works""" start="00:13:01.197" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""great. The way that this works is we generate a GraphViz""" start="00:13:06.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""string that will be sent to GraphViz to render an SVG and also""" start="00:13:11.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""render a CMAPX string. We pipe those back into Emacs and then""" start="00:13:16.717" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""we generate the image map from the CMAPX file and then we put""" start="00:13:23.677" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that image map with the SVG, and we render it in a buffer.""" start="00:13:27.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Works pretty well. You can check out the code to see exactly""" start="00:13:32.597" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""how it works. OK, great. Well, sadly, I think we are a little""" start="00:13:37.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""short on time to cover the last two questions. So Joseph, if""" start="00:13:41.877" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you want to take a little bit of time maybe to answer the""" start="00:13:44.997" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""questions in the BBB, you can just do this, even though the""" start="00:13:47.237" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""stream will be moving to the next talk. But I'll use the""" start="00:13:51.197" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""opportunity to thank you both for the talk and for your""" start="00:13:54.477" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""answers, because they were very insightful. And thank you""" start="00:13:57.717" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""so much for taking the time to be with us today. Thank you,""" start="00:14:00.317" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Leo. Enjoy the rest of the conference. Any last words in""" start="00:14:03.637" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""about 15 seconds? Thank you. I'm grateful for your taking""" start="00:14:05.877" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""all this time to make this conference possible. Well, you""" start="00:14:10.357" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""know, the conference would be nothing without the speakers""" start="00:14:14.077" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""coming and chatting, so you are the ones to thank. I mean, we""" start="00:14:16.917" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""like the thanking, obviously, but it's mostly you doing the""" start="00:14:19.677" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""work. All right. Thank you, Joseph. We'll see you later.""" start="00:14:21.797" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Bye-bye.""" start="00:14:26.157" video="qanda-hyperdrive" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [contact@ushin.org](mailto:contact@ushin.org?subject=Comment%20for%20EmacsConf%202023%20hyperdrive%3A%20New%20in%20hyperdrive.el%3A%20quick%20install%2C%20peer%20graph%2C%20transclusion%21)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/hyperdrive-before.md b/2024/info/hyperdrive-before.md
index 023808ed..1f1493d8 100644
--- a/2024/info/hyperdrive-before.md
+++ b/2024/info/hyperdrive-before.md
@@ -1,18 +1,24 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 21-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
+
+
-The following image shows where the talk is in the schedule for Sat 2024-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="hyperdrive">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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 stroke-width="3" x="528" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 20-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-hyperdrive.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="2024-12-07T20:25:00Z" end="2024-12-07T20:45:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~3:25 PM - 3:45 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~2:25 PM - 2:45 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~1:25 PM - 1:45 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~12:25 PM - 12:45 PM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~8:25 PM - 8:45 PM UTC <br />Saturday, Dec 7 2024, ~9:25 PM - 9:45 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~10:25 PM - 10:45 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~1:55 AM - 2:15 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~4:25 AM - 4:45 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~5:25 AM - 5:45 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+<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 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="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/hyperdrive-nav.md b/2024/info/hyperdrive-nav.md
index 8eceed72..177c0d11 100644
--- a/2024/info/hyperdrive-nav.md
+++ b/2024/info/hyperdrive-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/casual">Re-imagining the Emacs user experience with Casual Suite</a>
-Next by time: <a href="/2024/talks/repro">Reproducibly building Emacs: “Hey your checksum is the same as mine!”</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/casual">Re-imagining the Emacs user experience with Casual Suite</a>
+Next by track: <a href="/2024/talks/writing">Emacs Writing Studio</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/hywiki-before.md b/2024/info/hywiki-before.md
index 6019754d..ec089722 100644
--- a/2024/info/hywiki-before.md
+++ b/2024/info/hywiki-before.md
@@ -1,14 +1,9 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="hywiki">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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 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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 20-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-hywiki.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="2024-12-08T18:00:00Z" end="2024-12-08T18:20:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~1:00 PM - 1:20 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~12:00 PM - 12:20 PM CST (US/Central)<br />Sunday, Dec 8 2024, ~11:00 AM - 11:20 AM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~10:00 AM - 10:20 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~6:00 PM - 6:20 PM UTC <br />Sunday, Dec 8 2024, ~7:00 PM - 7:20 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~8:00 PM - 8:20 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~11:30 PM - 11:50 PM IST (Asia/Kolkata)<br />Monday, Dec 9 2024, ~2:00 AM - 2:20 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~3:00 AM - 3:20 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Format: 20-min talk cancelled
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Sorry, this talk has been cancelled
+
diff --git a/2024/info/hywiki-nav.md b/2024/info/hywiki-nav.md
index a34fc554..35ed938a 100644
--- a/2024/info/hywiki-nav.md
+++ b/2024/info/hywiki-nav.md
@@ -1,7 +1,4 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/hyperbole">Fun things with GNU Hyperbole</a>
-Next by time: <a href="/2024/talks/pgmacs">PGmacs: browsing and editing PostgreSQL databases from Emacs</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
-</div>
+</div> \ No newline at end of file
diff --git a/2024/info/julia-after.md b/2024/info/julia-after.md
index 7a3e5008..9a498298 100644
--- a/2024/info/julia-after.md
+++ b/2024/info/julia-after.md
@@ -1,7 +1,335 @@
<!-- 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%20julia%3A%20Exploring%20shared%20philosophies%20in%20Julia%20and%20Emacs)
+<div class="transcript transcript-mainVideo"><a name="julia-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hello, I'm very excited to tell you""" start="00:00:00.000" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""about shared philosophies""" start="00:00:02.360" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""between the Julia programming language and Emacs.""" start="00:00:03.680" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""While Julia and Emacs might look like""" start="00:00:06.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""different pieces of software,""" start="00:00:08.680" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""I think there is profound commonalities between the two.""" start="00:00:10.280" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Let's start by introducing Julia.""" start="00:00:13.440" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Julia is a high-level dynamic programming language.""" start="00:00:16.360" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Julia is free and open source software""" start="00:00:19.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and is used primarily for scientific computing.""" start="00:00:21.680" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""The reason Julia is used for scientific computing""" start="00:00:24.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""is that while Julia is high level""" start="00:00:27.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and has a syntax that looks like Python or MATLAB,""" start="00:00:29.680" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Julia can be high performance.""" start="00:00:32.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""I use it to develop climate models""" start="00:00:34.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""that run on hundreds of GPUs.""" start="00:00:36.520" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Models that are traditionally developed with C, C++, or Fortran.""" start="00:00:38.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""But how is this possible?""" start="00:00:43.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""How can Julia be high performance""" start="00:00:44.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""but also high level at the same time?""" start="00:00:46.800" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""What makes Julia, Julia?""" start="00:00:48.800" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Well, what makes Julia, Julia""" start="00:00:50.425" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""is the idea of multiple dispatch.""" start="00:00:52.470" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Multiple dispatch is the concept where a function call is resolved""" start="00:00:54.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""by looking at the types of every single argument involved.""" start="00:00:59.000" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, let's explore this with this example.""" start="00:01:02.360" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Here, I define a function add that takes two objects""" start="00:01:04.960" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and sums them together.""" start="00:01:07.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And I call add with two different types.""" start="00:01:09.160" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""First with just integers and second with floats.""" start="00:01:11.880" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, let's look at what this produces.""" start="00:01:14.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Here is the output of add in Julia.""" start="00:01:17.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, first we have add, a function with one method.""" start="00:01:20.440" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""I'm going to explain this in a second.""" start="00:01:23.280" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And then we have our return values 12 and 12.0.""" start="00:01:24.840" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""What we cannot see here is that""" start="00:01:28.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Julia has specialized code""" start="00:01:30.800" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""for the two different function calls.""" start="00:01:33.440" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""For integers and for floating points.""" start="00:01:35.120" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Let's make this more explicit by specifically providing""" start="00:01:38.360" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""a new method for the case with floating point.""" start="00:01:42.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So here, now I have an add function""" start="00:01:45.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""specifically for floating point. Instead of taking""" start="00:01:47.600" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""A + B, this returns A exponent B. Let's call this.""" start="00:01:50.120" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And what we can see here is that""" start="00:01:54.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""now we have two methods.""" start="00:01:56.800" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, we add a new method to the same function.""" start="00:01:58.320" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""This is a method that is""" start="00:02:00.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""specifically for floating points.""" start="00:02:01.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And instead of having the value 12, we have 100.""" start="00:02:03.680" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And this is where the trick lies.""" start="00:02:06.960" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Julia compiles the most, um, specialized version""" start="00:02:09.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""that can be compiled. So, a version with integers,""" start="00:02:13.880" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""a version with floats. And in this,""" start="00:02:16.840" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""compiling is an actual compilation with LLVM""" start="00:02:19.200" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""with optimization and so on.""" start="00:02:22.680" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""This is not just ahead of time compilation.""" start="00:02:24.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Soon as the Julia knows the type,""" start="00:02:27.440" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""a function is compiled if it's not compiled already""" start="00:02:30.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and then it's used.""" start="00:02:33.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""When types are stable and well inferred,""" start="00:02:35.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""this can lead to code that is as performant""" start="00:02:37.160" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""or comparable to C and Fortran.""" start="00:02:40.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, this is what makes Julia, Julia.""" start="00:02:42.160" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Multiple dispatch with just ahead of time compilation""" start="00:02:45.160" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""of highly efficient code.""" start="00:02:48.440" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So now, what makes Emacs, Emacs?""" start="00:02:49.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Well, in my opinion, what makes Emacs, Emacs""" start="00:02:53.440" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""is interactivity, extensibility, and community.""" start="00:02:56.680" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And I claim that Julia has the same three.""" start="00:03:01.160" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Interactivity, extensibility, and community""" start="00:03:06.200" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""are three key pillars for Julia.""" start="00:03:09.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""More specifically, Julia encourages a""" start="00:03:11.840" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""REPL-driven, introspective, interactive workflow.""" start="00:03:14.600" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""It's largely open to extension and modification""" start="00:03:17.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""to the point that most of Julia is written in Julia.""" start="00:03:19.880" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And Julia has a thriving and welcoming community""" start="00:03:23.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""with lots of packages. So, let me showcase""" start="00:03:25.960" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""a little bit of this REPL-driven, introspective,""" start="00:03:28.800" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""interactive workflow with the hope that commonalities""" start="00:03:31.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""with Emacs will emerge naturally.""" start="00:03:34.360" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, let's start by opening a Julia REPL.""" start="00:03:36.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Here, I have a Julia REPL.""" start="00:03:39.920" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Let me give you a tour of the Julia REPL.""" start="00:03:41.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, the REPL comes with lots of useful features,""" start="00:03:44.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""from a shell to a package manager.""" start="00:03:47.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, for example, let's add the random package.""" start="00:03:51.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Um, yeah, I have the random package.""" start="00:03:55.000" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""I can look at what's inside.""" start="00:03:58.280" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""We have the statistics with random""" start="00:03:59.280" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""in this particular environment.""" start="00:04:01.280" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Environments are fully declarative.""" start="00:04:02.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So here we have the dependencies of this environment.""" start="00:04:05.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And I can explore in this manifest,""" start="00:04:08.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""the specific versions that are used.""" start="00:04:10.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So we have a shell, we have a package manager,""" start="00:04:14.000" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and then we have a very powerful help system.""" start="00:04:17.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, for example, I can ask for help for length.""" start="00:04:20.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And here we can see we have, well,""" start="00:04:24.200" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""the help for length. Lots of information about""" start="00:04:26.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""how to call length, the expected return values,""" start="00:04:31.000" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""examples. And now you can probably start seeing that""" start="00:04:33.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""this is not that different from calling length.""" start="00:04:36.120" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So this is the output for length,""" start="00:04:37.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""or for help for length in in Emacs.""" start="00:04:42.120" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So we have help, and we can do more.""" start="00:04:45.000" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""We can even look at the source code for length.""" start="00:04:47.960" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So now, what we can see here is that now, well,""" start="00:04:51.880" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""we cannot see because it's zoomed in""" start="00:04:57.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""because the font size is huge, but in this page here,""" start="00:04:58.920" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""we can see the implementation of length.""" start="00:05:02.800" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""It's this line here in the middle,""" start="00:05:04.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""or these few lines here in the middle.""" start="00:05:06.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And as you... Let's do this again.""" start="00:05:09.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""As we can see here at the bottom,""" start="00:05:12.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""what we are looking at,""" start="00:05:13.000" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""this is the source code of Julia.""" start="00:05:13.800" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""We can change this.""" start="00:05:15.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""There's even a macro edit""" start="00:05:17.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""if you want to change its length.""" start="00:05:20.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And yeah, I use the word macro.""" start="00:05:22.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Julia supports metaprogramming.""" start="00:05:24.600" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And actually metaprogramming is""" start="00:05:28.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""one of the key features in Julia.""" start="00:05:30.360" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""It's used extensively in the core,""" start="00:05:32.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""but it's also used extensively in packages,""" start="00:05:33.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""both to extend the Julia ecosystem and functionalities,""" start="00:05:36.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""but also to develop full domain specific languages.""" start="00:05:40.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Some of the useful macros are, well, I don't know,""" start="00:05:43.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""like time. Here, we have a built-in""" start="00:05:47.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""basic performance tool in in in Julia.""" start="00:05:52.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And I want to showcase more introspection, macros.""" start="00:05:55.800" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""But for that, I'm going to do it slightly different.""" start="00:06:00.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""I'm going to open a file""" start="00:06:02.960" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""example.jl where I define a""" start="00:06:04.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""function, or our""" start="00:06:06.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""function add, there was an asterisk""" start="00:06:08.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and I will go back to that in a second.""" start="00:06:09.520" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So now, I am going to include this this file,""" start="00:06:11.200" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and I can call my function add, one and two,""" start="00:06:15.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and we get three. And now, what I can do is this.""" start="00:06:18.200" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""I can look at what code gets compiled""" start="00:06:22.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""when I call my when I call 1 + 2.""" start="00:06:28.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And here, now we can see""" start="00:06:31.360" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""that there is some integer stuff.""" start="00:06:33.360" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""But if I make this floating point,""" start="00:06:34.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""now the compiled code changes.""" start="00:06:38.160" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Now, maybe assembly code""" start="00:06:40.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""is a little bit too hard to read,""" start="00:06:43.600" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""so I can look at the LLVM IR representation.""" start="00:06:45.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""In this case we can see that there is promotion.""" start="00:06:48.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""The promotion will probably go away""" start="00:06:50.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""if I make everything float. So this we have F add,""" start="00:06:52.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""floating point add for a double,""" start="00:06:56.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""but we can also look at""" start="00:06:58.000" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""the Julia lowered representation""" start="00:06:59.440" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""after the abstract syntax tree is produced.""" start="00:07:04.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""The reason I put this in a file is because""" start="00:07:06.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""now what I can do is I can change this.""" start="00:07:07.920" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And now, one and two will be two.""" start="00:07:10.120" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So this to me is very reminiscent""" start="00:07:14.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""of how I work in Emacs,""" start="00:07:16.880" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""where there is a global state""" start="00:07:18.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""that I can access and modify any time""" start="00:07:20.240" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""with no restrictions. And this happens in in Julia too.""" start="00:07:22.960" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Typically, we don't want to modify functions""" start="00:07:27.160" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""that are in other packages or they are in base,""" start="00:07:29.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""but we can do that. For example,""" start="00:07:32.520" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""I can change what is plus for integers.""" start="00:07:34.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And if I change with this plus""" start="00:07:37.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and make it so that any two integers return zero,""" start="00:07:41.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""well, I can do this. This will break Julia because,""" start="00:07:43.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""well, Julia is built in Julia.""" start="00:07:46.320" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So if we break this, well, nothing will work.""" start="00:07:48.360" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""But I can do that. This to me is one of""" start="00:07:51.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""the signs of the powerful, introspective,""" start="00:07:53.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""and powerful interactive type of workflows""" start="00:07:56.200" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""that Julia enables.""" start="00:07:58.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Finally, I want to talk about the general registry.""" start="00:07:59.280" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""This is the equivalent of Melpa.""" start="00:08:03.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""It comes with with Julia.""" start="00:08:06.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""But this is very akin to Melpa.""" start="00:08:08.760" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""It's built upon Git essentially.""" start="00:08:11.120" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""It's collaborative, as relies heavily on GitHub, GitLab.""" start="00:08:14.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""It's heavily automated.""" start="00:08:19.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""And comes with lots and lots of tools and packages.""" start="00:08:21.120" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""What's beautiful about all these tools and packages""" start="00:08:24.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""is that in the same way many of Emacs packages""" start="00:08:27.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""just play nicely with each other""" start="00:08:30.280" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""without any input from the developers,""" start="00:08:32.400" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""the same is true for Julia packages.""" start="00:08:34.880" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""The Julia packages are highly composable,""" start="00:08:37.560" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""so two developers can develop""" start="00:08:40.680" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""two distinct packages""" start="00:08:42.880" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""that end up playing nicely together for free""" start="00:08:44.720" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""because of the intrinsic structure, intrinsic way""" start="00:08:47.640" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""Julia objects are built.""" start="00:08:51.880" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, with all of this, I also want to mention that""" start="00:08:54.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""the community, in addition to have all these packages,""" start="00:08:57.480" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""is highly active, highly collaborative.""" start="00:09:00.080" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""The community meets regularly on places like Slack,""" start="00:09:02.600" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""as opposed to the Emacs community""" start="00:09:06.160" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""that I'd say maybe meets on Reddit.""" start="00:09:08.200" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""So, with all of this, I want to thank you""" start="00:09:10.040" video="mainVideo-julia" id="subtitle"]]
+[[!template text="""for your attention, enjoy Emacs, and enjoy Julia.""" start="00:09:13.000" video="mainVideo-julia" id="subtitle"]]
+
+</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.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: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: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.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: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.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: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.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.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)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/julia-before.md b/2024/info/julia-before.md
index a8616f72..e9d43975 100644
--- a/2024/info/julia-before.md
+++ b/2024/info/julia-before.md
@@ -1,18 +1,26 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 10-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
+
+
-The following image shows where the talk is in the schedule for Sat 2024-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="julia">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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 stroke-width="3" x="329" y="75" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 10-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-julia.html>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Ready to stream
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T18:00:00Z" end="2024-12-07T18:10:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~1:00 PM - 1:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~12:00 PM - 12:10 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~11:00 AM - 11:10 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~10:00 AM - 10:10 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~6:00 PM - 6:10 PM UTC <br />Saturday, Dec 7 2024, ~7:00 PM - 7:10 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~8:00 PM - 8:10 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~11:30 PM - 11:40 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~2:00 AM - 2:10 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~3:00 AM - 3:10 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/dev/">Find out how to watch and participate</a></strong></div>
+# Talk
+<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 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="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/julia-nav.md b/2024/info/julia-nav.md
index ea6ed330..15a716b1 100644
--- a/2024/info/julia-nav.md
+++ b/2024/info/julia-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/color">Colour your Emacs with ease</a>
-Next by time: <a href="/2024/talks/theme">My journey of finding and creating the “perfect” Emacs theme</a>
-Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2024/watch/dev">Watch</a></strong>
+Previous by track: <a href="/2024/talks/p-search">p-search: a local search engine in Emacs</a>
+Next by track: <a href="/2024/talks/guile">Beguiling Emacs: Guile-Emacs relaunched!</a>
+Track: <span class="sched-track Development">Development</span>
</div>
diff --git a/2024/info/language-before.md b/2024/info/language-before.md
index 0348c88d..a24ee5fd 100644
--- a/2024/info/language-before.md
+++ b/2024/info/language-before.md
@@ -1,14 +1,9 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="language">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect stroke-width="3" x="123" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(134,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 10-min talk; Q&A: Etherpad <https://pad.emacsconf.org/2024-language>
+Format: 10-min talk cancelled
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="2024-12-08T15:30:00Z" end="2024-12-08T15:40:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~10:30 AM - 10:40 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~9:30 AM - 9:40 AM CST (US/Central)<br />Sunday, Dec 8 2024, ~8:30 AM - 8:40 AM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~7:30 AM - 7:40 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~3:30 PM - 3:40 PM UTC <br />Sunday, Dec 8 2024, ~4:30 PM - 4:40 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~5:30 PM - 5:40 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~9:00 PM - 9:10 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~11:30 PM - 11:40 PM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~12:30 AM - 12:40 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Status: Sorry, this talk has been cancelled
+
diff --git a/2024/info/learning-after.md b/2024/info/learning-after.md
index cc330e4f..c62b265b 100644
--- a/2024/info/learning-after.md
+++ b/2024/info/learning-after.md
@@ -1,7 +1,794 @@
<!-- 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%20learning%3A%20Survival%20of%20the%20skillest%3A%20Thriving%20in%20the%20learning%20jungle)
+<div class="transcript transcript-mainVideo"><a name="learning-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.300" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Oh, wow!""" start="00:00:00.300" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I'm gonna tell you about how I'm learning this new thing…""" start="00:00:00.924" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Okay…""" start="00:00:07.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Hey dude, I am recording, okay? So, I'll call you back""" start="00:00:11.840" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""yeah yeah I'm doing learning the new thing.""" start="00:00:15.757" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Yeah yeah yeah later later later""" start="00:00:18.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""not right now later later later later.""" start="00:00:20.624" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Sorry about that.""" start="00:00:24.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Okay, as I was saying, I'm going to tell you all about""" start="00:00:25.390" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""how I'm learning this new thing.""" start="00:00:28.920" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Ooh, Sacha Chua's Emacs newsletter is out.""" start="00:00:32.074" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Maybe I should spend some time…""" start="00:00:36.490" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Oh, wait a second. I have to learn this new thing.""" start="00:00:38.924" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Haha. Okay, so I'm going to tell you""" start="00:00:43.370" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""how we can learn new skills in the middle of""" start="00:00:47.290" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""so many other wonderful things that you want to do""" start="00:00:51.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and to speak to wonderful people that you have to speak to.""" start="00:00:54.360" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""My name is Bala Ramadurai and I'm going to be talking about""" start="00:00:57.460" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""the Survival of The Skillest, that's what I call it, okay?""" start="00:01:01.607" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Survival of The Skillest. Thriving in the Learning Jungle.""" start="00:01:07.407" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Here I'm going to give you some tips and techniques""" start="00:01:11.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""as to how you can learn skills, new skills.""" start="00:01:14.250" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I'm going to give you a quote from a multi-talented teacher.""" start="00:01:17.990" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""He was the second president of my country, India.""" start="00:01:23.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""S. Radhakrishnan, he says,""" start="00:01:27.357" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""“When we think we know, we cease to learn.”""" start="00:01:29.590" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That was his quote.""" start="00:01:32.674" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What is a skill?""" start="00:01:35.350" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""What is a skill?""" start="00:01:35.350" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""A skill is the knowledge and the ability""" start="00:01:36.540" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""that enables you to do something well.""" start="00:01:39.507" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""There's the knowledge first and the ability""" start="00:01:43.157" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and you have to do it well.""" start="00:01:45.607" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why should you learn a new skill?""" start="00:01:47.424" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Right. So why should you learn a new skill?""" start="00:01:47.424" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now if you can pause this video,""" start="00:01:50.824" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""watching streaming part of the video,""" start="00:01:53.674" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""then come up with your own reasons.""" start="00:01:55.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I'm going to give you my top three reasons""" start="00:01:58.040" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""that you might want to learn a new skill.""" start="00:02:00.340" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Get ahead in your career.""" start="00:02:02.574" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Look good or cool in your community or peer group""" start="00:02:04.390" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or someone forced you to.""" start="00:02:08.640" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What skills should you learn?""" start="00:02:11.040" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Now, what skills should you learn?""" start="00:02:11.040" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Ok, there could be a whole list.""" start="00:02:14.574" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Let me take a stab at some of the ones""" start="00:02:16.674" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""that I think could be cool: bungee jumping,""" start="00:02:19.529" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""teaching your pet to pick up the newspaper""" start="00:02:22.057" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""without tearing it to shreds.""" start="00:02:24.390" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Perhaps with Python rearing, I meant coding, coding,""" start="00:02:26.330" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you can do learning coding.""" start="00:02:30.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So you could list your own skills that you have to learn,""" start="00:02:31.240" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you want to learn.""" start="00:02:34.390" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What stops you from learning new skills?""" start="00:02:35.974" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""But what stops you from learning new skills?""" start="00:02:35.974" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""The most common reason that I've heard""" start="00:02:39.140" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""in the past is lack of time.""" start="00:02:41.230" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""“Oh Bala, I have to do so many things.”""" start="00:02:42.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""“I don't have the time to learn any new skills.”""" start="00:02:45.474" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Lack of motivation could be another reason.""" start="00:02:48.140" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Or you're just a rebel.""" start="00:02:50.740" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Who is he or who is she to tell me what I should learn?""" start="00:02:53.307" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I'm going to learn things like that.""" start="00:02:56.507" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So then it stops you from learning a new skill.""" start="00:02:57.857" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""But there's even more fundamental reason""" start="00:03:01.040" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""for why we don't learn a new skill so easily.""" start="00:03:04.357" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And this comes from the story of scholar in the teacup.""" start="00:03:07.374" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I can pass on the link later to you.""" start="00:03:10.174" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can watch this, my own version of the story.""" start="00:03:12.257" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Empty your teacup""" start="00:03:16.274" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""The ultimate truth in this story""" start="00:03:16.274" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or the moral in this story is that""" start="00:03:18.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""we are filled with preconceived ideas""" start="00:03:21.057" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and the Zen master in the story says,""" start="00:03:23.957" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""it's like a full teacup.""" start="00:03:26.074" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""In order to learn new skills, you have to empty your teacup.""" start="00:03:27.940" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now, how do you empty your teacup?""" start="00:03:32.807" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You just can't pour everything out of your head, right?""" start="00:03:34.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So how do you really empty your teacup?""" start="00:03:37.707" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So the way to empty your teacup,""" start="00:03:40.624" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""simplest way to do it is write down your thoughts.""" start="00:03:43.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""As simple as that.""" start="00:03:46.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Just take a piece of paper and write it down.""" start="00:03:48.740" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Or if you are on electronic means,""" start="00:03:51.657" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""use Emacs Org Mode and type out your thoughts, okay?""" start="00:03:53.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""There is a task for you right now.""" start="00:03:58.490" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What you have to do is to create a folder""" start="00:04:00.507" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""in your documents folder called Inbox.""" start="00:04:02.657" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Create one and create a new file called todo.org.""" start="00:04:05.824" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""If you are paper based,""" start="00:04:10.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you can use a notebook or any other forms of the same file.""" start="00:04:11.290" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""In that, write down all your unfinished tasks""" start="00:04:15.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""personal and professional.""" start="00:04:18.707" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Write down some things that have been worrying you,""" start="00:04:20.270" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""whatever worries you right now.""" start="00:04:23.607" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""just write it down, the whole thing, okay?""" start="00:04:25.124" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Write down some tasks or actions that""" start="00:04:28.019" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you are waiting for somebody else""" start="00:04:30.107" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""that could also be part of your list here.""" start="00:04:32.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Great. Now that you have emptied your tea cup,""" start="00:04:35.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I'm going to tell you the origin of these ideas.""" start="00:04:38.160" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Getting Things Done""" start="00:04:40.424" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""These come from “Getting Things Done” by David Allen.""" start="00:04:40.424" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""It's a great book. I've read it multiple times. Fantastic.""" start="00:04:43.090" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And he says, your mind is for having ideas,""" start="00:04:46.657" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""not holding them.""" start="00:04:50.390" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You have to hold on to this idea in your mind.""" start="00:04:52.274" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Keep it in your mind.""" start="00:04:55.040" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""saying it's for having ideas, not holding them.""" start="00:04:55.890" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Alright, perform one of four actions on your task list.""" start="00:05:00.757" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Okay? The one that you just wrote down.""" start="00:05:05.207" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You delete them, okay? As simple as that.""" start="00:05:07.974" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Strikethrough the task, hit the delete""" start="00:05:10.324" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or change the state to cancel, okay?""" start="00:05:13.624" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Alright, If you don't want to delete it,""" start="00:05:16.674" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you want to defer it, do it later.""" start="00:05:18.357" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Add it to your calendar.""" start="00:05:20.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Add a reminder to it if you want.""" start="00:05:22.107" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Or in Emacs Org Mode use C-c C-s to""" start="00:05:24.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""schedule it to a different time that you feel""" start="00:05:27.357" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you would be able to do that task.""" start="00:05:31.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Or just delegate it to somebody else.""" start="00:05:33.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Maybe you are not the best person to do it""" start="00:05:35.424" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or you probably won't find time to do this.""" start="00:05:37.430" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Send it to your colleague, student, assistant,""" start="00:05:40.590" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""maybe even your favorite LLM to do this.""" start="00:05:43.807" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""LLM being large language model.""" start="00:05:47.374" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Or just do it, right? As they say, just do it.""" start="00:05:50.274" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Set a timer for two minutes and do the task.""" start="00:05:53.807" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Finish the task, right here right now.""" start="00:05:56.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Nothing is stopping you.""" start="00:05:58.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Finish it. Oh, great, I'm going to do this""" start="00:05:59.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""but set yourself two minutes""" start="00:06:01.360" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""because sometimes it may spill over to half an hour""" start="00:06:02.507" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and you still haven't processed through your list.""" start="00:06:04.990" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's why the timer for two minutes.""" start="00:06:07.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""One tip I'm going to give you is:""" start="00:06:08.907" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Don't skip any of the items from your list""" start="00:06:10.624" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""because it's tough work you've been trying to avoid it,""" start="00:06:13.910" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""don't do that.""" start="00:06:16.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Be rigorous and finish it off, processing at least, okay?""" start="00:06:17.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now you can do the absolute same process""" start="00:06:23.324" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""on your email inbox.""" start="00:06:25.657" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I know, I know some of you have 55,000 emails in your inbox.""" start="00:06:27.090" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""How am I going to process all of them?""" start="00:06:31.540" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Archive""" start="00:06:33.724" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Well, Tiago Forte, whose method""" start="00:06:33.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I'm going to be also talking about, says:""" start="00:06:36.540" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Archive them all and pull out the top 100, okay?""" start="00:06:39.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""The last latest 100 and process that.""" start="00:06:42.707" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's a cool way to do it, okay?""" start="00:06:45.757" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So you're not stuck to those 55,000,""" start="00:06:48.407" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""but just the top 100 of those.""" start="00:06:50.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can do the same,""" start="00:06:52.990" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""absolutely the same thing""" start="00:06:54.007" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to any of your messaging apps as well:""" start="00:06:55.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""WhatsApp, Matrix, Slack, whatever you choose.""" start="00:06:57.674" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Even to your physical inbox,""" start="00:07:01.890" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you can do the absolute same things.""" start="00:07:03.200" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You lift your items and""" start="00:07:04.590" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""see if you can need to process them, okay?""" start="00:07:06.624" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What if the email or message or task is something""" start="00:07:10.407" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""that you might need in the future?""" start="00:07:13.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Great! Archive them""" start="00:07:15.274" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or move it to a place you may refer to later.""" start="00:07:17.107" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So, you have plenty of storage in your cloud space,""" start="00:07:19.757" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""in your email space, in your computer space.""" start="00:07:23.290" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Use that. Archive it.""" start="00:07:26.040" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can refer to it later. Not a worry.""" start="00:07:27.890" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Don't want it right in front of you.""" start="00:07:29.820" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's the only thing here, right?""" start="00:07:31.090" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Multiple steps""" start="00:07:33.290" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Now another question that pops in your head is:""" start="00:07:33.290" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What if something that requires multiple steps, right?""" start="00:07:35.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""not all steps are created… not all tasks are created alike,""" start="00:07:38.907" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""There are multiple steps to a task.""" start="00:07:43.074" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's when a task becomes a project, ok?""" start="00:07:45.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""An example or few examples of those""" start="00:07:48.009" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""are finishing a course on say Coursera or NPTEL or Udemy,""" start="00:07:50.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""teaching a course if you are a teacher""" start="00:07:54.340" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""in your college or school.""" start="00:07:56.274" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""If you are organizing a conference""" start="00:07:58.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""such as the Emacs conference, it's a huge project,""" start="00:08:00.957" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you will need to use… it's a project.""" start="00:08:03.957" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Arranging a birthday party for your spouse, that's sweet,""" start="00:08:07.440" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""but it's still a project, you will have many tasks in it.""" start="00:08:10.560" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So these are examples of projects.""" start="00:08:13.220" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Here's how one can handle projects.""" start="00:08:15.874" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Create a folder for each project.""" start="00:08:18.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Create a text or word doc or title it as todo.txt""" start="00:08:20.390" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or todo.docx or todo.org.""" start="00:08:24.390" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I prefer .org and you can do it.""" start="00:08:26.560" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And in that, write down the success criteria,""" start="00:08:29.057" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""the goal or the deadline of the project.""" start="00:08:32.440" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Write down all the tasks that need to be done.""" start="00:08:35.730" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You don't have to think about all of it,""" start="00:08:38.340" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""but whatever comes to your mind,""" start="00:08:40.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""just put it in there""" start="00:08:41.579" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""as some tasks that you need to get done inside this project.""" start="00:08:42.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now, identify the immediate action that needs to be done""" start="00:08:46.624" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""for the project to move forward.""" start="00:08:52.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's usually something that's stopping the project""" start="00:08:54.040" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""from progressing.""" start="00:08:56.580" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So identify that and say:""" start="00:08:57.457" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""“That's the next thing I'm going to do.”""" start="00:08:58.924" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""An example of a project is right here.""" start="00:09:01.557" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Goal of the project is to deliver a talk""" start="00:09:04.274" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""about my organization system,""" start="00:09:06.207" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""make it like a workshop with pauses for activities.""" start="00:09:09.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can see that this is the talk""" start="00:09:13.010" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""that I am delivering right now.""" start="00:09:14.940" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And right now if you see recording the talk, okay?""" start="00:09:16.424" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Of course, the next one I'm going to do after this""" start="00:09:19.840" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""is going to be sending the recorded talk,""" start="00:09:21.957" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""the file and the PDF for the talk.""" start="00:09:24.074" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now, if you want, you can add some sub steps and all that""" start="00:09:25.389" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""also into this.""" start="00:09:28.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Of course, I'd like to thank the coordinators for their""" start="00:09:29.174" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""absolutely wonderful work that they're doing""" start="00:09:31.600" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""throughout this, okay?""" start="00:09:33.480" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now, tasks for you.""" start="00:09:35.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can take your time.""" start="00:09:37.474" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And first of all, think of a project""" start="00:09:38.779" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""that you have to absolutely get done.""" start="00:09:40.490" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Create a folder on your computer or phone""" start="00:09:43.474" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""with the name of the project.""" start="00:09:48.324" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Create a todo.org.""" start="00:09:50.157" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""If you want to use a notebook, you can use a fresh leaf.""" start="00:09:52.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Write down all the tasks associated with this project.""" start="00:09:56.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's going to be how you handle it, right?""" start="00:10:00.524" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Multiple projects""" start="00:10:02.874" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Now, what if you have multiple projects?""" start="00:10:02.874" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Not many of us have only one project.""" start="00:10:05.490" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""In fact, many of us have multiple projects.""" start="00:10:08.157" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What do we do in that situation?""" start="00:10:09.807" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Well, the answer is simple.""" start="00:10:11.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Create a folder for each project.""" start="00:10:13.274" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Add this Org file called todo into each of those folders""" start="00:10:15.624" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and write down the task for all of these projects as well.""" start="00:10:20.657" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Write down all of these tasks and mark one of them as next.""" start="00:10:25.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""There can be only one next action.""" start="00:10:29.207" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""It can't be multiple next actions.""" start="00:10:30.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's the immediate thing that has to be done""" start="00:10:32.390" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to take this project forward, okay?""" start="00:10:34.990" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What if the project stops before completion?""" start="00:10:37.874" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""What if the project stops before completion?""" start="00:10:37.874" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""There are possibilities sometimes you lose interest,""" start="00:10:40.440" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""sometimes your collaborator loses interest.""" start="00:10:43.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What do you do in those situations?""" start="00:10:45.124" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Have a folder in your computer or phone""" start="00:10:47.157" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""for abandoned projects called resources.""" start="00:10:49.740" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Oh, by the way,""" start="00:10:52.590" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""for your projects folder, create an""" start="00:10:53.320" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""overarching projects folder and inside that are""" start="00:10:57.557" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""all the project folders.""" start="00:11:01.289" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I forgot to tell you that.""" start="00:11:02.607" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Same way, on the same level, create a resources folder.""" start="00:11:03.707" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's for all your abandoned projects""" start="00:11:06.957" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or even could be on your research material as well,""" start="00:11:09.107" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""which you are not currently working on.""" start="00:11:13.090" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Move this particular project that's abandoned or stopped""" start="00:11:15.509" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""somewhere in between to that folder.""" start="00:11:18.769" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What if you successfully complete the project?""" start="00:11:20.974" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Now, there's a possibility you might successfully complete.""" start="00:11:20.974" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I hope all your projects end up being successful.""" start="00:11:23.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""But there are quite a few which will end up in this,""" start="00:11:27.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""quite a few which will end up abandoned as well.""" start="00:11:30.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now, I write an end report so that I can learn from this.""" start="00:11:33.757" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What did I enjoy most in the project?""" start="00:11:37.440" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What could have been better?""" start="00:11:39.324" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What did I learn from this particular project?""" start="00:11:40.874" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now, you will need to move that folder""" start="00:11:43.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to a folder called archives.""" start="00:11:45.849" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""This is the final resting place for the project,""" start="00:11:47.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""completed projects because if you come up""" start="00:11:50.807" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""with another project which sounds similar""" start="00:11:53.540" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to the archives one,""" start="00:11:55.690" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you can pick that out and create that as a template,""" start="00:11:56.857" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""use that as a template.""" start="00:11:59.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now, why would I have one folder per project""" start="00:12:00.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""when there's only one file sitting in it called todo.org?""" start="00:12:04.340" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Well, most projects also have some project files""" start="00:12:07.757" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and this folder can be a storehouse of all of that""" start="00:12:10.824" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and you can access all of them at one shot.""" start="00:12:13.824" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's the advantage.""" start="00:12:16.174" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What if the project is ongoing and doesn't really end?""" start="00:12:18.140" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""What if the project is ongoing and doesn't really end?""" start="00:12:18.140" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That doesn't seem to have a deadline or an ending point.""" start="00:12:20.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's called an Area. This is now an Area.""" start="00:12:24.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Examples of Areas: gardening, paying bills, never stops,""" start="00:12:27.157" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""bills never don't stop, blogging.""" start="00:12:32.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""These are all some examples of Areas that really""" start="00:12:34.624" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""don't have a definite deadline.""" start="00:12:37.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""For Areas also, create a folder for each of them, right?""" start="00:12:40.374" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can create a parent folder called Areas""" start="00:12:44.710" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and under them you can have those areas, okay,""" start="00:12:47.324" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and have a todo [file] in each of those folders.""" start="00:12:50.990" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What if you forget to visit the TODO files?""" start="00:12:54.320" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Now what if we forget to visit the todo files""" start="00:12:54.320" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""which in my case often happens?""" start="00:12:57.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I forget to visit those todo files""" start="00:12:58.974" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and see what the task net needs to be done.""" start="00:13:01.040" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can of course add all of this todo.org""" start="00:13:03.940" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and into your org-agenda-files variable""" start="00:13:08.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""so that when you pull up your Org Agenda,""" start="00:13:11.360" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""all of them show up.""" start="00:13:14.015" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's a good idea.""" start="00:13:15.080" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You need to have a weekly review with yourself.""" start="00:13:16.440" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Weekly review is essentially a weekly appointment""" start="00:13:19.624" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""with yourself for you to stay""" start="00:13:22.140" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""in control of your life or career. To keep things on track.""" start="00:13:24.357" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""In the weekly review, you need to empty your teacup.""" start="00:13:29.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That's the first and foremost, okay?""" start="00:13:32.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Then process all your items in the TODO file.""" start="00:13:35.274" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Process all your emails from the last week.""" start="00:13:39.239" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Use the exact same structure of do, delete, defer, delegate.""" start="00:13:42.057" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""These are the four D's that you can use.""" start="00:13:45.390" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Process all your messaging app messages from the last week.""" start="00:13:47.474" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So last one whole week, whatever has come up,""" start="00:13:51.890" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you need to process all of them, okay?""" start="00:13:54.074" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""In the weekly review,""" start="00:13:57.174" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you also need to archive all your emails and""" start="00:13:58.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""messaging app messages that you have processed.""" start="00:14:01.440" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You've already taken care of it.""" start="00:14:03.990" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You don't need to have it right in front of you.""" start="00:14:05.857" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can move them all into archive.""" start="00:14:07.740" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Most messaging apps and email systems""" start="00:14:09.957" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""have archives as part of their features.""" start="00:14:12.290" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Look through the project TODO files""" start="00:14:15.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to see if the next action is marked, okay?""" start="00:14:17.174" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now look through the project folder list""" start="00:14:20.690" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to see if some of them need to be archived""" start="00:14:22.424" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or moved to resources.""" start="00:14:24.307" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Some may be abandoned, some may be done.""" start="00:14:26.474" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can move them successfully to""" start="00:14:28.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""all of where it needs to belong.""" start="00:14:30.540" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now task for you, you can pause this,""" start="00:14:33.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""of course, and do this.""" start="00:14:34.943" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Set an appointment with yourself, sacrosanct time,""" start="00:14:36.540" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""only with yourself and title it weekly review.""" start="00:14:39.730" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Start with half an hour,""" start="00:14:42.324" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""perhaps you can have it longer later on.""" start="00:14:43.924" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""As you need more time,""" start="00:14:46.057" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you can have more time with yourself.""" start="00:14:47.713" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And make it repeating every week.""" start="00:14:49.846" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now you can complain, I can hear you some of you complain""" start="00:14:53.607" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""“Oh, this is such a microscopic view of my life.""" start="00:14:56.357" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What about the big picture?”""" start="00:14:58.557" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Well, there is quarterly review, once every 13 weeks""" start="00:14:59.857" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""you can mark an appointment with yourself.""" start="00:15:03.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Right after your weekly review""" start="00:15:06.357" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to do your quarterly review, okay?""" start="00:15:08.324" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And also every year, mark yourself--""" start="00:15:11.290" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""it could be at the start""" start="00:15:14.117" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or the end of an academic year or a calendar year--""" start="00:15:15.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""mark yourself an appointment again with yourself""" start="00:15:18.990" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""called yearly review.""" start="00:15:21.940" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And these contain some big life questions, okay?""" start="00:15:23.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now I'll give you some examples but feel free to modify it,""" start="00:15:27.074" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""have it as your own.""" start="00:15:31.207" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""How much money did I make?""" start="00:15:33.324" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""How much money did I save?""" start="00:15:34.850" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""How many people did I help?""" start="00:15:36.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""How many do I plan to help in the future?""" start="00:15:39.040" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What projects did I enjoy?""" start="00:15:43.457" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Look through your archives and resources.""" start="00:15:44.740" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Which one are best avoided?""" start="00:15:47.907" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I don't want to get on to this, okay?""" start="00:15:49.890" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can look through a personal and private… I'm sorry…""" start="00:15:52.490" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""personal and professional and""" start="00:15:55.360" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""see how much is there a balance between all of these.""" start="00:15:56.757" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""These are some questions you can answer.""" start="00:15:59.724" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Planning for the future""" start="00:16:02.740" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Now that you know how to manage them now...""" start="00:16:02.740" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So far we have looked at the now,""" start="00:16:04.890" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""how do you plan for the future?""" start="00:16:06.840" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""like really into the future?""" start="00:16:08.290" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Well, I have a trick called nine windows for you.""" start="00:16:10.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Nine windows are essentially,""" start="00:16:13.474" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""it's like a tic-tac-toe grid""" start="00:16:15.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and the left column is your past,""" start="00:16:18.507" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""the middle column is your present""" start="00:16:25.574" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and the right column is your future, okay?""" start="00:16:28.090" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and the bottom row is your skill set,""" start="00:16:31.940" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""the middle row is what you do""" start="00:16:37.940" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and the top row is whom do you work for""" start="00:16:40.920" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""or whom do you serve, right?""" start="00:16:44.657" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So you are doing something for an organization""" start="00:16:46.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""so those could be in your top row.""" start="00:16:50.500" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Let me give you an example from my own life.""" start="00:16:52.570" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""This I made about 10 years ago, okay?""" start="00:16:55.424" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So the middle column is the what I did 10 years ago.""" start="00:16:59.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So that is the now let's keep it as the now, okay?""" start="00:17:05.724" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So five years before that, I used to work""" start="00:17:09.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""for General Electric (GE).""" start="00:17:11.440" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I was a research scientist for them""" start="00:17:13.090" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and the skills that I had was:""" start="00:17:15.240" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I had a PhD which was used in this profession.""" start="00:17:16.924" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I had writing skills,""" start="00:17:22.824" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I had some teaching skills,""" start="00:17:23.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and I love to interact and learn from my teammates.""" start="00:17:25.424" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Then I joined Mindtree, which was the current job""" start="00:17:29.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""when I did this, software services company.""" start="00:17:32.590" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I co-founded TRIZIndia also.""" start="00:17:36.824" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""These are two organizations that I served.""" start="00:17:38.524" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And facilitator, that was the main profession that I was in.""" start="00:17:41.124" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And the skills I had was:""" start="00:17:45.240" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""TRIZ [Theory of Inventive Problem Solving],""" start="00:17:46.924" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""interacting with people outside of my team,""" start="00:17:47.800" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and I could align well with my organization.""" start="00:17:52.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I knew exactly where they were going""" start="00:17:54.890" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and how to align myself, my goals with that.""" start="00:17:56.274" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Now, I said, five years later,""" start="00:17:59.107" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I want to be an entrepreneur and an author.""" start="00:18:02.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And I want to do this for,""" start="00:18:05.174" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I want to really work with academia and corporate companies.""" start="00:18:07.224" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""That was my goal.""" start="00:18:11.757" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So the skills I needed to have were:""" start="00:18:13.240" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""marketing, writing, sales, hiring, people management,""" start="00:18:15.057" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""all of that I needed to have.""" start="00:18:18.207" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And I had to plan that so I used""" start="00:18:19.924" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""the PARA structure [projects, areas, resources, archives]""" start="00:18:21.540" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to manage how I'm going to learn all of these skills""" start="00:18:23.090" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and imbibe those and get better at it.""" start="00:18:27.290" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""So that's where I use this.""" start="00:18:29.257" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Ok, your turn.""" start="00:18:31.157" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""You can pause this video and build your own nine windows""" start="00:18:32.639" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to plan for the future.""" start="00:18:34.990" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Summary""" start="00:18:36.957" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""So in summary, you need to empty your teacup""" start="00:18:36.957" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""before engaging with the work in front of you.""" start="00:18:40.007" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Use the PARA structure: projects, area,""" start="00:18:43.040" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""resources and archives.""" start="00:18:45.390" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Create this folder structure and use reviews regularly,""" start="00:18:46.770" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""weekly, quarterly and yearly.""" start="00:18:51.480" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Use the nine windows to your advantage""" start="00:18:54.024" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""for your future career planning""" start="00:18:55.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and of course, apply PARA to your future plans""" start="00:18:57.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""to plan for those as well, ok?""" start="00:19:00.440" video="mainVideo-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""References""" start="00:19:03.210" video="mainVideo-learning" id="subtitle"]]</div>[[!template text="""Now, these are the references I have used.""" start="00:19:03.210" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""heavily borrowed upon Tiago Fortes' PARA,""" start="00:19:04.840" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""David Allen's “Getting Things Done”""" start="00:19:07.640" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""and Tasshin's way to implement this in Emacs and Org Mode.""" start="00:19:09.240" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""These are some acknowledgments.""" start="00:19:14.190" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""I used some generative AI for this.""" start="00:19:15.507" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""And this is a question to you:""" start="00:19:18.290" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""What parts of this talk are you planning on implementing?""" start="00:19:20.790" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Please write this in the Etherpad.""" start="00:19:24.140" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Thank you so much. If you have any questions,""" start="00:19:26.824" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""let me know in the Etherpad as well.""" start="00:19:28.569" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""Good luck managing your tasks,""" start="00:19:30.857" video="mainVideo-learning" id="subtitle"]]
+[[!template text="""emptying your teacup, and planning for the future.""" start="00:19:33.474" video="mainVideo-learning" id="subtitle"]]
+
+</div>
+
+Captioner: rodrigo
+
+<div class="transcript transcript-qanda"><a name="learning-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""I'm doing well. Thank you so much. I was supposed to chat and""" start="00:00:00.000" video="qanda-learning" id="subtitle"]]
+[[!template text="""write down stuff in the etherpad, but you guys accommodated""" start="00:00:05.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""me very nicely, swiftly, efficiently, in spite of my quirky""" start="00:00:08.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""last minute requests. Yeah, but that's okay because, well,""" start="00:00:12.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""it's funny that you talk about accommodating you and doing""" start="00:00:16.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""all the things we need to do because, frankly, your talk is""" start="00:00:19.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""about getting things done and you've mentioned the book,""" start="00:00:22.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""obviously, but the philosophy of getting things done is""" start="00:00:24.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""ultimately what we've been applying with Emacs Conf so that""" start="00:00:27.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""when we have curveballs thrown at us, like you've done right""" start="00:00:30.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""now, we can accommodate them because we made sure that""" start="00:00:33.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""everything else was done. So we'll move to questions and I""" start="00:00:36.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""invite viewers to go to the pad, to the etherpad that is on IRC""" start="00:00:41.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""and also on the talk page and put your questions over there.""" start="00:00:45.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""But first I wanted to make sure, Bala, that if you had""" start="00:00:48.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""anything that you could not include in your presentation,""" start="00:00:51.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""just to give you some time to mention them now if you want. I""" start="00:00:54.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""think I mentioned most of what I wanted to convey. I wanted to""" start="00:01:00.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""keep it general with whichever format people are""" start="00:01:09.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""comfortable with, whether it's Org Mode, whether it's""" start="00:01:12.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""plain text, whether it is docx. In fact, I was speaking to one""" start="00:01:15.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""of my friends and he said, Hey, I use Google Sheets to note""" start="00:01:21.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""down everything, all the tasks that are coming. I said, suit""" start="00:01:25.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""yourself, whatever it is. So, in that way, this methodology""" start="00:01:28.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""or whatever, the way which we follow is quite flexible. The""" start="00:01:33.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""system is quite flexible in whichever way you want to use it.""" start="00:01:37.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""go ahead and use it. But start emptying your teacup. That""" start="00:01:41.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""will be my first and foremost. I have nothing else to add per""" start="00:01:46.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""se. Okay, cool. So we'll start with the first question and""" start="00:01:50.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""I'll be reading the questions to you. And just so we know, we""" start="00:01:54.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""have about eight minutes of Q&A until we need to move to the""" start="00:01:58.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""next talk. All right, so first question.""" start="00:02:01.080" video="qanda-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What is TRIZ?""" start="00:02:03.554" video="qanda-learning" id="subtitle"]]</div>[[!template text="""What is TRIZ? Okay,""" start="00:02:03.554" video="qanda-learning" id="subtitle"]]
+[[!template text="""this is a Russian methodology. It's pardon my, I mean poor""" start="00:02:06.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""Russian, but it translates to theory of inventive problem""" start="00:02:11.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""solving. So, that's what it translates to. What it is, is it""" start="00:02:16.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""is said that all the inventions problem solved so far in""" start="00:02:21.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""humanity. If you can categorize them, they fall into""" start="00:02:26.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""exactly 40 principles. That's one of the core tenets in""" start="00:02:30.240" video="qanda-learning" id="subtitle"]]
+[[!template text="""theory of inventive problem solving. Also, that creative""" start="00:02:36.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""people have a process they follow. and in defining a problem""" start="00:02:40.960" video="qanda-learning" id="subtitle"]]
+[[!template text="""and solving a problem. So, this is what I was trained in a""" start="00:02:46.320" video="qanda-learning" id="subtitle"]]
+[[!template text="""company that I work for and I started using it and started""" start="00:02:49.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""applying it. So, creative process starts with defining a""" start="00:02:55.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""problem and solving a problem in a very systematic manner""" start="00:02:59.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""and you can be as creative as the creatives that we know about""" start="00:03:02.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""as the methodology talks about. So, that is what TRIZ is,""" start="00:03:06.240" video="qanda-learning" id="subtitle"]]
+[[!template text="""Theory of Inventive Problem Solving. There is lot of open""" start="00:03:11.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""source literature like we have in Emacs. It is the same way""" start="00:03:15.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""with TRIZ, people share very generous and you can learn""" start="00:03:19.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""about it. what it can be useful for what in the core of our talk""" start="00:03:24.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""also is that many times we face conflicts, that is, I don't""" start="00:03:29.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""want to spend a lot of time, you know, figuring out a system""" start="00:03:34.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""like this. However, I want everything in one place, you""" start="00:03:38.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""know, how can that happen? So start little by little is one""" start="00:03:42.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""suggestion I have. Don't And this is also a contradiction we""" start="00:03:46.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""have, right? So, we need to spend a lot of time to set up things""" start="00:03:50.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""before we can start organizing our life. But there's not a""" start="00:03:55.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""lot of time because we haven't organized our life. So, we""" start="00:03:58.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""don't have that's a conundrum or a contradiction. That's""" start="00:04:01.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""what TRIZ methodology is about to identify that this is a""" start="00:04:04.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""contradiction and we have to resolve it not compromise. So,""" start="00:04:09.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""resolve it in a manner that gives you enough time to set up a""" start="00:04:15.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""system and enough time, free time to enjoy your life or focus""" start="00:04:18.320" video="qanda-learning" id="subtitle"]]
+[[!template text="""on a project and be present when you're working with""" start="00:04:22.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""something. So, that's what the crux of the methodology is.""" start="00:04:26.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""Okay, splendid answer. Thank you. Moving on to the next one.""" start="00:04:31.440" video="qanda-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you agree that learning similar but different things again and again is ultimately wasted bandwidth? What can we do as technologists to push back against this?""" start="00:04:34.360" video="qanda-learning" id="subtitle"]]</div>[[!template text="""Thank you for this talk. Very interesting. One of the things""" start="00:04:34.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""that frustrates me about modern web development is the rate""" start="00:04:37.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""of churn when it comes to useful knowledge. I think Emacs can""" start="00:04:40.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""help to counteract against this by building lasting tools""" start="00:04:43.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""where mastery can be built. Do you agree that learning""" start="00:04:45.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""similar but different things again and again is ultimately""" start="00:04:48.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""wasted bandwidth? What can we do as technologists to push""" start="00:04:50.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""back against this? Yeah, this is an interesting one""" start="00:04:54.080" video="qanda-learning" id="subtitle"]]
+[[!template text="""because, I mean, I'm like everyone else where a new package""" start="00:05:00.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""shows up. I mentioned that in my talk also, the first""" start="00:05:04.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""introduction. Sajajo's newsletter is amazing. It has all""" start="00:05:09.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""these new things coming up and new developments coming up.""" start="00:05:12.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""Same thing with web dev, I guess, you have new things coming""" start="00:05:15.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""up. So you want to learn that new thing. However, you need to""" start="00:05:18.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""also be aware that there are so many other projects and""" start="00:05:25.520" video="qanda-learning" id="subtitle"]]
+[[!template text="""hobbies or life that's also waiting for you. And it's not a""" start="00:05:31.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""balancing act, but if you if you pay attention and be present""" start="00:05:37.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""and give whatever is in front of you, it's full attention.""" start="00:05:42.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""Then look back and connect. That's an interesting way,""" start="00:05:46.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""because hindsight is 20 20. Use it to your advantage. So my I""" start="00:05:50.960" video="qanda-learning" id="subtitle"]]
+[[!template text="""don't know, I don't want to push back against this because""" start="00:05:55.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""some of it is just amazing because it thinks that you think is""" start="00:05:59.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""a waste of time and it's a distraction right now. could""" start="00:06:02.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""potentially be. I'm not saying it will be because there are""" start="00:06:05.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""things that are truly a waste of time that could truly""" start="00:06:09.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""potentially tie back to something and be really helpful.""" start="00:06:13.360" video="qanda-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""org-mode export, CSS, WeasyPrint""" start="00:06:17.251" video="qanda-learning" id="subtitle"]]</div>[[!template text="""I can give you an example from our Emacs part of my life. I was""" start="00:06:17.251" video="qanda-learning" id="subtitle"]]
+[[!template text="""experimenting with CSS and Cascade style sheets and how I""" start="00:06:22.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""can customize it to use it in org mode export. For me at the""" start="00:06:27.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""time, it seemed like a waste of time. I was spending so much""" start="00:06:34.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""time. Then I parked it. I didn't do much about it later. But""" start="00:06:38.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""then one of my students said, &quot;Your slides are too bulky for me""" start="00:06:42.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""to scroll through to get to exactly what I am looking for.&quot;""" start="00:06:47.320" video="qanda-learning" id="subtitle"]]
+[[!template text="""I was using the reveal HTML and I used to pass on the link""" start="00:06:49.589" video="qanda-learning" id="subtitle"]]
+[[!template text="""before. And the student sort of hinted at a handout. And now""" start="00:06:55.320" video="qanda-learning" id="subtitle"]]
+[[!template text="""that's not easy with the RevealJS framework. It's rather""" start="00:07:01.000" video="qanda-learning" id="subtitle"]]
+[[!template text="""tricky. At least I couldn't figure it out. but then it""" start="00:07:05.320" video="qanda-learning" id="subtitle"]]
+[[!template text="""occurred to me that, hey, wait a second i've already looked at""" start="00:07:08.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""this CSS thing and maybe that'll help. It did help. I can""" start="00:07:10.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""drop in the name of the tool that I use now.""" start="00:07:15.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""It's called WeasyPrint uh let me use the uh""" start="00:07:18.996" video="qanda-learning" id="subtitle"]]
+[[!template text="""i don't know if some...""" start="00:07:23.017" video="qanda-learning" id="subtitle"]]
+[[!template text="""If you can look it up, W-E-A-S-Y print.""" start="00:07:24.878" video="qanda-learning" id="subtitle"]]
+[[!template text="""That's what it's called. And that's""" start="00:07:32.101" video="qanda-learning" id="subtitle"]]
+[[!template text="""mighty useful. That's really, really useful. You can""" start="00:07:32.520" video="qanda-learning" id="subtitle"]]
+[[!template text="""customize it. You can change everything. I think I can even,""" start="00:07:36.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""I'll probably even share the code later on. It's really""" start="00:07:40.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""useful and I've been able to, so what seemed like a waste of""" start="00:07:44.520" video="qanda-learning" id="subtitle"]]
+[[!template text="""time is actually something that became useful later on. But""" start="00:07:48.960" video="qanda-learning" id="subtitle"]]
+[[!template text="""there are several other things I have truly wasted and it's""" start="00:07:52.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""not been useful because I couldn't connect the dots. So,""" start="00:07:55.520" video="qanda-learning" id="subtitle"]]
+[[!template text="""perhaps the, let's say, wasteful of time so that you look at""" start="00:07:58.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""something and see how to connect back like the Zettelkasten""" start="00:08:06.240" video="qanda-learning" id="subtitle"]]
+[[!template text="""that everybody talks about. I do not use it, but I like the""" start="00:08:09.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""idea that you look at it keeping in mind that you could""" start="00:08:12.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""probably connect to something later on. Perhaps, just try""" start="00:08:15.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""it out. OK, great, Bala. Sadly, we are a little short on time""" start="00:08:19.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""to answer all the questions that we have. I see three""" start="00:08:24.520" video="qanda-learning" id="subtitle"]]
+[[!template text="""questions currently that can still be answered, and I don't""" start="00:08:27.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""think any of them would be answerable within just one""" start="00:08:31.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""minute. So what I suggest we do, Bala, feel free. Do you have""" start="00:08:33.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""access to the pad on your end? Yes, I do. I do. I have it here.""" start="00:08:37.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""Okay, cool. I'm putting the link on BBB just in case you need""" start="00:08:40.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""to review it.""" start="00:08:43.708" video="qanda-learning" id="subtitle"]]
+[[!template text="""We're going to leave the room open. By the way,""" start="00:08:44.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""if anyone in the crowd wants to join so that they can ask the""" start="00:08:47.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""question directly with their voice to Bala, feel free to do""" start="00:08:49.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""so. The links are on the website. But Bala, if no one shows up,""" start="00:08:51.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""if you could just answer the three questions that we haven't""" start="00:08:56.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""covered yet, actually. Well, three questions because""" start="00:08:58.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""Sacha just put the link right there. That'd be lovely. And""" start="00:09:01.240" video="qanda-learning" id="subtitle"]]
+[[!template text="""we'll make sure that the entire Q&A""" start="00:09:04.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""finds its place into the""" start="00:09:06.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""website afterwards. How does that sound for you? Yeah,""" start="00:09:07.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""sounds great. Thank you so much. I'll do make sure that I will""" start="00:09:10.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""have the answers there, but I'm going to wait here for some""" start="00:09:14.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""time so that somebody can join. Okay, sure. Any last word in""" start="00:09:17.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""10 seconds for the public? Well, empty your teacup and enjoy""" start="00:09:20.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""your life.""" start="00:09:26.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""Splendid. Thank you so much, Bala, for coming""" start="00:09:27.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""again to EmacsConf this year, and hopefully we'll be seeing""" start="00:09:29.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""you next year with further talks to discuss. Yeah, thank you""" start="00:09:32.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""so much. All right, and right now we'll be moving to the next""" start="00:09:36.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""talk of the day in about five seconds. Thank you again, Bala,""" start="00:09:39.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""and see you later. Bye.""" start="00:09:42.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""All right, we are a fair. So, Bala, I'll need to move to make""" start="00:09:46.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""sure that everything is working for the next talk. So, do as""" start="00:09:49.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""we said, and everything will be fine. Okay.""" start="00:09:51.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""Okay, bye-bye, Bala. Bye. Bye, Leo.""" start="00:09:55.333" video="qanda-learning" id="subtitle"]]
+[[!template text="""Okay.""" start="00:09:58.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""Hello everyone, do you want me to answer a question? I'll be""" start="00:10:15.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""happy to answer that. You want to discuss something? You""" start="00:10:21.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""want to share something? I'm here for that. Please let me""" start="00:10:23.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""know.""" start="00:10:27.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""I'll hang around for another 5 to 10 minutes. Please let me""" start="00:11:06.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""know if you have any questions or if you're the ones who ask""" start="00:11:10.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""those questions also, please let me know.""" start="00:11:14.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""Are you there?""" start="00:11:36.740" video="qanda-learning" id="subtitle"]]
+[[!template text="""Hi, yes. Some tips I've found for getting""" start="00:11:38.625" video="qanda-learning" id="subtitle"]]
+[[!template text="""things done with an image for this stuff is like for""" start="00:11:44.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""separations you have like your Zettelkasten, you're""" start="00:11:50.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""getting things done, and then beyond that you have like""" start="00:11:53.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""dailies and global.""" start="00:11:56.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""Daily Zettelkasten would be journaling. Okay, okay. And""" start="00:12:00.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""then, like, global or daily getting things done, I""" start="00:12:06.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""generally like doing it in a week.""" start="00:12:10.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""And then splitting the,""" start="00:12:11.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""like, core tasks, secondary tasks,""" start="00:12:13.833" video="qanda-learning" id="subtitle"]]
+[[!template text="""unplanned tasks,""" start="00:12:16.121" video="qanda-learning" id="subtitle"]]
+[[!template text="""because those are good categories.""" start="00:12:17.221" video="qanda-learning" id="subtitle"]]
+[[!template text="""I like what you're doing.""" start="00:12:22.080" video="qanda-learning" id="subtitle"]]
+[[!template text="""Sorry? Do you do things like that at all?""" start="00:12:26.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""Or are there separations like with Zettelkasten""" start="00:12:32.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""versus the Getting Things Done?""" start="00:12:38.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""That's very interesting, yes. Daily log and weekly log,""" start="00:12:45.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""that's really helpful. I've also been trying to do that but""" start="00:12:52.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""not being able to successfully do a daily log plus a weekly""" start="00:12:56.821" video="qanda-learning" id="subtitle"]]
+[[!template text="""log. So I gave up on the daily log because it seemed to be like a""" start="00:13:02.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""lot of overhead for me, so I just switch to a weekly review""" start="00:13:06.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""where I would log what's going on and how it is. But it's also""" start="00:13:12.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""interesting to see how it connects back to something that""" start="00:13:16.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""we've already worked on, or we've already learned""" start="00:13:19.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""somewhere, which is essentially using the ZIP and custom""" start="00:13:22.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""method. I probably want to try that a bit later on also.""" start="00:13:26.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""That's a great suggestion, nice idea. Oh, so some of the""" start="00:13:30.240" video="qanda-learning" id="subtitle"]]
+[[!template text="""reason for the separation would be with the daily log, like,""" start="00:13:34.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""for instance, the title for the journal would be, Audinet""" start="00:13:38.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""would be the day, and it starts blank. And then, so if you have""" start="00:13:42.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""a straight thought, if you know it can go straight to your""" start="00:13:47.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""Zettelkasten, it goes into your Zettelkasten. If you don't""" start="00:13:50.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""know where it goes, it goes into your journal. And then same""" start="00:13:53.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""thing for like the week, is like your weeks always start""" start="00:13:57.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""emptying, so like if you have your core tasks, like if it""" start="00:14:01.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""spells beyond three, it's probably not a core task. So it""" start="00:14:04.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""gives you the idea of like, did I actually do what I wanted to""" start="00:14:08.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""yesterday, rather than getting 20 things done that I don't""" start="00:14:11.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""really care about that much. Yes. True, true, true. Very""" start="00:14:17.000" video="qanda-learning" id="subtitle"]]
+[[!template text="""true. Yeah.""" start="00:14:22.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""Nice, nice talk. Thank you so much for sharing that. I've""" start="00:14:23.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""been a, let's say a start and many times I've started on""" start="00:14:30.960" video="qanda-learning" id="subtitle"]]
+[[!template text="""Zettelkasten, you know, with little notes. They have these""" start="00:14:35.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""fleeting notes and permanent notes. I've tried many of""" start="00:14:40.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""those, but somehow it's not sticky for me. I've not been""" start="00:14:43.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""able to get rid of that.""" start="00:14:48.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""Yeah, I've got multiple attempts of using these systems,""" start="00:14:51.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""becoming too big or complex, like I don't know where to put a""" start="00:14:55.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""new piece of information, so then I throw the whole system""" start="00:15:02.000" video="qanda-learning" id="subtitle"]]
+[[!template text="""away. So, this is my favorite iteration that I've done so""" start="00:15:06.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""far. I'm sure it'll change with time. Okay, okay, okay, I""" start="00:15:14.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""see. Yeah, I...""" start="00:15:23.400" video="qanda-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Daily log""" start="00:15:25.080" video="qanda-learning" id="subtitle"]]</div>[[!template text="""I like the way the daily log works, that it has an embedded,""" start="00:15:25.080" video="qanda-learning" id="subtitle"]]
+[[!template text="""you know, you just have a name stamp and then you embed""" start="00:15:31.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""something from another project. And when you go to the""" start="00:15:36.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""project page, the same thing shows up there in the log also. I""" start="00:15:40.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""wanted to take that feature and have that in my optimal""" start="00:15:44.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""setup. I'm not well versed enough to get that set up because I""" start="00:15:48.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""like that with that. Anything I enter in the daily log should""" start="00:15:53.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""show up in my project log also and vice versa. I want to""" start="00:15:56.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""execute on my project. I need that notes where I'm looking""" start="00:16:00.360" video="qanda-learning" id="subtitle"]]
+[[!template text="""for. That's a key feature of that is with logseq you just have""" start="00:16:04.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""a button that says go to today. So you don't think about it and""" start="00:16:10.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""it always starts empty. It's that blank sheet that's always""" start="00:16:14.161" video="qanda-learning" id="subtitle"]]
+[[!template text="""confirming you want the things that I used that before.""" start="00:16:18.061" video="qanda-learning" id="subtitle"]]
+[[!template text="""One of the things I really wanted was, I want this,""" start="00:16:23.080" video="qanda-learning" id="subtitle"]]
+[[!template text="""but I want it for Getting Things Done on my journal.""" start="00:16:26.397" video="qanda-learning" id="subtitle"]]
+[[!template text="""I want two separate ones.""" start="00:16:29.199" video="qanda-learning" id="subtitle"]]
+[[!template text="""Yeah, I like the, also I'm trying to see how to create pages""" start="00:16:36.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""quickly from within Org Mode. I know we can do the square""" start="00:16:45.320" video="qanda-learning" id="subtitle"]]
+[[!template text="""bracket thing and enter and it should go into a new page. but""" start="00:16:51.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""it's not as seamless as in logseq or obsidian i'm trying to""" start="00:16:55.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""see how which way do i do that quickly so that you don't spend""" start="00:17:00.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""time on organizing once you have the bigger setup of the""" start="00:17:06.240" video="qanda-learning" id="subtitle"]]
+[[!template text="""folder structures and the to do then it's easier to""" start="00:17:10.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""integrate it but if i'm starting from a business point of""" start="00:17:14.960" video="qanda-learning" id="subtitle"]]
+[[!template text="""view it's rather tough for them to set it all up because the""" start="00:17:18.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""setup costs are very high in terms of system first and then""" start="00:17:22.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""start with this. Or like you said, you know we could also""" start="00:17:27.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""start with a blank sheet and then start filling it up and then""" start="00:17:30.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""see how to link up things or move it around so that it fits into""" start="00:17:33.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""your larger system or evolve a system as it goes. Don't start""" start="00:17:39.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""with the system in mind, but evolve it because it then fits""" start="00:17:44.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""into how you are rather than the you trying to adapt to the""" start="00:17:47.960" video="qanda-learning" id="subtitle"]]
+[[!template text="""system.""" start="00:17:52.560" video="qanda-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Capturing""" start="00:17:53.160" video="qanda-learning" id="subtitle"]]</div>[[!template text="""So, Denote and org-roam, they'll have a feature, like the""" start="00:17:53.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""note, you have a command called, let's see, create or""" start="00:18:00.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""existing note, and org-roam has an equivalent to that, and""" start="00:18:05.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""what that, you need to consult with that, as you are browsing""" start="00:18:09.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""your notes, you see that, and so if you're making a new note,""" start="00:18:15.000" video="qanda-learning" id="subtitle"]]
+[[!template text="""power generation or something like that you'll easily see""" start="00:18:19.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""if you have any notes that are in power generation or like""" start="00:18:23.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""let's say you have something in power and if you don't you""" start="00:18:27.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""just go down to where you're just you know you don't have""" start="00:18:30.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""anything selected or so it's your what's in your uh what your""" start="00:18:34.080" video="qanda-learning" id="subtitle"]]
+[[!template text="""current so you're not pre-selecting something existing""" start="00:18:39.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""and voila now you have a file And then you have consult so you""" start="00:18:46.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""can preview them as you move up and down the list.""" start="00:18:51.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""And then you also got Emacs""" start="00:18:57.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""Org Capture to just pop up a template""" start="00:19:02.320" video="qanda-learning" id="subtitle"]]
+[[!template text="""capture buffer that is blank that you can tell to go into""" start="00:19:10.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""something like a journal or a GTD inbox.""" start="00:19:16.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""And yeah, this allows you to just make it like a specific""" start="00:19:20.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""buffer to do that specific task. I think Protesilaos has a""" start="00:19:27.280" video="qanda-learning" id="subtitle"]]
+[[!template text="""video about how to make that into just a pop-up window. Like""" start="00:19:31.000" video="qanda-learning" id="subtitle"]]
+[[!template text="""for instance, you're in your browser, you pop it up, Uh, jot""" start="00:19:35.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""down your task, press enter, and it's gone. Hmm, okay. Okay,""" start="00:19:41.520" video="qanda-learning" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""silos""" start="00:19:49.600" video="qanda-learning" id="subtitle"]]</div>[[!template text="""okay, makes sense, makes sense. Yeah, for me, I wanted to try""" start="00:19:49.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""denote, but my folder structure, I found it very difficult""" start="00:19:54.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""to move it to a denote kind of a structure where the folder""" start="00:20:01.080" video="qanda-learning" id="subtitle"]]
+[[!template text="""hierarchy is not as important because all nodes are treated""" start="00:20:04.560" video="qanda-learning" id="subtitle"]]
+[[!template text="""the same. But for me, because I'm focusing on a project, I""" start="00:20:08.520" video="qanda-learning" id="subtitle"]]
+[[!template text="""need only the project files show up. It was tricky for me to,""" start="00:20:12.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""because sometimes I share the folder with my colleagues and""" start="00:20:17.080" video="qanda-learning" id="subtitle"]]
+[[!template text="""who are not on Emacs or more. So I can't show them all the""" start="00:20:20.600" video="qanda-learning" id="subtitle"]]
+[[!template text="""files, all the notes. I just want that folder to be shared and""" start="00:20:24.520" video="qanda-learning" id="subtitle"]]
+[[!template text="""ignore the todo.org that is there because it's not readable""" start="00:20:28.880" video="qanda-learning" id="subtitle"]]
+[[!template text="""for them. So, I find it easier to share a folder level or a""" start="00:20:32.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""project level and that's why I stuck to this format which is a""" start="00:20:37.680" video="qanda-learning" id="subtitle"]]
+[[!template text="""hierarchy of folders with the to-do inside those folders.""" start="00:20:41.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""That works very well for me, particularly keeping in mind""" start="00:20:46.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""that I need to share some folders sometimes with my""" start="00:20:49.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""colleagues. Whereas Denote with a flat structure or""" start="00:20:52.480" video="qanda-learning" id="subtitle"]]
+[[!template text="""Roam with a flat structure, I find it very tricky to do that.""" start="00:20:57.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""With Denote, you can actually have, there's a feature""" start="00:21:01.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""called silos that will""" start="00:21:06.080" video="qanda-learning" id="subtitle"]]
+[[!template text="""allow you to do both and I think you can make customized""" start="00:21:07.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""commands to go that work only in specific silos. I haven't""" start="00:21:13.200" video="qanda-learning" id="subtitle"]]
+[[!template text="""messed around to it. too much with them. I don't think org run""" start="00:21:17.960" video="qanda-learning" id="subtitle"]]
+[[!template text="""has anything like that though. Yes, I don't think they have""" start="00:21:20.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""that. But I remember seeing silos. Maybe I should give it""" start="00:21:24.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""another spin and see if that works. Because if it can solve my""" start="00:21:28.240" video="qanda-learning" id="subtitle"]]
+[[!template text="""creating new node quickly from the denote part itself while""" start="00:21:32.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""I'm writing the nodes itself rather than go through the R""" start="00:21:36.520" video="qanda-learning" id="subtitle"]]
+[[!template text="""capture. That will really help me in linking back and seeing""" start="00:21:40.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""how it maps to another project that I've already worked on""" start="00:21:45.440" video="qanda-learning" id="subtitle"]]
+[[!template text="""from an archive and then bring it there. I think that's a good""" start="00:21:49.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""idea. I'll look at silos again. Also, with the silos, let's""" start="00:21:54.000" video="qanda-learning" id="subtitle"]]
+[[!template text="""say you're going to use ripgrep on the directory, you could""" start="00:21:57.640" video="qanda-learning" id="subtitle"]]
+[[!template text="""intentionally keep your Zettelkasten and your journal""" start="00:22:03.720" video="qanda-learning" id="subtitle"]]
+[[!template text="""separated. in different folders, like, yeah. So that,""" start="00:22:07.800" video="qanda-learning" id="subtitle"]]
+[[!template text="""like, if you direct them, or if you wanted to share folder by""" start="00:22:13.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""folder basis, yeah, you don't have to be the all-in or""" start="00:22:19.040" video="qanda-learning" id="subtitle"]]
+[[!template text="""nothing approach. Yeah, that works. That works.""" start="00:22:23.400" video="qanda-learning" id="subtitle"]]
+[[!template text="""Excellent.""" start="00:22:30.760" video="qanda-learning" id="subtitle"]]
+[[!template text="""OK.""" start="00:22:35.120" video="qanda-learning" id="subtitle"]]
+[[!template text="""Well, thank you so much for your time and for sharing what is""" start="00:22:37.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""really helpful for me. I hope the talk was useful for you.""" start="00:22:44.160" video="qanda-learning" id="subtitle"]]
+[[!template text="""Yep. Thanks for sharing. Have fun with the rest of the Emacs""" start="00:22:47.920" video="qanda-learning" id="subtitle"]]
+[[!template text="""camp. Okay. All right. Then see you then. Happy Emacs month""" start="00:22:53.840" video="qanda-learning" id="subtitle"]]
+[[!template text="""to you too. Okay. Bye. Bye.""" start="00:23:00.800" video="qanda-learning" 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%20learning%3A%20Survival%20of%20the%20skillest%3A%20Thriving%20in%20the%20learning%20jungle)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/learning-before.md b/2024/info/learning-before.md
index 954977bb..432d6c2d 100644
--- a/2024/info/learning-before.md
+++ b/2024/info/learning-before.md
@@ -1,18 +1,40 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 20-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="learning">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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 stroke-width="3" x="82" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 20-min talk; Q&A: Etherpad <https://pad.emacsconf.org/2024-learning>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Being captioned
-<div>Times in different time zones:</div><div class="times" start="2024-12-08T15:00:00Z" end="2024-12-08T15:20:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~10:00 AM - 10:20 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~9:00 AM - 9:20 AM CST (US/Central)<br />Sunday, Dec 8 2024, ~8:00 AM - 8:20 AM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~7:00 AM - 7:20 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~3:00 PM - 3:20 PM UTC <br />Sunday, Dec 8 2024, ~4:00 PM - 4:20 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~5:00 PM - 5:20 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~8:30 PM - 8:50 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~11:00 PM - 11:20 PM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~12:00 AM - 12:20 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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?
+02:11.040 What skills should you learn?
+02:35.974 What stops you from learning new skills?
+03:16.274 Empty your teacup
+04:40.424 Getting Things Done
+06:33.724 Archive
+07:33.290 Multiple steps
+10:02.874 Multiple projects
+10:37.874 What if the project stops before completion?
+11:20.974 What if you successfully complete the project?
+12:18.140 What if the project is ongoing and doesn't really end?
+12:54.320 What if you forget to visit the TODO files?
+16:02.740 Planning for the future
+18:36.957 Summary
+19:03.210 References
+
+"""]]<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 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="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/learning-nav.md b/2024/info/learning-nav.md
index 591e8f0e..1d968512 100644
--- a/2024/info/learning-nav.md
+++ b/2024/info/learning-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/regex">Emacs regex compilation and future directions for expressive pattern matching</a>
-Next by time: <a href="/2024/talks/language">Immersive language learning with Emacs</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/regex">Emacs regex compilation and future directions for expressive pattern matching</a>
+Next by track: <a href="/2024/talks/blee">About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/links-after.md b/2024/info/links-after.md
index e6649061..2ee31635 100644
--- a/2024/info/links-after.md
+++ b/2024/info/links-after.md
@@ -1,6 +1,293 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
+<div class="transcript transcript-mainVideo"><a name="links-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hello. My name is Abhinav, and I'm going""" start="00:00:00.560" video="mainVideo-links" id="subtitle"]]
+[[!template text="""to talk about unlocking linked data in Org""" start="00:00:02.560" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Mode. So, like, a lot of you, I""" start="00:00:04.880" video="mainVideo-links" id="subtitle"]]
+[[!template text="""use Emacs and Org Mode for keeping a""" start="00:00:07.120" video="mainVideo-links" id="subtitle"]]
+[[!template text="""lot of my data, personal information. For example,""" start="00:00:09.360" video="mainVideo-links" id="subtitle"]]
+[[!template text="""if I'm trying to, you know, write journal""" start="00:00:12.320" video="mainVideo-links" id="subtitle"]]
+[[!template text="""entries, it's most likely going to be an""" start="00:00:14.775" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Org Mode file. If I'm trying to save""" start="00:00:16.535" video="mainVideo-links" id="subtitle"]]
+[[!template text="""bookmarks or save links, again, they go into""" start="00:00:18.615" video="mainVideo-links" id="subtitle"]]
+[[!template text="""an Org Mode file. Now, I was doing""" start="00:00:21.015" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that earlier, but, last year, I think I""" start="00:00:23.415" video="mainVideo-links" id="subtitle"]]
+[[!template text="""around last year, I started to use these""" start="00:00:26.695" video="mainVideo-links" id="subtitle"]]
+[[!template text="""specialized applications. So, you know, for example, if""" start="00:00:28.615" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I'm trying to save bookmarks, I'm going to""" start="00:00:31.390" video="mainVideo-links" id="subtitle"]]
+[[!template text="""use a bookmark manager. I specifically was using""" start="00:00:33.710" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Raindrop for it. What happened with that is""" start="00:00:37.230" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that it allowed me to save bookmarks. Let's""" start="00:00:39.870" video="mainVideo-links" id="subtitle"]]
+[[!template text="""say, you know, when I'm on go, I'm""" start="00:00:42.590" video="mainVideo-links" id="subtitle"]]
+[[!template text="""on a mobile phone, I can just,""" start="00:00:43.790" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you know, open my Android app and then""" start="00:00:45.470" video="mainVideo-links" id="subtitle"]]
+[[!template text="""save links there. I can also annotate and,""" start="00:00:47.594" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you know, do other things that you can""" start="00:00:50.235" video="mainVideo-links" id="subtitle"]]
+[[!template text="""do on bookmarks. Similarly, you know, for reading,""" start="00:00:51.355" video="mainVideo-links" id="subtitle"]]
+[[!template text="""let's say, papers and PDFs, I would use""" start="00:00:54.235" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Zotero. For, keeping notes about people, I'll use""" start="00:00:56.074" video="mainVideo-links" id="subtitle"]]
+[[!template text="""a tool called Monica CRM. Now all these""" start="00:01:00.074" video="mainVideo-links" id="subtitle"]]
+[[!template text="""tools, their aim is to kind of""" start="00:01:03.650" video="mainVideo-links" id="subtitle"]]
+[[!template text="""do one thing really well, but they kind""" start="00:01:05.650" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of work in their own silos, and it's""" start="00:01:08.050" video="mainVideo-links" id="subtitle"]]
+[[!template text="""very hard to link data from one to""" start="00:01:09.730" video="mainVideo-links" id="subtitle"]]
+[[!template text="""another. For example, if you have a journal""" start="00:01:11.810" video="mainVideo-links" id="subtitle"]]
+[[!template text="""application, you can say things like, you know,""" start="00:01:13.730" video="mainVideo-links" id="subtitle"]]
+[[!template text="""&quot;Hey today, I met this person, and then,""" start="00:01:16.855" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you know, this person gave me this recipe,&quot;""" start="00:01:18.935" video="mainVideo-links" id="subtitle"]]
+[[!template text="""whatever. But you know that the person information""" start="00:01:20.855" video="mainVideo-links" id="subtitle"]]
+[[!template text="""is still kept in a different application, and""" start="00:01:24.615" video="mainVideo-links" id="subtitle"]]
+[[!template text="""the recipe information is still kept in a""" start="00:01:26.375" video="mainVideo-links" id="subtitle"]]
+[[!template text="""different application. You have to, like, you know,""" start="00:01:27.895" video="mainVideo-links" id="subtitle"]]
+[[!template text="""like, do a lot of work to kind""" start="00:01:30.720" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of make them come together. So, one thing""" start="00:01:32.079" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that happened also last year was that I""" start="00:01:35.920" video="mainVideo-links" id="subtitle"]]
+[[!template text="""started using Org Roam a lot. So Org""" start="00:01:37.600" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Roam is a Zettelkasten system, you know,""" start="00:01:39.840" video="mainVideo-links" id="subtitle"]]
+[[!template text="""which allows you to have linked notes. I'll""" start="00:01:41.920" video="mainVideo-links" id="subtitle"]]
+[[!template text="""not go too much into that detail, but""" start="00:01:45.025" video="mainVideo-links" id="subtitle"]]
+[[!template text="""basically, with Org Roam, you can, you know,""" start="00:01:46.625" video="mainVideo-links" id="subtitle"]]
+[[!template text="""have a lot of these text based files""" start="00:01:48.945" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that you make anyway and then keep them""" start="00:01:50.785" video="mainVideo-links" id="subtitle"]]
+[[!template text="""connected and then, you know, like, have this""" start="00:01:53.025" video="mainVideo-links" id="subtitle"]]
+[[!template text="""knowledge base that you can build, around your""" start="00:01:55.345" video="mainVideo-links" id="subtitle"]]
+[[!template text="""information, your data. While it's a good system,""" start="00:01:57.985" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I still feel like it's not very pro""" start="00:02:02.040" video="mainVideo-links" id="subtitle"]]
+[[!template text="""on providing, you know, very good amount of""" start="00:02:04.680" video="mainVideo-links" id="subtitle"]]
+[[!template text="""tools for, working with links. I'll show two""" start="00:02:07.080" video="mainVideo-links" id="subtitle"]]
+[[!template text="""kind of things. First is that, I'll show""" start="00:02:10.520" video="mainVideo-links" id="subtitle"]]
+[[!template text="""how my current knowledge base looks like, what""" start="00:02:12.920" video="mainVideo-links" id="subtitle"]]
+[[!template text="""kind of, you know, workflow I kind of""" start="00:02:16.885" video="mainVideo-links" id="subtitle"]]
+[[!template text="""use to save, let's say, any information or""" start="00:02:18.965" video="mainVideo-links" id="subtitle"]]
+[[!template text="""how do I, like, you know, connect new""" start="00:02:21.205" video="mainVideo-links" id="subtitle"]]
+[[!template text="""notes. The other is that because while this""" start="00:02:22.644" video="mainVideo-links" id="subtitle"]]
+[[!template text="""information base is working out well for""" start="00:02:25.924" video="mainVideo-links" id="subtitle"]]
+[[!template text="""me, I still want all of my external""" start="00:02:28.084" video="mainVideo-links" id="subtitle"]]
+[[!template text="""usages to be, you know, to be reflected""" start="00:02:31.750" video="mainVideo-links" id="subtitle"]]
+[[!template text="""back into this database of text files. So""" start="00:02:34.470" video="mainVideo-links" id="subtitle"]]
+[[!template text="""if I'm browsing something, I still want that""" start="00:02:37.030" video="mainVideo-links" id="subtitle"]]
+[[!template text="""thing to be, you know, saved in my""" start="00:02:38.950" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Org Mode files, whether I'm browsing on Android""" start="00:02:40.790" video="mainVideo-links" id="subtitle"]]
+[[!template text="""or I'm browsing on, let's say, Firefox""" start="00:02:43.975" video="mainVideo-links" id="subtitle"]]
+[[!template text="""somewhere on a laptop. So, I'll show you""" start="00:02:46.535" video="mainVideo-links" id="subtitle"]]
+[[!template text="""those two things here. It's going to be""" start="00:02:49.015" video="mainVideo-links" id="subtitle"]]
+[[!template text="""a short talk, and then, yeah, hope you""" start="00:02:50.615" video="mainVideo-links" id="subtitle"]]
+[[!template text="""like it. Okay. So we'll start with this""" start="00:02:52.215" video="mainVideo-links" id="subtitle"]]
+[[!template text="""thing. So this is a simple Org Roam""" start="00:02:54.855" video="mainVideo-links" id="subtitle"]]
+[[!template text="""node. It's, you know, it's a dummy node.""" start="00:02:57.830" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I've made, like, a lot of dummy nodes""" start="00:02:59.990" video="mainVideo-links" id="subtitle"]]
+[[!template text="""here just to kind of show, so, you""" start="00:03:01.190" video="mainVideo-links" id="subtitle"]]
+[[!template text="""know, maybe some of those information will be""" start="00:03:03.110" video="mainVideo-links" id="subtitle"]]
+[[!template text="""sparse, but I hope I convey the""" start="00:03:05.590" video="mainVideo-links" id="subtitle"]]
+[[!template text="""meaning clearly. Okay. So here, if you usually,""" start="00:03:08.630" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you know, if you're just using plain Org""" start="00:03:12.635" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Mode, you just have this file. Right? There's""" start="00:03:14.234" video="mainVideo-links" id="subtitle"]]
+[[!template text="""nothing else. Now if you are using Org""" start="00:03:15.995" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Roam, you can do something called org-roam-""" start="00:03:19.114" video="mainVideo-links" id="subtitle"]]
+[[!template text="""buffer-toggle, which will show you, you know,""" start="00:03:20.875" video="mainVideo-links" id="subtitle"]]
+[[!template text="""a few of those connected nodes. Now, usually,""" start="00:03:23.034" video="mainVideo-links" id="subtitle"]]
+[[!template text="""the connections are shown here, they only show""" start="00:03:26.750" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you backlinks. So, basically, any other node that""" start="00:03:29.470" video="mainVideo-links" id="subtitle"]]
+[[!template text="""has linked to this node is going to""" start="00:03:32.190" video="mainVideo-links" id="subtitle"]]
+[[!template text="""be shown there. But in my extension, you""" start="00:03:34.270" video="mainVideo-links" id="subtitle"]]
+[[!template text="""can see more things. For example, here, in""" start="00:03:36.910" video="mainVideo-links" id="subtitle"]]
+[[!template text="""this case, you can see, first of all,""" start="00:03:40.485" video="mainVideo-links" id="subtitle"]]
+[[!template text="""we show both links. So any link from""" start="00:03:43.125" video="mainVideo-links" id="subtitle"]]
+[[!template text="""this node to something else, will also be""" start="00:03:45.364" video="mainVideo-links" id="subtitle"]]
+[[!template text="""shown there. Any link from that node to""" start="00:03:47.765" video="mainVideo-links" id="subtitle"]]
+[[!template text="""something else will also be shown there. So""" start="00:03:49.285" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you can see, that is one thing. The""" start="00:03:52.099" video="mainVideo-links" id="subtitle"]]
+[[!template text="""other thing is that all these links are""" start="00:03:54.420" video="mainVideo-links" id="subtitle"]]
+[[!template text="""categorized in, you know, type of notes. For""" start="00:03:56.099" video="mainVideo-links" id="subtitle"]]
+[[!template text="""example, when this note specifically right now is""" start="00:03:58.739" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of kind book. Tag is one identifier for""" start="00:04:02.260" video="mainVideo-links" id="subtitle"]]
+[[!template text="""it, but there are, like, other ways to""" start="00:04:05.005" video="mainVideo-links" id="subtitle"]]
+[[!template text="""identify, you know, a kind of note. But""" start="00:04:06.045" video="mainVideo-links" id="subtitle"]]
+[[!template text="""this is connected to another node, which is""" start="00:04:09.165" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of a kind person. So as you""" start="00:04:11.165" video="mainVideo-links" id="subtitle"]]
+[[!template text="""can see, the, Person A asked me to""" start="00:04:13.084" video="mainVideo-links" id="subtitle"]]
+[[!template text="""read this book. So, you know, that link""" start="00:04:15.165" video="mainVideo-links" id="subtitle"]]
+[[!template text="""is shown there in a very, rich format.""" start="00:04:16.685" video="mainVideo-links" id="subtitle"]]
+[[!template text="""So we have, like, more information about the""" start="00:04:19.170" video="mainVideo-links" id="subtitle"]]
+[[!template text="""link, in this. The other thing that you""" start="00:04:20.769" video="mainVideo-links" id="subtitle"]]
+[[!template text="""can see there is that, there are also""" start="00:04:23.970" video="mainVideo-links" id="subtitle"]]
+[[!template text="""links which are not existing right now, but""" start="00:04:26.610" video="mainVideo-links" id="subtitle"]]
+[[!template text="""they could be, you know, possibly interesting for""" start="00:04:29.570" video="mainVideo-links" id="subtitle"]]
+[[!template text="""me. So these are similar nodes. So these""" start="00:04:32.530" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you can see the scores of similarity and""" start="00:04:34.755" video="mainVideo-links" id="subtitle"]]
+[[!template text="""then, you know, other nodes like Book on""" start="00:04:36.514" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Mathematics, which is another dummy node that""" start="00:04:38.435" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I made for this demo. Now these are""" start="00:04:40.354" video="mainVideo-links" id="subtitle"]]
+[[!template text="""nodes which, you know, again, I can just""" start="00:04:42.995" video="mainVideo-links" id="subtitle"]]
+[[!template text="""go in there and I can see if""" start="00:04:44.275" video="mainVideo-links" id="subtitle"]]
+[[!template text="""maybe they make sense or if, you know,""" start="00:04:45.474" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I can just, like, make those connections explicitly.""" start="00:04:47.710" video="mainVideo-links" id="subtitle"]]
+[[!template text="""So let's let's try some other node here.""" start="00:04:51.150" video="mainVideo-links" id="subtitle"]]
+[[!template text="""So let's say so this is a node""" start="00:04:53.229" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of a recipe. It's Bombay""" start="00:04:55.229" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Sandwich. It's the recipe I made. Now if""" start="00:04:57.389" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you go here on the right, you can""" start="00:04:59.550" video="mainVideo-links" id="subtitle"]]
+[[!template text="""see, you know, there's, like, some things on,""" start="00:05:01.389" video="mainVideo-links" id="subtitle"]]
+[[!template text="""some person liking the sandwich. There are some""" start="00:05:04.095" video="mainVideo-links" id="subtitle"]]
+[[!template text="""related notes also, similar notes which I have""" start="00:05:07.135" video="mainVideo-links" id="subtitle"]]
+[[!template text="""not linked. Plus, there are some journal entries.""" start="00:05:09.775" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Now I use Org-Roam daily to kind of,""" start="00:05:12.575" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you know, write down journal entries. And then,""" start="00:05:15.855" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you know, what I have to do there""" start="00:05:20.710" video="mainVideo-links" id="subtitle"]]
+[[!template text="""is basically just write whatever I want and""" start="00:05:22.150" video="mainVideo-links" id="subtitle"]]
+[[!template text="""then just, you know, make those links to""" start="00:05:24.070" video="mainVideo-links" id="subtitle"]]
+[[!template text="""this node. So for doing""" start="00:05:25.590" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that, I can see, that there were two""" start="00:05:28.630" video="mainVideo-links" id="subtitle"]]
+[[!template text="""days where I made Bombay Sandwich, and I""" start="00:05:31.030" video="mainVideo-links" id="subtitle"]]
+[[!template text="""had some observations around it, which, you know,""" start="00:05:32.630" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you can see here. Right. Same so same""" start="00:05:35.465" video="mainVideo-links" id="subtitle"]]
+[[!template text="""for person. Let's say if you go to""" start="00:05:38.505" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Person B, you can see that, you know,""" start="00:05:39.865" video="mainVideo-links" id="subtitle"]]
+[[!template text="""this person has, again, link to Person A""" start="00:05:41.705" video="mainVideo-links" id="subtitle"]]
+[[!template text="""and there's, like, some information around it. Plus,""" start="00:05:43.385" video="mainVideo-links" id="subtitle"]]
+[[!template text="""there are some similar notes there. This works""" start="00:05:45.865" video="mainVideo-links" id="subtitle"]]
+[[!template text="""really well. The similarity function works really well""" start="00:05:50.050" video="mainVideo-links" id="subtitle"]]
+[[!template text="""if you are basically trying to go to,""" start="00:05:52.210" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you know, bookmarks that I have saved. So""" start="00:05:54.530" video="mainVideo-links" id="subtitle"]]
+[[!template text="""for example, here's a bookmark that I saved,""" start="00:05:56.530" video="mainVideo-links" id="subtitle"]]
+[[!template text="""which is, Google at Interspeech 2023. Now""" start="00:05:58.610" video="mainVideo-links" id="subtitle"]]
+[[!template text="""this bookmark is a blog post from Google""" start="00:06:01.605" video="mainVideo-links" id="subtitle"]]
+[[!template text="""AI team. Basically, you know, tells what research""" start="00:06:03.845" video="mainVideo-links" id="subtitle"]]
+[[!template text="""publications they had in this conference.""" start="00:06:07.525" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Now if you go to the Similar Nodes""" start="00:06:10.005" video="mainVideo-links" id="subtitle"]]
+[[!template text="""here, you can see a very similar blog""" start="00:06:11.445" video="mainVideo-links" id="subtitle"]]
+[[!template text="""post from Google's team for other conferences that""" start="00:06:13.365" video="mainVideo-links" id="subtitle"]]
+[[!template text="""they attended. Right? Now this is very helpful""" start="00:06:15.925" video="mainVideo-links" id="subtitle"]]
+[[!template text="""for me, especially when I'm, like, reading something,""" start="00:06:17.840" video="mainVideo-links" id="subtitle"]]
+[[!template text="""later. So I, like, save a lot of""" start="00:06:20.240" video="mainVideo-links" id="subtitle"]]
+[[!template text="""links together. And then when I'm deciding""" start="00:06:21.840" video="mainVideo-links" id="subtitle"]]
+[[!template text="""to read something, I just open this and""" start="00:06:24.400" video="mainVideo-links" id="subtitle"]]
+[[!template text="""then see, you know, how everything is connected,""" start="00:06:26.080" video="mainVideo-links" id="subtitle"]]
+[[!template text="""what what else I have saved. Should I""" start="00:06:28.319" video="mainVideo-links" id="subtitle"]]
+[[!template text="""read something else or not? One interesting feature""" start="00:06:30.159" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I was realizing I should try out is""" start="00:06:32.625" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that, you know, if I go to this""" start="00:06:34.784" video="mainVideo-links" id="subtitle"]]
+[[!template text="""node, which is Person B, you can see""" start="00:06:37.425" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that while I'm linking this to Person A,""" start="00:06:39.985" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I also have some context on that. So""" start="00:06:42.705" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I've written specifically uncle of Person""" start="00:06:45.040" video="mainVideo-links" id="subtitle"]]
+[[!template text="""A. Now if you have a semantic wiki,""" start="00:06:47.600" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you will have a typed link where you""" start="00:06:49.600" video="mainVideo-links" id="subtitle"]]
+[[!template text="""don't have a plain link. You also have""" start="00:06:52.240" video="mainVideo-links" id="subtitle"]]
+[[!template text="""a type of the link. So in this""" start="00:06:54.000" video="mainVideo-links" id="subtitle"]]
+[[!template text="""case, the type of the link could be,""" start="00:06:55.840" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you know, it's like `uncle:` whatever""" start="00:06:57.040" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that link is. But, you know, I don't""" start="00:07:00.895" video="mainVideo-links" id="subtitle"]]
+[[!template text="""want to, like, go into that much detail,""" start="00:07:03.335" video="mainVideo-links" id="subtitle"]]
+[[!template text="""and I don't want to, like, learn how""" start="00:07:05.175" video="mainVideo-links" id="subtitle"]]
+[[!template text="""to link things, learn what kind of types""" start="00:07:07.335" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I can make. So I can just write""" start="00:07:09.175" video="mainVideo-links" id="subtitle"]]
+[[!template text="""things in plain text. So I've written this""" start="00:07:10.375" video="mainVideo-links" id="subtitle"]]
+[[!template text="""in plain text. What I can do now""" start="00:07:12.294" video="mainVideo-links" id="subtitle"]]
+[[!template text="""is I can just search for links like""" start="00:07:13.815" video="mainVideo-links" id="subtitle"]]
+[[!template text="""this. For example, I can just do something""" start="00:07:16.250" video="mainVideo-links" id="subtitle"]]
+[[!template text="""like family members. Now this will show me""" start="00:07:17.850" video="mainVideo-links" id="subtitle"]]
+[[!template text="""all the links which have a context which""" start="00:07:21.290" video="mainVideo-links" id="subtitle"]]
+[[!template text="""makes sense as family members. So basically, this""" start="00:07:23.370" video="mainVideo-links" id="subtitle"]]
+[[!template text="""is semantic search on links, on the context""" start="00:07:27.450" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of the links, and then, you know, it""" start="00:07:29.610" video="mainVideo-links" id="subtitle"]]
+[[!template text="""kind of gives me what I want here.""" start="00:07:31.215" video="mainVideo-links" id="subtitle"]]
+[[!template text="""For example, here, in this demo, I just""" start="00:07:33.134" video="mainVideo-links" id="subtitle"]]
+[[!template text="""had, like, one node, one link, which had""" start="00:07:34.895" video="mainVideo-links" id="subtitle"]]
+[[!template text="""this uncle relationship. So that kind of works""" start="00:07:37.134" video="mainVideo-links" id="subtitle"]]
+[[!template text="""out. Now let's just try another search. For""" start="00:07:39.455" video="mainVideo-links" id="subtitle"]]
+[[!template text="""example, let's say if I'm just typing 'check""" start="00:07:41.375" video="mainVideo-links" id="subtitle"]]
+[[!template text="""before meeting'. So these are now again links""" start="00:07:44.850" video="mainVideo-links" id="subtitle"]]
+[[!template text="""where I have written something where I kind""" start="00:07:47.410" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of should do something before meeting someone. So""" start="00:07:49.410" video="mainVideo-links" id="subtitle"]]
+[[!template text="""for example, the first one you can see,""" start="00:07:52.290" video="mainVideo-links" id="subtitle"]]
+[[!template text="""there's a person called Meeting Person. It's a""" start="00:07:54.850" video="mainVideo-links" id="subtitle"]]
+[[!template text="""demo node again. And, I've written one note""" start="00:07:57.705" video="mainVideo-links" id="subtitle"]]
+[[!template text="""about, one connection here is basically saying that,""" start="00:08:00.745" video="mainVideo-links" id="subtitle"]]
+[[!template text="""hey, you know, read this link before you""" start="00:08:05.145" video="mainVideo-links" id="subtitle"]]
+[[!template text="""go to meet them. Right? So it's also""" start="00:08:07.145" video="mainVideo-links" id="subtitle"]]
+[[!template text="""been very helpful for me. There are, like,""" start="00:08:09.720" video="mainVideo-links" id="subtitle"]]
+[[!template text="""few patterns where I kind of feel this""" start="00:08:11.560" video="mainVideo-links" id="subtitle"]]
+[[!template text="""works out well. As I keep making more""" start="00:08:13.800" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of the links and keep writing more context""" start="00:08:17.319" video="mainVideo-links" id="subtitle"]]
+[[!template text="""around the link, this kind of works""" start="00:08:20.120" video="mainVideo-links" id="subtitle"]]
+[[!template text="""out really helpful. This becomes really helpful for""" start="00:08:21.800" video="mainVideo-links" id="subtitle"]]
+[[!template text="""me. Okay. So the other few things, you""" start="00:08:25.135" video="mainVideo-links" id="subtitle"]]
+[[!template text="""know, how do I, like, work with, systems""" start="00:08:27.935" video="mainVideo-links" id="subtitle"]]
+[[!template text="""outside Emacs. Right? So the first thing""" start="00:08:30.575" video="mainVideo-links" id="subtitle"]]
+[[!template text="""is that, you know, the I haven't found""" start="00:08:32.735" video="mainVideo-links" id="subtitle"]]
+[[!template text="""anything that works really well for saving bookmarks,""" start="00:08:35.054" video="mainVideo-links" id="subtitle"]]
+[[!template text="""when I'm on my Android phone. So I""" start="00:08:40.250" video="mainVideo-links" id="subtitle"]]
+[[!template text="""had to make a new applications, application, and""" start="00:08:42.250" video="mainVideo-links" id="subtitle"]]
+[[!template text="""it's called pile-android. Now this application basically,""" start="00:08:44.890" video="mainVideo-links" id="subtitle"]]
+[[!template text="""you know, lets me do whatever I was""" start="00:08:47.930" video="mainVideo-links" id="subtitle"]]
+[[!template text="""doing with Raindrop, which was a bookmark manager.""" start="00:08:49.290" video="mainVideo-links" id="subtitle"]]
+[[!template text="""So I can open links. I can read""" start="00:08:52.305" video="mainVideo-links" id="subtitle"]]
+[[!template text="""stuff in Firefox on my browser on my,""" start="00:08:53.825" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Android phone, and then I can save all""" start="00:08:56.385" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of that in my Org Roam database. Org""" start="00:08:58.065" video="mainVideo-links" id="subtitle"]]
+[[!template text="""roam database here means the Org Roam files""" start="00:09:00.625" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that I have. Because, again, these are plain""" start="00:09:02.465" video="mainVideo-links" id="subtitle"]]
+[[!template text="""text file, I can sync them through mobile""" start="00:09:03.905" video="mainVideo-links" id="subtitle"]]
+[[!template text="""phone to my, you know, desktop and laptop""" start="00:09:06.140" video="mainVideo-links" id="subtitle"]]
+[[!template text="""and everything else. So that's one place where""" start="00:09:08.780" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I kind of, you know, stop, going to""" start="00:09:11.340" video="mainVideo-links" id="subtitle"]]
+[[!template text="""a, new application. I just basically ingest everything""" start="00:09:13.460" video="mainVideo-links" id="subtitle"]]
+[[!template text="""in my Org Roam setup. The other thing""" start="00:09:16.860" video="mainVideo-links" id="subtitle"]]
+[[!template text="""is that, when I'm browsing on my laptop,""" start="00:09:19.625" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I still want to, you know, collect all""" start="00:09:22.985" video="mainVideo-links" id="subtitle"]]
+[[!template text="""the data inside my Org Roam system. So""" start="00:09:25.785" video="mainVideo-links" id="subtitle"]]
+[[!template text="""so here's something which I call Org Roam""" start="00:09:28.504" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Sidekick. Now what you can do here is""" start="00:09:30.504" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that, let's say, if you want to search""" start="00:09:33.380" video="mainVideo-links" id="subtitle"]]
+[[!template text="""for something, so you can basically do a""" start="00:09:34.740" video="mainVideo-links" id="subtitle"]]
+[[!template text="""search normally, which is going to do a""" start="00:09:37.380" video="mainVideo-links" id="subtitle"]]
+[[!template text="""web search. But if you call Org Roam""" start="00:09:39.139" video="mainVideo-links" id="subtitle"]]
+[[!template text="""SK, which is Sidekick, it will do a""" start="00:09:41.860" video="mainVideo-links" id="subtitle"]]
+[[!template text="""search on all of your Org Roam notes. So""" start="00:09:44.740" video="mainVideo-links" id="subtitle"]]
+[[!template text="""now this search is basically using recoll. So""" start="00:09:48.025" video="mainVideo-links" id="subtitle"]]
+[[!template text="""recoll kind of indexes all the plain text""" start="00:09:50.905" video="mainVideo-links" id="subtitle"]]
+[[!template text="""and does a full text search for you.""" start="00:09:53.145" video="mainVideo-links" id="subtitle"]]
+[[!template text="""But this this is really helpful because when""" start="00:09:55.385" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I'm searching for something and I still want""" start="00:09:57.145" video="mainVideo-links" id="subtitle"]]
+[[!template text="""to know that, hey, you know, hey, I""" start="00:09:59.190" video="mainVideo-links" id="subtitle"]]
+[[!template text="""have saved some of those links earlier. So,""" start="00:10:00.550" video="mainVideo-links" id="subtitle"]]
+[[!template text="""can I, like, you know, see them back""" start="00:10:03.830" video="mainVideo-links" id="subtitle"]]
+[[!template text="""and then, you know, it's a very""" start="00:10:05.350" video="mainVideo-links" id="subtitle"]]
+[[!template text="""good way to kind of not lose track""" start="00:10:07.590" video="mainVideo-links" id="subtitle"]]
+[[!template text="""of what you've already saved. The other""" start="00:10:09.990" video="mainVideo-links" id="subtitle"]]
+[[!template text="""thing I can do is, like, I can""" start="00:10:12.665" video="mainVideo-links" id="subtitle"]]
+[[!template text="""also, you know again, since I have saved""" start="00:10:13.625" video="mainVideo-links" id="subtitle"]]
+[[!template text="""a project, in my Org Roam, I can""" start="00:10:16.745" video="mainVideo-links" id="subtitle"]]
+[[!template text="""basically call, again, Sidekick again, and I can""" start="00:10:20.185" video="mainVideo-links" id="subtitle"]]
+[[!template text="""see a note for that. That note here""" start="00:10:22.905" video="mainVideo-links" id="subtitle"]]
+[[!template text="""specifically is tracking my tasks for this project.""" start="00:10:26.200" video="mainVideo-links" id="subtitle"]]
+[[!template text="""And other than tasks, you know, again, I""" start="00:10:29.240" video="mainVideo-links" id="subtitle"]]
+[[!template text="""can see other things like similar notes. I""" start="00:10:30.840" video="mainVideo-links" id="subtitle"]]
+[[!template text="""can see, you know, other links that are""" start="00:10:32.920" video="mainVideo-links" id="subtitle"]]
+[[!template text="""there. So yeah, so this, there's still some""" start="00:10:36.040" video="mainVideo-links" id="subtitle"]]
+[[!template text="""optimizations to be done. I think this, you""" start="00:10:39.665" video="mainVideo-links" id="subtitle"]]
+[[!template text="""know, the bookmark here is not very intuitive.""" start="00:10:41.585" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I still want, I want this to be""" start="00:10:44.385" video="mainVideo-links" id="subtitle"]]
+[[!template text="""following the browser, as I switch tabs.""" start="00:10:46.385" video="mainVideo-links" id="subtitle"]]
+[[!template text="""But, again, those things are something I'll work""" start="00:10:50.160" video="mainVideo-links" id="subtitle"]]
+[[!template text="""on. Other optimizations include, you know, the way""" start="00:10:51.839" video="mainVideo-links" id="subtitle"]]
+[[!template text="""I'm doing the search using ML that needs""" start="00:10:55.519" video="mainVideo-links" id="subtitle"]]
+[[!template text="""a little bit of fine tuning because, every""" start="00:10:59.600" video="mainVideo-links" id="subtitle"]]
+[[!template text="""time I make a new link, I have""" start="00:11:02.735" video="mainVideo-links" id="subtitle"]]
+[[!template text="""to, like, rerun the, you know, re kind of""" start="00:11:04.175" video="mainVideo-links" id="subtitle"]]
+[[!template text="""build the features and everything else, which I,""" start="00:11:07.375" video="mainVideo-links" id="subtitle"]]
+[[!template text="""need it to be real time. Yeah. So""" start="00:11:10.335" video="mainVideo-links" id="subtitle"]]
+[[!template text="""that concludes my talk. Hope you enjoyed it.""" start="00:11:13.855" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Let me know if there are any questions.""" start="00:11:16.734" video="mainVideo-links" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:11:18.814" video="mainVideo-links" id="subtitle"]]
+
+</div>
+
+Captioner: abhinav
+
Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20links%3A%20Unlocking%20linked%20data%3A%20replacing%20specialized%20apps%20with%20an%20Org-based%20semantic%20wiki)
diff --git a/2024/info/links-before.md b/2024/info/links-before.md
index 1294c702..fadd060a 100644
--- a/2024/info/links-before.md
+++ b/2024/info/links-before.md
@@ -1,18 +1,20 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="links">
-<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="/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.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="/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 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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 10-min talk; Q&A: Etherpad <https://pad.emacsconf.org/2024-links>
-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="2024-12-08T14:10:00Z" end="2024-12-08T14:20:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~9:10 AM - 9:20 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~8:10 AM - 8:20 AM CST (US/Central)<br />Sunday, Dec 8 2024, ~7:10 AM - 7:20 AM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~6:10 AM - 6:20 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~2:10 PM - 2:20 PM UTC <br />Sunday, Dec 8 2024, ~3:10 PM - 3:20 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~4:10 PM - 4:20 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~7:40 PM - 7:50 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~10:10 PM - 10:20 PM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~11:10 PM - 11:20 PM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Format: 12-min talk ; Q&A: Etherpad
+Status: TO_FOLLOW_UP
+
+<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
+06:35.000 Semantic Search on Link Contexts
+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://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/links-nav.md b/2024/info/links-nav.md
index cab0a904..1d23b681 100644
--- a/2024/info/links-nav.md
+++ b/2024/info/links-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/sun-open">Sunday opening remarks</a>
-Next by time: <a href="/2024/talks/regex">Emacs regex compilation and future directions for expressive pattern matching</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/emacs30">Emacs 30 Highlights</a>
+Next by track: <a href="/2024/talks/regex">Emacs regex compilation and future directions for expressive pattern matching</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/literate-after.md b/2024/info/literate-after.md
index 0e8a28df..ec410a23 100644
--- a/2024/info/literate-after.md
+++ b/2024/info/literate-after.md
@@ -1,7 +1,600 @@
<!-- 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%20literate%3A%20Literate%20programming%20for%20the%2021st%20Century)
+<div class="transcript transcript-mainVideo"><a name="literate-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""Can you believe it's been a decade since I started""" start="00:00:00.000" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""pontificating on literate programming?""" start="00:00:09.360" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I am Howard Abrams. In 2015, I spoke at this EmacsConf""" start="00:00:12.359" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""where I described my challenges I called Literate DevOps.""" start="00:00:17.543" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""The conference wasn't completely virtual, even though I was.""" start="00:00:21.706" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""My city of Portland was suffering a citywide electrical outage""" start="00:00:25.635" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""and I was without power, so I gave the talk in a corner of my""" start="00:00:29.318" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""friend's living room. People online asking questions and""" start="00:00:33.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""wondering about literate programming... I also see comments""" start="00:00:37.440" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""explaining why literate programming hasn't caught on in""" start="00:00:41.440" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""corporate practice. I often don't engage. I mean, is the""" start="00:00:44.600" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""online arguments and chatter over ignorance or""" start="00:00:49.080" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""preference? Sure, we're wired differently. I mean, my""" start="00:00:51.600" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""favorite programming languages put the parentheses""" start="00:00:56.720" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""before the function name.""" start="00:00:59.560" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Literate programming has come a long way""" start="00:01:01.940" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""since Knuth proposed it in the 19th century. I feel""" start="00:01:03.801" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""it's come a long way just in the last 10 years. Obviously,""" start="00:01:08.520" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""this interest is due to Org. I don't think I would bother if""" start="00:01:13.000" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""all I had was Knuth's original preprocessor. But since I'm""" start="00:01:16.400" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""talking to fellow nerds about an open source project""" start="00:01:21.360" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""without corporate backing, let me change the title of my""" start="00:01:24.840" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""talk and re-pitch Literate Programming in the 24th and a""" start="00:01:27.920" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Half Century!""" start="00:01:32.920" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Do I still literate?""" start="00:01:35.253" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""People often ask if I still program that way.""" start="00:01:35.253" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I guess they want to know if there's any long-term benefits,""" start="00:01:36.654" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""for many of our tools and our workflows, while initially""" start="00:01:42.760" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""tantalizing, often don't last. But yes, when I sit down to""" start="00:01:45.920" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""write a program, I create a file with an extension of .org.""" start="00:01:51.080" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I guess you can say I program literally.""" start="00:01:57.760" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Let me be transparent. Do I use literate programming during""" start="00:02:03.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""my day job? Yes, but only for personal tools or for initial""" start="00:02:07.360" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""investigation. At the end of the sprint, I tangle the file""" start="00:02:12.600" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""and git commit that. My personal projects, on the other""" start="00:02:16.760" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""hand, are Org files. Since I can't show you the code from""" start="00:02:21.080" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""my day job, I'm afraid my example code will have a lot of""" start="00:02:25.680" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""parentheses.""" start="00:02:27.840" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I'm sure you won't mind.""" start="00:02:31.160" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I like having my Emacs configuration in Org.""" start="00:02:33.956" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""It's pretty bling. It has over 8,000""" start="00:02:37.357" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""lines of code. I know, I can hear the screams and gasps over""" start="00:02:40.360" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""the network. However, the surrounding prose in Org adds""" start="00:02:44.560" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""10,000 lines, and those lines are non-wrapped paragraphs.""" start="00:02:49.440" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I mean, is that large? Sure, we've all worked on""" start="00:02:53.411" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""larger, so I guess it's not huge. Come on, it's still""" start="00:02:58.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""significant.""" start="00:03:03.640" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Advantages""" start="00:03:06.332" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""Advantages? Look who I'm talking to. I'm sure""" start="00:03:06.332" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""you know the advantages, but indulge me. I feel that one""" start="00:03:09.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""advantage of literate programming, especially with large""" start="00:03:14.280" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""code bases, is how you can organize and manage the""" start="00:03:16.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""complexity. Most programming languages tame large bases""" start="00:03:20.280" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""by putting code in separate files. While Org can too, with""" start="00:03:24.840" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Org, we can group related functions together under""" start="00:03:29.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""expandable headlines.""" start="00:03:32.280" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Here's one. You can see that""" start="00:03:35.044" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I've got different sections grouped together.""" start="00:03:37.280" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""In my original talk, I mentioned how I would attempt to organize""" start="00:03:40.707" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""my thoughts before coding. I appreciate how I can look back""" start="00:03:43.760" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""at my notes. In my Emacs configuration, I review the prose to""" start="00:03:47.840" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""help memorize key bindings.""" start="00:03:53.600" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""My section on getting email working with Emacs using""" start="00:03:57.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""notmuch means creating small collections of scripts and""" start="00:04:01.040" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""configuration files. I can tangle them all from one Org""" start="00:04:04.080" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""file. I like that I can explain each part separately.""" start="00:04:08.200" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""You just can't beat having links back to Stack Overflow or""" start="00:04:16.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""that GitHub repo where you stole, I mean, became inspired to""" start="00:04:20.880" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""write your code.""" start="00:04:25.520" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Disadvantages""" start="00:04:28.720" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""Literate programming may push the boundaries of our""" start="00:04:28.720" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""workflows and revealing some abrasion, but we aren't""" start="00:04:34.280" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""solely working with Org. We have the flexibility of a Lisp""" start="00:04:38.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""engine to file down those rough parts. You may have your""" start="00:04:41.240" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""concerns. Perhaps you could reach out to me, and with""" start="00:04:45.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""particular issues, maybe we can figure something out.""" start="00:04:48.160" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Here is my list of frictions, and the rest of my talk""" start="00:04:54.240" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""demonstrates my answers and my hacks. The goal in literate""" start="00:04:57.440" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""programming with Org is that it should not require more""" start="00:05:02.160" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""effort than non-literate programming. For instance, I""" start="00:05:05.040" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""shouldn't have to type much more than regular programming""" start="00:05:08.680" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""to get my code literate. I also shouldn't have to worry about""" start="00:05:12.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""the state between my Org file and the source code. I want""" start="00:05:15.720" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""to be able to jump around my code just as easily.""" start="00:05:20.800" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Ease of typing""" start="00:05:24.133" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""Let me explain more. I've created some templates using""" start="00:05:24.133" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""yasnippet. Since I was used to the old org-tempo feature,""" start="00:05:28.655" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""my habit has all the snippets starting with a""" start="00:05:34.680" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""< character. I'm not sure if I should demonstrate all of them""" start="00:05:37.146" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""as you may be doing something similar. I like to build on top""" start="00:05:40.760" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""of characters to remind me that if I just enter a <s, I""" start="00:05:46.000" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""need to put in the language. But if I append a mnemonic, I can""" start="00:05:50.000" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""get a full language. Why not do that with a full function""" start="00:05:53.520" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""definition? In this case, I'm smooshing one yasnippet""" start="00:05:56.840" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""inside another one in order to save myself some typing.""" start="00:06:01.200" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""My point here is to pay attention to what slows you down or""" start="00:06:11.680" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""hinders you from getting the advantages you want.""" start="00:06:15.160" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Keep tangled code sync'd""" start="00:06:24.720" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""Do you ever forget to tangle your code? You can append this""" start="00:06:24.720" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""code to the bottom of your Org file so that it gets tangled""" start="00:06:28.400" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""every time you save. I've written a function so I can visit""" start="00:06:31.520" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""that tangled file and then return. I've grouped all my""" start="00:06:36.160" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""functions together. I've taken a cue from Charles Choi, you""" start="00:06:40.560" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""know, kickingvegas, and his Casual feature set. But""" start="00:06:45.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""instead of Transient, I've just made a hydra using""" start="00:06:48.640" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""the major-mode-hydra package. Anyway, this allows me to use and""" start="00:06:52.375" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""remember my micro-optimizations.""" start="00:06:57.400" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""If you set the :comments property to link,""" start="00:07:00.137" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""the tangled output is back-connected.""" start="00:07:03.698" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""This allows us to edit the tangled code and have it update the""" start="00:07:07.000" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Org file. Personally, I don't like this. My source of truth""" start="00:07:11.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""is the Org file, and I tangle as a one-way diode.""" start="00:07:16.880" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Code evaluation""" start="00:07:22.501" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""Often a block of code will reference a variable""" start="00:07:22.501" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""or call a function to find in another block of code.""" start="00:07:25.604" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""In my original literate DevOps talk,""" start="00:07:29.047" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I discussed how to use the output from one block into""" start="00:07:31.509" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""another block by naming the first block and referencing it""" start="00:07:34.520" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""with a :var for the second. However, if all the blocks use the""" start="00:07:37.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""same language, you can use sessions, which create a""" start="00:07:42.160" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""persistent REPL behind the scenes. Let's evaluate the""" start="00:07:46.040" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""blocks of Python code in this file.""" start="00:07:51.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""The evaluation created a Python REPL. It's available in""" start="00:07:53.200" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""another buffer. This buffer matches the name of the""" start="00:08:00.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""session, but with surrounding asterisks. Evaluating a""" start="00:08:04.280" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""code block sends it into the REPL, and now I can work with my""" start="00:08:07.960" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""code blocks interactively. (That's not quite right.)""" start="00:08:11.400" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Has that block been eval'd?""" start="00:08:19.960" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""I primarily hack on Emacs Lisp, and textual changes to""" start="00:08:19.960" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""variables, functions, or macros--unless you habitually""" start="00:08:24.040" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""type C-c C-c--may not represent the state of your""" start="00:08:28.200" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""machine. A similar effect happens in any language that""" start="00:08:31.680" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""uses sessions. Sure, I can move the point to a block and""" start="00:08:35.440" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""evaluate, but I have three functions that allow me to""" start="00:08:39.320" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""evaluate all blocks in a buffer or all blocks in a subtree,""" start="00:08:42.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""or I can, without moving the point, evaluate any block I see.""" start="00:08:44.735" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Now, this function here evaluates all blocks in a buffer.""" start="00:08:50.200" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Someone mentioned calling this function when you first""" start="00:08:54.920" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""load a file. I'm not sure that's a good policy. I mean, have""" start="00:08:58.280" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""you not written a bug?""" start="00:09:02.360" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Evaluating code in a subtree""" start="00:09:05.239" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""Since this function right here""" start="00:09:05.239" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""evaluates only visible blocks, we can limit what Emacs""" start="00:09:08.560" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""evaluates to a single Org mode section. For instance, with""" start="00:09:12.040" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""the cursor in one section, I can evaluate just the blocks in""" start="00:09:18.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""that header section.""" start="00:09:23.760" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Evaluating code from a distance""" start="00:09:26.872" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""If I can see a block, why clumsily""" start="00:09:26.872" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""navigate to it when I can extend the avy project to just jump to""" start="00:09:29.400" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""it? For instance, let's pull this file up. I can jump to any of""" start="00:09:33.080" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""the four blocks.""" start="00:09:40.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I think that's quite slick. Now why navigate to a code block""" start="00:09:41.640" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""solely to evaluate it? Yes, this is a terrible example, but""" start="00:09:50.320" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""these three blocks set a variable to different values. So""" start="00:09:55.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""without moving the point, I can evaluate any one of them.""" start="00:09:59.680" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""To be honest, the reason why I wrote this is because I often""" start="00:10:02.600" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""forget to evaluate a block after editing it. I've moved on,""" start="00:10:09.720" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""and I just don't want to jump back. Now, I can just evaluate""" start="00:10:14.000" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""from a distance. I apologize for the previous terrible""" start="00:10:17.840" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""examples, but I'm quite pleased with this feature.""" start="00:10:22.360" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Navigating by headers""" start="00:10:26.020" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""As I mentioned earlier, in a large code base, we organize code by""" start="00:10:26.020" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""library or module, and each file contains a class composed""" start="00:10:30.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""of methods, functions, variables, fields, et cetera.""" start="00:10:33.840" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Literate programming in Org files allows me to add a""" start="00:10:37.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""semantic organization layer where I can group related""" start="00:10:40.000" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""concepts under headlines. Now, while this isn't specific""" start="00:10:43.160" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""to literate programming, I wrote a little user interface to""" start="00:10:46.920" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""allow me to jump to any heading in any Org file""" start="00:10:50.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""in a particular project.""" start="00:10:54.297" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""These are the headings in my Emacs configuration project.""" start="00:10:57.680" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Notice the file name beforehand, before the colon""" start="00:11:02.880" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""character. The header name and its parent headers are""" start="00:11:06.560" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""after. Let me search for the LSP sections. Maybe I only want""" start="00:11:09.760" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""the one for Python. Now I use ripgrep to search the files and""" start="00:11:14.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""then some Lisp to parse the output. Unless someone has""" start="00:11:20.040" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""already done this, I should package this up on MELPA.""" start="00:11:24.560" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Navigating by function names""" start="00:11:26.794" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""What about jumping directly to the definition of a function,""" start="00:11:26.794" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""variable, or what have you? We can use Emacs's built-in xref""" start="00:11:32.200" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""library, but these functions don't understand that the""" start="00:11:36.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""source code is in Org files. When I started using Emacs""" start="00:11:39.880" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""30-something years ago, I would pre-index my source into""" start="00:11:45.320" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""tag files, but the dumb-jump project uses the newfangled and""" start="00:11:49.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""faster text search programs like ripgrep to find a symbol in""" start="00:11:53.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""real time. I followed this pattern and wrote an extension""" start="00:11:58.320" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""to the xref API. Now, I want to jump around my code from both""" start="00:12:02.320" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""code block or in the surrounding prose. I'm sure it""" start="00:12:08.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""comes as no surprise that my presentation is just an Org""" start="00:12:14.520" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""file. Let's suppose my cursor is on this symbol. I wrote this""" start="00:12:18.200" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""function for this demonstration. We can jump to the""" start="00:12:23.920" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""definition and I can jump back.""" start="00:12:28.080" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Notice it jumped into an Org file and back out. References,""" start="00:12:30.760" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""unlike definitions, is where something is defined and""" start="00:12:37.640" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""where it's used. Well, you know how the xref system works.""" start="00:12:42.280" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Here, I can jump to the definition or where it's""" start="00:12:46.920" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""used. Of course, and jump back. I think this is cool. This""" start="00:12:52.680" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""should be a nifty package on MELPA. But my code is specific to""" start="00:12:59.520" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Lisp, and I'm not completely sure how to make it general. For""" start="00:13:04.320" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""instance, what is a symbol? If you know the language, this is""" start="00:13:08.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""obvious. But what should the language be when your cursor is""" start="00:13:13.400" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""in the prose of an Org file? Python only supports sequences""" start="00:13:17.680" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""of alphanumeric and underscores, but in Lisp, a symbol can""" start="00:13:22.640" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""be almost any character sequence. I've been stewing on how""" start="00:13:25.560" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""to do this. I have ideas like prompting during the first""" start="00:13:30.400" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""query or scanning the language based on the nearest code""" start="00:13:34.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""block. I think I'm babbling.""" start="00:13:37.720" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why literate programming?""" start="00:13:40.480" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""In true geek fashion, I dived into the details before""" start="00:13:40.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""answering some better questions. In my original Literate""" start="00:13:47.200" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""DevOps talk, I explained the advantages of initially""" start="00:13:52.080" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""writing down your thoughts, your plans, goals... the""" start="00:13:55.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""user requirements. But what do you do with all that luscious""" start="00:13:58.960" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""prose afterwards? Well, you do the same thing you do to your""" start="00:14:02.880" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""initial code. You refactor that prose.""" start="00:14:06.360" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Just because the tech surrounding your code is now a""" start="00:14:09.280" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""first-class citizen doesn't excuse bad code. You want""" start="00:14:14.760" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""something more from both your code and your prose.""" start="00:14:18.800" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""LP prose isn't comments""" start="00:14:23.166" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""The prose of your literate program isn't""" start="00:14:23.166" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""just regurgitation of the code in the block.""" start="00:14:25.587" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""You want something more helpful.""" start="00:14:28.668" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""You're really writing a research paper to yourself.""" start="00:14:31.528" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I know what you're thinking. You've seen my Git repos.""" start="00:14:35.737" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""I'm guilty and not always the best example.""" start="00:14:38.578" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""However, I do get great joy""" start="00:14:41.859" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""when I see someone ask about something in Emacs""" start="00:14:44.560" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""and my response is little more than a link""" start="00:14:48.681" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""to my online repo that I've rendered as a website.""" start="00:14:51.042" video="mainVideo-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Summary""" start="00:14:55.800" video="mainVideo-literate" id="subtitle"]]</div>[[!template text="""I'm out of time. I hope this has been interesting""" start="00:14:55.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""philosophically as well as practically, as I think""" start="00:15:01.200" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""literate programming is the cat's meow. I'm afraid this""" start="00:15:04.360" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""summary slide is about my home-baked solutions that fit my""" start="00:15:08.560" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""needs, but hopefully you can recognize your pain points and""" start="00:15:11.880" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""address them. If you don't need my Literate""" start="00:15:15.120" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""DevOps-specific techniques for connecting code blocks, I""" start="00:15:17.840" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""suggest using sessions by default. I highly recommend""" start="00:15:21.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""looking at your workflow and writing snippets to give you""" start="00:15:25.800" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""less typing for Org blocks. I now jump by headlines in my""" start="00:15:28.400" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""projects, but extending xref to support Org files made""" start="00:15:33.160" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""literate programming as easy as programming the""" start="00:15:37.480" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""old-fashioned way. I do need to make it more general to put up""" start="00:15:40.160" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""on MELPA, though. Thanks for watching.""" start="00:15:44.320" video="mainVideo-literate" id="subtitle"]]
+[[!template text="""Happy hacking, my friends.""" start="00:15:47.723" video="mainVideo-literate" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+<div class="transcript transcript-qanda"><a name="literate-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""I'm doing great. Good to hear from you guys. Yeah, I mean,""" start="00:00:00.000" video="qanda-literate" id="subtitle"]]
+[[!template text="""you've been a regular of the show, I would say, for quite a""" start="00:00:04.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""while, and it's good. I really like the retrospective that""" start="00:00:07.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""you did the first time you attended EmacsConf. And when was""" start="00:00:11.400" video="qanda-literate" id="subtitle"]]
+[[!template text="""it? Was it 2015? I can't actually remember. 2015 was when I""" start="00:00:14.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""presented that, but I did an earlier talk the year before. So""" start="00:00:18.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""yeah, that's why it's kind of thing. It's like, wow, it's""" start="00:00:22.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""been a decade. It's been a while. Yeah, and I'm glad that you""" start="00:00:25.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""are in a much better recording situation than you were in""" start="00:00:31.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""2015 at the back of your colleague's house. It's good to see""" start="00:00:35.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""you at your own place. Well, it's also nice to pre-record and""" start="00:00:39.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""then just share. Yeah, I mean, that's why we keep talking""" start="00:00:44.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""about pre-recording. You know, when we really pushed""" start="00:00:48.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""pre-recordings, I think it was five years ago when we""" start="00:00:51.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""started, people were not really liking it. They thought,""" start="00:00:53.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""oh, but most conferences are just asking you to come and""" start="00:00:57.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""chat. And, you know, I don't need to do the pesky""" start="00:01:00.040" video="qanda-literate" id="subtitle"]]
+[[!template text="""pre-recording. But now, and especially for you regulars,""" start="00:01:02.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""you're really starting to realize that pre-recordings are""" start="00:01:06.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""actually amazing for everyone. You're less stressed on the""" start="00:01:08.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""day of the conference. We, the organizers, are way less""" start="00:01:11.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""stressed. So it's a win-win scenario for absolutely""" start="00:01:14.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""everyone in the equation. Okay, so there's some""" start="00:01:16.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""confirmation bias at work, but I'm not really arguing with""" start="00:01:19.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""what Leo says for the record. It may be that we are just that""" start="00:01:22.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""this stoked that we're lying to ourselves by the""" start="00:01:27.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""opportunity that we have to chat with each of you. Sure.""" start="00:01:30.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""Sure. Sure. I have really appreciated all of the, the""" start="00:01:33.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""transcripts. It's been great that, you know, to be able to""" start="00:01:38.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""read and copy and paste and all that kind of thing. Yeah, it's""" start="00:01:43.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""great. So yeah, let's answer some questions here.""" start="00:01:46.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""Let's see. Yeah, just feel free to jump onto the Etherpad and""" start="00:01:49.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""just drop on the questions. I'll keep answering them all day""" start="00:01:58.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""kind of thing and get better answers as we go along.""" start="00:02:01.240" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What's the largest code base you've ever tackled with the literate approach (esp. Emacs + Org-mode)?""" start="00:02:07.400" video="qanda-literate" id="subtitle"]]</div>[[!template text="""So yeah, the first question here is, what's my largest code base?""" start="00:02:07.400" video="qanda-literate" id="subtitle"]]
+[[!template text="""I kind of touched it in my presentation. However, I think""" start="00:02:12.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""someone just went through and did a better count than it""" start="00:02:18.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""looks like. a little bit more. So""" start="00:02:22.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""as I joked about in the video, we've all worked on larger code""" start="00:02:27.880" video="qanda-literate" id="subtitle"]]
+[[!template text="""bases, but that's still, it's kind of significant. So it's""" start="00:02:32.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""not, so yeah, anyway. So let's talk a little bit about""" start="00:02:36.800" video="qanda-literate" id="subtitle"]]
+[[!template text="""searching for functions here. If you've got your functions""" start="00:02:43.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""in your code or code block, well, you can search for the""" start="00:02:49.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""descriptions, you know, as long as you've evaluated it. And""" start="00:02:53.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""so that wasn't so much of a problem, but I did want to like look""" start="00:02:59.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""at the commentary around any function that I would define.""" start="00:03:04.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""And that's where, yeah, you know, the C-x or the""" start="00:03:07.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""C-f to define that function and display it. It won't""" start="00:03:14.040" video="qanda-literate" id="subtitle"]]
+[[!template text="""pull out the literate stuff around it, obviously, it'll""" start="00:03:18.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""only do the doc header. But if you could search for it and find""" start="00:03:22.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""it quick, then it might be just as useful. And I guess that's""" start="00:03:27.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""why I started getting into seeing if I can't tie that into the""" start="00:03:30.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""X ref. you know, just the standard ways. My first part, I""" start="00:03:36.080" video="qanda-literate" id="subtitle"]]
+[[!template text="""noticed that evil has a different way of searching through""" start="00:03:40.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""for looking for code definitions. That was my first foray""" start="00:03:45.800" video="qanda-literate" id="subtitle"]]
+[[!template text="""into it. It's like, oh, that's not a bad idea. Let's hook it up""" start="00:03:51.000" video="qanda-literate" id="subtitle"]]
+[[!template text="""under, you know, in the standard way.""" start="00:03:53.960" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you ever used org-transclusion?""" start="00:03:58.080" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Let's see. Have I ever used org-transclusion?""" start="00:03:58.080" video="qanda-literate" id="subtitle"]]
+[[!template text="""No, I haven't, but I think I want to""" start="00:04:02.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""take a look at it. I haven't heard of it before.""" start="00:04:05.320" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What is your usage of dynamic blocks in such workflows?""" start="00:04:08.440" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Let's see. What's my usage of dynamic blocks in my""" start="00:04:08.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""workflows? You know, that's a real good question. I haven't""" start="00:04:16.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""really used them a lot in all of my workflows, but yeah, it's""" start="00:04:21.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""an interesting, you know, we always start.""" start="00:04:26.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""At first, all""" start="00:04:29.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""we're doing is just taking a few notes, then we start""" start="00:04:31.000" video="qanda-literate" id="subtitle"]]
+[[!template text="""organizing, then we've got links, and then we're writing""" start="00:04:33.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""code blocks, and then agendas, and table, you know, we keep""" start="00:04:36.040" video="qanda-literate" id="subtitle"]]
+[[!template text="""building up on it.""" start="00:04:39.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""I guess I haven't really added that to""" start="00:04:41.000" video="qanda-literate" id="subtitle"]]
+[[!template text="""my workflow, but maybe I'll have to come back""" start="00:04:44.400" video="qanda-literate" id="subtitle"]]
+[[!template text="""and report on that.""" start="00:04:46.979" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is the minibuffer being deliberately hidden in this video?""" start="00:04:48.840" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Is the mini buffer being deliberately hidden in my""" start="00:04:48.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""video? Not deliberately. I recorded it first and""" start="00:04:51.600" video="qanda-literate" id="subtitle"]]
+[[!template text="""accidentally not clipped the video and turned that all off.""" start="00:04:57.880" video="qanda-literate" id="subtitle"]]
+[[!template text="""So I went through and started fixing all of it. But yeah, so""" start="00:05:03.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""you'll notice the mini buffer kind of comes and goes in the""" start="00:05:07.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""video. Sorry about that.""" start="00:05:10.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""So yeah, it wasn't intentional at all.""" start="00:05:12.445" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What's your take on Emacs+Org vs. Jupyter notebooks (for interactive programming)?""" start="00:05:17.341" video="qanda-literate" id="subtitle"]]</div>[[!template text="""What's my take on Emacs Org versus Jupyter? That's a real""" start="00:05:17.341" video="qanda-literate" id="subtitle"]]
+[[!template text="""good question. I've been toying about seeing if I could do""" start="00:05:21.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""everything that some people do with Jupyter notebooks in""" start="00:05:29.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""order. I don't need to do it as much because I'm still kind of""" start="00:05:32.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""doing a lot of list programming and a lot of my DevOps, which""" start="00:05:36.080" video="qanda-literate" id="subtitle"]]
+[[!template text="""is a lot of shell work and a lot of Python. Most of the Jupyter""" start="00:05:40.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""notebooks, they automatically include a lot of things in""" start="00:05:45.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""from either Julia or Python, like NumPy and all the dynamic""" start="00:05:49.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""stuff that's going on there. Since it has a server,""" start="00:05:56.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""it seems like it's running a lot more stuff and then just""" start="00:06:01.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""shipping it back off into the web app. That has been the""" start="00:06:07.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""biggest challenge as I've tried to kind of duplicate that. I""" start="00:06:10.720" video="qanda-literate" id="subtitle"]]
+[[!template text="""don't really know NumPy and all the math stuff and that sort""" start="00:06:16.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""of stuff that well. So trying to do like matrix""" start="00:06:20.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""multiplications and that kind of thing that seemed to be""" start="00:06:25.040" video="qanda-literate" id="subtitle"]]
+[[!template text="""pretty easy in the Jupyter, it's not very easy in Org. I've""" start="00:06:27.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""attempted to kind of work with Julia and the Julia support""" start="00:06:33.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""for Org is really limited it seems. That's the, So, yeah,""" start="00:06:36.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""there's some improvements we could probably make. So, I""" start="00:06:45.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""think if somebody is comfortable with Jupiter, and that""" start="00:06:49.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""seems to work, you may have to stay there. I don't know how""" start="00:06:53.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""easy. I would be curious to try to see what we could do as a""" start="00:06:59.040" video="qanda-literate" id="subtitle"]]
+[[!template text="""community to kind of make that transition a lot easier.""" start="00:07:04.680" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think any programming language is more suited to literate programming than another?""" start="00:07:07.800" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Do you think any programming language""" start="00:07:07.800" video="qanda-literate" id="subtitle"]]
+[[!template text="""is more suited to literate""" start="00:07:12.417" video="qanda-literate" id="subtitle"]]
+[[!template text="""programming than another? Hey, that's a real good""" start="00:07:13.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""question. A lot of mine is with Emacs Lisp, and obviously""" start="00:07:16.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""that's a first-class citizen in Emacs. Go figure, right? So""" start="00:07:22.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""that one certainly works. A lot depends on the support in the""" start="00:07:27.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""OB version for the Babel work. Python is really well""" start="00:07:33.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""supported, and yeah, Emacs Lisp. Others, Shell, you know,""" start="00:07:38.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""it works, but it's hard to get both the values, the variables""" start="00:07:45.600" video="qanda-literate" id="subtitle"]]
+[[!template text="""out of the environment variables into your thing. So most""" start="00:07:50.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""everything is just with the results of output. So, you know,""" start="00:07:53.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""some languages aren't quite as good as others for sure. I""" start="00:07:58.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""would love to see better support for more interesting""" start="00:08:03.080" video="qanda-literate" id="subtitle"]]
+[[!template text="""languages, especially ones that are compiled. I've been""" start="00:08:06.880" video="qanda-literate" id="subtitle"]]
+[[!template text="""dabbling with Rust and like, yeah, what can we do to have Rust""" start="00:08:10.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""more iterative as well? So...""" start="00:08:16.640" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you use inline org function calls and org babel library and such?""" start="00:08:21.560" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Do you use inline org function calls in Org Babel library? So""" start="00:08:21.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""I used to do a lot of Org Babel libraries to kind of share""" start="00:08:29.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""things.""" start="00:08:33.600" video="qanda-literate" id="subtitle"]]
+[[!template text="""Yeah. What I. But yeah. Sorry, I'm just kind of thinking""" start="00:08:35.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""through here. I've done a lot of it in the past. There were a""" start="00:08:46.400" video="qanda-literate" id="subtitle"]]
+[[!template text="""lot of bugs in it. Oh, I don't know, eight years ago when I was""" start="00:08:49.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""playing with it. I bet things have improved a lot more and it""" start="00:08:54.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""probably saved me a lot more effort. Right now, most of the""" start="00:08:59.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""literate devops, the devops kind of stuff that I'm doing, is""" start="00:09:04.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""calling a lot of back-end programs and that sort of thing. So""" start="00:09:08.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""the Org Babel kind of has limited help in that regard. And as""" start="00:09:14.080" video="qanda-literate" id="subtitle"]]
+[[!template text="""far as my Emacs work, well, it's just part of the session. So""" start="00:09:19.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""it's going to be available or not. So that hasn't been as""" start="00:09:24.000" video="qanda-literate" id="subtitle"]]
+[[!template text="""helpful either. So it's kind of dropped off. But I bet if""" start="00:09:26.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""you're using something like, say, Python, it might be a lot""" start="00:09:30.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""more helpful.""" start="00:09:34.520" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How do you handle the cases where org markup may sometimes interfere with some of the code?""" start="00:09:36.970" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Another question, how do you handle the cases""" start="00:09:36.970" video="qanda-literate" id="subtitle"]]
+[[!template text="""where markup may sometimes interfere with some of the code""" start="00:09:40.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""in places where you can't escape? Oh, okay. All right. Let me""" start="00:09:44.000" video="qanda-literate" id="subtitle"]]
+[[!template text="""see if I understand the question correctly.""" start="00:09:50.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""When I, like, when I'm making prose, and I'm talking about a""" start="00:09:54.720" video="qanda-literate" id="subtitle"]]
+[[!template text="""function that I've written somewhere else, like, oh, I need""" start="00:10:01.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""to work on this, or this calls this, and yeah, I'll use the""" start="00:10:04.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""tildes or the equal signs on either side to make sure it's.""" start="00:10:09.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""that it's clear that it's code. In my xref, when I'm doing a""" start="00:10:14.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""thing-at-point so it can go look for that symbol, I do look for""" start="00:10:20.400" video="qanda-literate" id="subtitle"]]
+[[!template text="""those things at the end and strip them off so that I can mark it""" start="00:10:27.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""up and still search and it's still okay. I'm not sure if""" start="00:10:31.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""that's the answer to the question. Yeah, clarifying. I'm""" start="00:10:35.040" video="qanda-literate" id="subtitle"]]
+[[!template text="""making prose. I'm talking about a function I've written""" start="00:10:39.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""somewhere else. Yeah, yeah, yeah, that is what I'm talking""" start="00:10:41.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""about, where a function with tildes on either end, and if I do""" start="00:10:47.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""an xref search find for that symbol, it'll strip that off and""" start="00:10:53.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""then still look for the function name, so I can still mark it""" start="00:10:57.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""correctly.""" start="00:11:01.440" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: You said at the start that literate didn't catch on in corporate DevOps - why not?""" start="00:11:06.220" video="qanda-literate" id="subtitle"]]</div>[[!template text="""You said at the start that literate didn't catch on in""" start="00:11:06.220" video="qanda-literate" id="subtitle"]]
+[[!template text="""corporate devops, why not? You know,""" start="00:11:08.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""I guess the big thing is not everybody's using Emacs,""" start="00:11:14.720" video="qanda-literate" id="subtitle"]]
+[[!template text="""and I don't think anybody would be""" start="00:11:18.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""doing literate programming if you didn't""" start="00:11:20.611" video="qanda-literate" id="subtitle"]]
+[[!template text="""have Emacs. I mean, you got to have Org, or it just""" start="00:11:23.652" video="qanda-literate" id="subtitle"]]
+[[!template text="""doesn't work that well, right?""" start="00:11:25.200" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Why not that full stack on Markdown?""" start="00:11:29.421" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Why not that full stack on Markdown? Yeah, so I often do a lot""" start="00:11:29.421" video="qanda-literate" id="subtitle"]]
+[[!template text="""of Markdown. I have got, so I've gone through and make my""" start="00:11:36.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""markdown look a lot like Org. So my headers are the same size""" start="00:11:44.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""as org. When I mark, do the triple back ticks, you know, and""" start="00:11:49.040" video="qanda-literate" id="subtitle"]]
+[[!template text="""specify your language, we can now colorize that.""" start="00:11:54.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""So you can kind of now have it""" start="00:11:59.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""syntactically marked up. It would be""" start="00:12:01.522" video="qanda-literate" id="subtitle"]]
+[[!template text="""interesting if we kind of expanded on Markdown so that I""" start="00:12:05.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""could do a C-c twice on it and run that code block.""" start="00:12:11.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""That's a real good idea. Maybe we should work on that.""" start="00:12:14.480" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Corwin's aside on orgvm""" start="00:12:22.120" video="qanda-literate" id="subtitle"]]</div>[[!template text="""How does your management of TODOs, projects, and tasks""" start="00:12:22.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""interact with this literate mindset? I can't believe I'm""" start="00:12:28.040" video="qanda-literate" id="subtitle"]]
+[[!template text="""going to do this, but Howard, I'm going to break right in""" start="00:12:31.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""there because I just can't. I need to talk about that. So this""" start="00:12:33.880" video="qanda-literate" id="subtitle"]]
+[[!template text="""is I bought a domain. And really what I mean is I have this""" start="00:12:37.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""domain if somebody gets some work done in this area. I'm""" start="00:12:41.800" video="qanda-literate" id="subtitle"]]
+[[!template text="""fascinated by this. That's mostly really actually my whole""" start="00:12:45.600" video="qanda-literate" id="subtitle"]]
+[[!template text="""comment. But I just wanted to say, indeed, that is something""" start="00:12:48.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""maybe we should work on. Well said. I think the idea of having""" start="00:12:52.600" video="qanda-literate" id="subtitle"]]
+[[!template text="""something that's full-stack baked around Emacs is pretty""" start="00:12:56.600" video="qanda-literate" id="subtitle"]]
+[[!template text="""fascinating, just thinking about it as some command line""" start="00:12:59.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""tool that we can run to get some work done, and then there are""" start="00:13:03.080" video="qanda-literate" id="subtitle"]]
+[[!template text="""documents involved, and as you know coming back""" start="00:13:05.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""to the kind of corporate""" start="00:13:07.970" video="qanda-literate" id="subtitle"]]
+[[!template text="""sense of some of the things like there...""" start="00:13:10.512" video="qanda-literate" id="subtitle"]]
+[[!template text="""that's a little dicey the same way a free software""" start="00:13:12.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""project raising money for itself is a little dicey.""" start="00:13:15.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""It might be a necessary way to get through""" start="00:13:19.039" video="qanda-literate" id="subtitle"]]
+[[!template text="""certain kinds of things and like""" start="00:13:21.721" video="qanda-literate" id="subtitle"]]
+[[!template text="""what the corporate side of the world brings to the table""" start="00:13:23.883" video="qanda-literate" id="subtitle"]]
+[[!template text="""Here in my mind is that idea of I've got a formal process,""" start="00:13:26.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""like the process itself is an asset.""" start="00:13:31.990" video="qanda-literate" id="subtitle"]]
+[[!template text="""If I were selling my company,""" start="00:13:33.831" video="qanda-literate" id="subtitle"]]
+[[!template text="""that would be visibly of value to outside auditors that""" start="00:13:35.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""would help us arbitrate the sale. It's just empirical.""" start="00:13:39.400" video="qanda-literate" id="subtitle"]]
+[[!template text="""Then tie that together with free software is maybe a little""" start="00:13:43.258" video="qanda-literate" id="subtitle"]]
+[[!template text="""unstated ethos of doing our work in the open, and you might""" start="00:13:48.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""even deal with some of the ick factor. that you know that for a""" start="00:13:53.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""handler. Maybe so, but yeah, the downside to that is you'd""" start="00:13:58.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""still need to use Emacs to run through it, right? You know,""" start="00:14:05.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""for all those cool features, yes, it would be kind of a yet""" start="00:14:09.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""another killer app that we would have. So my domain name is""" start="00:14:13.720" video="qanda-literate" id="subtitle"]]
+[[!template text="""orgvm, and my concept is really put org into a box, build a UI""" start="00:14:17.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""around it, it executes things that manipulate files that""" start="00:14:22.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""generate, let's say, And that's just one conceptual""" start="00:14:25.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""solution. But I really do think this is a super fun topic. And""" start="00:14:30.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""that's the space. I'm not sure my idea is that wonderful. I""" start="00:14:34.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""personally haven't soaked too many weekends into it. But I""" start="00:14:37.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""just love the way you're thinking in terms of, well, we""" start="00:14:42.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""should think more about that. Gosh, that's great to hear.""" start="00:14:45.160" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org and Markdown fragmentation""" start="00:14:49.520" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Yeah. Yeah, I mean, just like the talk yesterday on the""" start="00:14:49.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""future of org, it's like, let's standardize it. Because,""" start="00:14:53.400" video="qanda-literate" id="subtitle"]]
+[[!template text="""yeah, we don't want to have org fragmented like Markdown is.""" start="00:14:57.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""Markdown is terribly fragmented. You know, everybody's""" start="00:15:03.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""got different implementations. And Yeah, what I've ended""" start="00:15:06.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""up doing, I don't know if you've seen my blog, but I often I'm""" start="00:15:10.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""always just writing an org and talking to myself and writing""" start="00:15:15.040" video="qanda-literate" id="subtitle"]]
+[[!template text="""questions and answers and essays come out of that. And then""" start="00:15:19.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""I'll put them on my web page and easy. It's easy to publish to a""" start="00:15:22.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""web page. Well, I do the same thing at work, but I need to have""" start="00:15:26.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""it marked down. I don't start Markdown though. I'm always""" start="00:15:30.080" video="qanda-literate" id="subtitle"]]
+[[!template text="""starting an org because that, you know, I can really work""" start="00:15:33.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""through the problem space, you know, executing code blocks""" start="00:15:36.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""and making sure they work and all of that sort of stuff. And""" start="00:15:40.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""then I just export to Markdown and then go cleaned up a little""" start="00:15:44.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""bit if I need to. And that makes sense. But I am editing""" start="00:15:47.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""Markdown afterwards. So yeah, it would be nice. It would be""" start="00:15:51.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""nice. It's just, it's all done over here as opposed to, you""" start="00:15:56.000" video="qanda-literate" id="subtitle"]]
+[[!template text="""know, Adding it over there, but yeah, let's think about""" start="00:16:00.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""every bit as much as as that. You know, I jumped in in the""" start="00:16:02.880" video="qanda-literate" id="subtitle"]]
+[[!template text="""spirit of yes, let's think about it. You know, your, your""" start="00:16:06.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""comments about, let's think about the workflows that work""" start="00:16:09.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""for us. Wow. Does that hit home? Right? So great. Yeah. Yeah.""" start="00:16:12.600" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How does your management of "TODOs" (projects/tasks) interact with this literate mindset, any insightful things you do on that front?""" start="00:16:17.920" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Yeah. Okay. So, uh, on to do's and that sort of thing, um. You""" start="00:16:17.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""know, a lot is the same as it was 10 years ago. At the beginning""" start="00:16:25.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""of every sprint,""" start="00:16:32.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""my company, we're using JIRA.""" start="00:16:33.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""All jokes are valid when I say that. But I just go to its web""" start="00:16:38.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""page. I copy all the tasks that I need to do that sprint. I""" start="00:16:46.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""wrote a function that takes that code and reformats it as a""" start="00:16:49.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""bunch of org tasks for me to do that I can just now have all my""" start="00:16:54.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""to-dos. And I start to work off of that from that point on. So""" start="00:16:58.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""it'll reference all the projects, and I do symlinks to every""" start="00:17:02.800" video="qanda-literate" id="subtitle"]]
+[[!template text="""code base that I need to use. Most of the to-dos I put inside my""" start="00:17:06.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""code block is kind of just for me, just so I can remember it.""" start="00:17:12.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""Because the work that I have to do""" start="00:17:16.640" video="qanda-literate" id="subtitle"]]
+[[!template text="""needs to be tracked a little more""" start="00:17:21.087" video="qanda-literate" id="subtitle"]]
+[[!template text="""fine-grained, I guess. Yeah.""" start="00:17:24.120" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you LP also on larger projects?""" start="00:17:30.630" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Do I use LP also on larger""" start="00:17:30.630" video="qanda-literate" id="subtitle"]]
+[[!template text="""projects? More files and nested directories? Yeah, I""" start="00:17:33.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""haven't really done nested directories, but I can now. Now""" start="00:17:37.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""that I've now kind of realized that I have the feature that I""" start="00:17:43.880" video="qanda-literate" id="subtitle"]]
+[[!template text="""demonstrated where I can just jump to any projects for a""" start="00:17:49.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""particular project, all the org files and all the headings""" start="00:17:54.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""show up, that works in nested directories.""" start="00:17:59.560" video="qanda-literate" id="subtitle"]]
+[[!template text="""Oh, okay, yeah, somebody's typing it in. Yeah, so it's""" start="00:18:02.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""definitely possible. And I have now, since I recorded the""" start="00:18:11.000" video="qanda-literate" id="subtitle"]]
+[[!template text="""talk, I've been busy typing in and trying to extract that out""" start="00:18:15.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""of my init file and make it into a package. I'm looking for a""" start="00:18:20.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""good name right now. I'm calling it jobs, jump to project""" start="00:18:24.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""sections. Anyway, but yeah, I think that's kind of a nice,""" start="00:18:30.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""useful feature.""" start="00:18:36.400" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you used Cucumber/Gherkin/BDD and do you think it has a strong overlap to what you talked about here?""" start="00:18:38.936" video="qanda-literate" id="subtitle"]]</div>[[!template text="""Have I used Cucumber, Gherkin, and other""" start="00:18:38.936" video="qanda-literate" id="subtitle"]]
+[[!template text="""behavior-driven development?""" start="00:18:41.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""Have I, I mean, I do a lot of...""" start="00:18:44.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""more test driven. I do a lot of unit tests and I just put it""" start="00:18:50.720" video="qanda-literate" id="subtitle"]]
+[[!template text="""right in my code base because if it's in my pros, I can just""" start="00:19:00.280" video="qanda-literate" id="subtitle"]]
+[[!template text="""shove it in there. I've got the test right next to the""" start="00:19:04.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""function that I'm testing. I like that so I can kind of see it.""" start="00:19:07.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""I don't tangle it out to that same source file. I tangle it""" start="00:19:11.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""somewhere else if I tangle it at all because I don't need to. I""" start="00:19:15.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""can just, you know, C-c that and run it. I like that""" start="00:19:19.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""aspect of it.""" start="00:19:23.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""Yeah, just keeping things together. That's the big problem""" start="00:19:24.880" video="qanda-literate" id="subtitle"]]
+[[!template text="""I have with a lot of tests is the tests are somewhere else.""" start="00:19:29.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""It's separate from the code. I like seeing it all together,""" start="00:19:32.480" video="qanda-literate" id="subtitle"]]
+[[!template text="""but a lot depends on how extensive it is. So for a lot of the,""" start="00:19:35.320" video="qanda-literate" id="subtitle"]]
+[[!template text="""you know, the tests that we end up doing where, you know,""" start="00:19:39.880" video="qanda-literate" id="subtitle"]]
+[[!template text="""you've got to do a lot of mocks and a lot of startup and tear""" start="00:19:43.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""down, that kind of thing. Yeah, that doesn't help as much.""" start="00:19:47.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""And you probably have to kind of go old school on that.""" start="00:19:51.840" video="qanda-literate" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:19:54.600" video="qanda-literate" id="subtitle"]]</div>[[!template text="""What granularity I'm looking for with my org files and my""" start="00:19:54.600" video="qanda-literate" id="subtitle"]]
+[[!template text="""subcontent? That's a real good question""" start="00:20:01.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""and really subjective.""" start="00:20:03.635" video="qanda-literate" id="subtitle"]]
+[[!template text="""I change that over time. I begin by just dumping.""" start="00:20:05.256" video="qanda-literate" id="subtitle"]]
+[[!template text="""I just dump everything in my head into a file""" start="00:20:13.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""and then I go through and start to refine it.""" start="00:20:16.379" video="qanda-literate" id="subtitle"]]
+[[!template text="""My goal at one point was to have an Emacs config file that was""" start="00:20:19.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""really small and simple. And boy, that just doesn't happen.""" start="00:20:26.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""It's just too fun to add things and try new ideas. And I found""" start="00:20:29.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""my files were just littered with good ideas that were""" start="00:20:35.760" video="qanda-literate" id="subtitle"]]
+[[!template text="""half-baked and not finished. And so it's like, oh, I need to""" start="00:20:41.840" video="qanda-literate" id="subtitle"]]
+[[!template text="""extract these and put them into different files so I can keep""" start="00:20:47.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""it clean. And so I think it's like with any code base, you're""" start="00:20:49.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""just going to keep refactoring. It's an iterative process.""" start="00:20:54.360" video="qanda-literate" id="subtitle"]]
+[[!template text="""So having the ability to, like with an Org file, where you can""" start="00:20:59.000" video="qanda-literate" id="subtitle"]]
+[[!template text="""archive a subtree. Okay, this idea didn't pan out. Archive""" start="00:21:04.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""it. I can come back to it later. Being able to just kind of""" start="00:21:09.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""shove it somewhere else is really a nice little feature. All""" start="00:21:13.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""right. Not a question, just a comment. We need more of your""" start="00:21:20.400" video="qanda-literate" id="subtitle"]]
+[[!template text="""insightful posts and videos. Oh, thanks.""" start="00:21:25.080" video="qanda-literate" id="subtitle"]]
+[[!template text="""I appreciate it. Yes, it's been a fun journey. And I think we""" start="00:21:29.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""are coming up on our time, actually. So that is just an""" start="00:21:35.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""amazing quiz. And it helps me from manipulating, as I said,""" start="00:21:38.520" video="qanda-literate" id="subtitle"]]
+[[!template text="""or as I put it earlier, like my chance as an organizer, or not""" start="00:21:41.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""manipulating, monopolizing my chance as an organizer to""" start="00:21:46.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""just get a chance to pick your brain on all kinds of things,""" start="00:21:50.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""which is too kind, too kind. Appreciate it. It's been fun.""" start="00:21:53.440" video="qanda-literate" id="subtitle"]]
+[[!template text="""All right, I'll try answering more questions online as""" start="00:21:58.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""well. All right, talk to you later. And we appreciate your""" start="00:22:04.680" video="qanda-literate" id="subtitle"]]
+[[!template text="""being in a huge resource that you are to the community.""" start="00:22:07.960" video="qanda-literate" id="subtitle"]]
+[[!template text="""Thanks to everyone for tuning in and we'll be coming over to""" start="00:22:10.400" video="qanda-literate" id="subtitle"]]
+[[!template text="""our next talk in just a moment here. And so bear with us""" start="00:22:14.200" video="qanda-literate" id="subtitle"]]
+[[!template text="""through the transition as we slip into, I think it's our, is""" start="00:22:18.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""that our penultimate or our ultimate talk? We have one or two""" start="00:22:23.240" video="qanda-literate" id="subtitle"]]
+[[!template text="""left, I'm not sure. I think we've got a couple of talks left.""" start="00:22:26.920" video="qanda-literate" id="subtitle"]]
+[[!template text="""I'm back. Thank you, Howard. And we will be moving to the next""" start="00:22:30.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""talk in about six minutes. So if you need to grab some coffee,""" start="00:22:34.080" video="qanda-literate" id="subtitle"]]
+[[!template text="""some tea, use the time wisely. And to confirm, we will have""" start="00:22:37.160" video="qanda-literate" id="subtitle"]]
+[[!template text="""one, two, three more talks this afternoon. So there's still""" start="00:22:42.120" video="qanda-literate" id="subtitle"]]
+[[!template text="""plenty to go around. See you in a bit, folks.""" start="00:22:44.320" video="qanda-literate" 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%20literate%3A%20Literate%20programming%20for%20the%2021st%20Century)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/literate-before.md b/2024/info/literate-before.md
index 80c0b8a7..78a10476 100644
--- a/2024/info/literate-before.md
+++ b/2024/info/literate-before.md
@@ -1,18 +1,53 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 16-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="literate">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect stroke-width="3" x="480" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 17-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-literate.html>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Waiting for a caption volunteer
-<div>Times in different time zones:</div><div class="times" start="2024-12-08T19:50:00Z" end="2024-12-08T20:10:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~2:50 PM - 3:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~1:50 PM - 2:10 PM CST (US/Central)<br />Sunday, Dec 8 2024, ~12:50 PM - 1:10 PM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~11:50 AM - 12:10 PM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~7:50 PM - 8:10 PM UTC <br />Sunday, Dec 8 2024, ~8:50 PM - 9:10 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~9:50 PM - 10:10 PM EET (Europe/Athens)<br />Monday, Dec 9 2024, ~1:20 AM - 1:40 AM IST (Asia/Kolkata)<br />Monday, Dec 9 2024, ~3:50 AM - 4:10 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~4:50 AM - 5:10 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+04:28.720 Disadvantages
+05:24.133 Ease of typing
+06:24.720 Keep tangled code sync'd
+07:22.501 Code evaluation
+08:19.960 Has that block been eval'd?
+09:05.239 Evaluating code in a subtree
+09:26.872 Evaluating code from a distance
+10:26.020 Navigating by headers
+11:26.794 Navigating by function names
+13:40.480 Why literate programming?
+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://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 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?
+04:48.840 Q: Is the minibuffer being deliberately hidden in this video?
+05:17.341 Q: What's your take on Emacs+Org vs. Jupyter notebooks (for interactive programming)?
+07:07.800 Q: Do you think any programming language is more suited to literate programming than another?
+08:21.560 Q: Do you use inline org function calls and org babel library and such?
+09:36.970 Q: How do you handle the cases where org markup may sometimes interfere with some of the code?
+11:06.220 Q: You said at the start that literate didn't catch on in corporate DevOps - why not?
+11:29.421 Q: Why not that full stack on Markdown?
+12:22.120 Corwin's aside on orgvm
+14:49.520 Org and Markdown fragmentation
+16:17.920 Q: How does your management of "TODOs" (projects/tasks) interact with this literate mindset, any insightful things you do on that front?
+17:30.630 Q: Do you LP also on larger projects?
+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="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/literate-nav.md b/2024/info/literate-nav.md
index 90573a89..ca8675b0 100644
--- a/2024/info/literate-nav.md
+++ b/2024/info/literate-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/blee">About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</a>
-Next by time: <a href="/2024/talks/students">An example of a cohesive student workflow in Emacs</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/pgmacs">PGmacs: browsing and editing PostgreSQL databases from Emacs</a>
+Next by track: <a href="/2024/talks/students">An example of a cohesive student workflow in Emacs</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/maxima-after.md b/2024/info/maxima-after.md
new file mode 100644
index 00000000..204b6622
--- /dev/null
+++ b/2024/info/maxima-after.md
@@ -0,0 +1,642 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="maxima-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hi! My name is Eduardo Ochs. I'm the author of""" start="00:00:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""an obscure package called eev and I""" start="00:00:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""think that it's better to start this""" start="00:00:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""presentation by the middle of the story -""" start="00:00:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""by this word here: Maxima.""" start="00:00:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Maxima is a computer algebra system""" start="00:00:12.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that has several interfaces. One""" start="00:00:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of them is WxMaxima, that looks very""" start="00:00:17.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""modern and is very pretty, and it""" start="00:00:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""looks like this...""" start="00:00:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""it's a cell based interface. We can type""" start="00:00:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""an expression here and execute it...""" start="00:00:30.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""here's the result.""" start="00:00:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""But I don't like that interface""" start="00:00:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""because my memory is very bad, and I type""" start="00:00:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""very slowly and with lots of mistakes...""" start="00:00:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""so for me this ugly interface that""" start="00:00:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I'm going to show now is much better -""" start="00:00:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and here I'm going to show how I am teaching""" start="00:00:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that ugly interface to beginners.""" start="00:00:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""If I type f8 on these three lines here""" start="00:00:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""it creates a Maxima running inside Emacs -""" start="00:00:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I mean, using a terminal and running inside""" start="00:01:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""a shell buffer in Emacs...""" start="00:01:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and if I type f8 on this other the lines here""" start="00:01:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the 'f8's send lines to Maxima, and, ta-daaa,""" start="00:01:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""this small program drew this.""" start="00:01:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I live in Brazil and people in""" start="00:01:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""developed countries cannot imagine""" start="00:01:23.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""how are the beginners that we have here...""" start="00:01:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in a sense Brazil is another planet.""" start="00:01:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Let me explain why, and also let me""" start="00:01:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""explain why Maxima, why Emacs... because""" start="00:01:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""people always say &quot;you should use""" start="00:01:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""programs that everyone finds intuitive,""" start="00:01:39.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""like VSCode&quot;...""" start="00:01:41.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""well, I teach Calculus in a bad Campus""" start="00:01:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of a good Federal University in Brazil.""" start="00:01:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""My university is called UFF, for""" start="00:01:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Universidade Federal Fluminense.""" start="00:01:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""The main campus of UFF is in Niterói,""" start="00:01:53.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that is a big city near Rio de Janeiro,""" start="00:01:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I work in a city called Rio das Ostras,""" start="00:02:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that is is a small city 200 Kms away""" start="00:02:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""from Rio de Janeiro.""" start="00:02:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I started working there in 2009.""" start="00:02:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""My campus gets very little funding -""" start="00:02:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that's a long story that I don't have time""" start="00:02:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to tell now - and we get the""" start="00:02:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""students that don't get enough marks in""" start="00:02:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the admission process to go to better places.""" start="00:02:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Also, my campus has two institutes -""" start="00:02:25.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I call them The Institute of Humanities""" start="00:02:30.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and The Institute of Inhumanities.""" start="00:02:33.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Each of our institutes has a small building...""" start="00:02:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the Humanities building has lots of plants and""" start="00:02:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""lots of graffittis - I call it the Good Building -""" start="00:02:41.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the Inhumanities building has lots""" start="00:02:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of rules and prohibitions, and I call it the""" start="00:02:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Evil Building.""" start="00:02:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I heard that the Inhumanities building""" start="00:02:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""has a laboratory with computers, and that""" start="00:02:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""it doesn't have any machine that runs Linux...""" start="00:02:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but the Inhumanities building is""" start="00:03:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""shrouded in mystery, and basically""" start="00:03:05.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""humans avoid it - only inhumans go there.""" start="00:03:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I only discovered how much &quot;another planet&quot;""" start="00:03:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Brazil is a few months ago. In May and June""" start="00:03:12.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of this year the federal universities in Brazil""" start="00:03:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""paralyzed their activities in a nationwide""" start="00:03:18.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""strike for two months, and during the strike""" start="00:03:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the humanity students occupied the""" start="00:03:23.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Humanities Building and organized lots""" start="00:03:28.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of activities there.""" start="00:03:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""They asked me if I could give some workshops""" start="00:03:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I offered two hands-on workshops""" start="00:03:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""on Free Software for beginners -""" start="00:03:36.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""basically on Emacs and eev, with""" start="00:03:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""tutorials with lots of &quot;try this&quot;s...""" start="00:03:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and, as usual, the students of""" start="00:03:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Computer Science and Engineering ignored""" start="00:03:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the workshop completely, and didn't come...""" start="00:03:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but some students of psychology and of""" start="00:03:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Producão Cultural, which is basically""" start="00:04:01.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""techniques for producing cultural""" start="00:04:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""activities, came to workshop... and they LOVED""" start="00:04:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the workshop - they found it FUN.""" start="00:04:11.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And after the workshop I told the""" start="00:04:14.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""students that there are lots of things""" start="00:04:17.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that, uh, &quot;everyone knows and I don't&quot;,""" start="00:04:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I would like to learn them,""" start="00:04:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but I find them too hard to learn by myself""" start="00:04:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""because I'm a dinosaur - I'm only used to""" start="00:04:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""interfaces that are very old,""" start="00:04:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and that are not graphical... and one""" start="00:04:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of the examples of the things that I""" start="00:04:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""would like to learn was Canva.""" start="00:04:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And then the student of Produção Cultural""" start="00:04:39.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""taught me Canva in 10 minutes,""" start="00:04:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""AND THAT CHANGED MY LIFE.""" start="00:04:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Anyway, again, I'm working in that place,""" start="00:04:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Rio das Ostras, since 2009,""" start="00:04:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the Computer Science students""" start="00:05:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""here know lots of programs and languages""" start="00:05:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that I would like to learn, but in all""" start="00:05:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""these 15 years the Computer Science""" start="00:05:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""students only helped me twice.""" start="00:05:11.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""It turns out that our Inhumanities""" start="00:05:14.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""students don't have a culture of sharing""" start="00:05:17.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and helping - but our Humanities students do.""" start="00:05:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Another detail about how much Brazil""" start="00:05:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""is another planet...""" start="00:05:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""well, I only discovered this very""" start="00:05:30.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""recently, too... my research is in Logic,""" start="00:05:33.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I sometimes go to conferences, usually in""" start="00:05:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Brazil, very rarely outside, and people""" start="00:05:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""here don't bring their laptops to the""" start="00:05:44.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""conferences - we don't have a culture""" start="00:05:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of sitting together with friends""" start="00:05:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""or colleagues to learn with them how to""" start="00:05:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""use the programs that they use...""" start="00:05:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for example, many of my friends""" start="00:05:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""are logicians, so they have to draw""" start="00:06:01.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""lots of diagrams, and I don't know how""" start="00:06:05.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""they use their programs to draw diagrams...""" start="00:06:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I don't know how things are in""" start="00:06:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""universities with good computer labs but,""" start="00:06:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""anyway, consider these sentences""" start="00:06:18.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""sentences that sort of everybody says...""" start="00:06:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;Everyone knows VSCode&quot;,""" start="00:06:25.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;Everyone knows Jupiter Notebooks&quot;,""" start="00:06:25.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;Everyone draws diagrams with Quiver&quot;...""" start="00:06:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Here these things are not true -""" start="00:06:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and they are not relevant -""" start="00:06:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""here knowledge about programs does not""" start="00:06:36.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""propagate... and""" start="00:06:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""one of my goals in life is""" start="00:06:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to become friends with some people who""" start="00:06:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""know how to use for example, code blocks""" start="00:06:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in Org, and JavaScript, and learn some of""" start="00:06:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""their workflows... or, rather one of my""" start="00:06:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""goals is to become someone who deserves""" start="00:06:55.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""help.""" start="00:06:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""More on Maxima for students...""" start="00:07:02.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""remember: our inhumanities students""" start="00:07:05.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""don't have a culture of sharing and helping""" start="00:07:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but our humanity students do...""" start="00:07:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I've been telling my students - I teach""" start="00:07:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Calculus 2 and 3 here -that they will learn""" start="00:07:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""much faster if they learn Maxima,""" start="00:07:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and that people who learn Maxima can take""" start="00:07:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""an optional test and earn extra marks""" start="00:07:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in the course, but if they behave""" start="00:07:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""as typical inhumanities students -""" start="00:07:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I mean, not asking questions and""" start="00:07:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""not helping their colleagues -""" start="00:07:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""then I won't help help...""" start="00:07:39.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Actually it's even worse. I've""" start="00:07:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""told my students that my documentation""" start="00:07:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""is not good enough yet and every""" start="00:07:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""question helps me a lot, so PLEASE ask""" start="00:07:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""questions, and I've bagged on my knees...""" start="00:07:53.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and now I can treat students""" start="00:07:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""who don't ask questions as people who""" start="00:08:01.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""won't help someone that they know""" start="00:08:02.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""who is begging on his knees!""" start="00:08:05.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Now let me explain another word of""" start="00:08:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the title of this presentation.""" start="00:08:12.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""The title of this presentation is""" start="00:08:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;Emacs, eev, and Maxima - Now!&quot;""" start="00:08:17.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""The &quot;Now!&quot; in the title means:""" start="00:08:17.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in less than one hour and even for people""" start="00:08:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""who have never seen a terminal in their lives.""" start="00:08:25.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Well, my title is a slight exaggeration...""" start="00:08:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""it only took less than one hour""" start="00:08:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for one person, who is a school kid""" start="00:08:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""from a small City in the North of Brazil,""" start="00:08:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""who didn't know anything about programming,""" start="00:08:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but who was competing in the local""" start="00:08:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Math Olympiads, so not a typical person...""" start="00:08:44.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Now let me tell a story based on""" start="00:08:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""real events and based on a real student.""" start="00:08:53.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""The student said: &quot;I have Linux on my""" start="00:08:55.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""laptop, can you help me to do blah1?&quot;""" start="00:08:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I answered: &quot;Sure, do blah2 and blah3...&quot;""" start="00:09:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""this was all by chat, I don't remember if""" start="00:09:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""by WhatsApp or by Telegram...""" start="00:09:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""then one week passes, and the student""" start="00:09:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""talks to me again, and the student says:""" start="00:09:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;It doesn't work!&quot;, and I answer:""" start="00:09:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;What happens when you do blah4 and blah5?&quot;""" start="00:09:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""another week passes, then the student reappears,""" start="00:09:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and he says: &quot;It doesn't work!&quot;""" start="00:09:28.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I answer: &quot;Type blah6 and blah7 in""" start="00:09:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the terminal, press ENTER, take a""" start="00:09:33.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""photo of your screen... remember, not a""" start="00:09:36.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""screenshot, it's a photo of your screen...""" start="00:09:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and send it to me.&quot; Then the student""" start="00:09:41.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""disappears again, another week passes and""" start="00:09:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the student reappears and says:""" start="00:09:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;How do I open a terminal?&quot;""" start="00:09:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Well, then...""" start="00:09:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""PLONK.""" start="00:09:52.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""According to the Jargon file &quot;plonk&quot; is""" start="00:09:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the sound of that a newbie makes as he""" start="00:09:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""falls to the bottom of a kill file.""" start="00:10:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I prefer this simpler definition here...""" start="00:10:02.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for me &quot;plonk&quot; is the sound""" start="00:10:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that a person makes when he, or she, or they""" start="00:10:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""hits the bottom of my list of priorities.""" start="00:10:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I've been using this slogan with my""" start="00:10:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""students - it sounds much better in""" start="00:10:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Portuguese, sorry... &quot;I am not a telepath,""" start="00:10:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and for me it is 100 times harder to""" start="00:10:25.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""discover the doubts of people who don't""" start="00:10:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""talk to me than to discover the doubts of""" start="00:10:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""people who do talk to me.""" start="00:10:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""There's an interesting thing here in""" start="00:10:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""this presentation by Abelson and Sussman.""" start="00:10:41.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Let me explain now this word of""" start="00:10:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""my title, &quot;Emacs&quot;...""" start="00:10:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the idea is that learning Emacs can""" start="00:10:53.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""mean many things, learning Lisp can mean""" start="00:10:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""many things, and in this presentation...""" start="00:10:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""oh no, one second...""" start="00:11:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""sorry, back.""" start="00:11:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""In this presentation they say...""" start="00:11:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;anyone can learn Lisp in one day,""" start="00:11:12.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""except that if they already know Fortran,""" start="00:11:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""then it will take three days&quot;.""" start="00:11:18.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And I would add: and if the person""" start="00:11:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""is starting with Doom Emacs then it would""" start="00:11:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""take take five years.""" start="00:11:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Why? Because the person is using""" start="00:11:28.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""a different notion of Emacs,""" start="00:11:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and a different notion of Lisp.""" start="00:11:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""The person is starting by spending five""" start="00:11:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""years learning how to configure Emacs, and""" start="00:11:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the person is using Lisp as a very weird""" start="00:11:41.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""configuration language.""" start="00:11:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Usually the people who start by Doom Emacs""" start="00:11:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""they start by configuring Emacs,""" start="00:11:48.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and only then they learn things like""" start="00:11:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""defun, etc...""" start="00:11:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and another slogan that I use a lot""" start="00:11:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""with my students is that there are""" start="00:11:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""many cases in which learning just the""" start="00:12:01.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""thing B takes 200 hours but learning""" start="00:12:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""A and then B takes just 20 hours.""" start="00:12:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Here are some kinds of beginners""" start="00:12:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that I do not want to help.""" start="00:12:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""First example: a person who says &quot;I can't""" start="00:12:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""read that page - it has too many links&quot;.""" start="00:12:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Second example: a person who says""" start="00:12:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;I don't want to read anything and""" start="00:12:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I don't want to learn anything,""" start="00:12:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I want something that just works&quot;.""" start="00:12:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And third example: &quot;I don't want to""" start="00:12:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""look at examples, you need to summarize""" start="00:12:36.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""everything to me in one paragraph&quot;.""" start="00:12:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""There are more explanations on""" start="00:12:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""these kinds of beginners at my page""" start="00:12:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""about this presentation - here.""" start="00:12:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And here is one kind of beginner""" start="00:12:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that I really want to help.""" start="00:12:53.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Beginners that are nerdy kids""" start="00:12:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""who are used to:""" start="00:12:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""reading materials that are too advanced for them,""" start="00:13:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""understanding only a few percent of what they read,""" start="00:13:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""remembering just a tiny fraction of what they read,""" start="00:13:05.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""going to back to these materials later,""" start="00:13:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and taking notes about what they read...""" start="00:13:14.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and who are also always interested in""" start="00:13:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""experimenting with new ways of taking notes,""" start="00:13:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""transcribing, summarizing and saving links""" start="00:13:25.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to primary sources.""" start="00:13:28.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I'd like to say something about how""" start="00:13:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I've been plonking the paragraph people...""" start="00:13:36.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""who are the people who say:""" start="00:13:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;I don't want to look at examples,""" start="00:13:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""you need to summarize everything to me""" start="00:13:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in one paragraph&quot;.""" start="00:13:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Well, I'm a mathematician...""" start="00:13:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I work with lots of things""" start="00:13:48.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that can only be summarized in a paragraph""" start="00:13:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""if we choose the level of who""" start="00:13:52.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""we are talking to...""" start="00:13:55.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""so we have many different""" start="00:13:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""one-paragraph summaries,""" start="00:13:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""one for each level...""" start="00:14:02.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and in many cases this sentence,""" start="00:14:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;you need to summarize it""" start="00:14:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in one paragraph&quot;, is WRONG -""" start="00:14:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the person means I want to learn a lot""" start="00:14:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in 10 minutes - and this needs diagrams""" start="00:14:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""animations, AND EXAMPLES.""" start="00:14:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""This is an example of something""" start="00:14:18.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in mathematics - in category Theory -""" start="00:14:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I only understood after too many time -""" start="00:14:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""after zillions of years...""" start="00:14:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""It is called The Yoneda Lemma.""" start="00:14:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""This is the general case -""" start="00:14:30.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""this small thing here...""" start="00:14:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but I only understood it after""" start="00:14:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""understanding many particular cases, and""" start="00:14:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""then organizing them in a way in which""" start="00:14:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""different figures had similar shapes...""" start="00:14:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the textual explanations""" start="00:14:52.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for the Yoneda Lemma - the one paragraph""" start="00:14:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""explanations, or the many paragraph""" start="00:14:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""explanations - never helped the much...""" start="00:15:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""they contained formulas...""" start="00:15:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in mathematics, but written linearly...""" start="00:15:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that had too many symbols...""" start="00:15:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and my mental buffer is very small...""" start="00:15:12.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I had to find several tricks to reduce""" start="00:15:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the cognitive overload of all these ideas.""" start="00:15:18.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""For example, I had to name the symbols""" start="00:15:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""consecutively, like A, B, C,""" start="00:15:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""so there's a kind of a temporal order""" start="00:15:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in which the symbols that appear first""" start="00:15:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""have initial letters...""" start="00:15:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I had to find a way to put""" start="00:15:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""an archetypal case and the general case""" start="00:15:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""side to side -""" start="00:15:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""they have the same &quot;shape&quot;...""" start="00:15:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I had to find good conventions""" start="00:15:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for fonts and types...""" start="00:15:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I had to choose good meanings""" start="00:15:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for what it means...""" start="00:15:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""sorry, for what are vertical arrows,""" start="00:15:53.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""what are horizontal arrows, and so on...""" start="00:15:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and what is &quot;above without an arrow&quot;...""" start="00:16:01.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So, how much detail should we include""" start="00:16:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in our technical explanations?""" start="00:16:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Well there are many measures""" start="00:16:12.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for cognitive (over)load...""" start="00:16:14.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""For example, I asked many technical questions""" start="00:16:17.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""on the Maxima mailing list""" start="00:16:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that got answers that included""" start="00:16:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""snippets and names of of Lisp functions...""" start="00:16:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in Common Lisp, because Maxima is written""" start="00:16:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in Common Lisp... and I liked that...""" start="00:16:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I asked some some technical questions""" start="00:16:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""on the Org mailing list""" start="00:16:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and on the Hyperbole mailing list,""" start="00:16:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and usually I got answers""" start="00:16:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that avoided the technical details...""" start="00:16:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""note that I chose the term &quot;avoided&quot;""" start="00:16:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to denote frustration...""" start="00:16:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""by the way, if one of my students panics""" start="00:16:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""on this part here...""" start="00:16:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;After setting the user and password""" start="00:16:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""you will get a Unix prompt&quot;...""" start="00:16:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""if the student panics on this""" start="00:16:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and does not know what to ask""" start="00:17:01.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and just gives up, then...""" start="00:17:05.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""plonk.""" start="00:17:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So... I was talking a lot about""" start="00:17:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""plonking people...""" start="00:17:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""What's left after plonking many people?""" start="00:17:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Well, several kinds of beginners""" start="00:17:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that I want to interact with...""" start="00:17:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""note that &quot;kinds&quot; is plural...""" start="00:17:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Also, I get a definition for the term""" start="00:17:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;beginners&quot;... think on books...""" start="00:17:30.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""technical books, that start with""" start="00:17:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""&quot;This book is written for the persons""" start="00:17:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of the types such and such&quot;...""" start="00:17:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Maybe several definitions""" start="00:17:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for the term &quot;beginners&quot;...""" start="00:17:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""also, a metric that lets me choose between""" start="00:17:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""options A, B and C when I'm trying to""" start="00:17:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""write material for my beginners...""" start="00:17:52.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for example, here, again...""" start="00:17:55.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""should I explain what is a Unix prompt?""" start="00:18:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""No!!!""" start="00:18:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Why &quot;no&quot;?""" start="00:18:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Well, let me use another example.""" start="00:18:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""This one I took from a discussion on IRC...""" start="00:18:11.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""we were helping a certain beginner""" start="00:18:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that was there...""" start="00:18:18.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and one person suggested to the beginner""" start="00:18:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to do this: type M-:, and then this""" start="00:18:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""thing here, and then ENTER.""" start="00:18:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And I suggested this instead.""" start="00:18:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Copy this expression to your notes,""" start="00:18:33.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and then type C-e C-x C-e...""" start="00:18:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the mnemonic for C-e C-x C-e is""" start="00:18:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""C-exe, for &quot;execute&quot;.""" start="00:18:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And then... for me the option 1,""" start="00:18:44.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""this option here, is very costly,""" start="00:18:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""because the person has to type a lot""" start="00:18:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""without errors,""" start="00:18:53.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and then after running that""" start="00:18:55.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and reading this page here...""" start="00:18:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the way of going back to that page is gone.""" start="00:19:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So the person has to commit lots""" start="00:19:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of information to memory -""" start="00:19:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""either the person learns from this page""" start="00:19:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""everything that she needs or the person""" start="00:19:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""memorizes how to go there the next time....""" start="00:19:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and for me the option 2 - this one:""" start="00:19:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""put this in your notes and then""" start="00:19:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""execute it with C-exe -""" start="00:19:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""is much better, because the person""" start="00:19:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""commits information to notes,""" start="00:19:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the person learns a way to return""" start="00:19:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to this node of the manual later...""" start="00:19:36.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and with this the person learns""" start="00:19:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""another way to use her notes.""" start="00:19:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I have a lot of material about that...""" start="00:19:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""see for example this page here -""" start="00:19:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""there's a link to it""" start="00:19:52.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in my page for this talk...""" start="00:19:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""also, I live in a place in which""" start="00:19:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the people who find my instructions""" start="00:19:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""too complex or too boring""" start="00:20:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""disappear - either for months or forever...""" start="00:20:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So if I give an instruction""" start="00:20:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that the person cannot understand""" start="00:20:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the person gives up""" start="00:20:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I lose the person...""" start="00:20:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Now let me do some things in a weird order.""" start="00:20:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""In a normal presentation this would be""" start="00:20:18.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the conclusion, and it would be presented""" start="00:20:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""at the end...""" start="00:20:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but I will present it now,""" start="00:20:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""before the technical details.""" start="00:20:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So, I was teaching Emacs, eev and Maxima""" start="00:20:28.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for students... did it work well?""" start="00:20:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Well... sort of, but in a weird way.""" start="00:20:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Many students decided to take my test""" start="00:20:36.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""on Emacs, eev, and Maxima...""" start="00:20:39.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""let me consider only the 35 students""" start="00:20:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in the two last semesters that were able""" start="00:20:45.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to do what I asked, that was to use a link""" start="00:20:48.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""like this one to go to my notes...""" start="00:20:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""they had to go to a specific small program""" start="00:20:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in Maxima, copy that program to their notes,""" start="00:20:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""modify it a bit to make it solve""" start="00:21:02.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""a slightly different problem,""" start="00:21:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and then save the new program.""" start="00:21:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So it was mostly a test on the interface,""" start="00:21:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and to test if they knew some""" start="00:21:11.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""very basic things on Maxima...""" start="00:21:14.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but of these 35 students only 10 students""" start="00:21:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""asked questions on the Telegram group...""" start="00:21:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Mostly they discussed""" start="00:21:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""with other students...""" start="00:21:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""sometimes live - they would bring""" start="00:21:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""their laptops to the university to discuss...""" start="00:21:30.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""they only do that very rarely,""" start="00:21:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but they brought it...""" start="00:21:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""other times they would discuss""" start="00:21:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""with their colleagues on Discord...""" start="00:21:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but I got very little feedback""" start="00:21:44.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for my usability test.""" start="00:21:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So my experiment failed - in the sense""" start="00:21:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that I didn't get the feedback""" start="00:21:52.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that I expected - I only got a fraction""" start="00:21:55.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of the feedback that I expected...""" start="00:21:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""...but I learned lots of things.""" start="00:21:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Well, I got very angry, very frustrated,""" start="00:22:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but I saw that I can't invest a lot of energy""" start="00:22:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""on students who... how do I say?""" start="00:22:08.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""who &quot;won't talk to me&quot;.""" start="00:22:11.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""then I decided to make contact""" start="00:22:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""with some schools - secondary schools -""" start="00:22:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and to make a long story short...""" start="00:22:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in one of the schools I was""" start="00:22:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""very well received...""" start="00:22:25.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the students asked lots of questions,""" start="00:22:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and in the middle of the discussion""" start="00:22:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""we were discussing this little program here,""" start="00:22:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that splits the the frame in two windows""" start="00:22:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and displays the file ~/HELP""" start="00:22:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in the window at the right...""" start="00:22:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I showed them Elisp tutorial,""" start="00:22:41.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that starts... here...""" start="00:22:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and right in its third section""" start="00:22:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""it explains 'quote'.""" start="00:22:55.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So, I had to explain to them""" start="00:22:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""how we can use quote to pass...""" start="00:23:00.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to avoid evaluating a program...""" start="00:23:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""we can use quote to pass unevaluated""" start="00:23:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""programs as arguments...""" start="00:23:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and quote blew their minds,""" start="00:23:11.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I was amazed by their questions,""" start="00:23:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I saw more clearly that the campus""" start="00:23:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in which I work is a hole,""" start="00:23:18.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and that I need to do more things outside.""" start="00:23:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Now let's see some technical details.""" start="00:23:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""What exactly am I teaching to""" start="00:23:25.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""these students?""" start="00:23:28.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Basically, my old tutorial for eev""" start="00:23:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""was this one... it started with a""" start="00:23:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""section on installing eev, and then it""" start="00:23:36.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""explained Lisp, and how to use""" start="00:23:39.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""elisp hyperlinks...""" start="00:23:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and then lots of other things...""" start="00:23:44.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""but I'm using this new tutorial here,""" start="00:23:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that I am not announcing in many places""" start="00:23:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""because I wanted to test it a lot""" start="00:23:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""before making it very public...""" start="00:23:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and it starts with other installation""" start="00:23:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""instructions, that start with""" start="00:24:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""instructions for installing WSL""" start="00:24:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""on a machine with Windows,""" start="00:24:11.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and then installing Debian there""" start="00:24:13.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and then after that people have to install""" start="00:24:16.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Emacs, and then they have to install eev...""" start="00:24:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And I'm also using this map here,""" start="00:24:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that I'm reorganizing,""" start="00:24:30.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""so it's going to change a lot""" start="00:24:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in the next days...""" start="00:24:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""it has a 2-dimensional map here,""" start="00:24:36.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and it has lots of things that I'm putting""" start="00:24:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in a single place to make it easier""" start="00:24:44.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to answer questions, and to show""" start="00:24:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to the students that I have answers""" start="00:24:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""for the most common questions...""" start="00:24:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Remember, my target audience""" start="00:24:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""is mostly composed of beginners who have""" start="00:24:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""never seen a terminal in their lives,""" start="00:25:02.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and that get bored very quickly...""" start="00:25:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and when they get bored they disappear.""" start="00:25:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""What are my main goals for the first day?""" start="00:25:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I want them to &quot;install everything&quot;,""" start="00:25:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""where &quot;everything&quot; means WSL on their""" start="00:25:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Windows machines, then Debian, Emacs, eev,""" start="00:25:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""lots of Debian packages that they install""" start="00:25:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""with this block here...""" start="00:25:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""After that they need to run""" start="00:25:44.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""some Maxima programs, and some test blocks...""" start="00:25:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and configure Emacs, and create a first set""" start="00:25:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of executable notes, and I consider""" start="00:25:53.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that after that the person is""" start="00:25:57.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""autonomous.""" start="00:25:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I said that the students""" start="00:26:01.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""learn how to &quot;Run some Maxima programs&quot;.""" start="00:26:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Let me be more precise about that.""" start="00:26:05.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""The first step is something""" start="00:26:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that I call &quot;The 5-minute workshop&quot;...""" start="00:26:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""it happens in the classroom,""" start="00:26:14.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""on my laptop, and I make the students""" start="00:26:17.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""run this.""" start="00:26:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Actually in a first moment I run""" start="00:26:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""this thing here, and then I ask them""" start="00:26:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to run it themselves.""" start="00:26:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So: I type f8 on these three things here,""" start="00:26:30.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""we get a target buffer running Maxima,""" start="00:26:35.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""then I type f8 several other times here...""" start="00:26:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""when I type f8 here it opens a GNUPlot""" start="00:26:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""window, that I have to close""" start="00:26:42.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""by typing 'q' here...""" start="00:26:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and that's it. And then I say:""" start="00:26:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""now it's your turn. And the students go there,""" start="00:26:51.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""they type f8 three times, and then they""" start="00:26:53.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""type f8 f8 f8 f8 f8 f8 f8 q f8 q...""" start="00:26:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""The second step is similar -""" start="00:27:03.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""is another individual workshop,""" start="00:27:07.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""also just a few minutes long,""" start="00:27:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in which they learn how to access my notes.""" start="00:27:01.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""My notes on Maxima are here -""" start="00:27:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I mean, this is the HTMLized version...""" start="00:27:17.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""it starts with a header, then a huge index,""" start="00:27:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""then many blocks like this...""" start="00:27:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and this is a specific block that corresponds""" start="00:27:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to the thing that we we ran""" start="00:27:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in the first 5-minute workshop.""" start="00:27:33.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And in this second 5-minute workshop""" start="00:27:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""they run the instructions in this section...""" start="00:27:40.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""usually I skip this thing in the first moment,""" start="00:27:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""then I explain it to them...""" start="00:27:46.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and they run something like this,""" start="00:27:52.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""that downloads a copy""" start="00:27:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of my notes on Maxima,""" start="00:27:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""puts that copy in a temporary buffer...""" start="00:28:02.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and they can run the thing here""" start="00:28:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""exactly in the same way as before...""" start="00:28:06.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And I also ask them to run the small""" start="00:28:18.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Maxim programs in other blocks,""" start="00:28:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""like this one, for example...""" start="00:28:25.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""if we run this it calculates the solution""" start="00:28:27.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""of a question that I put in a test""" start="00:28:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""one or two semesters ago...""" start="00:28:31.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""it starts by calculating several integrals""" start="00:28:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and then it organizes all the solutions""" start="00:28:38.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in a big Matrix like this...""" start="00:28:41.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I said that at one point the students""" start="00:28:49.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""have to install lots of Debian packages.""" start="00:28:52.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""This happens after they have installed""" start="00:28:55.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""Debian, then Emacs, and eev...""" start="00:28:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and they already know a bit about eepitch,""" start="00:29:05.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""so they are in this section of the""" start="00:29:09.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""instructions, and they just have to type""" start="00:29:12.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""f8 here several times and watch what""" start="00:29:14.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""happens...""" start="00:29:20.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""after that we have many options,""" start="00:29:22.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I have this map here and I usually""" start="00:29:24.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""choose a path according to the interests""" start="00:29:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the questions of the students...""" start="00:29:29.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and there are many things that can go wrong,""" start="00:29:32.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""so this page also works as as a place""" start="00:29:34.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""in which I put all my troubleshooting""" start="00:29:37.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""instructions...""" start="00:29:41.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and if a student has a question...""" start="00:29:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I mean, suppose that the student is""" start="00:29:43.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""talking to me by WhatsApp or Telegram,""" start="00:29:47.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the student is saying:""" start="00:29:50.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""okay I installed the things such and such,""" start="00:29:52.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I tried the thing blahblah, and""" start="00:29:54.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""something went wrong...""" start="00:29:56.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and I say: ok, can you send me a screenshot""" start="00:29:58.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""or a photo of your screen?""" start="00:29:59.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""And then we can troubleshoot that""" start="00:30:02.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""by using a section of this page here.""" start="00:30:04.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""This is a work in progress,""" start="00:30:10.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""I'm reorganizing this thing for""" start="00:30:11.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the 10th time...""" start="00:30:14.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""and the rest of what can happen""" start="00:30:15.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""with these students can't be explained""" start="00:30:19.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""clearly in a video... so I'm going""" start="00:30:21.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""to put the all the other stuff in the""" start="00:30:23.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""page of the video, and I'm going to stop""" start="00:30:26.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""the video here.""" start="00:30:28.000" video="mainVideo-maxima" id="subtitle"]]
+[[!template text="""So: thanks, and bye!""" start="00:30:30.000" video="mainVideo-maxima" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20maxima%3A%20Emacs%2C%20eev%2C%20and%20Maxima%20-%20now%21)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/maxima-before.md b/2024/info/maxima-before.md
new file mode 100644
index 00000000..84d8dad2
--- /dev/null
+++ b/2024/info/maxima-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 31-min talk ; Q&A: Etherpad
+Status: TO_FOLLOW_UP
+
+
+
+
+
+# Talk
+
+<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 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/maxima-nav.md b/2024/info/maxima-nav.md
new file mode 100644
index 00000000..1012815a
--- /dev/null
+++ b/2024/info/maxima-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2024/talks/mcclim">Elisp and McCLIM</a>
+Next by track: <a href="/2024/talks/sat-open">Saturday opening remarks</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2024/info/mcclim-after.md b/2024/info/mcclim-after.md
index 7324ea84..44ae3e89 100644
--- a/2024/info/mcclim-after.md
+++ b/2024/info/mcclim-after.md
@@ -1,7 +1,682 @@
<!-- 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%20mcclim%3A%20Elisp%20and%20McCLIM)
+<div class="transcript transcript-mainVideo"><a name="mcclim-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.750" video="mainVideo-mcclim" id="subtitle"]]</div>[[!template text="""Welcome everyone to my EmacsConf presentation,""" start="00:00:01.750" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""where we're going to look at Lisp's vdemo[??] app from 1978,""" start="00:00:15.370" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but done in modern Elisp.""" start="00:00:22.139" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Then we're going to look at getting inferior-lisp working,""" start="00:00:28.460" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""my dear Common Lisp.""" start="00:00:33.390" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Then we're going to use the Common Lisp interface manager,""" start="00:00:37.003" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the open source child of the Common Lisp interface manager,""" start="00:00:42.159" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""McCLIM, from inferior-lisp in Superior Lisp,""" start="00:00:47.813" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""which is the opposite order that I initially thought""" start="00:00:55.710" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""we were going to do things in,""" start="00:00:58.375" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but this is how it's kind of turned out.""" start="00:00:59.326" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So it's this article,""" start="00:01:00.829" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I thought, from 1978, was interesting to us today.""" start="00:01:01.845" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""“Programming in an Interactive Environment:""" start="00:01:05.999" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the ‘Lisp’ Experience.”""" start="00:01:08.752" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Explaining what all these LISP programmers were doing to""" start="00:01:12.005" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""people unfamiliar with LISP programming.""" start="00:01:19.478" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""“LISP systems have been used for""" start="00:01:22.566" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""highly interactive programming for more than a decade.”""" start="00:01:24.451" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""This was from 1978.""" start="00:01:27.604" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And we're just going to go and,""" start="00:01:29.990" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""almost verbatim, port the demo application for LISP""" start="00:01:34.109" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""out of 1978 Interlisp and into Emacs Lisp.""" start="00:01:40.017" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And we're going to do it without Org Mode,""" start="00:01:49.720" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""because I think everyone is finding out""" start="00:01:51.478" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""how great Org Mode is already.""" start="00:01:54.281" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""For inferior Lisp, I thought instead of org-mode,""" start="00:01:58.100" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""we'll theme it around slime-mode and then it turned out""" start="00:02:00.837" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""most of this presentation happens in Emacs Lisp,""" start="00:02:02.873" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""because this is an Emacs Lisp conference.""" start="00:02:06.109" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But I found out that there's ielm-mode,""" start="00:02:09.379" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""which is pretty similar to slime-mode,""" start="00:02:12.849" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but in our hearts, we can imagine that this is""" start="00:02:19.054" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""an Emacs example, homed around slime-mode,""" start="00:02:23.660" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Superior Lisp Interaction Mode for Emacs, instead of org-mode.""" start="00:02:27.498" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Though, you know, I do secretly use org-mode as well,""" start="00:02:33.403" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""not very secretly.""" start="00:02:36.440" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But that means we're kind of improvising,""" start="00:02:37.958" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""improvising a presentation mode.""" start="00:02:46.790" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So we have this big buffer of Elisp, and let's just...""" start="00:02:49.986" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""This is me, not Sandewall, out of interest,""" start="00:02:56.726" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""let's make a keyboard macro,""" start="00:03:00.614" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""go get the S-expression wherever the cursor is,""" start="00:03:04.216" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""move it to the next S-expression, paste it in here,""" start="00:03:10.290" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and the keyboard macro, alright.""" start="00:03:13.661" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""What was basically happening...""" start="00:03:20.190" video="mainVideo-mcclim" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Calendar""" start="00:03:21.702" video="mainVideo-mcclim" id="subtitle"]]</div>[[!template text="""So the demo application in this case is""" start="00:03:21.702" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""a scheduling application.""" start="00:03:25.356" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so you can imagine improvising a calendar like this""" start="00:03:28.792" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""if you weren't existingly using an""" start="00:03:34.731" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""org-mode integrated calendar.""" start="00:03:36.683" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So, you know, just have a list and maybe""" start="00:03:39.252" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""each list is of sublists, where the first element,""" start="00:03:43.989" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the car of the sublist, I guess,""" start="00:03:49.579" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""is a sensible-sounding date format, like sat dec 7,""" start="00:03:51.931" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""this is clearly the first day of EmacsConf.""" start="00:03:56.119" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Then after that, a list of basically from and to times,""" start="00:03:59.939" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and then a quick written description of whatever event""" start="00:04:06.280" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""was at that time.""" start="00:04:18.642" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So similar to what we were seeing recently""" start="00:04:19.876" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""as of me recording this in our Structure and""" start="00:04:23.180" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Interpretation of Computer Programs study group,""" start="00:04:25.499" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""you have all these little methods, sorry, defuns.""" start="00:04:29.902" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So hours of a time is actually just car of the time,""" start="00:04:35.759" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""minutes of the time, cadr of time.""" start="00:04:40.763" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so we all know these kind of little,""" start="00:04:43.216" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""basically turning car and cadr,""" start="00:04:46.720" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""which we do use into descriptive names like from and to.""" start="00:04:50.223" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""You can see how this lines up with the appointments.""" start="00:04:53.143" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So for &quot;reproducibly building emacs&quot; described event,""" start="00:04:56.379" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I guess from would be 16 25.""" start="00:05:01.751" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Let's just grab that and literally use those,""" start="00:05:05.680" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""because we're in interactive programming, right?""" start="00:05:07.708" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So we have this quoted form and then""" start="00:05:11.711" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""let's do from of that. Great.""" start="00:05:18.266" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And let's do minutes.""" start="00:05:22.290" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So from 16 25, 16 45 reproducibly building Emacs,""" start="00:05:25.308" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""so when I do from to that I get 16 25""" start="00:05:31.548" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""when I do minutes to 16 25, I get 25""" start="00:05:34.851" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and a description of this number in octal and hexadecimal,""" start="00:05:42.057" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""out of interest.""" start="00:05:45.590" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""What was up next? Okay, getting nextday from a date.""" start="00:05:48.047" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so, what was it? Saturday, December 27th.""" start="00:05:53.553" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So what happens? So this function,""" start="00:05:57.073" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I guess this was part of Sandewall's personal exploration of""" start="00:06:01.345" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""atoms using symbols with property lists,""" start="00:06:06.032" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""with an attached property list to every symbol.""" start="00:06:12.238" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so you can kind of see how this works.""" start="00:06:15.942" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I get whatever was keyed by the symbol nextweekday out of""" start="00:06:21.510" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the day symbol, so I guess we would do...""" start="00:06:32.800" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""so if we had Sat December 6, I guess we get Sat""" start="00:06:36.579" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Oh, it destructures that itself somehow, get nextweekday.""" start="00:06:48.140" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Sorry, nextday.""" start="00:06:58.429" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""set December 6th""" start="00:07:02.280" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But of course these weren't defined yet,""" start="00:07:10.270" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""so what if we (setf (get 'sat 'nextweekday) 'sun)""" start="00:07:12.782" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and it's going to be sun right""" start="00:07:23.793" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And then if we (nextday '(sat dec 6)),""" start="00:07:28.990" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Sunday, December 7th.""" start="00:07:36.720" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Yeah, so that kind of makes sense in an intuitive way.""" start="00:07:38.942" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And you can see cond is being used.""" start="00:07:41.778" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So if you're not a Lisp person, cond evaluates a condition.""" start="00:07:43.850" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""If the condition returns non-nil,""" start="00:07:51.588" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""it executes the code attached to that condition.""" start="00:07:54.758" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""It evaluates each of these conditions in terms""" start="00:07:57.210" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and then stops when one returns non-nil,""" start="00:08:00.297" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""as you might expect as a Lisp programmer.""" start="00:08:04.901" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Let's keep marching along.""" start="00:08:07.670" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Okay, so we have to populate this.""" start="00:08:09.672" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And this was an interesting one.""" start="00:08:11.741" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""As you can see, this was my attempt.""" start="00:08:13.543" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""let days mon tue wed, so forth.""" start="00:08:15.612" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Then I used cl-loop from Emacs Lisp, you know,""" start="00:08:19.249" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""for day in days, for nex in cdr days, setf nextweekday.""" start="00:08:23.453" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""This I thought was surprisingly deep, was that""" start="00:08:32.610" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Lisp programmers, Sandewall thought,""" start="00:08:36.432" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""are basically constantly trying to break new ground and they""" start="00:08:38.485" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""lose interest very quickly when""" start="00:08:43.723" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""that's not what they're doing.""" start="00:08:45.425" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And he was making the point that breaking new ground""" start="00:08:46.843" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""involves solving a problem exactly once.""" start="00:08:50.229" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so you kind of should do it""" start="00:08:54.232" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""in the most expedient way possible""" start="00:08:56.003" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""to solve it kind of for the first time.""" start="00:08:58.672" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And after that, it's not breaking new ground anymore.""" start="00:09:00.992" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so I thought that was a kind of fun point""" start="00:09:07.663" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""from Sandewall's paper that we could kind of chew on.""" start="00:09:10.400" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Do something similar for months and month lengths.""" start="00:09:15.121" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But as we can see, if I get Feb,""" start="00:09:21.059" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""nrdr days I think that characters in 1978,""" start="00:09:32.120" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""characters and symbols in 1978 were more precious""" start="00:09:42.082" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""which is why Sandewall was writing in this abbreviated way.""" start="00:09:45.468" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""We might write more verbosely these days.""" start="00:09:47.871" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""We get 28th but it is in fact a leap year,""" start="00:09:51.391" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""so let's just set that to be 29. Now, it's fine.""" start="00:09:54.277" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Then I guess if we do, we were doing nextday.""" start="00:09:59.048" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Sure, nextday. I don't know what day it was.""" start="00:10:06.038" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""let's assume it was Sunday Feb 28""" start="00:10:10.994" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""some kind of typo crept in there, but we can deal with it.""" start="00:10:22.716" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Let's just setf get sun nextweekday month.""" start="00:10:26.230" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So once we've solved it once, we should be fine, right?""" start="00:10:43.944" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Okay, I think I have to speed up a bit.""" start="00:10:48.698" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Yeah, there we go, Monday February 29th and then""" start="00:10:52.000" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""what if we nextday... Tuesday March 1st.""" start="00:10:55.605" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Okay, it basically seems to be working.""" start="00:11:01.244" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And I'd argue it's actually fun that""" start="00:11:03.750" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""we kind of had to do that.""" start="00:11:06.448" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Then, just imagining you're kind of functioning with""" start="00:11:08.585" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""other people: day begins at 900, ends at 1700,""" start="00:11:13.523" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""so kind of a 9:00 to 5:00, imagining... though perhaps,""" start="00:11:18.361" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""shorter is more appropriate,""" start="00:11:23.915" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but let's not quibble about that.""" start="00:11:25.368" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""What was happening next in this app?""" start="00:11:27.420" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""holesin. Oh, yeah, so get me the free slots""" start="00:11:29.839" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""in from start time, list of appointments,""" start="00:11:35.712" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""remembering characters, I guess, were more precious""" start="00:11:40.110" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""is my theory.""" start="00:11:45.288" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And then an end time, so if I go holesin and then from 900""" start="00:11:46.906" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""to where I've written 9 space 0 0""" start="00:11:59.050" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and what are my appointments?""" start="00:12:03.389" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So I have a list of appointments that""" start="00:12:07.459" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""need to have start times and finish times.""" start="00:12:09.980" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So let's go 12 59 to 13 01.""" start="00:12:12.132" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""The description, I guess, can be test.""" start="00:12:23.580" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And then let's finish that at 1700,""" start="00:12:25.429" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""like we kind of thought.""" start="00:12:29.115" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Oops, some of these were meant to be arguments.""" start="00:12:37.830" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Okay, there we go.""" start="00:12:54.800" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so the available times between nine and five,""" start="00:12:56.042" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""if there's one appointment from 12:59 to 1:01,""" start="00:13:01.397" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""are from 9 to 1259 and from 1 past 1 to 5,""" start="00:13:05.580" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""which is kind of what we were expecting.""" start="00:13:13.792" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so our appointment app is kind of coming along.""" start="00:13:15.728" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Then we have commonholes,""" start="00:13:18.931" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""kind of works in a sensible way.""" start="00:13:23.430" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Do we have, what are some common holes from""" start="00:13:33.890" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""two lists of appointments, I guess? commonholes.""" start="00:13:36.249" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I guess, let's have one person have an appointment""" start="00:13:50.903" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""from 9 to 10.""" start="00:13:53.850" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""That's going to be their only appointment.""" start="00:13:59.569" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And let's have another person have an appointment""" start="00:14:02.558" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""from 9.30 to 10.30.""" start="00:14:05.996" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Oh, we didn't do beforetime yet.""" start="00:14:14.450" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""This is the order Sandewall implemented things in there.""" start="00:14:18.441" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Ok, there.""" start="00:14:22.345" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So the commonholes are from 9.30 to 10.""" start="00:14:25.515" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""That's actually the overlapping time.""" start="00:14:34.272" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I'll re-record this""" start="00:14:42.232" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""if some kind of gremlin has crept into my things.""" start="00:14:43.900" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And then, what did we first start by doing?""" start="00:15:04.150" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Emacsconf track 1 and Emacsconf track 2,""" start="00:15:07.389" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and we'll do it on Saturday, December 7.""" start="00:15:11.494" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""commontime, and I'm being prompted, of course.""" start="00:15:21.140" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""emacsconf-track-1,""" start="00:15:23.806" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""emacsconf-track-2,""" start="00:15:29.676" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the date that we grabbed.""" start="00:15:33.370" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Let's say we want five minutes.""" start="00:15:36.585" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And, as always, I'm forgetting to quote things.""" start="00:15:49.120" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so my opportunities for common times""" start="00:15:52.468" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""between emacsconf-track-1 to emacsconf-track-2""" start="00:15:56.739" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""on the first day of the conference,""" start="00:16:01.376" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Saturday, December 7th, for five minutes.""" start="00:16:02.869" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I have an opportunity between 9:20 and 9:40,""" start="00:16:05.864" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""11:40 and 13:00, 13:10, 13:25,""" start="00:16:08.984" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""13:45, 13:55, and 16:15 to 16:25.""" start="00:16:14.489" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So I think that's all working.""" start="00:16:19.662" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And it was done with almost exactly the same code,""" start="00:16:23.881" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""except for my loopy populating symbol plist bits earlier,""" start="00:16:31.355" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""in Interlisp in 1978 as Emacs Lisp in 2024.""" start="00:16:39.015" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I thought that was pretty interesting that""" start="00:16:46.539" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""you could do that.""" start="00:16:48.675" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I think setf get was put prop""" start="00:16:49.542" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""was the biggest difference in 1978 Interlisp and""" start="00:16:57.099" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""modern Emacs Lisp.""" start="00:17:02.787" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And obviously modern Emacs Lisp has Common Lisp loop in it,""" start="00:17:04.740" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""kind of. It's another big difference.""" start="00:17:09.228" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""How are we doing for time? 17 minutes?""" start="00:17:11.914" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Great, because now let's get a bit closer to what""" start="00:17:16.450" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""my talk title has promised.""" start="00:17:19.805" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""We're going to use Common Lisp from Emacs Lisp""" start="00:17:21.991" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and we're going to use Common Lisp Interface Manager,""" start="00:17:25.211" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the open source implementation of""" start="00:17:28.130" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Common Lisp Interface Manager from""" start="00:17:30.166" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Inferior Lisp from Emacs Lisp.""" start="00:17:33.836" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And what we just went over in Sandewall's paper...""" start="00:17:37.300" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""This was the starting point, and Sandewall says,""" start="00:17:45.550" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""well, if you just kind of jammed these ideas using lists""" start="00:17:47.783" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""you just kind of made hour a synonym for car and""" start="00:17:51.587" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""minute a synonym for cadr and so forth,""" start="00:17:55.391" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""you can then make a whole bunch of improvements.""" start="00:17:59.795" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Can we actually get a glimpse of the …""" start="00:18:04.166" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""No, I didn't really write this.""" start="00:18:09.239" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Yeah, so you can see I basically just ported out of""" start="00:18:10.473" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the Interlisp code in the text of this paper.""" start="00:18:14.294" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Yeah, you see from lambda of appointment,""" start="00:18:17.580" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""car appointment, and that's defineq.""" start="00:18:21.350" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I guess Interlisp in 1978 used defineq,""" start="00:18:24.954" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""whereas we used defun in Elisp,""" start="00:18:27.907" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but I'd encourage you to explore that yourselves.""" start="00:18:33.361" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But the extension that I wanted to develop today is,""" start="00:18:35.314" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""since Common Lisp interface manager is just Lisp,""" start="00:18:38.601" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and Inferior Lisp is just Lisp,""" start="00:18:41.237" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and Emacs Lisp is just Lisp,""" start="00:18:43.472" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and Interlisp in 1978 is just Lisp,""" start="00:18:45.341" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""we could kind of use them all together""" start="00:18:48.928" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""in a kind of funky way.""" start="00:18:50.162" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But a complaint you often hear, or a statement of confusion""" start="00:18:51.480" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""that you often hear as a Lisp person,""" start="00:18:57.086" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""people from other languages often can't kind of figure out""" start="00:19:00.423" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""how to get started with Lisp.""" start="00:19:06.762" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So I'm just going to try and do everything here and now.""" start="00:19:09.765" video="mainVideo-mcclim" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Inferior Lisp and McCLIM""" start="00:19:12.802" video="mainVideo-mcclim" id="subtitle"]]</div>[[!template text="""And this is the second piece of my three pieces,""" start="00:19:12.802" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""so let's just get inferior lisp and McCLIM happening.""" start="00:19:18.407" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""We normally use slime Superior Lisp Interaction Mode""" start="00:19:22.928" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""for Emacs, which we could get from Emacs's package manager.""" start="00:19:29.318" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""If I go package-list-packages and then we wait""" start="00:19:41.897" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""for however fast my network is,""" start="00:19:48.954" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""we're going to see how long it's been""" start="00:19:54.270" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""since I updated something.""" start="00:19:55.361" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Yeah, but you see it's in MELPA, right?""" start="00:19:58.629" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""It's got to be somewhere here.""" start="00:20:15.750" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Yeah, all right.""" start="00:20:18.082" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So there's one slime available in non-GNU,""" start="00:20:18.551" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""one possibly more recent one available in""" start="00:20:21.470" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the MELPA package repositories.""" start="00:20:26.758" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I don't know about you,""" start="00:20:30.278" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but I can sympathize with people who feel confused by this""" start="00:20:31.013" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""because I think if you look online,""" start="00:20:33.666" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""if you found a search engine result,""" start="00:20:36.519" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""it doesn't customize these like I customize them.""" start="00:20:38.687" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So let's just do this.""" start="00:20:44.160" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""customize-variable.""" start="00:20:45.995" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""package-archives.""" start="00:20:48.197" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Yeah and you can see here I've ins-ed gnu, non-gnu, and melpa.""" start="00:20:54.518" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""It's melpa, not melpa stable.""" start="00:21:00.542" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Saved and set.""" start="00:21:03.478" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So that's how I do that.""" start="00:21:06.810" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""We're just kind of totally get an inferior lisp working.""" start="00:21:08.384" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And then, like we saw before,""" start="00:21:17.130" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""this might occur, buffer is still open.""" start="00:21:20.949" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""No. occur. slime.""" start="00:21:23.148" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So we could install and execute that.""" start="00:21:35.330" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I cloned slime since Common Lisp people""" start="00:21:38.681" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""might use slime and swank, like McCLIM does outside of Emacs.""" start="00:21:41.784" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I think we can secretly see""" start="00:21:48.924" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I've got it here already in my ~/.emacs.d/slime,""" start="00:21:51.093" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but you could install it like that. The hotkey is I,""" start="00:21:56.064" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and then execute the install.""" start="00:22:00.169" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I realize you all already know this,""" start="00:22:02.071" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but many of you might not yet be Common Lisp programmers,""" start="00:22:04.039" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and you can use both Superior and Inferior Lisp.""" start="00:22:06.809" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Instead of package archives in Emacs,""" start="00:22:10.370" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""in Inferior Lisp, and with great controversy,""" start="00:22:14.783" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""we often use QuickLisp.""" start="00:22:19.755" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""People sometimes complain QuickLisp releases""" start="00:22:22.758" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""get out of date quite quickly.""" start="00:22:25.828" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But there was one recently, so they're pretty in date.""" start="00:22:28.630" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so there should be a …""" start="00:22:32.167" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Yeah, so basically you download quicklisp.lisp,""" start="00:22:35.371" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""you check its SHA-256 sum.""" start="00:22:39.158" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So I guess in, ooh, over here, if I press D,""" start="00:22:44.910" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""~screwtape/downloads/quicklisp.lisp.""" start="00:22:51.229" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Great. If we open a shell, we realize that""" start="00:22:53.756" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""this is just riveting for all of our experts there.""" start="00:22:57.426" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""sha256 ~/Downloads/quicklisp.lisp""" start="00:23:06.450" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Your SHA-256 might be different to mine.""" start="00:23:19.720" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Somebody please tell me during the actual conference,""" start="00:23:22.601" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the right Emacs idiom to do this.""" start="00:23:25.621" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I guess it will be tools decrypt something.""" start="00:23:29.225" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But then once you have QuickLisp,""" start="00:23:33.930" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""let's go back to our shell.""" start="00:23:36.214" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I'm on OpenBSD or a BSD, so I type pkg_add ecl""" start="00:23:41.810" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""to get embeddable Common Lisp.""" start="00:23:46.675" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""However, I think I already have it.""" start="00:23:53.590" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And then, let's start ecl [embeddable Common Lisp].""" start="00:23:58.540" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Quicklisp inserts itself already,""" start="00:24:04.670" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but just loading that quicklisp.lisp file""" start="00:24:11.290" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""kind of would get you here anyway.""" start="00:24:14.970" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Now let's (ql:quickload :mcclim)""" start="00:24:17.039" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I'm actually following my plan.""" start="00:24:27.140" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""McCLIM is kind of like Emacs in that""" start="00:24:33.269" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""it handles all sorts of graphical stuff""" start="00:24:38.344" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""like if you have GTK Emacs,""" start="00:24:41.013" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""you know, it can do really a lot of stuff.""" start="00:24:42.798" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""That's the reason why compiling and loading""" start="00:24:44.383" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the McCLIM package takes a while""" start="00:24:50.504" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and I do use my old computer laptop,""" start="00:24:53.175" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""my old computer challenge laptop all the time,""" start="00:24:57.012" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""so when you do this, your computer will be""" start="00:25:00.349" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""substantially faster or you will be feeling""" start="00:25:02.735" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""smug about how slow you're running your computer,""" start="00:25:06.404" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and so there's no problem.""" start="00:25:12.759" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Next, we're going to start Swank""" start="00:25:15.531" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""which is the Lisp part of Emacs's slime-mode.""" start="00:25:17.366" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""If I remember, we looked at this before""" start="00:25:27.649" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""in my .emacs.d,""" start="00:25:32.348" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and then there should be slime/start-swank.lisp.""" start="00:25:35.050" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Let's just grab that and load it.""" start="00:25:41.699" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""You don't have to type #p.""" start="00:25:46.293" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""The string will work as well as the path name,""" start="00:25:48.870" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but it's kind of fun to do so.""" start="00:25:51.200" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Now, slime-connect.""" start="00:25:52.668" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""You installed slime earlier.""" start="00:25:55.437" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Default values.""" start="00:25:57.559" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Oh, the reason we had to do this""" start="00:25:59.074" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and not use Slime, start Slime normally was that""" start="00:26:01.844" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""CLIM, Common Lisp Interface Manager,""" start="00:26:07.214" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""McCLIM, implementation of the""" start="00:26:10.786" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Common Lisp Interface Manager spec, also uses Swank""" start="00:26:12.254" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and McCLIM really wants to be in the driver's seat.""" start="00:26:16.675" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""We can have our Emacs connect""" start="00:26:20.162" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""to the Swank that McCLIM was already running.""" start="00:26:23.332" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So (in-package :clim-user)...""" start="00:26:28.553" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I don't know if this is an Emacs Lisp idiom,""" start="00:26:30.873" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""so you normally have user packages to absorb user code""" start="00:26:33.625" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""just for fooling around.""" start="00:26:37.162" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Then let's just use clim at all.""" start="00:26:42.110" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so clim does lots of things around presentations""" start="00:26:47.606" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but one thing it does is automatically, to a large extent,""" start="00:26:53.094" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""generate graphical user interfaces.""" start="00:26:58.367" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So there's a lot to it that's not about graphics,""" start="00:27:04.006" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""kind of richer interfaces than""" start="00:27:09.444" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""ANSI Common Lisp's character streams.""" start="00:27:14.082" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But let's use it to grab a graphical pop-up""" start="00:27:19.389" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""that returns a value.""" start="00:27:23.258" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So we have this accepting-values tool.""" start="00:27:24.743" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""t is just choose whatever you think the default stream is.""" start="00:27:28.013" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""We're going to want our own window, t as well,""" start="00:27:32.150" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""so just a keyword argument.""" start="00:27:36.688" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""After that, we can just write things like (accept 'string).""" start="00:27:38.640" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And I'm just doing this in, for people only listening,""" start="00:27:44.978" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I've just done this in my ECL Slime REPL.""" start="00:27:47.933" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Enter a string: foo bar baz.""" start="00:27:50.986" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Alt-Enter, I think, is the shortcut to return that.""" start="00:27:56.530" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""As you can see, its first return was &quot;foo bar baz&quot;,""" start="00:27:59.150" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and it had second and third returns,""" start="00:28:02.298" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""string being the type, presentation type that it got,""" start="00:28:04.366" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and t, I think, to indicate that it exited successfully.""" start="00:28:10.155" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""We can also do expression, might be more interesting.""" start="00:28:16.189" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""There are a whole bunch of these.""" start="00:28:20.966" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""clim's examples folder is pretty good.""" start="00:28:26.140" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And the documentation, everybody's documentation,""" start="00:28:29.358" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""McCLIM's documentation, you know,""" start="00:28:32.344" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""lispworks and franz's documentation will tell you about""" start="00:28:35.413" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the different default presentation types you can accept.""" start="00:28:39.385" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And they're pretty intuitive and""" start="00:28:47.969" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""they're kind of very Lisp compatible,""" start="00:28:49.912" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""which everything kind of is.""" start="00:28:53.264" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""We could accept an expression. foo bar baz.""" start="00:28:54.316" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""return &quot;foo bar baz 123&quot; because that's what I wrote.""" start="00:29:05.350" video="mainVideo-mcclim" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Putting things together""" start="00:29:10.964" video="mainVideo-mcclim" id="subtitle"]]</div>[[!template text="""And now the kind of pièce de résistance""" start="00:29:10.964" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""of putting those things together.""" start="00:29:14.820" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Let's just run over to our scratch buffer.""" start="00:29:17.555" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Oh, or our ielm thing, right?""" start="00:29:22.226" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""That's what we're actually doing.""" start="00:29:24.246" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So now, I think we're going to do, hang on,""" start="00:29:25.964" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""M-:.""" start="00:29:30.251" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I think it's going to be slime-eval-save,""" start="00:29:32.921" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""because it'll eval asynchronously.""" start="00:29:41.663" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""There's a question of how to get the value out of""" start="00:29:45.849" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""the asynchronous slime evaluation.""" start="00:29:49.171" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so an obvious way is to yank it.""" start="00:29:52.524" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I'm looking forward to learning from kickingvegas.""" start="00:29:59.661" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""He finally makes it stick in my brain how to...""" start="00:30:02.284" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Options other than just starting to write a command""" start="00:30:07.138" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""in the minibuffer and then mashing Tab""" start="00:30:10.959" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and looking at what the likely sounding results are.""" start="00:30:14.063" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""That's what I will be learning this conference, if anything.""" start="00:30:16.765" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""slime-eval-save and then, what was happening over here?""" start="00:30:22.070" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""(accepting-values (t :own-window t) (accept 'expression)).""" start="00:30:26.958" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Kind of confusingly, slime-eval-save takes a string,""" start="00:30:33.369" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""but it works really well, I'd argue.""" start="00:30:39.169" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I think it's about to work really well.""" start="00:30:41.940" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Ok, this is great.""" start="00:30:45.825" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So you can see I've used... Oh, please enter an expression.""" start="00:30:46.762" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So we're doing an expression.""" start="00:30:50.882" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And so let's write like (3 4/2 5/6).""" start="00:30:52.167" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""That's an expression, right?""" start="00:30:59.357" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And now I've yanked it.""" start="00:31:03.609" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I should have really been in *scratch*,""" start="00:31:05.847" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""because I just want to dump. Sorry, *scratch*.""" start="00:31:07.429" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Dump whatever that did.""" start="00:31:13.770" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Oh, yeah, and see, it kind of simplified that""" start="00:31:16.540" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""while it was reading it.""" start="00:31:19.530" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""So running in Elisp, (slime-eval-save &quot;(accepting-values""" start="00:31:20.762" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""(t :own-window t), accept 'expression))&quot;).""" start="00:31:27.536" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And I got the three returns all the way""" start="00:31:33.157" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""from McCLIM to inferior-lisp to Elisp.""" start="00:31:36.378" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""3, 2, 5/6.""" start="00:31:43.885" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Second return, it was a presentation type of expression,""" start="00:31:46.521" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""returned successfully, key.""" start="00:31:50.625" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Yeah, so that's pretty cool. How out of time are we?""" start="00:31:53.561" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Oh, we did this in basically half an hour.""" start="00:31:58.530" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Maybe we could stop and assume there will be a bit under""" start="00:32:04.009" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""half an hour of interactive discussion.""" start="00:32:07.259" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And when I also watch this and also receive suggestions,""" start="00:32:11.646" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""there will be additions and changes to make, I think.""" start="00:32:16.934" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But can we quickly defun accept-date?""" start="00:32:21.671" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Let's not take any arguments.""" start="00:32:34.667" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Let's do this.""" start="00:32:40.239" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""accept-date.""" start="00:32:48.409" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Saturday, December 7th.""" start="00:32:55.519" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Oh, it doesn't return it.""" start="00:33:02.649" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""But it gets pretty close to returning it.""" start="00:33:04.215" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I guess it yanks it.""" start="00:33:05.568" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""I would have to call … I'm going to say it's slime-sync,""" start="00:33:07.818" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""at which point it will resolve the slime-eval-async.""" start="00:33:21.160" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""And then I could get the first value out of""" start="00:33:25.670" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""my kill-ring pop, right?""" start="00:33:28.807" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Does kill ring pop what I want?""" start="00:33:33.629" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""You know, you tell me in the interactive feedback,""" start="00:33:36.646" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""which should be happening in LambdaMOO.""" start="00:33:39.968" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Well, I'll record another draft of this later""" start="00:33:43.020" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""after getting some feedback.""" start="00:33:45.609" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Or worse to worse, this is just what you'll hear.""" start="00:33:48.609" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Hopefully we have some questions and constructive comments.""" start="00:33:52.180" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""All right, see everybody later.""" start="00:33:59.303" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Thank you so much for being here.""" start="00:34:00.305" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Please do drop in to my live show""" start="00:34:04.470" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""if you're so inclined on Wednesdays""" start="00:34:08.663" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""where you're not busy with cool Emacs conferences.""" start="00:34:11.316" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""The list be go for climate.""" start="00:34:14.936" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Thank you to everyone who helped.""" start="00:34:16.219" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""Thank you to Sacha""" start="00:34:17.772" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""for really getting me into this conference""" start="00:34:18.690" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""and kind of getting me going and""" start="00:34:21.710" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""submitting this prerecorded talk.""" start="00:34:23.678" video="mainVideo-mcclim" id="subtitle"]]
+[[!template text="""See everybody later.""" start="00:34:27.981" video="mainVideo-mcclim" id="subtitle"]]
+
+</div>
+
+Captioner: rodrigo
+
+<div class="transcript transcript-qanda"><a name="mcclim-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""I would love to see the GUI interacting with the scheduling stuff""" start="00:00:00.000" video="qanda-mcclim" id="subtitle"]]</div>[[!template text="""...volume of code I've written that.""" start="00:00:00.000" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""I will do a follow-up video with the kind of synchronized""" start="00:00:02.000" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""elisp-mode stuff because that is the point of the talk. Sorry""" start="00:00:06.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""for talking over you. Please continue.""" start="00:00:12.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""sachac is saying (car kill-ring).""" start="00:00:38.600" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Oh, yeah, so this question, they're just asking in the""" start="00:00:41.880" video="qanda-mcclim" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Or any other GUI stuff you've worked on in the past that you'd be comfortable showing?""" start="00:00:57.560" video="qanda-mcclim" id="subtitle"]]</div>[[!template text="""Scratchpad, is there any other GUI stuff I've worked on in""" start="00:00:57.560" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""the past? I guess my Toobnix channel, I was doing a bunch of""" start="00:01:01.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""that, so just Common Lisp development, homed around""" start="00:01:07.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""McCLIM. What is my Toobnix channel? If you find a Toobnix""" start="00:01:12.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""channel and it has a name like Screwtape, that'll""" start="00:01:16.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""presumably be that. So Toobnix is SDF.org's PeerTube.""" start="00:01:21.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Nope, not that one.""" start="00:01:28.680" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Sacha's got it here in the IRC. I think it's""" start="00:01:35.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""screwtape_channels/videos. Yeah. So the""" start="00:01:41.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""author of mastodon.el, which hopefully lots of us are using""" start="00:01:47.960" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""for our mastodoning, I used the name Screwtape as my""" start="00:01:52.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""username, and I think Wintermute said some kind of""" start="00:01:58.080" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""exasperated Emacs theme. You know what? Screw Lisp. Then""" start="00:02:01.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Mousebot of mastodon.el rechristened me screwlisp. So""" start="00:02:06.120" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""sometimes you see my name written one way, and sometimes you""" start="00:02:09.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""see my name written the other way. I quite like it. A lot of""" start="00:02:12.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""people thought that I was quitting Emacs when I changed my""" start="00:02:15.040" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""name to be mainly screwlisp. I love it. That's a great story.""" start="00:02:19.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Thank you. It's so great to have a name from somebody else. I""" start="00:02:23.400" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""was just thrilled. So thank you, mousebot. Everyone use""" start="00:02:27.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""mousebot's mode. Welcome to Green Guest. I'm with you""" start="00:02:30.000" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""there. All my kids want to choose their own names, and I'm""" start="00:02:35.200" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""just like, more power to you. I'm very glad that my parents""" start="00:02:38.400" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""picked mine for me, and that's one thing I never had to think""" start="00:02:41.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""about. All right, so do we have to cut short so I can go back to""" start="00:02:45.480" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""watching MPV? of the other stuff. We don't have to, but you""" start="00:02:50.440" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""are not obligated to sit here one moment more answering our""" start="00:02:55.840" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""questions than, you know, but of course, you know, we've""" start="00:02:59.000" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""talked a little before, but I, so I have a pile of questions.""" start="00:03:02.040" video="qanda-mcclim" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Lispy Gopher Show""" start="00:03:07.400" video="qanda-mcclim" id="subtitle"]]</div>[[!template text="""You promised to come on the Lispy Gopher show. That's right.""" start="00:03:07.400" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""I have so much to say. I could, I could, I could come right on""" start="00:03:11.160" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""your show and just talk to you there, but I'm just curious.""" start="00:03:13.240" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Talk to us a little bit about that. Tell us more about the""" start="00:03:16.040" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""program. Oh, the Lispy Gopher climate. What do we do? So it's""" start="00:03:18.560" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""hosted by the Superdimensional Fortress, SDF.org, who are""" start="00:03:23.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""a public access Unix mainly. They do their own little radio""" start="00:03:29.040" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""thing as well. And so I guess for a few years now, I do a weekly""" start="00:03:32.920" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""show every zero hundred hours UTC. We always start off with""" start="00:03:38.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""kind of climate crisis topics, because that is a climate""" start="00:03:45.560" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""crisis topic. But there's a sort of joy in that, because Kent""" start="00:03:49.120" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Pitman, who Kent Pitman you're familiar with from the""" start="00:03:54.440" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Pit Manual and so forth, writes a kind of climate crisis""" start="00:03:58.280" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""haiku, which we kind of lead out with, and we kind of go into""" start="00:04:03.600" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""the discussions there. Then obviously the show has- It's a""" start="00:04:07.600" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""highlight, not gonna lie. Yeah, yeah, I love it. I try and do""" start="00:04:10.240" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""these dramatic readings, but it's often stumble over.""" start="00:04:16.960" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Actually, when Sacha was on, there was an auxiliary poem""" start="00:04:19.480" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""that happened, which was pretty interesting, too. What was""" start="00:04:23.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""I going to say? Then, I mean, the way we got named the Lispy""" start="00:04:27.960" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Gopher Climate was because, broadly speaking, I like to""" start="00:04:31.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""talk about kind of lisp, and most of my writing for a long time""" start="00:04:33.840" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""was on the Gopher. Though I accidentally locked myself out""" start="00:04:37.960" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""of the Gopher recently, so there hasn't been an update there""" start="00:04:41.920" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""for a while. I'm kind of around the IRCs and Mastodon quite a""" start="00:04:45.680" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""bit now. Lisp, I like to use the term Lisp inclusively,""" start="00:04:52.160" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""basically. Obviously this talk, I was making the point that""" start="00:04:56.760" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""I just could go through a 1978 paper written in, and so pre-D""" start="00:04:59.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""machine inter-LISP, right? And it basically just worked in""" start="00:05:05.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""modern Emacs LISP. Somebody was pointing out to me, who""" start="00:05:10.280" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""pointed out where I was like, I don't know what PUT is in,""" start="00:05:13.440" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""in Emacs Lisp, and somebody was saying definitely there's""" start="00:05:20.120" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""put in Emacs Lisp. So I'm going to come back to the recording""" start="00:05:23.040" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""of this talk, and I'm going to just pinpoint this moment the""" start="00:05:28.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""next time somebody says, we need to modernize Lisp. I'm""" start="00:05:31.200" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""going to say, no, no, no, this is modern Emacs Lisp. You see,""" start="00:05:34.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""here's people talking about, yeah, I'm just tripping over,""" start="00:05:37.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""not tripping over, I'm amused by your phrase there, but""" start="00:05:42.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""that's exactly how I see it too. And I take your point utterly""" start="00:05:45.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""that, you know, this tradition of Lisp of carrying forward""" start="00:05:48.600" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""ideas. And, you know, we, you know, especially in Emacs, it""" start="00:05:53.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""really is like a brain trust, right? Buckets of knowledge of""" start="00:05:57.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""how to get some sort of work done, or, you know, how to work""" start="00:06:00.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""with some kind of code or some kind of data. Yeah, but I had a""" start="00:06:04.400" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""kind of, interesting experience with some great friends of""" start="00:06:08.920" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""mine, whom I love dearly. Vidak, if you're watching this,""" start="00:06:12.080" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""I'm gossiping about you people over in Australia there.""" start="00:06:15.800" video="qanda-mcclim" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Lisp already did it""" start="00:06:21.560" video="qanda-mcclim" id="subtitle"]]</div>[[!template text="""Where people come to you with really exciting ideas that""" start="00:06:21.560" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""seem to be very cutting edge and like, you know, very much the""" start="00:06:25.440" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""current talk of the day, like you can hear in other""" start="00:06:30.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""programming languages, and they're telling you how they""" start="00:06:33.560" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""think you might be able to do this in Lisp. And you have to say,""" start="00:06:36.120" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""well, you know, if we go back to the late 70s, where the Lisp""" start="00:06:39.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""community really kind of pioneered this topic already.""" start="00:06:43.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Here's how we did it in the late 70s. And there's actually""" start="00:06:47.960" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""quite a kind of awkward, just kind of disjunction there. I""" start="00:06:51.400" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""mean, that's the thing, right? Where use of Emacs in""" start="00:06:56.440" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""particular use of Lisp in general will unravel somebody's""" start="00:06:59.080" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""whole big bag of wind that they've built up around why""" start="00:07:03.760" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""something has to be rebuilt and well right but that's just a""" start="00:07:06.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""function you know it's data so we'll probably just think""" start="00:07:10.440" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""about that as I don't know sitting in a variable.""" start="00:07:13.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Oh, so that whole problem, like the elegance of a solution""" start="00:07:16.680" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""can entirely fall away once you fall back to an earlier way of""" start="00:07:21.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""thinking about it. And then, you know, look at the pieces""" start="00:07:25.960" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""you've carried forward the idea of the declarative""" start="00:07:29.480" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""language, right? Declaring user experience. Yeah. Once""" start="00:07:32.040" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""again, tangentially to, um, to the actual talk we've just""" start="00:07:37.120" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""watched, which I will try and follow up on as well. But one""" start="00:07:42.000" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""example was After watching me use the Common Lisp loop""" start="00:07:47.480" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""facility so much, Kent pointed out to me, hey, you know, why""" start="00:07:51.920" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""don't you try using Richard Waters' series iteration""" start="00:07:56.000" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""stuff, which was kind of lazy evaluation of series that""" start="00:08:01.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Waters did. And so after criticizing Haskell for a long""" start="00:08:05.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""time, me kind of saying, hey, you know, I don't think this""" start="00:08:09.120" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""lazy evaluation is important. then Kent pointed out to me""" start="00:08:12.880" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""that, for example, the series, like what is it? AIM 1082 or""" start="00:08:16.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""something published in 1989 was Lazy Evaluation in LISP""" start="00:08:22.400" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""with series. And so I thought, well, once I realized that""" start="00:08:28.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""this was part of kind of almost classic LISP history to have""" start="00:08:33.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""lazy evaluation, I adopted series, I kind of had to rethink""" start="00:08:37.880" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""my LISP worldview to realize it did already include lazy""" start="00:08:43.680" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""evaluation, which I attributed to the late 80s. And then""" start="00:08:47.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""when I actually read a little bit further, lazy evaluation,""" start="00:08:51.680" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""depending on your research group, has been, was kind of""" start="00:08:55.240" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""established in the late 70s by Waters again, actually.""" start="00:08:59.160" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Sorry for the anecdote, just kind of the interesting""" start="00:09:02.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""medley. Not at all.""" start="00:09:05.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Yeah.""" start="00:09:11.160" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Ellis over in the IRC has come up with a good slime about""" start="00:09:17.920" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""async. Oh, I see. So yeah,""" start="00:09:25.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""I guess that would work. I have to try that. OK, so you're just""" start="00:09:33.340" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""getting me reading this. They have had a stab at resolving""" start="00:09:38.200" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""our asynchronous calls thing more elegantly than me. Left""" start="00:09:42.680" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""as an exercise to the listener. It's one of the big virtues of""" start="00:09:49.280" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""something like a convention. It'll bring us together with""" start="00:09:53.880" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""other people that can kind of see past the boats in our eyes.""" start="00:09:56.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Oh yeah, that's easy for me. Yeah, definitely. Hearing""" start="00:10:01.080" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""somebody else's kind of thought process from you and from""" start="00:10:06.240" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""just the past speaker who was Robin, I think, because this""" start="00:10:10.280" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""was in the morning for me, so I just kind of got up and caught""" start="00:10:16.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""some of Robin. Yeah, it's so great, kind of vicariously""" start="00:10:19.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""experiencing somebody else's Emacs usage and how it kind of""" start="00:10:25.920" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""subtly backs onto their own development flows. Yeah, so I""" start="00:10:30.560" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""really appreciate this talk. I'm constantly cribbing from""" start="00:10:34.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""everyone I meet. And yeah, this talk has been eye-popping,""" start="00:10:37.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""just watching you casually navigate Emacs, actually.""" start="00:10:40.520" video="qanda-mcclim" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""IELM""" start="00:10:43.600" video="qanda-mcclim" id="subtitle"]]</div>[[!template text="""Yeah, it's cool. Yeah, I enjoyed discovering IELM mode.""" start="00:10:43.600" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""That was going to be my other question for people. Are there""" start="00:10:51.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""any IELM Power users around? I could really go for an""" start="00:10:54.960" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""EmacsConf talk on IELM mode. Aha, yes. Very good. Note""" start="00:10:59.440" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""taken. Yeah. So, just thoughts for next year? Oh, well, I""" start="00:11:05.680" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""kind of want to get back onto the MPV, but thank you so much for""" start="00:11:12.200" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""this. You are cmak in the IRC, right? I am Corwin, same as you.""" start="00:11:16.000" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""So you're Corwin. There's also cmak, and I guess there are a""" start="00:11:22.040" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""few other people. Sorry that I'm tripping over the""" start="00:11:26.160" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""different people here. But you're going to come on the Lispy""" start="00:11:28.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Gopher Climate later. Sure, I'm happy to. That sounds""" start="00:11:31.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""like fun. I always got a million things to talk about me or an""" start="00:11:35.720" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""opinion on everything. But of course, my favorite thing to""" start="00:11:38.480" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""talk about is just the huge thanks that, you know, sharing""" start="00:11:42.400" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""that, the generosity or the, you know, my appreciation for""" start="00:11:48.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""you and all the other members of the Emacs community that""" start="00:11:53.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""create talks like this and make the conference and the rest""" start="00:11:57.160" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""of the community so rich. Well, yeah, and thank you for your""" start="00:12:00.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""work. Sacha is just saying over in Lambda that when I say I""" start="00:12:04.840" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""want someone to give the talk, this means I'm volunteering""" start="00:12:09.760" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""to give the IELM talk. That's what I wrote down. Oh, yeah. I've""" start="00:12:13.040" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""been working for Sacha. I mean, helping Sacha with this""" start="00:12:17.080" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""conference for years. I know. No, I'm kidding. That would be""" start="00:12:19.480" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""cool. I will absolutely go to your ielm talk. I make a lot of use""" start="00:12:23.920" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""of that and could do more. Yeah, we're meant to suddenly""" start="00:12:28.560" video="qanda-mcclim" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Are we going to get a McCLIM LambdaMOO client?""" start="00:12:32.880" video="qanda-mcclim" id="subtitle"]]</div>[[!template text="""stop. But a guest over in Lambda also said, are we going to get""" start="00:12:32.880" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""a McCLIM LambdaMOO client? And I actually had all my kind of""" start="00:12:36.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""Moo stuff I'd written in Common Lisp, which I was thinking of""" start="00:12:41.240" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""just kind of jettisoning. But you're right, I should make""" start="00:12:44.520" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""that into a client for Common Lisp. Anyway, I'm going to hang""" start="00:12:47.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""up so I can keep watching the conference sounds good so we'll""" start="00:12:51.480" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""just cut away with the stream throw some music and a""" start="00:12:55.840" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""countdown uh back on give us just a second to make that on bbb""" start="00:12:58.400" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""and then i'll give you the big thumbs up thank you thank you""" start="00:13:02.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""recording here we'll get it all posted up uh right next to""" start="00:13:05.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""your awesome pre-recorded talk""" start="00:13:08.360" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""thanks again like it's been fun chatting and uh Yeah,""" start="00:13:09.840" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""definitely seeing you around in the conference channel off""" start="00:13:17.160" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""off season. So to speak, you're like, you're totally""" start="00:13:20.800" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""welcome to use our chat like it to the extent you need to IRC""" start="00:13:23.880" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""channel that's been working on great for me. It's fun to fun""" start="00:13:26.680" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""to see it.""" start="00:13:29.040" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""All right, I'm gonna hang up this thing. All right. Happy day""" start="00:13:30.640" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""flowy. Sorry, I mean, screwlisp. Oh my gosh, I have""" start="00:13:39.320" video="qanda-mcclim" id="subtitle"]]
+[[!template text="""conference brain. Bye bye. All right, later, later.""" start="00:13:44.120" video="qanda-mcclim" 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%20mcclim%3A%20Elisp%20and%20McCLIM)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/mcclim-before.md b/2024/info/mcclim-before.md
index 5c55159c..70b4798e 100644
--- a/2024/info/mcclim-before.md
+++ b/2024/info/mcclim-before.md
@@ -1,18 +1,32 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 35-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="mcclim">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect stroke-width="3" x="446" y="75" opacity="0.8" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 35-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-mcclim.html>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Quality check
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T19:25:00Z" end="2024-12-07T20:25:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~2:25 PM - 3:25 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~1:25 PM - 2:25 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~12:25 PM - 1:25 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~11:25 AM - 12:25 PM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~7:25 PM - 8:25 PM UTC <br />Saturday, Dec 7 2024, ~8:25 PM - 9:25 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~9:25 PM - 10:25 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~12:55 AM - 1:55 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~3:25 AM - 4:25 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~4:25 AM - 5:25 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/dev/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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://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 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
+06:21.560 Lisp already did it
+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="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/mcclim-nav.md b/2024/info/mcclim-nav.md
index 99937353..e3ef0d01 100644
--- a/2024/info/mcclim-nav.md
+++ b/2024/info/mcclim-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/shell">Emacs as a shell</a>
-Next by time: <a href="/2024/talks/casual">Re-imagining the Emacs user experience with Casual Suite</a>
-Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2024/watch/dev">Watch</a></strong>
+Previous by track: <a href="/2024/talks/secrets">Committing secrets with git using sops-mode</a>
+Next by track: <a href="/2024/talks/maxima">Emacs, eev, and Maxima - now!</a>
+Track: <span class="sched-track Development">Development</span>
</div>
diff --git a/2024/info/open-mic-after.md b/2024/info/open-mic-after.md
new file mode 100644
index 00000000..2181d7f8
--- /dev/null
+++ b/2024/info/open-mic-after.md
@@ -0,0 +1,596 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="open-mic-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+[[!template text="""I believe we are live, so hi again folks and welcome to a""" start="00:00:00.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""little bit of an unstructured time that we wanted to have for""" start="00:00:08.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""this particular EmacsConf. We have a bit of a lighter""" start="00:00:12.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""afternoon compared to previous years and we just thought it""" start="00:00:15.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""would be a nice opportunity for us and for you to join if""" start="00:00:19.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you've got anything to share like you wanted maybe to have a""" start="00:00:24.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""talk this year but haven't had the time to submit a""" start="00:00:27.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""presentation well now's your time think of it more like the""" start="00:00:29.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""traditional workshops that Emacs Paris or Emacs Berlin""" start="00:00:32.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""tends to run so if you've got anything to share we've made""" start="00:00:36.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""sure to publish the link to this room on IRC and perhaps as""" start="00:00:39.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""well on the website And yeah, it's just a moment for you. If""" start="00:00:43.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it's a little slow because people do not join, we might start""" start="00:00:49.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""chatting a little bit about Emacs Conf in general, and""" start="00:00:53.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""perhaps take a little bit of advance on the closing remarks""" start="00:00:56.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for the day, just so that I can go to bed early. But otherwise,""" start="00:00:59.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the mic is yours.""" start="00:01:04.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Does any of my fellow co-organizers want to maybe join in and""" start="00:01:10.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""say a word? Maybe you, Corwin?""" start="00:01:14.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Who, me? No, I usually just sit here quietly. You know me,""" start="00:01:19.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Leo. Nothing to say to me. I see Karthik here.""" start="00:01:23.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Karthik has joined the chat. We can see what Karthik has been""" start="00:01:31.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""up to.""" start="00:01:35.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Hi, everyone. Hi. Hey, I hear you.""" start="00:01:44.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Is there anything you wanted to share, Karthik?""" start="00:01:53.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Nothing in particular, but if people suggest topics and""" start="00:01:58.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""have something to say or show off, then I'll jump in. Right,""" start="00:02:01.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you're coming in as someone who wants to react to stuff, not""" start="00:02:06.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""someone who wants to present, but that's completely fine""" start="00:02:10.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""too. But that means that we are still stopped for people who""" start="00:02:12.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""want to chat. We're still pointing fingers at people in the""" start="00:02:15.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""chat, otherwise.""" start="00:02:18.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Well, and if you're watching and you want to. Yep. If you, I""" start="00:02:36.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""was just going to say, if, uh, if you're watching the stream""" start="00:02:40.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and you'd like to get involved, uh, you can join, uh,""" start="00:02:42.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""libera.chat on IRC and join the emacsconf-gen channel. Um, uh, or,""" start="00:02:45.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""uh, just, just, uh, reach out in one of those channels and,""" start="00:02:53.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and we'll, we'll, we'll ship you a link to join in the BBB""" start="00:02:57.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""here. I'm not sure if that got auto published. I didn't see it""" start="00:03:01.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""on the website.""" start="00:03:05.840" video="mainVideo-open-mic" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Vertico""" start="00:03:08.240" video="mainVideo-open-mic" id="subtitle"]]</div>[[!template text="""I can suggest a topic, since many people have demoed or used""" start="00:03:08.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""transient in this conf. I was wondering if someone has any""" start="00:03:15.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""interesting uses for transient.""" start="00:03:20.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's an interesting topic, sadly one in which I'm not going""" start="00:03:25.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to be personally able to participate in because I'm still""" start="00:03:28.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""old school. It took me, you know, the VertiCo stack. Did we""" start="00:03:31.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""actually present something on vertico at EmacsConf? I'm not""" start="00:03:37.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""sure, but it's a completion engine in separate packages,""" start="00:03:40.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""very similar to what people may be more familiar with, i.e.""" start="00:03:44.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Ivy, Helm, ido, all those tools. But I'm old school and I""" start="00:03:49.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""still use Hydra when it comes to interaction. But I've been""" start="00:03:55.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""meaning to transition into Transient at some point and I'd""" start="00:03:59.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""actually be quite interested in people sharing how they've""" start="00:04:05.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""been able to use Transient to supplement their interfaces.""" start="00:04:09.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I'm obviously a big user as I think most people would be in""" start="00:04:13.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""this room and on live viewers. The Git, I use it plenty and""" start="00:04:17.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it's a wonderful interface and I wish I could develop""" start="00:04:25.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""similar interfaces for my own packages that I manage. So""" start="00:04:29.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""maybe at some point. But apparently part of the discussion I""" start="00:04:33.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""think revolves around the fact that transients might be a""" start="00:04:36.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""little hard to approach for people who are perhaps used to""" start="00:04:40.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the simplicity of a Hydra set up with aboabo's packages. So,""" start="00:04:44.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""if anyone has got anything to say about this, you're more""" start="00:04:50.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""than welcome to join us on BBB. You can also chat it up on IRC""" start="00:04:52.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and we'll try to give voice to the lines you write and we might""" start="00:04:57.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""be able to react. Otherwise, I suggest if we got a call in.""" start="00:05:01.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Although that's where I was going to take it to. I think""" start="00:05:05.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that's a perfect question. Because for once, although""" start="00:05:07.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""obviously any of us can probably talk about how interesting""" start="00:05:11.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it is at some length, it's not something that Leo and I,""" start="00:05:16.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""normally such loquacious people, have any real insight to.""" start="00:05:20.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So kind of pick up the phone, call in, jump on the BBB, or""" start="00:05:26.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""through your comments in IRC, exactly as Leo says. Love to,""" start="00:05:31.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""love to have, uh, invite more participation in the""" start="00:05:35.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""discussion and thinking about how to answer that. I myself,""" start="00:05:38.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""uh, you know, jump into my own workflow and I'd start""" start="00:05:41.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""thinking about, oh, well, what is working for me so well, I""" start="00:05:44.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""haven't dug into that sort of where I take the question.""" start="00:05:49.360" video="mainVideo-open-mic" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""which-key""" start="00:05:58.720" video="mainVideo-open-mic" id="subtitle"]]</div>[[!template text="""which-key actually is the direct answer to that, right? For""" start="00:05:58.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""me, that particular package, which seems to come up a lot in""" start="00:06:02.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""sort of help-adjacent forums as being a discovery tool, a""" start="00:06:06.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""way to learn different bindings. I self-identify as being""" start="00:06:09.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""kind of on a path of memorizing all the keystrokes I'm going""" start="00:06:15.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to care about and how to find ones that I, it would have been""" start="00:06:19.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""convenient if I cared more about before today, right? So""" start="00:06:23.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it's, for me, a lot of Emacs's power is the, you know,""" start="00:06:27.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""whatever brings to me the knowledge of what I should have""" start="00:06:32.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""done a moment ago, need to do, you know, how to do what I need to""" start="00:06:35.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""do next and so on.""" start="00:06:39.520" video="mainVideo-open-mic" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""eldoc""" start="00:06:46.080" video="mainVideo-open-mic" id="subtitle"]]</div>[[!template text="""I'll also be a user of which-key here and all the fancy tools""" start="00:06:46.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like eldoc which provides you in your modeline the signature""" start="00:06:50.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of the function you're currently writing such as if you're""" start="00:06:53.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""writing an elist function but you've suddenly forgotten""" start="00:06:56.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which is the first argument which is the second argument""" start="00:06:59.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""usually you have if you stay inside the function it will show""" start="00:07:03.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""in the modline what the arguments are supposed to be and what""" start="00:07:07.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""their names are so that it's actually pretty useful. And you""" start="00:07:10.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""get similar things if you're writing other languages, like""" start="00:07:13.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I write Go for a living, and it's always good to have the""" start="00:07:16.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""signature appears in the model line whenever you're""" start="00:07:20.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""writing the start of a function. So I'm seeing, I'll read out""" start="00:07:22.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""a couple comments here. I just, I note the, you know, use of""" start="00:07:28.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""transient as a bridge to Elisp, especially if you don't know""" start="00:07:34.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it well, you're not interested in learning it, even""" start="00:07:38.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""perhaps. I've certainly run into that. You know, oh, yuck,""" start="00:07:42.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Elisp. No, I'm doing fine with Customize or whatever works""" start="00:07:48.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for you, right? That's a lot of the Emacs spirit. So I hear""" start="00:07:51.800" video="mainVideo-open-mic" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Casual""" start="00:07:54.800" video="mainVideo-open-mic" id="subtitle"]]</div>[[!template text="""that. Uh, and then, and that brings up casual, which, uh,""" start="00:07:54.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I've seen a lot of discussion of personally, and that, that""" start="00:08:00.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""looks, uh, you know, uh, it's an, all of these types of things""" start="00:08:04.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like org actually, which we've been talking a lot about this""" start="00:08:09.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""weekend. you know, bring together a lot of functionality""" start="00:08:12.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""kind of cross-cuttingly across Emacs, all the different""" start="00:08:17.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""languages that we can figure out how to view nicely in Emacs""" start="00:08:21.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""will, you know, fit into some sort of, you know, kind of""" start="00:08:26.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""literate format to talk about. code that needs to span a lot""" start="00:08:29.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of languages for whatever reason, right? So I guess my bite""" start="00:08:34.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""at the apple there. Yeah, casual's neat and so is transient.""" start="00:08:40.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I haven't... I haven't for myself... I've seen some comments in""" start="00:08:47.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""chat throughout the weekend good discussion around hey""" start="00:08:52.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that's you know it's kind of hard to learn how to use how do I""" start="00:08:56.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""fit this into my use case how do I think about things in the""" start="00:08:59.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""same terms that transients abstractions do so that you know""" start="00:09:02.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to the extent I need to I build my program in terms of those""" start="00:09:07.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""same abstractions or to the extent that isn't necessary or""" start="00:09:10.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""helpful just so that it's natural for me to set up my""" start="00:09:14.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""customized variables so that my saved routines just do the""" start="00:09:18.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""right thing or my read routine spectrum in the right place or""" start="00:09:22.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""whatever, tying the room together, sorts of integration. I""" start="00:09:25.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""haven't run into that because for me, I'm on this journey of""" start="00:09:30.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""learning the keys was my point. I'm not actually preaching""" start="00:09:34.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for that's the way to use Emacs, quite the reverse.""" start="00:09:36.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""away.""" start="00:09:41.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, I see that some people are joining us on the BBB, so""" start="00:09:42.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""if you've got a mic on, we're gonna assume that you want to be""" start="00:09:50.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""chatting, but don't hesitate to interrupt us if you've got""" start="00:09:53.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""anything to contribute, meaningful otherwise, if you just""" start="00:09:56.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""want to chat it up with us, we are also here for this. Yeah, and""" start="00:10:00.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to do the radio announcer thing a little harder too. Like,""" start="00:10:05.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you know, I guess in my mind, I'm thinking of this as a call-in""" start="00:10:08.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""format. Just come over and grab a microphone and talk about""" start="00:10:10.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""your thoughts and whether it's something that Leo or I are""" start="00:10:13.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""saying, or Sacha, that you've been pretty quiet over there,""" start="00:10:16.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that are setting you going, or you just kind of walk into the""" start="00:10:19.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""room with, hey guys, why aren't we talking about, or let's""" start="00:10:24.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""talk more about, or thoughts from the weekend, which as Leo""" start="00:10:27.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""mentioned, is kind of where we're gonna where we in our own""" start="00:10:31.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""minds are sort of sitting, walking into the room.""" start="00:10:35.080" video="mainVideo-open-mic" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Closing remarks""" start="00:10:37.560" video="mainVideo-open-mic" id="subtitle"]]</div>[[!template text="""Perhaps what we could do is I mentioned that we could perhaps""" start="00:10:37.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""take a little bit of advance on the closing remark. I know it""" start="00:10:49.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""feels weird to be closing a conference that has not yet""" start="00:10:52.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""finished because we still have many talks in the afternoon.""" start="00:10:54.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If I count, we have one, two, three, four, five talks. Well,""" start="00:10:57.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""actually, no, four. So there's still plenty to go. But""" start="00:11:01.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""since, you know, you know, I'm still in Europe and it's still""" start="00:11:05.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""pretty tough to maintain composure until 11. Might be a good""" start="00:11:10.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""time for us maybe to read over the closing remarks. How do you""" start="00:11:14.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""feel, Corwin, about this and Sacha, how do you feel about""" start="00:11:18.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""this? Yep, that'd be cool. Sacha? Fine with me. People can""" start="00:11:21.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""continue to share thoughts and ideas in the chat or in the""" start="00:11:27.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Etherpad and we can go through the closing remarks. You want""" start="00:11:30.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to share the sun-close? Uh, I do have them. I'm not sure. So you""" start="00:11:34.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""did copy over. Okay, good. I can kind of rotate the screen""" start="00:11:40.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""between them if that works. And I'll try to jump over to chat a""" start="00:11:43.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""little more. Uh, you know, sure. I'm putting the link on BBB""" start="00:11:47.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""just in case people in there wants to follow. And also for""" start="00:11:52.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you, Corwin, if you want to open it up more quickly. Yeah,""" start="00:11:54.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that's going to be easier. Thank you.""" start="00:11:58.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Pretty sure I have the Sunday close pad here, but I'll take""" start="00:12:01.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""your link, sir.""" start="00:12:08.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Um, I mean, I've got my org channel. Sure. I mean, Elephant""" start="00:12:09.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Ergo, if you want to jump in, you know, we were suggesting""" start="00:12:37.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""doing the Saturday, Sunday close, sorry. Instead of having""" start="00:12:40.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""people chat, but if you have something to say right now, feel""" start="00:12:45.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""free to jump in. Although you do not have your microphone on,""" start="00:12:48.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you would need to join the audio in order to chat. Yep, and you""" start="00:12:50.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""can also use any of the private message type of features. Did""" start="00:12:57.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you guys want me to bring up the pad here? I did pull it up. Oh,""" start="00:13:01.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""well, I got it already. Understood. Okay, cool. So I think""" start="00:13:05.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Elephant Ergonomics is currently switching to the""" start="00:13:12.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""microphone so that they may ask a question. So I suggest we""" start="00:13:14.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""wait a little bit.""" start="00:13:18.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Elephant Ergonomics, yes, right now, you figured it out.""" start="00:13:19.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Hi. Is this working? Oh, wow. Cool. Okay. Long time""" start="00:13:24.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""listener. First time on the show. Wow.""" start="00:13:30.120" video="mainVideo-open-mic" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Graphical web browsing""" start="00:13:33.880" video="mainVideo-open-mic" id="subtitle"]]</div>[[!template text="""Okay. Well, I shouldn't let my nerves get the best of me now""" start="00:13:33.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because I got it all set up. So basically the thing that I've""" start="00:13:39.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""been thinking about because I've had a a handful of thoughts""" start="00:13:44.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""related to graphical web browsing. Because I know that""" start="00:13:50.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that's a point of friction for me, for sure. I don't know how""" start="00:13:55.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""much other people experience that. I know that I've""" start="00:14:01.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""certainly heard murmurs about it. But I've been""" start="00:14:04.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""speculating about a couple of thoughts about that recently""" start="00:14:08.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for some of the stuff that can be done in order to get like the""" start="00:14:14.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""sort of invasive graphical JavaScript, giant""" start="00:14:18.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""unmanageable spec sort of version of the browser working""" start="00:14:22.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""inside of Emacs, you know, in addition to, you know, the much""" start="00:14:27.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""more manageable EWW kind of thing.""" start="00:14:31.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So yeah, basically as part of my rambling, I had basically""" start="00:14:33.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""two major thoughts for strategies, because God knows this is""" start="00:14:42.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""way too big of a thing for me to tackle just for me. And I have""" start="00:14:47.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""been kind of thinking, you know, where do I go about getting""" start="00:14:52.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""started? And I think maybe that would probably just look""" start="00:14:55.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like maybe, you know, pitching ideas that have been on the""" start="00:14:59.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""back of my mind.""" start="00:15:03.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The first of which is that I stumbled upon uh, this""" start="00:15:08.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""application while ago called browsh. Uh, it's a, I'm going to""" start="00:15:14.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""go ahead and post that in the chat. Um, and just the, uh,""" start="00:15:20.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""emacsconf-gen.""" start="00:15:25.128" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So let's see here. It's not going.""" start="00:15:26.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, trying to light space. Cool. So this is a, I have no""" start="00:15:31.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""personal involvement with this project. The person that""" start="00:15:43.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""developed this does not know I exist, but I stumbled upon""" start="00:15:46.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""this in the wild. And what's really quite interesting about""" start="00:15:50.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it is that it will run, it's effectively a headless browser""" start="00:15:54.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""in the background and then convert this into blocks of text""" start="00:15:58.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for the sake of rendering inside a terminal. This is""" start="00:16:04.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""especially helpful in the case where you can run the daemon""" start="00:16:07.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that's actually responsible for the headless browser""" start="00:16:12.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""instance on a completely different box than the one that""" start="00:16:15.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you're actually running your shell on. And you have this""" start="00:16:20.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""complete separation between the I/O and the actual handling""" start="00:16:25.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of all of the complex, kind of opaque, really unmanageable,""" start="00:16:30.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""big browser stuff. I'm thinking that there's definitely""" start="00:16:36.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""something that we could consider cannibalizing here,""" start="00:16:39.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""either for""" start="00:16:44.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""one of the different rendering paradigms that fits inside""" start="00:16:44.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of Emacs more cleanly, especially either like the SVG""" start="00:16:51.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""renderer. Or again, trying to figure out how to break it into""" start="00:16:57.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""blocks somehow, but I feel like there's definitely.""" start="00:17:02.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Something very Emacs-y about the strategy that I would love to""" start="00:17:06.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""consider, especially for someone more technically""" start="00:17:11.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""qualified than I. To consider, I would love to tackle this.""" start="00:17:16.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Given that I have the time, but I didn't want to sit on this""" start="00:17:20.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""idea. On my own on the basis that, you know, there's a lot""" start="00:17:24.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""really qualified people here and I figured that. You know,""" start="00:17:29.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""someone that's a little bit more frustrated than me about""" start="00:17:33.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""this could very well. Pick this up and run with it.""" start="00:17:36.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I wanted to suggest that I also wanted to suggest the""" start="00:17:39.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""prospect of... I found a couple of just completely separately""" start="00:17:46.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""as a strategy to""" start="00:17:53.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the ability to re-render outputted DOM content""" start="00:17:57.900" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that would be rendered by, again, a""" start="00:18:07.001" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""full-fledged browser, probably in a headless,""" start="00:18:10.418" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""a sort of instance and then""" start="00:18:13.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""converting that DOM content to SVG,""" start="00:18:15.310" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which we could then render inside of Emacs""" start="00:18:20.531" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""either piecewise or as""" start="00:18:22.792" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the entire document. And I feel that that could be another""" start="00:18:25.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""strategy that we could perhaps consider as something that""" start="00:18:31.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""we can do for, you know, headless processing, and then""" start="00:18:36.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""having the Emacs rendering engine actually responsible""" start="00:18:41.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for the display and the I/O. So yeah, I just wanted to suggest a""" start="00:18:43.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""couple of those sort of ideas I've been sitting on. A couple""" start="00:18:52.760" video="mainVideo-open-mic" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""org-web-tools""" start="00:19:00.280" video="mainVideo-open-mic" id="subtitle"]]</div>[[!template text="""of things related to that stuff would be org-web-tools, I""" start="00:19:00.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""think is what it's called, from alphapapa. It'll allow you""" start="00:19:03.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to download a webpage into an Org Mode document. Or if you""" start="00:19:07.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""wanted to use a web browser that would have key bindings,""" start="00:19:12.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""primarily, you would want to use the next browser or""" start="00:19:16.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""qutebrowser, where they're more of meant to have their settings""" start="00:19:20.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""saved in a text document. And in the case of Next, it's""" start="00:19:27.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""written in Common Lisp and is very deeply inspired by Emacs.""" start="00:19:33.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I'll just break in what is a great discussion briefly to""" start="00:19:39.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""say. If you're just joining us, you're watching the Emacs""" start="00:19:43.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""conference. We're doing a brief open mic session. And we've""" start="00:19:45.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""been joined, we have... Sorry, I was just going to introduce""" start="00:19:50.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you, Plasma. Sorry. Nasty feedback from you, Sacha. Sorry.""" start="00:19:56.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We'll definitely have to check out integration for those""" start="00:20:13.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""two browsers. You know, this is my first time taking a look at""" start="00:20:17.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""web tools. This could definitely help me.""" start="00:20:22.560" video="mainVideo-open-mic" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""qutebrowser""" start="00:20:28.240" video="mainVideo-open-mic" id="subtitle"]]</div>[[!template text="""I've been using qutebrowser really persistently. It has""" start="00:20:28.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""dramatically improved my browser experience, but I'm""" start="00:20:32.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""still definitely having that last little bit of context""" start="00:20:35.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""switch friction that I would love to make disappear. Next""" start="00:20:39.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""might be part of the recipe, but I definitely think that, you""" start="00:20:43.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""know, certainly the goal for me is that I would love to see it""" start="00:20:47.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""inside Emacs itself. But this is, this definitely""" start="00:20:51.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""represents a big piecewise improvement I'm going to have to""" start="00:20:56.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""pursue. So thank you.""" start="00:21:00.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I think that that intersects some some several""" start="00:21:05.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""conversations that I think we've heard throughout the""" start="00:21:09.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""weekend kind of touching on the idea of, you know, baking our""" start="00:21:11.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""baking our thoughts into the core of Emacs right. and""" start="00:21:17.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""realizing, oh yeah, this is a pattern other people or a""" start="00:21:22.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""problem other people are running into or a way that other""" start="00:21:27.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""people work or a way that people want Emacs to look or just""" start="00:21:30.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""starts me thinking about like alternate key binding""" start="00:21:38.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""packages, which over the last few years, I feel like we've""" start="00:21:40.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""seen just a ton of options in a space that had been somewhat""" start="00:21:43.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""dormant, right? There was evil and everything else. And now""" start="00:21:47.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""there is a lot of granularity in my mind to everything else.""" start="00:21:50.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So although I'm not using any of these things, I think I've""" start="00:21:54.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""bumped into them a lot. A couple of other related topics in""" start="00:21:57.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""case that jogs anyone's interest to jump in and join the""" start="00:22:02.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""discussion. Yeah, thanks. Thanks for the comments.""" start="00:22:05.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Any other person wants to share something in the room""" start="00:22:16.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""currently? I'm seeing plenty of familiar names, so this is""" start="00:22:18.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""an invitation for those who I haven't heard so far to come in""" start="00:22:22.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and chat.""" start="00:22:26.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I mentioned to a comment I see from wasamasa saying, I've""" start="00:22:30.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""been experimenting with using some crap to review ELIS""" start="00:22:34.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""security issues. That's something.""" start="00:22:39.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you want to leave. I'm not sure that is. Yeah. I'm not sure if""" start="00:22:43.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Wes and Marcel wants to deprive themselves of, well,""" start="00:22:49.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""actually unmuted yourself. So please go. What? I've only""" start="00:22:52.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""got my name, that's all. I was just reading out your comment""" start="00:22:56.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""from the chat. Yeah. Just jump in on any topic, honestly.""" start="00:23:00.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay. I thought like, it's like an invitation for people to""" start="00:23:06.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""talk what, you know, they've recently started trying to do""" start="00:23:09.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""in Emacs. That's exactly right. A hundred percent. Okay.""" start="00:23:12.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay. So, well, I do review security things for work. And one""" start="00:23:15.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""colleague has been like bugging me all the time about, hey,""" start="00:23:22.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""try semgrep. It's pretty cool if you have like, you know,""" start="00:23:25.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""decent rules to review stuff. And I postponed it for the""" start="00:23:28.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""longest time. And then I thought, actually, you know what,""" start="00:23:32.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which would really make sense to like try out whether it even""" start="00:23:35.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""works for elisp source code review at all. And the answer is""" start="00:23:38.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""somewhat like apparently they've added LISP support,""" start="00:23:44.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which is pretty cool. So it seems it's like best developed""" start="00:23:47.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for like reviewing closure code. There are no rules to my""" start="00:23:50.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""knowledge. I started writing some and yeah, it does work. I""" start="00:23:55.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""have no idea how many, how many other people are trying to""" start="00:23:59.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""actively look into Emacs security issues. It feels to me""" start="00:24:03.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like it's like a handful at best, like I don't know,""" start="00:24:05.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""somewhere between three and five people maybe. And yeah. If""" start="00:24:07.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""anyone knows any rule sets for making this easier, I would be""" start="00:24:13.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""very interested, because then we'd have a common place to""" start="00:24:17.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""share them. Maybe it'd be appropriate for me to jump back in""" start="00:24:21.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""here and just share that, you know, you're somebody that I""" start="00:24:24.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""definitely trust with these issues. We could talk in the""" start="00:24:28.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""abstract at least about places where, you know, Emacs, not""" start="00:24:31.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""necessarily the Emacs team, but maybe more the Free""" start="00:24:36.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Software Society has said, oh, somebody reached out to us""" start="00:24:38.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""about this possible concern. Can you dig into that and find""" start="00:24:41.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""out if there's, you know, any reason to be concerned and then""" start="00:24:44.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""find the right people on the Emacs project team and work with""" start="00:24:48.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that. So I know that this is something you've been working on""" start="00:24:52.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""actually for, I don't want to say several years, but more""" start="00:24:54.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""than a year.""" start="00:24:57.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right. Any other person wants to share something?""" start="00:25:05.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Otherwise we have about 15 minutes until the next talk is due""" start="00:25:08.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to go live, which would leave us some time to do the closing""" start="00:25:12.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""remarks.""" start="00:25:15.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Let's wait just a bit, let's give people 30 seconds maybe to""" start="00:25:15.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""connect their thoughts and share them on IRC or to join the""" start="00:25:27.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""BBB. So in the spirit of, you know, get it out of the way so that""" start="00:25:31.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""we can let people go to bed and not do our usual rambling two""" start="00:25:36.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""hours of open remarks where we regret that we didn't turn""" start="00:25:39.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""them into the open mic. Right. So hopefully everyone's""" start="00:25:42.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""getting the message that, you know, we love to talk about""" start="00:25:45.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Emacs and if you've been to prior conferences, you're""" start="00:25:47.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""probably, and you've watched through the closing""" start="00:25:51.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""ceremonies, you may have noticed that we do, you know, We""" start="00:25:52.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""have a lot of fun talking about all the different ideas that""" start="00:25:55.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""have come forward here. And so this is realizing that and""" start="00:25:59.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""also realizing that our habit of talking for several hours""" start="00:26:03.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""as part of closing the conference is maybe keeping some of us""" start="00:26:08.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""up at night and jobs and things. So in that spirit, I just want""" start="00:26:12.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to throw out And I you know, I like to talk about this at least""" start="00:26:19.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""once a year. I mean isn't here and I tend to defer to him It's so""" start="00:26:23.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'll also use this opportunity to say gosh. I miss that guy""" start="00:26:28.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and thanks so much For all of you've done over the years. Yeah""" start="00:26:31.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm sorry, you can't make it this year and I'm actually have""" start="00:26:38.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""personally having a lot of fun covering for me for you It""" start="00:26:41.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""gives me a A lot of little things that I've picked up how to do,""" start="00:26:44.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm actually getting to do a little bit of. So fun stuff for""" start="00:26:48.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""me, but miss you. And in that spirit and thinking of you,""" start="00:26:50.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Amin, I'll also say that, and that's Bandali, if you know him""" start="00:26:58.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""from IRC more.""" start="00:27:05.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""He would want us to make sure that we talk about the Free""" start="00:27:06.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Software Foundation and the fact that that is giving to the""" start="00:27:12.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Free Software Foundation as the primary means to support""" start="00:27:17.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""development of Emacs and other GNU packages. We, as a""" start="00:27:19.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""project, are part of the giving... Somebody help me with the""" start="00:27:23.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""name of the project. It's not in the... I'll just go back to it""" start="00:27:26.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and even show it, right? So, we are part of the giving""" start="00:27:31.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""together or working together. A program, and you can, you""" start="00:27:39.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""can get through that. There may be some matching going on.""" start="00:27:45.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""There's a fundraiser also that happens to typically run""" start="00:27:48.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""during the conference currently. and I encourage you to""" start="00:27:52.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""become a member and there's some newer, lower amount. Also,""" start="00:27:57.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you can get directly directed through this program to the""" start="00:28:03.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Emacs conference. For the first time this year, we're""" start="00:28:06.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""actually using those funds. Sacha went and did a bunch of""" start="00:28:09.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""work to enable us to use some more scalable purchased""" start="00:28:13.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""infrastructure that's different from what the FSF just""" start="00:28:17.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""provides us, for example. We use a lot of different things""" start="00:28:20.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and thanks also to Pearl and others who are providing us""" start="00:28:23.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""infrastructure, as well as Sacha for just the amazing work""" start="00:28:27.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that you do there. And as well to people that are giving in""" start="00:28:30.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""some other way, such as your time contributed to the EMAX""" start="00:28:38.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""project, to the many cool packages I myself take advantage""" start="00:28:41.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of. And all of that, don't please feel pressured to break the""" start="00:28:45.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""piggy bank when that's a bad idea to help out, but it's help""" start="00:28:49.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""when you can. All right, how about we start from the top of the""" start="00:28:53.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""closing remarks so that we make sure that we don't forget""" start="00:29:02.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""anyone or anything. So if you could scroll just a little bit""" start="00:29:04.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""over, Corbyn, on your screen.""" start="00:29:08.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I think you went on the right one. It's a little small for me to""" start="00:29:10.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""see which one it is.""" start="00:29:21.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""No, I think it's the other pad. You had it open right before. I""" start="00:29:22.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""think it's Sunday Close, the other tab on your browser. I""" start="00:29:29.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""managed to meet myself in BBB. That's what happened there.""" start="00:29:34.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay, sorry. So here, and you wanted up or down? I wanted up,""" start="00:29:37.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""just as soon as you see the dashed line. Run through these""" start="00:29:42.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""instead of Corwin getting his stuff out of the way. Word.""" start="00:29:47.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, but I'll make sure to skip over the stuff that you""" start="00:29:52.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""already mentioned. But yes, let's try to preempt a little""" start="00:29:56.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""bit the end of the conference for the reasons I've mentioned""" start="00:30:00.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""before. I get first to thank you all so much for being part of""" start="00:30:05.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Emacs Conf 2024. Obviously, we still have a handful more""" start="00:30:10.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""talks to go this afternoon, but thanks again for showing up.""" start="00:30:15.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We've had steady numbers for the last five years or so. This""" start="00:30:19.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is my fifth year. hosting the general track and we've always""" start="00:30:24.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""averaged between 150 to 200 viewers which is amazing when""" start="00:30:28.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you just think about it but we We are accruing plenty more""" start="00:30:32.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""views over the years because everyone is watching either on""" start="00:30:38.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the website or on YouTube or on PeerTube. So thank you so much""" start="00:30:41.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for everyone taking the time to, well, first come to the""" start="00:30:44.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""show. To watch the video, to share it, absolutely. Yes,""" start="00:30:48.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because we've just talked about viewers. If you're""" start="00:30:51.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""watching this a year from now, we're thanking you for the""" start="00:30:54.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""view. We're talking to you. If you're mentioning a video of""" start="00:30:57.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the Society Maths Conference, Thanks for doing that.""" start="00:31:01.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""That's what makes this worth it. The thing that we have to""" start="00:31:06.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""talk about for hours after it ends every year, sorry about""" start="00:31:10.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that if it's been a disruption for your schedule, is the""" start="00:31:14.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""sense of community that we feel when we come together and""" start="00:31:18.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""watch all the different chats running on all these. I have a""" start="00:31:21.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""bunch of screens going so that I can see all the different""" start="00:31:24.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""chats and we all have a different way of connecting to all the""" start="00:31:27.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""different conversations going on. It's just a lot of""" start="00:31:32.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""energy. But at the end of the day, it's about helping people""" start="00:31:34.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""connect with the other groups and subgroups of people that""" start="00:31:41.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""are excited about the same stuff using Emacs to get there.""" start="00:31:46.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, definitely. A word on those recordings, because we""" start="00:31:48.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""mentioned the previous year's videos, but when it comes to""" start="00:31:55.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""this conference, the videos, most of the pre-recording and""" start="00:32:00.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""most of the talk that we had except one this year, they are""" start="00:32:04.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""already available on emaxconf-.org, the website. You can""" start="00:32:07.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""also find them on the YouTube account for emaxconf, they're""" start="00:32:13.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""fairly easy to find. We'll try to get them on PeerTube at some""" start="00:32:16.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""point. We are not sure when. But the rule is, right now, we are""" start="00:32:21.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""going to take some time. Go on, Sacha, if you want. There are""" start="00:32:26.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""two things already. I should put a URL to the channel in.""" start="00:32:29.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay, sure. So, Sacha will take care of this. But all the""" start="00:32:33.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""pre-recordings are already available with the subtitles""" start="00:32:38.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""when we manage to receive them sufficiently early. And if""" start="00:32:41.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""not, it'll take maybe a couple of days for us to get them out""" start="00:32:44.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""there. But yes, the pre-recordings are there. When it comes""" start="00:32:47.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to the live Q&A, so the little sessions you've seen us do live""" start="00:32:50.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""when we were on BBB asking questions to the speakers and also""" start="00:32:53.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""having people join in the discussion, this will take a""" start="00:32:57.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""little more time for us to publish them because we like to""" start="00:32:59.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""follow a process of captioning them and making sure we take""" start="00:33:02.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""all the questions and all the answers from the pad and""" start="00:33:06.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""centralize everything on the website. So this is a process""" start="00:33:09.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that takes about two to three weeks and we are not putting a""" start="00:33:13.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""lot of pressure on us to do this. If there is anything you're""" start="00:33:16.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""dying to see you'll have to wait a little bit but we'll try to""" start="00:33:18.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""make sure to make the information available as soon as we""" start="00:33:21.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""can. So""" start="00:33:24.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Let me read the notes just to make sure we're not forgetting""" start="00:33:28.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""anything. Yes, when it comes to the publishing process, if""" start="00:33:31.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you want to keep in touch and know when something is going to""" start="00:33:36.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""be released, we will announce all of this on the""" start="00:33:39.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""emacsconf-discuss mailing list, so emacsconf-discuss.""" start="00:33:42.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You'll be able to find the link on the website as well and it's""" start="00:33:45.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""already on the pad that we are sharing currently on the""" start="00:33:49.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""screen.""" start="00:33:53.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So obviously we'd be very happy to get some feedback from you""" start="00:33:54.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""on the conference and you can do this on this pad. We'll""" start="00:33:59.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""mention this at the end of the day again so that you get a""" start="00:34:03.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""chance to watch the last few talks of the conference and""" start="00:34:05.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""mention your thoughts on this but yeah we are very open to""" start="00:34:08.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""feedback. Part of the reason why It feels like a well-oiled""" start="00:34:11.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""machine, EmacsConf, is the fact that we've been iterating""" start="00:34:17.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""over the process for many years at this point. We'll get to""" start="00:34:19.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the thanking to Sacha for the automation and to other""" start="00:34:25.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""volunteers for all their work, but really, it's really the""" start="00:34:27.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""feedback that you give us that allows us to refine the""" start="00:34:30.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""process of running the conference. And if it looks smooth""" start="00:34:34.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and all this, well, it's mostly thanks to you, because what""" start="00:34:37.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you believe was smooth, you mentioned as a feedback, and""" start="00:34:40.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""then we try to adapt our own processes so that we can match the""" start="00:34:43.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""level of smoothness that you expected. So thank you so much.""" start="00:34:47.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Part of the success of EmacsConf is definitely on you.""" start="00:34:50.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So again, if you've got feedback, please include them in the""" start="00:34:53.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""pad. When it comes to the stats, as I mentioned, we are""" start="00:34:59.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""usually averaging between 150 and 200 viewers. And this""" start="00:35:03.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""year, on the two tracks, we managed somehow to peak higher on""" start="00:35:07.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the Dev track than on the Gen track, which is a first for the""" start="00:35:12.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""last five years. So that's an interesting tidbit of""" start="00:35:14.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""knowledge for you. But yeah, overall we had perhaps 300""" start="00:35:16.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""viewers total between the channels, which is amazing""" start="00:35:20.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because you've got 300 people watching you live present and""" start="00:35:23.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so that's a rich experience. All right, moving to the""" start="00:35:27.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""thanking section. We have plenty of people to thank without""" start="00:35:32.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""whom this conference would not be possible. First, I'd like""" start="00:35:36.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to thank all the speakers, all the volunteers, the""" start="00:35:42.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""participants, and all the other people in our lives who make""" start="00:35:45.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it possible through time and support to run this""" start="00:35:48.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""conference. Obviously, the speakers I've already""" start="00:35:50.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""mentioned, volunteers, you have some of them in the room""" start="00:35:53.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""right now. We've got Corwin, we've got Sacha, we also have""" start="00:35:55.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Flowy, but we also have plenty of captioners in the""" start="00:35:59.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""background, whom I will get to in just a little while. This""" start="00:36:02.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""year's conference hosts are myself, Leo Vivier, and Corwin Brust""" start="00:36:07.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and well not technically not FlowyCoder, not yet at least.""" start="00:36:11.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Flowy, as you know, joined us last year and has been running""" start="00:36:16.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""check-ins in the background and we are very thankful for his""" start="00:36:19.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""contributions and maybe this afternoon he might be able to""" start="00:36:22.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""come. This is a fun process if you want to imagine what it's""" start="00:36:27.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like for us backstage. Imagine, you know, Flowy's like""" start="00:36:31.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""getting everybody warmed up, goes in, talks to, gets a""" start="00:36:35.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""conversation going, everybody's ready, you know, the""" start="00:36:38.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""video is playing of the live stream, he's doing the warm hand""" start="00:36:41.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""up, everything ready, checking everything out. And then he""" start="00:36:45.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""hands the torch to Leo, or maybe me, and then we get to come in""" start="00:36:48.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and have this amazing conversation based on all the buzz""" start="00:36:52.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that's just been built up, knowing everything works out""" start="00:36:54.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""great. And one of these times, what Leo is telling you is that""" start="00:36:57.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Flowy's just going to give Leo or me the cold shoulder and do""" start="00:37:00.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the hosting himself. He did a great job with that last year,""" start="00:37:04.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and we're looking forward to more of that. All right, I'll do""" start="00:37:07.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""a quick fire of thankings because we need to soon move on to""" start="00:37:14.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the next talk of the day. I'd also like obviously to thank""" start="00:37:17.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Sacha for managing the two streams and the one stream today""" start="00:37:21.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because she's in the background making sure that""" start="00:37:25.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""everything goes all right for all our automation. And""" start="00:37:27.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""obviously Flowy again for the check-ins. I want also to thank,""" start="00:37:30.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to extend my thankings, to the proposal review volunteers""" start="00:37:34.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""James Howell, Jean-Christophe Helary, and others for""" start="00:37:40.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""helping with the early acceptance process. I mentioned""" start="00:37:44.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""them, the captioning volunteers, Mark Lewin, Rodrigo""" start="00:37:48.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Morales, Anoush, annona, and James Howell, and some speakers""" start="00:37:50.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""who captioned their own talks. I'm thinking about Eduardo""" start="00:37:54.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""especially. I guess thanks to me, be weird for me to read""" start="00:37:56.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""this, but I'm still going to do this, for fiddling with the""" start="00:38:03.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""audio and getting things nicely synced. For those who do not""" start="00:38:07.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""know, I also manage, I make sure that the audio is""" start="00:38:11.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""normalized, cleaned up, and all this for the conference,""" start="00:38:13.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and usually it's one of the few things that Sacha doesn't""" start="00:38:16.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like doing, and I'm very happy to pick the little crumbs to""" start="00:38:18.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""make sure that Emacs is as cool as it can get. Also thanks to""" start="00:38:21.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Bhavin Gandhi, Christopher Howard, Joseph Turner and""" start="00:38:26.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Screwless for quality checking the videos in the""" start="00:38:28.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""backstage. Thanks obviously to Shoshin for the music that""" start="00:38:30.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""has been accompanying us during the breaks. We've""" start="00:38:34.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""mentioned him already, but thanks to Amin Bandali for help""" start="00:38:37.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with infrastructure and communication. Thanks to Ry P for""" start="00:38:41.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the server that we're using for OBS streaming and for""" start="00:38:45.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""processing the videos. That's part of the reason why we are""" start="00:38:47.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""able to get the titles out so fast. And Corwin already""" start="00:38:50.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""mentioned the FSF but thanks to the Free Software""" start="00:38:55.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Foundation for Emacs itself, the mailing list,""" start="00:38:57.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""media.emacs.org server where we host the conferences. We""" start="00:39:01.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""might have a little word about donations and funding the FSF""" start="00:39:05.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""later in the afternoon. I'll make sure that Corbyn""" start="00:39:10.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""gets to it. But finally, thanks to the many users and""" start="00:39:14.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""commuters to the project and team that create all the""" start="00:39:17.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""awesome free software that we use, especially""" start="00:39:20.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""BigBlueButton, Etherpad, IceCast, OBS, The Lounge,""" start="00:39:22.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""LiberaChat, FFmpeg, OpenAI, Whisper, WhisperX, and the""" start="00:39:26.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Aeneas Forced Alignment Tool site transfer sub. Anyway,""" start="00:39:30.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""we're going to get started with the next talk of the day.""" start="00:39:33.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We'll continue with the thankings later on. Enjoy the""" start="00:39:35.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""conference. Thanks for tuning in, really appreciate you.""" start="00:39:38.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, we are off air.""" start="00:39:43.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I will go back to Mumble now.""" start="00:39:45.509" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right. That was pretty good.""" start="00:39:45.543" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""That was good, right?""" start="00:39:51.735" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I think that was good. I'm glad we did that.""" start="00:39:52.876" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Thank you for that. I'm hoping we would do.""" start="00:39:55.859" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, sorry. For the people who are still in chat, right now""" start="00:39:59.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""we are moving to the next live talk, so feel free to join us""" start="00:40:02.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""later. We might stay in this room, we do not know, but we'll""" start="00:40:06.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""see you later anyway. Okay, bye-bye.""" start="00:40:08.840" video="mainVideo-open-mic" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20open-mic%3A%20Open%20mic%2Fpad%20for%20quick%20updates%20etc.)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/open-mic-before.md b/2024/info/open-mic-before.md
new file mode 100644
index 00000000..3c50e1fa
--- /dev/null
+++ b/2024/info/open-mic-before.md
@@ -0,0 +1,22 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 41-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
+
+
+
+
+
+<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
+07:54.800 Casual
+10:37.560 Closing remarks
+13:33.880 Graphical web browsing
+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://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/open-mic-nav.md b/2024/info/open-mic-nav.md
new file mode 100644
index 00000000..2a60d24b
--- /dev/null
+++ b/2024/info/open-mic-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2024/talks/sun-open">Sunday opening remarks</a>
+Next by track: <a href="/2024/talks/sun-close">Sunday closing remarks</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2024/info/org-teach-before.md b/2024/info/org-teach-before.md
index a693cbb1..d9c35617 100644
--- a/2024/info/org-teach-before.md
+++ b/2024/info/org-teach-before.md
@@ -1,14 +1,9 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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-teach">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect stroke-width="3" x="150" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 20-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-org-teach.html>
+Format: 20-min talk cancelled
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="2024-12-08T15:50:00Z" end="2024-12-08T16:10:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~10:50 AM - 11:10 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~9:50 AM - 10:10 AM CST (US/Central)<br />Sunday, Dec 8 2024, ~8:50 AM - 9:10 AM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~7:50 AM - 8:10 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~3:50 PM - 4:10 PM UTC <br />Sunday, Dec 8 2024, ~4:50 PM - 5:10 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~5:50 PM - 6:10 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~9:20 PM - 9:40 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~11:50 PM - 12:10 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~12:50 AM - 1:10 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Status: Sorry, this talk has been cancelled
+
diff --git a/2024/info/org-teach-nav.md b/2024/info/org-teach-nav.md
index 7ad8975c..35ed938a 100644
--- a/2024/info/org-teach-nav.md
+++ b/2024/info/org-teach-nav.md
@@ -1,7 +1,4 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/language">Immersive language learning with Emacs</a>
-Next by time: <a href="/2024/talks/hyperbole">Fun things with GNU Hyperbole</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
-</div>
+</div> \ No newline at end of file
diff --git a/2024/info/org-update-after.md b/2024/info/org-update-after.md
index 59e79be9..9bfe0ff2 100644
--- a/2024/info/org-update-after.md
+++ b/2024/info/org-update-after.md
@@ -1,7 +1,1138 @@
<!-- 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%20org-update%3A%20The%20Future%20of%20Org)
+<div class="transcript transcript-mainVideo"><a name="org-update-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Hello, everyone. My name is Ihor Radchenko,""" start="00:00:00.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and I'm the new official Org Mode maintainer.""" start="00:00:03.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Today, I'll briefly introduce myself""" start="00:00:07.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and then share my ideas about the future of""" start="00:00:09.680" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Org Mode development. I will start by passing""" start="00:00:12.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""the word from Bastien, the previous maintainer.""" start="00:00:16.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Then I will tell you a little bit about my story,""" start="00:00:18.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""starting from ordinary Org Mode user""" start="00:00:22.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""all the way to the maintainer.""" start="00:00:24.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Then I will detail the new directions of development""" start="00:00:26.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and specific features which I want to see""" start="00:00:30.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""in Org Mode in the coming years.""" start="00:00:33.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""And I will conclude by asking you, Org Mode users,""" start="00:00:35.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to contribute to Org Mode""" start="00:00:39.660" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because all the features which are too many""" start="00:00:42.400" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""can only be implemented with the help of the community,""" start="00:00:46.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""with the help of more contributors.""" start="00:00:49.260" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""And for that, of course, I will also talk""" start="00:00:51.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""about Org community and how I see it evolve""" start="00:00:53.580" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so that we have a good communication""" start="00:00:59.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""between the development of Org Mode""" start="00:01:01.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and the community ideas.""" start="00:01:03.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Let me first pass the word to Bastien.""" start="00:01:07.560" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Message from Bastien Guerry""" start="00:01:14.280" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Hello, everyone. Ihor Radchenko is the new Org Mode""" start="00:01:14.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""maintainer.""" start="00:01:17.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""He's been acting as such for a couple of years now,""" start="00:01:18.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and I'm really glad he's finally agreed to take on the""" start="00:01:21.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""role officially. As a maintainer, I've probably done""" start="00:01:23.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""a few things right and certainly made many mistakes.""" start="00:01:26.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Here are 4 lessons I've learned in 14 years.""" start="00:01:29.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""The first is that maintaining Org Mode""" start="00:01:32.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""isn't just about code, it's mostly""" start="00:01:34.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""about users. Of course, some of them will never learn how to""" start="00:01:36.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""report a bug, some of them will behave like spoiled""" start="00:01:40.680" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""children, and most of them will expect you to work for free""" start="00:01:43.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""forever. Nevertheless, the time is as valuable as yours.""" start="00:01:46.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Whatever they request, there is always something that can""" start="00:01:50.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""lead to a positive outcome for Org Mode or its community.""" start="00:01:53.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""The second lesson is that maintenance isn't just about""" start="00:01:57.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""technical choices. It's also about predictability.""" start="00:02:00.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Be very clear and very loud about what users and contributors""" start="00:02:04.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""can expect of your time, skills, and motivations.""" start="00:02:07.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Stick to the robustness principle""" start="00:02:11.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""by being liberal in what you accept""" start="00:02:12.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and strict in what you produce. Thirdly, it's all""" start="00:02:15.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""about learning. Let's build a culture together where it's""" start="00:02:19.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""okay to ask stupid questions. No one is born knowing how to""" start="00:02:22.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""write in English, how to report a bug, or how to maintain a""" start="00:02:25.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""large piece of code. Remember that old-timers were newbies""" start="00:02:28.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and that newbies could become maintainers. We all have a lot""" start="00:02:32.060" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to learn, even if it's just how to respect each other.""" start="00:02:35.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Finally, as a maintainer, think about the next one. Who will""" start="00:02:38.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""be in your shoes next? What kind of maintainer do you want for""" start="00:02:42.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""a software you will be using for decades? It's also a""" start="00:02:45.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""responsibility of the Org Mode community. How can we""" start="00:02:48.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""collectively attract maintainers that want to help us use""" start="00:02:52.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and enhance this wonderful little tool? How can we,""" start="00:02:56.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""as Org Mode users, help Ihor pave the way""" start="00:02:59.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""for the next maintainers?""" start="00:03:02.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Enough said. I'm confident Org Mode is in good hands and I'm a very""" start="00:03:04.400" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""happy user. Thanks everyone for all these years of fun and""" start="00:03:08.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""learning.""" start="00:03:11.560" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""My step-by-step journey to Org maintenance""" start="00:03:15.920" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Now back to my talk. Let me start by briefly introducing""" start="00:03:15.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""myself. I'm actually not a programmer. By training, I'm a""" start="00:03:20.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""material scientist. and I only started using Emacs and""" start="00:03:23.960" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Org Mode and naturally doing programming (because that's""" start="00:03:27.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Emacs) when I was doing my PhD and I wanted to use Org Mode to""" start="00:03:30.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""tame my research work. A couple of years I was just an""" start="00:03:36.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""ordinary user, until I learned enough and""" start="00:03:40.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""got enough courage to report my first bug.""" start="00:03:44.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Then it all evolved over the years.""" start="00:03:48.464" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I started participating in the mailing list,""" start="00:03:51.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I started learning more about Elisp,""" start="00:03:53.960" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I reported more complex bugs,""" start="00:03:56.560" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I eventually got around to go and fix the tricky bugs.""" start="00:03:59.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Then I started participating more in Org mailing list""" start="00:04:08.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""in helping fixing bugs in selected areas of Org""" start="00:04:11.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""mode and eventually switching to all parts of Org.""" start="00:04:16.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""At some point I ended up doing the de facto maintenance job""" start="00:04:22.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""together with Bastien and got an actual maintenance offer""" start="00:04:27.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""which I accepted recently. The key takeaway I want you to get""" start="00:04:32.680" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""from here is that you don't have to be a programmer, you don't""" start="00:04:38.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""have to know Elisp to contribute, and you don't even have to""" start="00:04:41.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""be like that to become a maintainer. All it takes is""" start="00:04:47.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""slow, methodical, persistent learning over the years,""" start="00:04:51.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""participating in the community, and eventually""" start="00:04:55.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""submitting your patches upstream. And eventually you can""" start="00:04:58.500" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""become a maintainer, or not a maintainer as you wish.""" start="00:05:02.400" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Enough about me.""" start="00:05:07.680" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Priorities for Org maintenance""" start="00:05:09.241" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Let's talk about what I think should happen with""" start="00:05:09.241" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Org Mode and what my goals on Org Mode is. The first and top""" start="00:05:13.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""priority for me is the basics. The basics, the""" start="00:05:18.860" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""code-based stability.""" start="00:05:25.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Basically, all the foundations, all the APIs in""" start="00:05:26.070" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Org Mode, all the basic libraries, which everything builds""" start="00:05:29.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""upon so that we have fewer bugs and we have more""" start="00:05:34.960" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""understandable code so that others who want to contribute""" start="00:05:39.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""have easier time understanding""" start="00:05:42.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""what is going on in the code base and""" start="00:05:44.652" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""contribute without much of a problem or confusion.""" start="00:05:46.372" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Second equally important direction is the Org community,""" start="00:05:52.260" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because a single person, even a couple of people, cannot""" start="00:05:56.340" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""really develop such a big project as Org Mode. And we always""" start="00:06:00.580" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""want new contributors, which are not coming from nowhere.""" start="00:06:05.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We need to have the community of users.""" start="00:06:08.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We have a community of""" start="00:06:10.229" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""people who participate in discussions, who later submit""" start="00:06:12.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""patches and code, and that's where we get most of the new""" start="00:06:15.680" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""features. So I would like to improve the communication""" start="00:06:19.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""between Org community and the development. The third""" start="00:06:24.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""direction I want to pursue is making life easier for""" start="00:06:29.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""third-party packages. Because we don't only have org-mode""" start="00:06:34.260" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""as it's distributed with Emacs. We have a lot of""" start="00:06:38.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""ELPA packages. We have a lot of MELPA packages.""" start="00:06:41.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""People who want some specific features""" start="00:06:45.197" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""on top of org-mode do develop""" start="00:06:47.918" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""these packages which are widely used or not so widely used.""" start="00:06:49.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It's not only about Emacs. We have a lot of mobile apps""" start="00:06:54.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""that can work with Org files, have a lot of parsers which""" start="00:06:57.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""enable this mobile apps, or in general, programs outside""" start="00:07:01.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Elisp to understand Org files.""" start="00:07:06.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Fourth direction is the Org markup as a foundation of""" start="00:07:11.020" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""org-mode as a major mode, because we have a lot of""" start="00:07:14.960" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""functionality in org-mode itself inside Emacs,""" start="00:07:18.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but it's all based on the underlying markup,""" start="00:07:20.574" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and markup should have enough features""" start="00:07:23.675" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to support the functions we want to see there.""" start="00:07:27.436" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Last direction, which is somewhat less""" start="00:07:32.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""important, mostly because I don't have""" start="00:07:34.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""that much time to focus on everything,""" start="00:07:37.835" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""is the new features. I do want to see""" start="00:07:40.137" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""certain important features in Org mode,""" start="00:07:44.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but I usually cannot spend too much time on them""" start="00:07:46.841" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because of the previous more important parts.""" start="00:07:50.263" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I do rely on the org community and""" start="00:07:53.085" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""the contributors to implement these new features.""" start="00:07:55.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""My idea is that I want to direct which features""" start="00:07:57.457" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and how they should be implemented,""" start="00:08:01.916" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but the actual people who implement""" start="00:08:03.758" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""them should come from the community.""" start="00:08:05.300" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Now let's go into the details.""" start="00:08:09.464" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Modular Org""" start="00:08:11.767" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""The code base. As a bit of motivation, I would like""" start="00:08:11.767" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to share this email from Richard Stallman, who a couple of""" start="00:08:15.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""years ago asked about improving Org mode by making it""" start="00:08:19.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""more modular. That's directly asking about improving the""" start="00:08:27.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""foundations of the code. That's what I think is""" start="00:08:32.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""an important direction as well. Here's an example.""" start="00:08:35.640" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Slim down large Org libraries""" start="00:08:41.590" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""We have a lot of really, really large org libraries,""" start="00:08:41.590" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""like org.el, which is like one megabyte or something large,""" start="00:08:45.313" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""org-agenda, org-table, org-list,""" start="00:08:49.377" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""a number of files which are really,""" start="00:08:51.559" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""really, really large. What is worse is they are hard to""" start="00:08:52.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""understand sometimes. I even have an example,""" start="00:08:56.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""alphapapa complained that part of his motivation""" start="00:09:00.907" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to write org-ql and specifically his agenda part,""" start="00:09:04.506" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""agenda-like part, was""" start="00:09:07.868" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because org-agenda is so hard to understand that it's""" start="00:09:08.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""easier to start from scratch.""" start="00:09:13.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I don't want such situations""" start="00:09:15.573" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to happen in future, if possible at all.""" start="00:09:17.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""One of the projects""" start="00:09:20.375" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I'm currently working on,""" start="00:09:21.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it's work in progress now,""" start="00:09:23.117" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""is splitting Org libraries into smaller parts,""" start="00:09:25.101" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""into more documented parts,""" start="00:09:28.438" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""into the APIs which are actually""" start="00:09:31.809" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""documented and explained in the code at least,""" start="00:09:34.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so that people who just open org-mode code""" start="00:09:38.471" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""cannot be scared away and go and""" start="00:09:42.572" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""read the comments and understand what is happening there""" start="00:09:45.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""easier. At this point, I have almost doubled the number of""" start="00:09:48.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""libraries. It's still work in progress, so there's a lot of""" start="00:09:52.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""room for improvement in this area.""" start="00:09:54.840" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Upstream generic Org libraries""" start="00:10:00.000" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Another direction which is""" start="00:10:00.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""somewhat reasonable in relation to splitting things down""" start="00:10:04.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""is that some libraries are really generic in Org Mode,""" start="00:10:09.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because Org Mode often has a functionality""" start="00:10:15.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""which is really new, and for that,""" start="00:10:18.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it had to implement some very generic""" start="00:10:20.101" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""functionality that doesn't have to be used""" start="00:10:22.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""just for Org Mode.""" start="00:10:24.223" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""This can be generalized for Emacs in general.""" start="00:10:24.904" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""There is a number of libraries""" start="00:10:27.925" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""which we may or may not upstream to""" start="00:10:29.646" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Emacs, depending on what Emacs maintain, I think. As one""" start="00:10:33.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""example is org-capture, because it's a very obvious""" start="00:10:37.560" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""example. org-capture started as support from remember.el,""" start="00:10:40.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""which is still a part of Emacs. It has more features than""" start="00:10:43.680" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""remember.el, which we required for Org. But, you know,""" start="00:10:46.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""these features can be backported. Why not? And then""" start="00:10:50.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""not only Org-mode, but other Emacs libraries can benefit""" start="00:10:55.140" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""from these features we have in Org-mode only.""" start="00:10:58.680" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Similarly, I have a long list of""" start="00:11:01.958" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""different libraries that can be shared.""" start="00:11:04.740" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Yeah, for some I'm not sure,""" start="00:11:12.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but in general, there is a lot of""" start="00:11:14.005" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""work that may be done and may be discussed in the future.""" start="00:11:18.960" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Use modern Emacs APIs and libraries""" start="00:11:25.400" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""The third part about the basics is making use of the new Emacs""" start="00:11:25.400" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""libraries. Org Mode in general is quite well written in terms""" start="00:11:31.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""of Emacs integration. We do support many of the Emacs""" start="00:11:36.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""features and libraries which are generic. However, in more""" start="00:11:40.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""recent Emacs versions, we started getting some new""" start="00:11:44.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""features, and we do want to make use of them in Org.""" start="00:11:48.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""For example, recently we contributed yank-media support for""" start="00:11:50.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""clipboard pasting and drag and drop. Now it is supported""" start="00:11:55.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""in Org mode already in the released version. Eventually""" start="00:12:00.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""we want to support transient.el, because now Org uses ad hoc""" start="00:12:04.400" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""system. It's of course much better to use existing and""" start="00:12:08.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""more powerful menus, which are implemented in""" start="00:12:12.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""transient. It even has some initial work-in-progress""" start="00:12:14.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""implementation. I hope it can be eventually""" start="00:12:18.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""extended to the whole Org Mode""" start="00:12:20.029" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""There are other things like compatibility, which there is""" start="00:12:23.961" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""an excellent Emacs library, compat.el, that provides""" start="00:12:29.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""backwards compatibility and Org also has something like this""" start="00:12:33.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""in org-compat. We don't have to write it ourself again.""" start="00:12:37.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We can make use of the existing library.""" start="00:12:39.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Similarly, there's a very, very new library""" start="00:12:43.742" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""track-changes for tracking changes""" start="00:12:46.044" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""in real time. Eventually, if you want to support""" start="00:12:48.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""context-menu mode, maybe touchscreen, Android""" start="00:12:53.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""support, I don't know, but I hope it can be done by someone.""" start="00:12:56.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""And some more generic library: select thingatpt.""" start="00:13:01.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""That's about using external APIs.""" start="00:13:09.320" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Improve Org parser APIs""" start="00:13:13.257" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Now about the internal Org APIs.""" start="00:13:13.257" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""One important, probably one of the most important""" start="00:13:18.558" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""parts of Org is the parser, how Org itself understands the""" start="00:13:19.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Org files. The situation is that we have two parsers in""" start="00:13:23.260" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Org mode. One is the Org element, the proper parser, which we""" start="00:13:27.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""use as a reference, but many parts of Org still use regular""" start="00:13:31.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""expressions, which are approximate. These two parsers""" start="00:13:34.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""are not exactly consistent, which is really bad, and I hope""" start="00:13:38.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to solve this. I already started doing some work by""" start="00:13:41.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""factoring out some part of abstract syntax tree and working""" start="00:13:48.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""on real-time parser, incremental parser, which is enabled""" start="00:13:54.141" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""by default in Org 9.6, but there are still parts which I need""" start="00:13:57.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to work on. Eventually I want to get rid of regular""" start="00:14:00.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""expression-based parser completely, so that we don't have""" start="00:14:03.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""any inconsistencies inside Org Mode. One of the examples of""" start="00:14:05.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""these parts that are still using regular expression is""" start="00:14:10.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""fontification, which is often simply wrong, especially in""" start="00:14:13.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""some edge cases, and we really want to use the proper parser""" start="00:14:16.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""in this area. Maybe even editing org files using the parser""" start="00:14:21.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""syntax tree, but that might be tricky, although there is an""" start="00:14:27.560" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""existing library that implements some ideas for this.""" start="00:14:31.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""The key point is that org-element-api, the parser, should""" start="00:14:38.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""eventually be used everywhere""" start="00:14:41.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so that everything is consistent.""" start="00:14:42.750" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Improve Org babel APIs""" start="00:14:45.731" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""The second important API is the Org babel.""" start="00:14:45.731" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Currently, Org babel does have some API,""" start="00:14:50.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but first, it's not well documented.""" start="00:14:54.415" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Second, it's sometimes awkwardly""" start="00:14:56.196" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""designed, especially compared with the exporter.""" start="00:14:59.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I do want Org Babel APIs to be more consistent.""" start="00:15:04.820" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Another thing about Org Babel, it's not exactly API, but you""" start="00:15:11.420" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""know that documentation for most of the Babel backends are""" start="00:15:14.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""not even in the Org manual, even though the backends are""" start="00:15:18.260" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""built-in. They are on Org Wiki, and we do want to move them to""" start="00:15:20.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""the manual eventually. That's the important part, and it""" start="00:15:25.560" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""should be done. Those are some obstacles, like not all the""" start="00:15:29.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""features are properly implemented, and that's a bit of an""" start="00:15:34.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""extra job that should be done. Another small thing which""" start="00:15:39.400" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""thanks to Bruno Barbier is being done, in progress: we""" start="00:15:43.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""should have a more robust asynchronous API for babel.""" start="00:15:48.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I hope it can progress further.""" start="00:15:51.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""For now, it already progressed quite far.""" start="00:15:53.601" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Beyond Org code and Emacs: third-party packages, apps, parsers""" start="00:15:57.380" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""That's all about the basics, the underlying""" start="00:15:57.380" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""backbone of the Org codebase. Let's move to the second""" start="00:15:59.960" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""important direction which is""" start="00:16:04.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""the third-party packages and basically the parsers""" start="00:16:09.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""for mobile apps. I will postpone the community to the end""" start="00:16:13.740" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because I want to have a call for contribution at the end.""" start="00:16:18.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""For third-party packages, I would like to remind you that""" start="00:16:23.920" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""org-contrib""" start="00:16:31.200" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Org mode used to have something called org-contrib as a""" start="00:16:31.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""part of Org mode, which is a collection of small libraries,""" start="00:16:34.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""small packages that didn't have a proper""" start="00:16:39.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""copyright assignment basically,""" start="00:16:44.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but more or less a part of Org mode. This is""" start="00:16:45.496" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""no longer the case. Now what we did is""" start="00:16:49.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""we moved a number of very rarely used libraries""" start="00:16:52.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""from Org core itself to org-contrib,""" start="00:16:56.642" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and now we treat org-contrib as basically the libraries""" start="00:16:58.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""that we really want someone to take responsibility for.""" start="00:17:03.780" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We want to maintain this for everything that is in""" start="00:17:08.021" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""org-contrib, and from me and other Org team, we""" start="00:17:10.581" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""do not spend too much time maintaining this package,""" start="00:17:18.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""just do some most basic bug fixing, and that's all.""" start="00:17:21.163" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you know, if you see""" start="00:17:25.287" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""some libraries from org-contrib and you use them,""" start="00:17:27.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and you know Elisp, please volunteer to be""" start="00:17:30.032" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""the maintainer, because otherwise""" start="00:17:31.992" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""there will be not much progress in these libraries.""" start="00:17:34.455" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org orphanage""" start="00:17:37.820" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""As a natural extension of this and inspired by""" start="00:17:37.820" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Tarsius's Emacs Orphanage idea, we also maintain a small""" start="00:17:40.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""page basically listing the libraries, some others like""" start="00:17:46.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""packages, Emacs packages that are not really maintained.""" start="00:17:50.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you are a maintainer of a library and you don't have time""" start="00:17:55.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to do it, you can write to Org mailing list""" start="00:17:59.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and we can add the library to this page""" start="00:18:02.508" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so that we can search for new maintainers""" start="00:18:05.210" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""in a more centralized way. If you are an""" start="00:18:09.919" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Elisp hacker and you want to help something for Org Mode,""" start="00:18:12.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""you can check that page and see where you can help.""" start="00:18:18.120" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Mobile apps and parsers""" start="00:18:25.840" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Now away from Emacs, or mobile apps.""" start="00:18:25.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We have quite a lot of mobile apps at this point.""" start="00:18:29.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Unfortunately, it's very hard""" start="00:18:33.949" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""for me and many other Elisp contributors to contribute to""" start="00:18:35.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""these apps because they are not using Elisp naturally. But""" start="00:18:42.460" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""these applications heavily rely on Org markup. I do hope""" start="00:18:46.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""that we can keep Org markup consistent enough and rich""" start="00:18:52.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""enough so that people don't have to invent extensions to Org""" start="00:18:55.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""like what happened to Markdown.""" start="00:19:00.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I really want to emphasize that""" start="00:19:06.021" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I want to see more Org parsers in different""" start="00:19:09.543" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""languages so that they can be used by developers.""" start="00:19:12.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""For people who are writing these parsers,""" start="00:19:13.740" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I want to share this link. It is the org-syntax reference.""" start="00:19:24.186" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It is the official Org syntax,""" start="00:19:27.268" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""which is what we think it should be.""" start="00:19:29.369" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It's described in plain human language.""" start="00:19:33.632" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It's not a code. All details should be listed there.""" start="00:19:36.213" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Please use it as a reference if you are writing a parser.""" start="00:19:39.856" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Eventually, this document will be""" start="00:19:43.558" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""submitted to IETF, I hope. In the future""" start="00:19:45.119" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I hope to write a set of tests which will work as benchmarks.""" start="00:19:51.673" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""basically we have some existing tests for our internal""" start="00:19:56.060" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""parser and I want to factor out these tests so they can be used""" start="00:19:58.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""by any parser, so that we can compare the performance and""" start="00:20:04.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""which parts of Org mode are parsed and which parts are not.""" start="00:20:07.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I mentioned that we want to submit to IETF, which means that""" start="00:20:14.580" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Org markup will become the actual registered format.""" start="00:20:19.000" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Long-standing syntax problems""" start="00:20:23.869" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""But before we do that and thus fix Org markup in stone,""" start="00:20:23.869" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because it's very hard to change things in the IETF,""" start="00:20:31.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it's important to address important problems,""" start="00:20:34.615" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""existing problems with Org syntax.""" start="00:20:38.837" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""There are some problems, like I mentioned the""" start="00:20:41.218" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""inconsistencies between the two existing parsers""" start="00:20:43.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""in Org mode. There are also some parts,""" start="00:20:46.942" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""there are some examples, like there are""" start="00:20:51.408" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""problems with numeric priorities, for""" start="00:20:53.150" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""example, which are not treated consistently. There are""" start="00:20:54.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""problems, more general problems with syntax when people""" start="00:20:58.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""request some edge cases which should be addressed. Like,""" start="00:21:02.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it's very hard to do interword markup.""" start="00:21:07.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We have zero-width space workaround, but many people dislike it,""" start="00:21:10.102" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so maybe we want to do something about it.""" start="00:21:13.702" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We have some edge cases when we""" start="00:21:16.263" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""combine emphasis with links. We have some edge cases when we""" start="00:21:18.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""have double blank lines inside some source blocks, for""" start="00:21:22.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""example, and combination in the list. I hope we can""" start="00:21:24.960" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""somehow address it. It's not impossible to do it, it just""" start="00:21:30.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""requires time. One annoying part is the inline task syntax.""" start="00:21:33.400" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It's annoying both from the programming perspective,""" start="00:21:38.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""internally as implementation, and from the UI""" start="00:21:41.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""perspective, because there are too many stars. We""" start="00:21:43.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""probably should redesign it eventually, maybe in""" start="00:21:47.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""backwards-compatible way, but we will see how it goes.""" start="00:21:50.480" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""New syntax features""" start="00:21:56.240" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Another part is not just fixing the edge cases or problems,""" start="00:21:56.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it's the completely new syntax features. That's probably""" start="00:22:00.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""done after we submit to IETF. But there are important things""" start="00:22:04.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""that people often request, like time zone support in""" start="00:22:07.960" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""timestamps. Better repeaters, like more flexible""" start="00:22:11.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""repeaters, that's really a frequent request also.""" start="00:22:15.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Another idea is some custom markup, which is""" start="00:22:21.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""coming to various requests, like, for example, people""" start="00:22:28.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""often ask to highlight some words with a color,""" start="00:22:31.940" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""for example, or with some other special way""" start="00:22:37.888" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and then export it in a special way,""" start="00:22:40.891" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""just as we do with special blocks, basically.""" start="00:22:43.334" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""What I want to introduce is the ability to do it""" start="00:22:47.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""on a macro level or inline.""" start="00:22:51.062" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Of course, a new syntax feature which I wish we could""" start="00:22:54.602" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""have is the multi-line cells in tables.""" start="00:22:57.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It's very frequently requested as well,""" start="00:23:01.065" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but I really have no clue how to do it.""" start="00:23:02.546" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We had a discussion about this in previous""" start="00:23:07.008" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""discussions, but there was no conclusion. We don't see a""" start="00:23:09.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""good way how to implement it syntax-wise.""" start="00:23:13.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Unlike time zones where we decided exactly the syntax,""" start="00:23:16.156" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""how it could be and we just need patches to be submitted,""" start="00:23:19.141" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""here even the idea of syntax is not clear.""" start="00:23:22.666" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Please do participate in these discussions""" start="00:23:25.611" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""if you have ideas.""" start="00:23:26.772" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""New features I hope to see in Org""" start="00:23:30.503" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""The last direction is the""" start="00:23:30.503" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""new features. In general, I welcome all kinds of good""" start="00:23:32.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""features, but there are certain things which I explicitly""" start="00:23:36.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""want to see and I hope to see submitted. If you are""" start="00:23:39.560" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""interested, please do submit patches. One, and probably""" start="00:23:43.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""many people are aware about it, is the asynchronous LaTeX""" start="00:23:48.560" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""preview, developed by Timothy and Karthik. I hope it can be""" start="00:23:50.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""finalized eventually and upstreamed. It's pretty much in""" start="00:23:55.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""ready state, but on the technical level it should be""" start="00:23:59.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""discussed further and revised. The second is org-ql by Adam.""" start="00:24:02.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I hope it can be upstreamed. It's also a work in progress.""" start="00:24:09.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It's just a question of free time for Adam mostly, I think,""" start="00:24:17.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and me. That's another important part, new feature. The""" start="00:24:20.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""third is the so-called multi-page export. The idea is the""" start="00:24:26.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""same as many packages for blog posts, so that you have a""" start="00:24:30.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""single Org file and then you can export multiple HTML pages,""" start="00:24:34.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""for example, or PDF pages, anything like that. This work in""" start="00:24:39.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""progress by Orm, thanks to him,""" start="00:24:42.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""although it was a little bit stuck because""" start="00:24:46.688" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I am not exactly sure how to best integrate it""" start="00:24:49.350" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""into the existing APIs. If you are a developer of one of the""" start="00:24:52.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""blogging packages, I would appreciate if you can chime in""" start="00:24:56.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and probably share some ideas here. Next are just some""" start="00:25:01.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""wishes I wish we could have, but""" start="00:25:06.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it's not very detailed. One is""" start="00:25:09.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""the multi-language support, so that we can have Org""" start="00:25:11.950" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""documents in multiple languages, or maybe even""" start="00:25:14.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""translations. The collaborative editing that many""" start="00:25:16.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""people would wish to have, I think. Things like tracking""" start="00:25:21.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""changes, adding comments, importing from""" start="00:25:25.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""some other Org formats with""" start="00:25:29.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""the comments and changes""" start="00:25:30.875" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so that we can actually participate""" start="00:25:32.036" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""with all those Microsoft Word users""" start="00:25:34.019" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and stuff like that.""" start="00:25:36.963" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""But that's really too much for me alone to handle.""" start="00:25:39.744" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you want to see one of these features, please consider""" start="00:25:43.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""contributing. Just write the mailing list about your""" start="00:25:47.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""interest and we can start from there.""" start="00:25:50.040" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org community""" start="00:25:54.073" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Now, the important part is, you see,""" start="00:25:54.073" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I keep asking people like,""" start="00:25:57.456" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""please contribute, please contribute,""" start="00:25:58.636" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but who should contribute?""" start="00:25:59.800" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org community forums - Org mailing list""" start="00:26:01.358" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""So I want to improve communication between the""" start="00:26:01.358" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""community and the mailing list. Now, people often""" start="00:26:03.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""discuss new features or ideas on all kinds of places like""" start="00:26:12.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Reddit, Mastodon, like all kinds of Matrix/IRC chats,""" start="00:26:16.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""even on meetups, some non-English language. That's very""" start="00:26:20.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""nice that we have this community, but not all the ideas are""" start="00:26:25.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""visible to the developers. I do wish that the most""" start="00:26:29.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""important things that people want to see should end up on the""" start="00:26:34.500" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""mailing list, one way or another.""" start="00:26:38.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I'll later talk about some""" start="00:26:42.332" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""ideas how I think it can be done. Another part is""" start="00:26:43.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""we have org-wiki and I hope that""" start="00:26:48.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""we can make it more centralized""" start="00:26:52.555" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""space for interesting Org mode articles,""" start="00:26:55.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""for tutorials, for blog posts,""" start="00:26:58.477" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""at least linked to blog posts. If you have""" start="00:27:00.618" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""some idea about good blog posts, it would be nice if you""" start="00:27:03.680" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""submit a patch to work or at least email about this link""" start="00:27:08.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to the mailing list.""" start="00:27:13.026" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org mailing list - world""" start="00:27:17.160" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Of course, not everyone likes to use mailing lists""" start="00:27:17.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""or don't have a good setup to do it,""" start="00:27:21.055" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""or even don't want to read""" start="00:27:23.810" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""everything on Org mailing list, because there are things""" start="00:27:25.560" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""like bug reports, people don't really want to see that. So""" start="00:27:27.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Bastien actually developed a tool that can help with this.""" start="00:27:31.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you want to monitor Org mailing list, but want to see""" start="00:27:35.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""only the most important discussions, and maybe""" start="00:27:39.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""participate if you decide to, you don't have to register. We""" start="00:27:42.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""have Woof, which is basically a web page that monitors our""" start="00:27:45.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""main list, but not every email. That's the most important""" start="00:27:51.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""announcements, some blog-like posts, or feature""" start="00:27:55.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""requests, or some discussions. Then on this webpage,""" start="00:27:58.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""you can see it as HTML, or you can subscribe as RSS, or even""" start="00:28:02.800" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""download in Org or MD format.""" start="00:28:06.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Thanks to Sacha Chua, also weekly news about Emacs in""" start="00:28:11.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""general, but Org Mode as well. It also includes the""" start="00:28:15.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""new features in Org Mode on the development branch and the""" start="00:28:23.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""interesting new blog posts and discussions on various""" start="00:28:27.100" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Reddit forums or mailing lists everywhere. I did this""" start="00:28:30.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""little bit of experimental integration so that many lists""" start="00:28:35.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""can also be read, kind of announced on the chats.""" start="00:28:39.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""For example, in #org-mode Matrix room, we have a bot that""" start="00:28:45.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""connects to Woof RSS so that all the news and discussions are""" start="00:28:48.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""notified in the chat so that people""" start="00:28:53.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""can see if they are interested""" start="00:28:55.924" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and maybe, hopefully, participate. I wish""" start="00:28:58.765" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""we could also have similar kind of both for Reddit, Mastodon""" start="00:29:02.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and maybe IRC. That way we have mailing list connected to""" start="00:29:05.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""more active and more modern forums and chats.""" start="00:29:10.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""More people exposed to what is happening.""" start="00:29:17.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Another part is that we actually have a web interface to Org""" start="00:29:19.960" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""mailing list and you can even reply from there,""" start="00:29:26.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but it's not always obvious, unfortunately.""" start="00:29:29.049" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We have this public inbox software""" start="00:29:31.401" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to transform the mailing list into""" start="00:29:37.746" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""HTML pages. That's a decent interface, but it could be""" start="00:29:40.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""improved to look more forum-like, so that people can easily""" start="00:29:45.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""find the reply button or basically participate without""" start="00:29:49.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""too much effort, even if they are not subscribed or they are just""" start="00:29:53.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""casually reading. That would be nice if someone""" start="00:29:56.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""knowledgeable of CSS could help with this.""" start="00:29:59.080" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Contribute ideas!""" start="00:30:05.580" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""Again, I cannot emphasize more that most of the Org ideas of""" start="00:30:05.580" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""the new features are coming from people,""" start="00:30:12.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but often they are known either by someone""" start="00:30:16.975" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""submitting a patch to the mailing list or""" start="00:30:23.222" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""submitting an idea to the mailing list. Rarely, it happens when""" start="00:30:24.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""someone is reading posts from Reddit that don't share to the""" start="00:30:28.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""mailing list. If you think that there is some important""" start="00:30:32.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""discussion happening on the forum,""" start="00:30:35.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it would be nice that you can go ahead and share it""" start="00:30:38.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""with Org mailing list. We don't care about""" start="00:30:42.416" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""on-topic, off-topic, because unlike""" start="00:30:46.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""emacs-devel, we don't focus on development.""" start="00:30:49.501" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We can discuss some related to Org mode topics""" start="00:30:51.386" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""in open-end list, just like on an ordinary forum.""" start="00:30:54.930" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How much can a single person do?""" start="00:31:01.520" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""I would like to end my talk with the call for contributions.""" start="00:31:01.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Let me explain a little bit, because you saw now I shared many""" start="00:31:08.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""many ideas and I do spend a lot of time on Org Mode. In fact,""" start="00:31:13.640" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""for the last year, I was spending like""" start="00:31:19.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""30 hours per week or something.""" start="00:31:21.323" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Until recently, I can spend a bit less, but still""" start="00:31:23.438" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""even with that much of commitment,""" start="00:31:27.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""there is no way I can handle""" start="00:31:29.901" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""everything by myself.""" start="00:31:31.480" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Contribute code!""" start="00:31:35.000" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""We really, really need more people to contribute""" start="00:31:35.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so that Org mode keeps moving forward.""" start="00:31:38.552" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Again, I just shared ideas,""" start="00:31:43.634" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but I have so many more.""" start="00:31:45.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I have more than a thousand ideas noted down.""" start="00:31:46.395" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Yeah, there's no way I can do it myself.""" start="00:31:48.735" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I do need help for new contributions, for new features.""" start="00:31:52.637" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If someone can help fixing bugs, it would be really great.""" start="00:31:57.351" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If someone knows specialized things,""" start="00:31:57.618" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""like for example Open Document Format,""" start="00:32:04.292" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""which I don't know very well, it would be""" start="00:32:06.874" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""really nice, because things like ODT export requires""" start="00:32:08.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""knowing that, and if someone already has the knowledge,""" start="00:32:13.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it would be much easier""" start="00:32:14.090" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""if that person can help with such things.""" start="00:32:18.082" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Although in the coming years,""" start="00:32:23.481" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it's very important to have""" start="00:32:26.869" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""regular contributors""" start="00:32:28.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because my life is my life""" start="00:32:28.831" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and things may happen,""" start="00:32:31.922" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so it would be nice to have some kind of backup""" start="00:32:34.364" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so that bugs keep being fixed""" start="00:32:37.245" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and things like patches being accepted""" start="00:32:40.245" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and stuff like that,""" start="00:32:40.246" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""so that some person can at least""" start="00:32:44.568" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""temporarily take on my job.""" start="00:32:46.169" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I would like to emphasize""" start="00:32:49.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""that the code contributors are the most""" start="00:32:51.511" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""important contributions for Org Mode.""" start="00:32:53.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""All other types are less important, really.""" start="00:32:56.213" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why contribute?""" start="00:33:02.080" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""I want to spend a couple of slides""" start="00:33:02.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""trying to motivate you to contribute.""" start="00:33:03.960" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you ever considered contributing""" start="00:33:07.720" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""or if you ever wished to have some""" start="00:33:11.129" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""feature in Org Mode, really don't wait, because""" start="00:33:13.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""most new features are contributed by people.""" start="00:33:16.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""They are not contributed by me.""" start="00:33:18.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I contribute a few things, but I am alone.""" start="00:33:23.737" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I cannot contribute many things.""" start="00:33:25.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Most of the things are contributed by users""" start="00:33:27.039" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""who go ahead and submit patches.""" start="00:33:30.301" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""And even in very commonly requested features,""" start="00:33:33.442" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it's usually someone who steps up.""" start="00:33:37.324" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you want something, don't wait.""" start="00:33:40.345" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Just go ahead and write to mailing list.""" start="00:33:42.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""You don't have to submit a patch immediately.""" start="00:33:44.207" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""You can just say, I am interested.""" start="00:33:46.208" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We will start from there.""" start="00:33:48.730" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We'll start because that's my job""" start="00:33:53.820" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and I will guide you through.""" start="00:33:56.044" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you have problems with Org in general,""" start="00:33:57.645" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I'll explain, because that's what I know.""" start="00:33:58.991" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I will explain how to implement things better,""" start="00:34:02.309" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but I need someone to actually do""" start="00:34:05.031" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""the job and write the code.""" start="00:34:07.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Even if you don't have 10 years experience with Elisp,""" start="00:34:10.071" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it doesn't matter. You can learn on the way.""" start="00:34:19.058" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""There are many examples of this in the""" start="00:34:21.179" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""mailing list when we start slowly,""" start="00:34:22.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""fix things one by one, and""" start="00:34:25.643" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""eventually arrive to a good quality""" start="00:34:27.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""when the person is not experienced.""" start="00:34:29.226" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""You just need to be ready to learn things,""" start="00:34:31.708" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Spend your free time (that's as usual, right?),""" start="00:34:34.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and have the interest in specific thing""" start="00:34:37.993" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""you are contributing.""" start="00:34:41.215" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Don't be afraid to be wrong.""" start="00:34:43.500" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I will be there to assist.""" start="00:34:44.476" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you don't like emails,""" start="00:34:47.579" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""if you don't like patches, it doesn't matter.""" start="00:34:48.938" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Again, you can share GitHub link. It's okay.""" start="00:34:51.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""You can go and modify some workflow directly.""" start="00:34:55.362" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""You submit the modified version. It's also okay.""" start="00:34:57.685" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It's easy for me to create patches if I need to.""" start="00:34:59.566" video="mainVideo-org-update" id="subtitle"]]
+[[!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 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"]]
+[[!template text="""it's also fine.""" start="00:35:27.089" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""The key point is that we always welcome new contributors.""" start="00:35:29.300" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""The more contributions to Org Mode is better.""" start="00:35:35.160" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Benefits for code contributors""" start="00:35:40.240" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""To increase the motivation,""" start="00:35:40.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I'll just try to show some benefits""" start="00:35:41.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""of contributing to Org Mode and free software in general.""" start="00:35:44.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It can be actually useful for your CV if you're a programmer.""" start="00:35:49.480" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It doesn't matter if it's Lisp, because you can have a pet""" start="00:35:52.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""project that demonstrates your skills, that you can finish""" start="00:35:55.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""something to a usable state.""" start="00:35:59.040" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""A pet project usually demonstrates""" start="00:36:04.360" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""that you can work alone, but it doesn't""" start="00:36:06.801" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""demonstrate anything about you working in a team, in the""" start="00:36:08.840" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""production team. When you contribute to""" start="00:36:12.120" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Libre software, look,""" start="00:36:15.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""you will work with a number of people""" start="00:36:17.630" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""who contribute and comment on your work.""" start="00:36:20.760" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""You'll have to learn a new code base.""" start="00:36:24.353" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""You will have to follow certain standards.""" start="00:36:27.074" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""All these things, by having a public record""" start="00:36:30.076" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""of contribution, will be a valid point that proves your""" start="00:36:33.240" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""knowledge in your CV. I put a small quote""" start="00:36:37.560" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""(which I'm not going to read in the interest of time)""" start="00:36:42.088" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""from Rudolf Adamkovič,""" start="00:36:44.870" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""who is describing these three points in probably a""" start="00:36:46.280" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""more expressive way.""" start="00:36:50.160" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Another benefit is you can actually get money from this.""" start="00:36:56.520" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Thanks to a number of Org Mode users who kindly contribute to""" start="00:36:59.940" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Org development, we have some amount of money""" start="00:37:04.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""coming in, and we don't hold on this money.""" start="00:37:07.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If we get another person who contributes""" start="00:37:11.010" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""to Org regularly, we are happy to share this money,""" start="00:37:13.551" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because we do know that""" start="00:37:17.512" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""getting some extra money, even a little bit,""" start="00:37:22.540" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""does improve motivation.""" start="00:37:24.600" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""We are really ready to share this.""" start="00:37:27.217" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you are serious about contributing,""" start="00:37:29.159" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""you can just request this""" start="00:37:33.524" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""and we can share a part of the donations to you.""" start="00:37:34.920" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Contributing as non-programmer""" start="00:37:41.420" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""For non-programmers, we also have a lot of work to do.""" start="00:37:41.420" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""There's a lot of stuff we can do on the Org wiki,""" start="00:37:45.200" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""especially with CSS styles,""" start="00:37:47.093" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""with updating articles,""" start="00:37:48.755" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""with adding links to tutorials,""" start="00:37:53.179" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""or even writing tutorials about Org Mode.""" start="00:37:54.881" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It would be nice to have more screencasts.""" start="00:37:56.223" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""It would be nice to improve Org manual,""" start="00:38:01.082" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because that's the most difficult part for me""" start="00:38:02.703" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""because I'm too familiar with the code.""" start="00:38:05.284" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Writing the manual when you know things internally""" start="00:38:07.326" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""is very hard. I just know too many things.""" start="00:38:11.227" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I can assume that people know too much,""" start="00:38:13.728" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""that new users have no idea about certain things.""" start="00:38:16.810" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I can just omit those without being aware.""" start="00:38:20.912" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Got no free time, but still want to help?""" start="00:38:30.440" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""The final slide I would go to come back is about""" start="00:38:30.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""donations. Again, most important is contributing code,""" start="00:38:33.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""but I do hope that donations can""" start="00:38:37.920" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""increase the number of contributors.""" start="00:38:42.880" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I don't know. I know for sure because some""" start="00:38:45.446" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""people like Timothy, who is participating in this, he did""" start="00:38:48.000" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""find the donations helpful, especially for more boring""" start="00:38:52.440" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""tasks like bug fixing and to move things""" start="00:38:55.320" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""over the long time. If you cannot contribute by other means,""" start="00:39:00.080" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""it would be appreciated to contribute money.""" start="00:39:07.836" video="mainVideo-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Thank you""" start="00:39:12.997" video="mainVideo-org-update" id="subtitle"]]</div>[[!template text="""We came to the end of my talk.""" start="00:39:12.997" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""Thank you for your attention.""" start="00:39:14.818" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""If you have any questions, please feel free to ask.""" start="00:39:16.278" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""I think we can even discuss further""" start="00:39:19.699" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""during the next Org Meetup in the coming week.""" start="00:39:22.899" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""There, if you have more detailed questions,""" start="00:39:28.181" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""we can continue discussing""" start="00:39:30.321" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""apart from what happens after this presentation.""" start="00:39:31.641" video="mainVideo-org-update" id="subtitle"]]
+
+</div><div class="transcript transcript-qanda"><a name="org-update-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""And I believe we are live. Okay. Hi again, Ihor. How are you""" start="00:00:00.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""doing? Ready to answer questions, right? Yes. Ready to""" start="00:00:05.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""answer questions and all this. I mean, ready for""" start="00:00:09.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""everything. It's not just a question, it's the maintenance""" start="00:00:13.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that is now lying in front of you. So... Oh, that's not the end""" start="00:00:15.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""of the day. I mean, it's a rare thing indeed, because you""" start="00:00:21.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""might not be able to see it on BBB. I'm checking in, but we've""" start="00:00:25.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""got Ihor, obviously, but we also have Bastien and also""" start="00:00:27.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Carsten in the room. So, we have three maintainers of Org""" start="00:00:30.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Mode right there in the room to answer all your questions.""" start="00:00:34.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""So, it's a rare occasion that I invite all of you to seize the""" start="00:00:36.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""day on this. Ihor, do you have anything maybe to say before we""" start="00:00:40.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""start moving into the questions? Well, I hope that I said""" start="00:00:44.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""everything I wanted. Hello, Bastien. during the""" start="00:00:49.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""presentation. Well, actually, I can say a lot more, like""" start="00:00:51.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""infinitely, because when I first recorded it, it was like""" start="00:00:55.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""one hour. So yeah. I mean, you did a, I'll just let you know,""" start="00:01:01.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""you did a fine job condensing everything in just 40 minutes.""" start="00:01:06.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""So congratulations on this. Yeah, it's, yeah, usually one""" start="00:01:08.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""minute per slide is the best way. Otherwise, it's something""" start="00:01:14.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that's wrong with this presentation. Right, so just moving""" start="00:01:18.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""into the question, and by the way we've got 20 minutes, we""" start="00:01:22.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""might be able to chat a little more if Bastien wants to say""" start="00:01:25.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""something as well and Carsten, you know, feel free to""" start="00:01:27.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""intervene at any point during the questions if you've got""" start="00:01:29.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""anything to contribute or our voice will just show the""" start="00:01:33.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""breeze later on. So the first question is relating to""" start="00:01:35.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""something you said about 10 minutes 34 that might speak more""" start="00:01:37.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""to you than to me.""" start="00:01:41.480" video="qanda-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is the track-changes item about the org-element parser?""" start="00:01:42.686" video="qanda-org-update" id="subtitle"]]</div>[[!template text="""Is the track changes item about the org""" start="00:01:42.686" video="qanda-org-update" id="subtitle"]]
+[[!template text="""element parser Yes, the track changes is a new library that""" start="00:01:45.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""helps to receive changes in buffers incrementally. So like""" start="00:01:51.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""you can, it has API where you can request what changes""" start="00:01:58.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""happened in buffer since last request, chunk by chunk. And""" start="00:02:03.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""in org mode, in org element parser, we do pretty much the same""" start="00:02:08.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""thing, but using timers. So this track changes library""" start="00:02:14.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""should improve things, first, because it's a bit faster,""" start="00:02:19.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""because we don't need to conjure every single change, and""" start="00:02:25.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""track changes can agglomerate changes into chunks much""" start="00:02:29.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""more efficiently. And second, it's a built-in library, so""" start="00:02:32.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it's a good idea to use built-in library when there is such an""" start="00:02:36.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""option, instead of running out our own implementation.""" start="00:02:40.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Definitely. Moving on to the second question, although I'm""" start="00:02:45.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""not sure it refers that much to what you can do.""" start="00:02:49.400" video="qanda-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Could you please keep IRC alive? I prefer it to Matrix""" start="00:02:52.665" video="qanda-org-update" id="subtitle"]]</div>[[!template text="""Could you please keep IRC alive? And I prefer it to Matrix. I mean,""" start="00:02:52.665" video="qanda-org-update" id="subtitle"]]
+[[!template text="""you did talk about IRC, right? But did we talk about phasing""" start="00:02:57.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it out? So I try to be live on IRC, but I use mobile client for""" start="00:03:03.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""IRC to keep connected. So I usually connected, I usually see""" start="00:03:08.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""messages, except certain times when I don't have mobile""" start="00:03:13.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""internet. Right. Okay. That's why many people will tell""" start="00:03:15.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""you, you need a bouncer and all this, but the IRC crowd is very""" start="00:03:19.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""loud. I just don't know a good bouncer. I don't have a good""" start="00:03:23.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""setup for a bouncer. Okay.""" start="00:03:33.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Personally, I use WeChat usually to stay connected to""" start="00:03:36.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""email. It's obviously a client for IRC, but it also allows""" start="00:03:41.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""you to, you know, you can keep it as a bouncer, but it's not in""" start="00:03:44.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Emacs. It is. I don't have a computer that is running 24""" start="00:03:47.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""hours, so. I mean, that's the thing. I do have a server to run""" start="00:03:54.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it off. All right, moving on to the third question. That is""" start="00:03:56.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""what is running 24 hours. Right. Okay. All right. Moving on""" start="00:04:02.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""to the third question.""" start="00:04:06.560" video="qanda-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there any plan for adding support for other modalities of notes like handwritten,  audio, etc.?""" start="00:04:07.988" video="qanda-org-update" id="subtitle"]]</div>[[!template text="""Is there any plan for adding support""" start="00:04:07.988" video="qanda-org-update" id="subtitle"]]
+[[!template text="""for other modalities of note-like, handwritten, audio,""" start="00:04:09.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""and et cetera? Would that be interesting to the community?""" start="00:04:11.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""It will definitely be useful for me. I didn't. Okay. So this""" start="00:04:14.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""is not the idea I hear frequently. So there's no plan for such""" start="00:04:20.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""thing. Modalities of notes like handwritten audio. I think""" start="00:04:25.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""John Kitchin did some handwritten note.""" start="00:04:29.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""John Kitchin. Yeah. And for audio, I think as well. I. So""" start="00:04:34.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""basically you can use attachments, you can use images to""" start="00:04:46.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""paste you. I think John Kitchin even use it to automatically""" start="00:04:49.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""recognize notes.""" start="00:04:54.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I think the previous speaker was talking about a whisper to""" start="00:04:58.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""recognize voice. Right.""" start="00:05:05.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Otherwise there is no special workflow and I'm not even sure""" start="00:05:10.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""what we can do to support this workflow specifically.""" start="00:05:13.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Yeah, it definitely feels like Org Mode is a good format for""" start="00:05:16.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""textual stuff, and a lot of things are textual. I mean,""" start="00:05:22.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that's the whole philosophy behind Emacs. But when it comes""" start="00:05:25.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""to voice, it feels like it's... I think the person asking the""" start="00:05:29.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""question probably needs to specify what they mean by voice.""" start="00:05:34.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Is it just raw note-taking, as Blaine mentioned in a""" start="00:05:36.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""previous talk, or is it something else? Feel free to add up to""" start="00:05:40.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the question and we'll return to it later on.""" start="00:05:43.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I think this is kind of related to drag and drop. I think you""" start="00:05:46.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""would like to be able to have an audio file and drop it in and""" start="00:05:51.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""have it translated to text. I think that would be an""" start="00:05:57.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""interesting API to do this, right? So that you can integrate""" start="00:06:00.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it into something like drag and drop. I think I'm going to""" start="00:06:03.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""talk with supporters in since overnight. So we have, I""" start="00:06:07.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""believe what constant is alluring to is the fact that not""" start="00:06:12.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""just pictures but imagine if you were bringing in an audio""" start="00:06:14.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""file maybe you could, I mean I'm not sure it would work with""" start="00:06:17.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""whisper but. transcribing it in a way and inserting it as""" start="00:06:20.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""text. Although I'm not sure how we would be able to do this,""" start="00:06:24.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""but it's an interesting idea though. It can work if you write""" start="00:06:27.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""some kind of automatic speech recognition. It's not really""" start="00:06:30.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""a job for work. If you have some library that can transform""" start="00:06:35.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""audio to text or transform image to text in Elixir, then we""" start="00:06:39.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""can happily use that library. Definitely, but I can tell you""" start="00:06:43.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that Whisper is not something that works very quickly. We do""" start="00:06:47.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""use Whisper AI to transcribe some of the talks that we""" start="00:06:50.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""broadcast during EmacsConf, and I can tell you it takes a""" start="00:06:53.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""fair while. If you have a video that lasts one minute, it's""" start="00:06:56.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""definitely going to take more than one minute to try to""" start="00:06:59.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""transcribe the video. We had to wait for a few years until it""" start="00:07:03.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""passed. Probably, but it's good to have the ID now so""" start="00:07:09.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that we are ready eventually to do this. There is the new""" start="00:07:12.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""asynchronous IP. It's called org-pending. It's work in""" start="00:07:17.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""progress. And that basically allows to defer inserting""" start="00:07:23.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""text into our buffers until later. And while it's being""" start="00:07:29.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""worked on, it will basically highlight the place where it""" start="00:07:34.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""will be inserted. And you can click on it, see the progress,""" start="00:07:37.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""and stuff like that. So this is for Babylon, but I imagine for""" start="00:07:43.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""things like voice recognition, it can also work.""" start="00:07:49.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""All right, what I suggest we do, we're going to fill the two""" start="00:07:56.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""questions that we have now, and then it'd be nice if we could""" start="00:07:59.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""hear a word from Bastien and from Carsten as well, because""" start="00:08:02.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it's rare to have all of you three in a room, and it would be""" start="00:08:05.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""nice maybe to chat a little bit about this. So quickly, with""" start="00:08:08.720" video="qanda-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: WRT IETF standardization, have you looked at Karl Voit's OrgDown?""" start="00:08:11.440" video="qanda-org-update" id="subtitle"]]</div>[[!template text="""the last two questions, with regards to IETF""" start="00:08:11.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""standardization, have you looked at Karl Voit's Orgdown?""" start="00:08:14.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""So, of course, there was a discussion on the mailing list,""" start="00:08:17.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""and there was a lot of pushback to this idea, especially to""" start="00:08:24.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""simplify the syntax. So, in short, the conclusion from""" start="00:08:28.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""there is we want the full syntax, we don't want to have things""" start="00:08:33.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""like different versus Org mode. But for the syntax, we may""" start="00:08:37.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""specify different like coverage. So for example, it's a""" start="00:08:43.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""minimal, it has a minimal support so people can, there's""" start="00:08:49.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""some parsers or apps can support just whatever curl calls""" start="00:08:53.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""fork down like level zero or level one or whatever. But the""" start="00:08:59.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""key point is, when it goes to IETF, we want to have the full""" start="00:09:04.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""syntax. We don't want to split it into pieces.""" start="00:09:10.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Makes a lot of sense. All right. And the last question we have""" start="00:09:13.120" video="qanda-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: About a year ago we discussed switching GNU documentation from texinfo to org. Do you still consider this?""" start="00:09:18.960" video="qanda-org-update" id="subtitle"]]</div>[[!template text="""for now. About a year ago, we discussed switching new""" start="00:09:18.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""documentation from texinfo to org. Do you still consider""" start="00:09:22.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""this? definitely contributed to some of the ideas about""" start="00:09:26.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""syntax. For example, the inline special blocks, I think""" start="00:09:30.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""about them with this in mind, so that, so basically, one""" start="00:09:34.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""clarity, we don't want to complicate our syntax, we don't""" start="00:09:41.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""want to have special built-in support for variable, or I""" start="00:09:46.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""don't know, function name, or all this kind of specific""" start="00:09:50.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""markup. But instead, the idea is to have some generic custom""" start="00:09:54.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""syntax. And then when it goes to software manuals, we want""" start="00:10:00.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""some like optional library that will provide certain""" start="00:10:06.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""syntax extensions, like inline special block for""" start="00:10:09.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""variables, inline special block for acronym and stuff like""" start="00:10:12.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that. Then people who want to use Org mode for manuals should""" start="00:10:15.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""be able to use that new markup to achieve what they want.""" start="00:10:21.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""That's a distant idea. But the key point is we want to keep org""" start="00:10:26.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""mode as generic syntax. We don't want to specialize it for""" start="00:10:34.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""software specifically. But generic in the sense that it can""" start="00:10:39.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""be used for software as well.""" start="00:10:43.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""All right, well thank you so much for your answer here and""" start="00:10:44.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that was very enlightening but I'd first like to give the mic""" start="00:10:50.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""to Bastien who might need to leave shortly and I just want to""" start="00:10:56.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""make sure that you get to chat a little bit Bastien because""" start="00:11:00.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it's a big thing we've had you as a maintainer for however""" start="00:11:03.560" video="qanda-org-update" id="subtitle"]]
+[[!template text="""long now? Well, officially, it was 14 years. But obviously,""" start="00:11:06.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""EHO has been doing much of the groundwork as a de facto""" start="00:11:13.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""maintainer for several years now, I believe for three or""" start="00:11:18.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""four years. And before Before IHO, there was Nicolas Goaziou,""" start="00:11:20.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""who's doing a lot of work. Also Kyle Meyer, who is still""" start="00:11:28.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""active, backporting Emacs changes. So""" start="00:11:33.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it's a relief that we can do things properly, that I didn't""" start="00:11:40.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""give up before someone could really step up. I'm glad we're""" start="00:11:46.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""doing this. And I'm glad there was so much help during the""" start="00:11:51.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""time when I was not available enough. Well, thank you,""" start="00:11:57.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Bastien. I think on behalf of the community, I think I'd like""" start="00:12:01.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""to extend a big thank you for all the work you've done""" start="00:12:05.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""throughout those 14 years. And if we pull the rope just a""" start="00:12:07.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""little more, before those 14 years, we had someone else""" start="00:12:12.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""maintaining Org Mode, well, not actually just maintaining""" start="00:12:15.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Org Mode, but also inventing it. Carsten, how are you doing?""" start="00:12:18.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I am. I'm doing fine. A really great opportunity to be here.""" start="00:12:20.880" video="qanda-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Community""" start="00:12:26.800" video="qanda-org-update" id="subtitle"]]</div>[[!template text="""First, I would like to start by indeed thanking Bastien""" start="00:12:26.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""because, I mean, he was not only maintainer after I stopped,""" start="00:12:31.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""but already during the time I was there, he was one of the key""" start="00:12:34.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""contributors who helped the project along for quite a bit.""" start="00:12:37.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""So it's an incredible investment of time and energy that""" start="00:12:40.560" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Basquiat has shown, which is really fantastic. And now I see""" start="00:12:44.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Ihor taking over with, as far as I can see, deep knowledge and""" start="00:12:48.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""all the right ideas about philosophy. So I'm really""" start="00:12:52.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""impressed. For me, this is really totally amazing because I""" start="00:12:56.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""started hacking this more than 20 years ago. And to just see""" start="00:13:00.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that there's a community that has sustained itself with the""" start="00:13:04.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""help of new maintainers for such a long time makes me""" start="00:13:07.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""extremely grateful. So thank you very much to all of you.""" start="00:13:11.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Okay, well, amazing. I mean, I'm a little flustered, I must""" start="00:13:14.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""admit, because I'm seeing three players of the community in""" start="00:13:20.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""a way that have kept me busy with very fun stuff to do with Org""" start="00:13:23.560" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Mode, and it's really amazing to see three giants of the""" start="00:13:27.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""community being able to maintain Org Mode for so long and""" start="00:13:31.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""contribute so much to it. So, again, thanks to all of you""" start="00:13:34.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""three. I must also admit that it's really amazing for me""" start="00:13:38.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that all of you three stress the importance of the community""" start="00:13:40.982" video="qanda-org-update" id="subtitle"]]
+[[!template text="""a whole lot, and I know that Bastien, you've talked about""" start="00:13:45.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""maintaining software last year at Emacs Confs, and even""" start="00:13:48.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""today, during the one-minute little chat that you did in""" start="00:13:51.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Ihor's chat, you stressed the importance of maintenance and to""" start="00:13:55.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""be future-oriented about it. I'm kind of wondering, why do""" start="00:13:59.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""you think community is so important to Org Mode in general?""" start="00:14:06.560" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Like, obviously we've talked about maintainers and we've""" start="00:14:12.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""talked about volunteers, but don't you think there's""" start="00:14:14.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""something more about community in general, about Org Mode""" start="00:14:16.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""and the fact that we are all taking notes""" start="00:14:19.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""and doing so much with it? Yeah, are you asking me?""" start="00:14:20.951" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I remember Carsten made his point during the Google talk about""" start="00:14:34.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the core idea of Org Mode, about mixing note taking and to-do""" start="00:14:40.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""manager. It was really powerful. And also in the same""" start="00:14:45.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""presentation that 98%""" start="00:14:49.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""of the features were organically developed as ideas""" start="00:14:53.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""by the community. And Ihor just said the same today""" start="00:14:57.048" video="qanda-org-update" id="subtitle"]]
+[[!template text="""in the presentation, like most of the features,""" start="00:15:00.669" video="qanda-org-update" id="subtitle"]]
+[[!template text="""not only the ideas, but also the code came from""" start="00:15:03.590" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the communities. So that's why the community is so rich.""" start="00:15:06.876" video="qanda-org-update" id="subtitle"]]
+[[!template text="""And another thing is""" start="00:15:11.351" video="qanda-org-update" id="subtitle"]]
+[[!template text="""also that I do remember. Now everyone is having kind of an open""" start="00:15:12.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""source fatigue and questions about how is it okay to be""" start="00:15:16.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""maintainer? How do you keep open source project""" start="00:15:20.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""sustainable? And I'm saying open source on purpose with""" start="00:15:24.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""this audience to see beyond just the small GNU project and""" start="00:15:28.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the small free software community. So at large, there is""" start="00:15:33.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""some sense of fatigue. I remember that the Org community""" start="00:15:36.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""right from the beginning had a reputation of being an""" start="00:15:40.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""amazing community and I think it""" start="00:15:44.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""continues to be one and I'm amazed that sometimes when I'm,""" start="00:15:48.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""you know, sometimes I'm, I have this fatigue of moderating""" start="00:15:54.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""emails from the mailing list, for example, and filtering""" start="00:15:59.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""out spam. And then I go on the list and I read some emails and I""" start="00:16:01.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""feel like, okay, this is still there. And it's really""" start="00:16:06.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""a boost of energy. I wish that this repetition outside Org Mode,""" start="00:16:09.537" video="qanda-org-update" id="subtitle"]]
+[[!template text="""outside Emacs, of being a nice welcoming,""" start="00:16:14.560" video="qanda-org-update" id="subtitle"]]
+[[!template text="""community of knowledgeable people talking of things""" start="00:16:19.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""and learning from each other that we can""" start="00:16:22.560" video="qanda-org-update" id="subtitle"]]
+[[!template text="""keep up with this pace. Yeah, maybe if I""" start="00:16:25.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""can just add to this, I think you're making an extremely""" start="00:16:30.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""important point, Pascal. I think that was really, from the""" start="00:16:32.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""beginning, something that was really special. And I think""" start="00:16:36.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the reason why we all community still works is that first me,""" start="00:16:39.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""but in particular also the two of you and more people have""" start="00:16:45.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""been able to keep up the friendly spirit in this community.""" start="00:16:49.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Because we had very few fights on the mailing list. There""" start="00:16:53.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""were a few at some point, we had a few contributors with a""" start="00:16:57.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""little bit of fights. And I remember that I, for example, had""" start="00:17:02.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""to invest a lot of time to keep that one under control, but I""" start="00:17:06.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""think it was totally worth it because as a group, as a whole, I""" start="00:17:10.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""think it was really fantastic. Our friendly people""" start="00:17:14.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""always were, and I think that has spurred all the""" start="00:17:18.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""contributions that we had. Because""" start="00:17:21.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""if you are in a toxic environment, you will""" start="00:17:22.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""not be willing to stay and to invest all their time. And if you""" start="00:17:25.543" video="qanda-org-update" id="subtitle"]]
+[[!template text="""are in an appreciative environment where people support""" start="00:17:29.708" video="qanda-org-update" id="subtitle"]]
+[[!template text="""each other, it's a completely different game. So I really""" start="00:17:32.292" video="qanda-org-update" id="subtitle"]]
+[[!template text="""think that Org Mode is a great example for open source""" start="00:17:35.192" video="qanda-org-update" id="subtitle"]]
+[[!template text="""projects that many other communities can learn from.""" start="00:17:38.567" video="qanda-org-update" id="subtitle"]]
+[[!template text="""If I may just interject for a second, because we need to go""" start="00:17:43.775" video="qanda-org-update" id="subtitle"]]
+[[!template text="""into the next chat for the live stream. But as usual, I invite""" start="00:17:52.442" video="qanda-org-update" id="subtitle"]]
+[[!template text="""you, if you're interested with the discussion, we are""" start="00:17:55.442" video="qanda-org-update" id="subtitle"]]
+[[!template text="""staying on BBB, asking questions to Bastien, to Ihor and""" start="00:17:57.525" video="qanda-org-update" id="subtitle"]]
+[[!template text="""to Carsten. So feel free to join on BBB and chat with them""" start="00:18:01.483" video="qanda-org-update" id="subtitle"]]
+[[!template text="""live. The stream will be moving on to the next chat, but we""" start="00:18:04.317" video="qanda-org-update" id="subtitle"]]
+[[!template text="""will be recording the Q&A and posting it afterwards on""" start="00:18:07.858" video="qanda-org-update" id="subtitle"]]
+[[!template text="""emacsconf. So, I'll use the opportunity to thank you again,""" start="00:18:10.567" video="qanda-org-update" id="subtitle"]]
+[[!template text="""all three, for taking part in this EmacsConf, and enjoy the""" start="00:18:13.442" video="qanda-org-update" id="subtitle"]]
+[[!template text="""discussion, and we'll see you later! Thank you, bye bye! So,""" start="00:18:18.942" video="qanda-org-update" id="subtitle"]]
+[[!template text="""yeah, what I was starting to say actually is I feel that the""" start="00:18:27.483" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Org Mode community and to the big extent the Emacs community""" start="00:18:31.275" video="qanda-org-update" id="subtitle"]]
+[[!template text="""is a bit like research in the early days when there was a bunch""" start="00:18:35.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""of enthusiasts who just exchanged mails together and tried""" start="00:18:38.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""to find out something new. And there was like no feeling of""" start="00:18:43.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""competition or too much competition at that time. Unlike""" start="00:18:49.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""now when we like we all rise for funding and stuff. So it's,""" start="00:18:52.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it's really, it's really nice to, to, to have communities""" start="00:18:58.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that has the spirit and they hope it can keep the spirit in""" start="00:19:02.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""future as well.""" start="00:19:05.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Yeah. Yeah. I thought I'm very optimistic after. So I mean,""" start="00:19:08.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""actually had not been reading the mailing list for quite a""" start="00:19:14.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""while, but I started to read it again a little while ago and I""" start="00:19:18.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""could just see you also working on it and see how everything""" start="00:19:23.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""was going. That made me extremely happy to see that and made""" start="00:19:26.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""me very proud that this is still ongoing.""" start="00:19:30.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I was interested about your point about the tables with""" start="00:19:37.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""multi-lines. My unsolicited advice is don't do it, because""" start="00:19:42.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I think it's going to be a mess. Which I think is reflected""" start="00:19:49.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""also by you saying that nobody has a good idea on how to do""" start="00:19:52.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""this. I have certainly thought about it. It is requested so""" start="00:19:56.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""often. It's requested so often that it feels like it would be""" start="00:20:01.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""nice to come out with something. The question is, it is what?""" start="00:20:04.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Yeah, that's a big question. Because I don't always ask""" start="00:20:07.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""eDocs, for example, and they do have multi line cells in""" start="00:20:11.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""tables, but that syntax is so ugly. Yes. Yeah, no, exactly. I""" start="00:20:15.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""think this is a problem and the question is, how far do you""" start="00:20:21.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""want to develop or want to be a completely full authoring""" start="00:20:28.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""system in the sense that you have all these options there""" start="00:20:33.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""because I think to me, the Org Mode tables have a specific""" start="00:20:35.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""application. They have this fast way of building""" start="00:20:40.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""something. And if I would have to go and build a hugely""" start="00:20:42.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""complicated table with different numbers of columns and""" start="00:20:46.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""columns going away and appearing further down the table, so""" start="00:20:50.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I would probably go somewhere else. So for me, this seems to""" start="00:20:53.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""be overkill. So I don't want to curb anybody's enthusiasm.""" start="00:20:56.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""But I think it's really important to keep to keep the kind of""" start="00:21:00.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""functionality that it has. It's a very easy use and quick""" start="00:21:04.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""ability to do something interesting that I think is more""" start="00:21:11.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""important. There could be reasons to not do something. So""" start="00:21:15.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""again, the thing is, we don't have a good idea. But what I know""" start="00:21:23.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""100% is that we are not going to give up the existing syntax.""" start="00:21:28.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Yeah, for sure. So even if you come up with something good,""" start="00:21:32.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the existing syntax will remain working. And if people who""" start="00:21:38.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""need to use simple tables, they should remain possible in""" start="00:21:42.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""exactly the same way. But I know many people struggle and try""" start="00:21:46.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""in LaTeX and other workarounds just to create more complex""" start="00:21:52.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""tables. So there's clearly a demand. I think this is related""" start="00:21:55.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""to the other question that you asked earlier. I think it's""" start="00:22:01.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""related to the question about the different parsers. And""" start="00:22:04.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""then, of course, the way the tables are implemented now is by""" start="00:22:06.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""basically just looking at what's around you""" start="00:22:10.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""and doing the right things with""" start="00:22:11.945" video="qanda-org-update" id="subtitle"]]
+[[!template text="""this regular expression-based part of""" start="00:22:13.485" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the parser. And you probably would have to fully use the""" start="00:22:20.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""other parts and to do all the changes in the formal structure""" start="00:22:24.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""in order to do something like this. So I have to be honest that""" start="00:22:28.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I don't understand this well enough to really have a""" start="00:22:31.560" video="qanda-org-update" id="subtitle"]]
+[[!template text="""meaningful idea about it. Not only that, we'll also need to""" start="00:22:35.560" video="qanda-org-update" id="subtitle"]]
+[[!template text="""rewrite the spreadsheet functionality because it is""" start="00:22:39.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""completely using regular expressions. Exactly. Not only""" start="00:22:42.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""idea is missing that the roadmap will be very complicated if""" start="00:22:47.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""you get there. Yeah. I mean, I do remember. Yeah, go ahead.""" start="00:22:50.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Yeah, sorry. I do remember Richard Stallman saying that""" start="00:22:57.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Org Mode was doing too much. So my answer was just, coming from""" start="00:23:03.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the inventor of Emacs, I took it as a compliment for Org Mode.""" start="00:23:09.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""But of course, that was just humor. And I agree that the""" start="00:23:14.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""simple things should keep being simple. And I like the""" start="00:23:19.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""custom syntax idea of Juan because it goes in the direction""" start="00:23:24.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""of flexibility while keeping things simple.""" start="00:23:30.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""And looking forward to what people will come up with. I like""" start="00:23:34.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the idea that you want to formalize the syntax. I think that""" start="00:23:40.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""is really very good. I'd like to also submit it. I think that""" start="00:23:44.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""would be excellent. I'm also... I think it was proposed by""" start="00:23:48.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Timothy, yeah. Initially. Okay. Yeah, that's really""" start="00:23:52.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""helpful. Pascal, are you still talking, I think? No, yeah, I""" start="00:23:57.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""just wanted to say also for the younger Emacs users, there is""" start="00:24:02.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""a lot of new things in Emacs the last five years. It has been so""" start="00:24:08.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""exciting. And I believe it's exciting for Org Mode too, the""" start="00:24:12.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""things you mentioned about track changes. uh native""" start="00:24:17.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""compilation and all that stuff that that's really good like""" start="00:24:22.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""some some performance problems that we had for org mode for""" start="00:24:25.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the agenda and stuff like that were suddenly solved by uh the""" start="00:24:29.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the crazy amazing work by Eli and emacs maintainers so""" start="00:24:33.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it's really exciting for org as well.""" start="00:24:38.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I don't know how you feel, Ihor, about this,""" start="00:24:40.458" video="qanda-org-update" id="subtitle"]]
+[[!template text="""but I know you are reading the Emacs""" start="00:24:43.567" video="qanda-org-update" id="subtitle"]]
+[[!template text="""development mailing list and keeping this is a job in""" start="00:24:45.483" video="qanda-org-update" id="subtitle"]]
+[[!template text="""itself, but it's really exciting for everyone, I guess. Not""" start="00:24:50.733" video="qanda-org-update" id="subtitle"]]
+[[!template text="""only that, I hope we can upstream org-ql, which will speed up""" start="00:24:54.775" video="qanda-org-update" id="subtitle"]]
+[[!template text="""agenda specifically even more.""" start="00:24:58.275" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Okay. I need to fly away, but it was really nice connecting""" start="00:25:00.567" video="qanda-org-update" id="subtitle"]]
+[[!template text="""and I hope everyone has a great conference. Bye-bye. It was""" start="00:25:06.983" video="qanda-org-update" id="subtitle"]]
+[[!template text="""so good to see you. Thank you again for everything that you""" start="00:25:13.900" video="qanda-org-update" id="subtitle"]]
+[[!template text="""have done. Thanks to you both. Thank you. Bye-bye. Bye-bye.""" start="00:25:16.108" video="qanda-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Off-stream Q&A""" start="00:25:28.520" video="qanda-org-update" id="subtitle"]]</div>[[!template text="""All right. Is it only the two of us now? I don't really know who""" start="00:25:28.520" video="qanda-org-update" id="subtitle"]]
+[[!template text="""else. Can you see if there's anybody else in this room? I""" start="00:25:35.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""don't know. There are like two, four, six people and Sacha is""" start="00:25:40.240" video="qanda-org-update" id="subtitle"]]
+[[!template text="""one of them, so probably five people. Oh, Sacha is here.""" start="00:25:45.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Okay. I haven't heard her say anything, but I see her in the""" start="00:25:48.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""chat. Okay. It's the same room, basically. Hi, Sacha. Oh,""" start="00:25:52.000" video="qanda-org-update" id="subtitle"]]
+[[!template text="""okay. They're also at her pad, so we may want to finish other""" start="00:25:58.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""questions, maybe, if there are some. This is just a circle.""" start="00:26:02.200" video="qanda-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""microemacs""" start="00:26:08.840" video="qanda-org-update" id="subtitle"]]</div>[[!template text="""This is just a historical question, but Carsten, I think you""" start="00:26:08.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""used microemacs back in the day.""" start="00:26:12.080" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Did that have any influence""" start="00:26:14.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""on Org? That is a really interesting question. I used""" start="00:26:17.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""microemacs as my first version of emacs, and then I stepped""" start="00:26:23.880" video="qanda-org-update" id="subtitle"]]
+[[!template text="""over to Emacs. I actually did two things at the same time. I""" start="00:26:27.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""also was working with so Awk basically, that language. I ran""" start="00:26:33.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""against walls with both Micro-Emacs and with Awk, where I had""" start="00:26:39.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the feeling I don't have enough freedom to do everything""" start="00:26:45.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""that I wanted, so I switched to Perl on one side and to Emacs on""" start="00:26:48.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the other side. That's what it was. Micro-Emacs absolutely""" start="00:26:52.840" video="qanda-org-update" id="subtitle"]]
+[[!template text="""had the function to pull me into Emacs, But it's not that I""" start="00:26:58.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""have specific microemacs features that would have""" start="00:27:02.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""triggered me to do something for Org Mode. I think that would be""" start="00:27:04.760" video="qanda-org-update" id="subtitle"]]
+[[!template text="""the answer to your question. All right, thanks.""" start="00:27:08.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Are you a user of microemacs, George? I posted the source to""" start="00:27:14.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""CompSource's Amiga in 86, and I was somewhat responsible""" start="00:27:21.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""for it being in the wild. Oh, I'm so sorry that I didn't,""" start="00:27:26.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""wasn't really aware that I made the connection to your name.""" start="00:27:31.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""No, no, no, no. We all moved on and the world is a better place.""" start="00:27:35.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Yeah. No, I actually did use it for something like, I think""" start="00:27:39.720" video="qanda-org-update" id="subtitle"]]
+[[!template text="""six years as my only admin at the time before I made the""" start="00:27:44.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""switch. No, I put it out to the list. David Lawrence ran with""" start="00:27:47.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""it and you know, that was about, that was the end of it. And I""" start="00:27:51.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""actually implemented something like fly spell for""" start="00:27:55.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""microemacs. I remember doing that at some point. Yeah, no, I""" start="00:27:57.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""don't want us to get stuck on that. I don't want us to get stuck""" start="00:28:02.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""on that, so. Yeah, yeah. Good. Thank you. Thank you for""" start="00:28:05.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Org Mode. Yeah, you're most welcome.""" start="00:28:10.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""For microemacs, actually, I also tried it once. It feels""" start="00:28:17.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""like at home after Emacs, of course, the major downside was at""" start="00:28:22.200" video="qanda-org-update" id="subtitle"]]
+[[!template text="""this point is that there is no UTF support. I think that was""" start="00:28:27.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""like, unfortunately, that that's not going to work. I""" start="00:28:33.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""think I'm also going to disconnect now. But it was really""" start="00:28:40.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""fantastic to listen to your talk. I wish you all the best. I'm""" start="00:28:43.960" video="qanda-org-update" id="subtitle"]]
+[[!template text="""sure that is a good answer. Thank you for joining, and nice to""" start="00:28:49.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""meet you. Yeah, bye. Bye.""" start="00:28:53.480" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Okay, so there are still people in the room, so if you want to""" start="00:29:00.160" video="qanda-org-update" id="subtitle"]]
+[[!template text="""ask questions, feel free to do it. I""" start="00:29:02.800" video="qanda-org-update" id="subtitle"]]
+[[!template text="""think there's one unanswered question in the etherpad""" start="00:29:10.440" video="qanda-org-update" id="subtitle"]]
+[[!template text="""also. Let me see.""" start="00:29:12.680" video="qanda-org-update" id="subtitle"]]
+[[!template text="""It's probably awkward to answer. Okay, I can answer and then""" start="00:29:18.120" video="qanda-org-update" id="subtitle"]]
+[[!template text="""probably answering the answer for this one. So there's a""" start="00:29:21.640" video="qanda-org-update" id="subtitle"]]
+[[!template text="""question about, from a person, I spent some time writing a""" start="00:29:24.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""library for myself, which involved working with Org files.""" start="00:29:28.520" video="qanda-org-update" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there/could there be a resource with which to recommend particularly well written codebases for review by others?""" start="00:29:31.920" video="qanda-org-update" id="subtitle"]]</div>[[!template text="""One thing I struggled with was finding a good source of""" start="00:29:31.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""reference code which demonstrated idiomatic usage.""" start="00:29:34.360" video="qanda-org-update" id="subtitle"]]
+[[!template text="""particularly well-written code bases for review by""" start="00:29:41.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""others? That's a good question. We have some wiki pages.""" start="00:29:46.320" video="qanda-org-update" id="subtitle"]]
+[[!template text="""I'll put it in the answer later. You can also check Org Mode's""" start="00:29:52.600" video="qanda-org-update" id="subtitle"]]
+[[!template text="""code, but usually in org-element there are good usages, and""" start="00:29:57.040" video="qanda-org-update" id="subtitle"]]
+[[!template text="""in Org export.""" start="00:30:02.400" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Otherwise, maybe something from Alphapapa, but I need to""" start="00:30:06.920" video="qanda-org-update" id="subtitle"]]
+[[!template text="""check that and probably reply later.""" start="00:30:10.280" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Otherwise, that's all. So I'm going to end this.""" start="00:30:16.167" video="qanda-org-update" id="subtitle"]]
+[[!template text="""Bye bye.""" start="00:30:52.400" video="qanda-org-update" 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%20org-update%3A%20The%20Future%20of%20Org)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/org-update-before.md b/2024/info/org-update-before.md
index f93de5d8..886b43b2 100644
--- a/2024/info/org-update-before.md
+++ b/2024/info/org-update-before.md
@@ -1,18 +1,59 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 40-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="org-update">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/2024/talks/org-update" title="The Future of Org" data-slug="org-update"><title>10:20-10:40 The Future of Org</title><rect stroke-width="3" x="109" y="15" opacity="0.8" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 20-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-org-update.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="2024-12-07T15:20:00Z" end="2024-12-07T15:40:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~10:20 AM - 10:40 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~9:20 AM - 9:40 AM CST (US/Central)<br />Saturday, Dec 7 2024, ~8:20 AM - 8:40 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~7:20 AM - 7:40 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~3:20 PM - 3:40 PM UTC <br />Saturday, Dec 7 2024, ~4:20 PM - 4:40 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~5:20 PM - 5:40 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~8:50 PM - 9:10 PM IST (Asia/Kolkata)<br />Saturday, Dec 7 2024, ~11:20 PM - 11:40 PM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~12:20 AM - 12:40 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+05:09.241 Priorities for Org maintenance
+08:11.767 Modular Org
+08:41.590 Slim down large Org libraries
+10:00.000 Upstream generic Org libraries
+11:25.400 Use modern Emacs APIs and libraries
+13:13.257 Improve Org parser APIs
+14:45.731 Improve Org babel APIs
+15:57.380 Beyond Org code and Emacs: third-party packages, apps, parsers
+16:31.200 org-contrib
+17:37.820 Org orphanage
+18:25.840 Mobile apps and parsers
+20:23.869 Long-standing syntax problems
+21:56.240 New syntax features
+23:30.503 New features I hope to see in Org
+25:54.073 Org community
+26:01.358 Org community forums - Org mailing list
+27:17.160 Org mailing list - world
+30:05.580 Contribute ideas!
+31:01.520 How much can a single person do?
+31:35.000 Contribute code!
+33:02.080 Why contribute?
+35:40.240 Benefits for code contributors
+37:41.420 Contributing as non-programmer
+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><li><a href="https://youtu.be/2RJYcqJsldY">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+<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.?
+08:11.440 Q: WRT IETF standardization, have you looked at Karl Voit's OrgDown?
+09:18.960 Q: About a year ago we discussed switching GNU documentation from texinfo to org. Do you still consider this?
+12:26.800 Community
+25:28.520 Off-stream Q&A
+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="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/org-update-nav.md b/2024/info/org-update-nav.md
index dd35300a..5cc8c69e 100644
--- a/2024/info/org-update-nav.md
+++ b/2024/info/org-update-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/gypsum">Gypsum: my clone of Emacs and ELisp written in Scheme</a>
-Next by time: <a href="/2024/talks/rust">An experimental Emacs core in Rust</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/project">Managing writing project metadata with org-mode</a>
+Next by track: <a href="/2024/talks/color">Colour your Emacs with ease</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/p-search-after.md b/2024/info/p-search-after.md
index 6850a230..a3126b30 100644
--- a/2024/info/p-search-after.md
+++ b/2024/info/p-search-after.md
@@ -1,7 +1,1024 @@
<!-- 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%20p-search%3A%20p-search%3A%20a%20local%20search%20engine%20in%20Emacs)
+<div class="transcript transcript-mainVideo"><a name="p-search-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Search in daily workflows""" start="00:00:00.000" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Hello, my name is Zachary Romero, and today I'll be going""" start="00:00:00.000" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""over p-search, a local search engine in Emacs.""" start="00:00:03.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Search these days is everywhere in software, from text editors,""" start="00:00:08.116" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""to IDEs, to most online websites. These tools tend to fall""" start="00:00:12.399" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""into one of two categories. One are tools that run locally,""" start="00:00:18.360" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""and work by matching string to text. The most common""" start="00:00:25.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""example of this is grep. In Emacs, there are a lot of""" start="00:00:31.280" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""extensions which provide functionality on top of these""" start="00:00:35.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""tools, such as projectile-grep, deadgrep,""" start="00:00:38.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""consult-ripgrep. Most editors have some sort of""" start="00:00:42.389" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""search current project feature. Most of the time,""" start="00:00:46.850" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""some of these tools have features like regular expressions,""" start="00:00:52.692" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""or you can specify file extension,""" start="00:00:56.394" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""or a directory you want to search in,""" start="00:00:59.216" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""but features are pretty limited.""" start="00:01:01.637" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""The other kind of search we use are usually hosted online,""" start="00:01:03.958" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""and they usually search a vast corpus of data.""" start="00:01:07.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""These are usually proprietary""" start="00:01:12.303" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""online services such as Google, GitHub,""" start="00:01:15.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""SourceGraph for code.""" start="00:01:18.766" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Problems with editor search tools""" start="00:01:24.200" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""The kind of search feature that editors""" start="00:01:24.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""usually have have a lot of downsides to them. For one, a lot""" start="00:01:28.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""of times you don't know the exact search string you're""" start="00:01:36.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""searching for. Some complicated term like this""" start="00:01:38.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""high volume demand partner, you know, do you know if...""" start="00:01:42.784" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Are some words abbreviated, is it capitalized,""" start="00:01:46.861" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""is it in kebab case, camel case, snake case?""" start="00:01:49.709" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""You often have to search all these variations.""" start="00:01:53.090" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Another downside is that the search results returned""" start="00:01:57.572" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""contain a lot of noise. For example,""" start="00:02:05.435" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""you may get a lot of test files.""" start="00:02:07.770" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""If the tool hits your vendor directory,""" start="00:02:10.817" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""it may get a bunch of results from libraries""" start="00:02:13.538" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""you're using, which most are not helpful. Another downside""" start="00:02:17.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""is that the order given is, well, there's no meaning to the""" start="00:02:22.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""order. It's usually just the search order that the tool""" start="00:02:26.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""happens to look in first.""" start="00:02:30.320" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Another thing is, so when you're searching, you oftentimes""" start="00:02:34.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""have to keep the state of the searches in your head. For""" start="00:02:38.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""example, you try one search, you see the results, find the""" start="00:02:41.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""results you think are relevant, keep them in your head, run""" start="00:02:46.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""search number two, look through the results, kind of""" start="00:02:49.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""combine these different search results in your head until""" start="00:02:52.520" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""you get an idea of which ones might be relevant.""" start="00:02:56.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Another thing is that the search primitives are fairly limited.""" start="00:02:59.971" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""So yeah, you can search regular expressions, but you can't""" start="00:03:04.516" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""really define complex things like, I want to search files in""" start="00:03:10.600" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""this directory, and this directory, and this directory,""" start="00:03:14.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""except these subdirectories, and accept test files, and I""" start="00:03:18.440" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""only want files with this file extension. Criteria like""" start="00:03:22.320" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that are really hard to... I'm sure they're possible in tools""" start="00:03:25.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""like grep, but they're pretty hard to construct.""" start="00:03:28.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""And lastly, there's no notion of any relevance. All the""" start="00:03:34.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""results you get back, I mean, you don't know, is the search""" start="00:03:38.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""more relevant? Is it twice as relevant? Is it""" start="00:03:42.040" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""100 times more relevant? These tools usually don't provide""" start="00:03:43.096" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""such information.""" start="00:03:52.280" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Information retrieval""" start="00:03:58.233" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""There's a field called information retrieval,""" start="00:03:58.233" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""and this deals with this exact problem.""" start="00:04:00.395" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""You have lots of data you're searching for.""" start="00:04:02.617" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""How do you construct a search query?""" start="00:04:04.719" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""How do you get results back fast? How do you""" start="00:04:09.262" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""rank which ones are most relevant? How do you evaluate""" start="00:04:09.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""your search system to see if it's getting better or worse?""" start="00:04:14.520" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""There's a lot of work, a lot of books written on the topic of""" start="00:04:20.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""information retrieval. If one wants to improve""" start="00:04:23.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""searching in Emacs, then drawing inspiration from this""" start="00:04:28.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""field is necessary.""" start="00:04:31.880" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Search engine in Emacs: the index""" start="00:04:34.296" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""The first aspect of information retrieval is the index.""" start="00:04:34.296" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""The reverse index is what search engines use to find results really fast.""" start="00:04:41.384" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Essentially, it's a map of search term""" start="00:04:46.609" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""to locations where that term is located.""" start="00:04:51.455" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""You'll have all the terms or maybe even parts of""" start="00:04:54.739" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the terms, and then you'll have all the locations where""" start="00:04:57.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""they're located. Any query could easily look up""" start="00:04:59.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""where things are located, join results together, and""" start="00:05:02.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that's how they get the results to be really fast. For this""" start="00:05:05.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""project, I decided to forgo creating an index altogether.""" start="00:05:12.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""An index is pretty complicated to maintain because""" start="00:05:19.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""it always has to be in sync. Any time you open a file and save""" start="00:05:23.760" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""it, you would have to re-index, you would have to make sure""" start="00:05:27.320" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that file is re-indexed properly. Then you have the""" start="00:05:29.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""whole issue of, well, if you're searching in Emacs,""" start="00:05:32.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""you have all these projects, this directory,""" start="00:05:36.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that directory, how do you know which? Do you always have to""" start="00:05:38.800" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""keep them in sync? It's quite a hard task to handle""" start="00:05:42.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that. Then on the other end, tools like ripgrep can""" start="00:05:47.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""search very fast. Even though they can't search maybe on the""" start="00:05:53.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""order of tens of thousands of repositories, for a local""" start="00:05:59.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""setting, they should be plenty fast enough.""" start="00:06:03.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""I benchmarked. Ripgrep, for example, is""" start="00:06:06.040" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""on the order of gigabytes per second.""" start="00:06:12.240" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Definitely, it can search a few pretty big size""" start="00:06:15.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""repositories.""" start="00:06:19.240" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Search engine in Emacs: Ranking""" start="00:06:21.757" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Next main task. We decided not to use an""" start="00:06:21.757" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""index. Next task is how do we rank search results? So there's""" start="00:06:24.800" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""two main algorithms that are used these days. The first""" start="00:06:29.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""one is tf-idf, which stands for term frequency, inverse""" start="00:06:33.440" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""target frequency. Then there's BM25, which is sort of a""" start="00:06:36.520" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""modified tf-idf algorithm.""" start="00:06:43.040" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""tf-idf: term-frequency x inverse-document-frequency""" start="00:06:43.553" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""tf-idf, without going into""" start="00:06:43.553" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""too much detail, essentially multiplies two terms. One""" start="00:06:45.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""is the term frequency, and then you multiply it by the""" start="00:06:49.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""inverse document frequency. The term frequency is a""" start="00:06:51.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""measure of how often that search term occurs. The""" start="00:06:54.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""inverse document frequency is a measure of how much""" start="00:06:58.520" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""information that term provides. If the term occurs a lot,""" start="00:07:00.800" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""then it gets a higher score in the term frequency section.""" start="00:07:06.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""But if it's a common word that exists in a lot of documents,""" start="00:07:08.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""then its inverse document frequency goes down.""" start="00:07:12.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""It kind of scores it less. You'll find that words like the,""" start="00:07:13.901" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""in, is, these really common words, since they occur""" start="00:07:20.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""everywhere, their inverse document frequency is""" start="00:07:25.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""essentially zero. They don't really count towards a""" start="00:07:29.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""score. But when you have rare words that only occur in a""" start="00:07:32.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""few documents, they're weighted a lot more. So the more""" start="00:07:35.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""those rare words occur, they boost the score higher.""" start="00:07:37.680" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""BM25""" start="00:07:41.160" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""BM25 is a modification of this. It's essentially TF, it's""" start="00:07:41.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""essentially the previous one, except it dampens out terms""" start="00:07:48.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that occur more often. Imagine you have a bunch of""" start="00:07:53.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""documents. One has a term 10 times, one has a term, that same""" start="00:07:55.440" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""term a hundred times, another has a thousand times.""" start="00:07:59.360" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""You'll see the score dampens off as the number of""" start="00:08:02.440" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""occurrences increases. That prevents any one term from""" start="00:08:06.800" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""overpowering the score. This is the algorithm I ended up""" start="00:08:10.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""choosing for my implementation. So with a plan of using a""" start="00:08:16.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""command line tool like ripgrep to get term occurrences, and""" start="00:08:21.040" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""then using a scoring algorithm like BM25 to rank the terms,""" start="00:08:29.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""we can combine this together and create a simple search""" start="00:08:36.800" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""mechanism.""" start="00:08:40.080" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Searching with p-search""" start="00:08:41.200" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Here we're in the directory for the Emacs source code.""" start="00:08:41.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Let's say we want to search for the display code. We""" start="00:08:47.440" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""run the p-search command, starting the search engine. It""" start="00:08:53.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""opens up. We notice it has three sections, the candidate""" start="00:08:58.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""generators, the priors, and the search results. The""" start="00:09:01.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""candidate generators generates the search space we're""" start="00:09:05.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""looking on. These are all composable and you can add as""" start="00:09:10.000" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""many as you want. So with this, it specifies that here""" start="00:09:14.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""we're searching on the file system and we're searching in""" start="00:09:19.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""this directory. We're using the ripgrep tool to search""" start="00:09:25.240" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""with, and we want to make sure that we're searching only on""" start="00:09:30.800" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""files committed to Git. Here we see the search results.""" start="00:09:33.360" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Notice here is their final probability. Here, notice""" start="00:09:40.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that they're all the same, and they're the same because we""" start="00:09:45.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""don't have any search criteria specified here. Suppose""" start="00:09:47.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""we want to search for display-related code. We add a""" start="00:09:50.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""query: display.""" start="00:09:55.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""So then it spins off the processes, gets the search term""" start="00:09:57.360" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""counts and calculates the new scores. Notice here that""" start="00:10:06.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the results that come on top are just at first glance appear""" start="00:10:10.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""to be relevant to display. Remember, if we compare""" start="00:10:15.760" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that to just running a ripgrep raw, notice here we're""" start="00:10:19.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""getting 53,000 results and it's pretty hard to go through""" start="00:10:25.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""these results and make sense of it.""" start="00:10:31.280" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""So that's p-search in a nutshell.""" start="00:10:34.320" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Flight AF 447""" start="00:10:41.457" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Next, I wanted to talk about the story of Flight 447.""" start="00:10:41.457" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Flight 447 going from Rio de Janeiro to Paris""" start="00:10:45.983" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""crashed somewhere in the Atlantic Ocean""" start="00:10:49.327" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""on June 1st, 2009, killing everyone on board.""" start="00:10:51.510" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Four search attempts were made to find the wreckage.""" start="00:10:54.714" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""None of them were successful, except the finding of some debris""" start="00:10:56.895" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""and a dead body. It was decided that they really wanted""" start="00:11:01.076" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""to find the wreckage to retrieve data as to why the search""" start="00:11:05.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""occurred. This occurred two years after the""" start="00:11:09.520" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""initial crash. With this next search attempt, they""" start="00:11:14.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""wanted to create a probability distribution of where the""" start="00:11:19.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""crash could be. The only piece of concrete data they had""" start="00:11:23.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""was a GPS signal from the ship at 210 containing the GPS""" start="00:11:26.760" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""location of the plane was at 2.98 degrees north, 30.59""" start="00:11:35.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""degrees west. That was the only data they had to go off of.""" start="00:11:40.240" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""So they drew a circle around that point""" start="00:11:44.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""with a radius of 40 nautical miles. They assumed that""" start="00:11:50.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""anything outside the circle would have been impossible for""" start="00:11:54.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the ship to reach. This was the starting point for""" start="00:11:57.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""creating the probability distribution of where the""" start="00:12:01.240" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""wreckage occurred. Anything outside the circle, they""" start="00:12:04.800" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""assumed it was impossible to reach.""" start="00:12:08.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""The only other pieces of data were the four failed search""" start="00:12:09.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""attempts and then some of the debris found. One thing they""" start="00:12:16.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""did decide was to look at similar crashes where control was""" start="00:12:21.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""lost to analyze where the crashes landed, compared to where""" start="00:12:26.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the loss of control started. This probability""" start="00:12:30.320" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""distribution, the circular normal distribution was""" start="00:12:37.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""decided upon. Here you can see that the center has a lot""" start="00:12:43.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""higher chance of finding the wreckage. As you go away""" start="00:12:47.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""from the center, the probability of finding the wreckage""" start="00:12:51.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""decreases a lot. The next thing they looked at was, well,""" start="00:12:55.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""they noticed they had retrieved some dead bodies from the""" start="00:13:02.320" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""wreckage. So they thought that they could calculate the""" start="00:13:05.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""backward drift on that particular day to find where the""" start="00:13:12.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""crash might've occurred. If they found bodies at a""" start="00:13:18.440" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""particular location, they can kind of work backwards from""" start="00:13:21.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that in order to find where the initial crash occurred.""" start="00:13:25.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""So here you can see the probability distribution based off of""" start="00:13:30.666" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the backward drift model. Here you see the darker colors""" start="00:13:34.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""have a higher probability of finding the location. So""" start="00:13:40.280" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""with all these pieces of data, so with that circular 40""" start="00:13:46.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""nautical mile uniform distribution, with that circular""" start="00:13:50.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""normal distribution of comparing similar crashes, as well""" start="00:13:54.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""as with the backward drift, they were able to combine all""" start="00:14:02.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""three of these pieces""" start="00:14:07.440" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""in order to come up with a final prior distribution of where""" start="00:14:08.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the wreckage occurred. So this is what the final model""" start="00:14:14.600" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""they came upon. Here you can see it has that 40 nautical""" start="00:14:19.520" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""mile radius circle. It has that darker center, which""" start="00:14:24.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""indicates a higher probability because of the""" start="00:14:29.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""crash similarity. Then here you also see along this line""" start="00:14:32.040" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""has a slightly higher probability due to the backward drift""" start="00:14:38.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""distribution.""" start="00:14:50.800" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""So the next thing is, since they had performed searches,""" start="00:14:52.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""they decided to incorporate the data from those searches""" start="00:14:56.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""into their new distribution. Here you can see places""" start="00:15:00.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""where they searched initially. If you think about it,""" start="00:15:04.760" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""you can assume that, well, if you search for something,""" start="00:15:08.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""there's a good chance you'll find it, but not necessarily.""" start="00:15:11.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Anywhere where they searched, the probability of it""" start="00:15:14.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""finding it there is greatly reduced. It's not zero because""" start="00:15:18.440" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""obviously you can look for something and miss it, but it kind""" start="00:15:22.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""of reduces the probability that we would expect to find it in""" start="00:15:26.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""those already searched locations. This is the""" start="00:15:31.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""posterior distribution or distribution after counting""" start="00:15:36.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""observations made.""" start="00:15:41.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Here we can see kind of these cutouts of where the""" start="00:15:44.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""previous searches occurred. This is the final""" start="00:15:48.760" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""distribution they went off of to perform the subsequent""" start="00:15:53.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""search. In the end, the wreckage was found at a point close to""" start="00:15:57.000" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the center here, thus validating this methodology.""" start="00:16:02.000" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Modifying priors""" start="00:16:06.771" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""We can see the power of this Bayesian search methodology""" start="00:16:06.771" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""in the way that we could take information from all the sources we had.""" start="00:16:10.333" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""We could draw analogies to similar situations.""" start="00:16:14.000" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""We can quantify these, combine them into a model,""" start="00:16:19.238" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""and then also update our model according to each observation we make.""" start="00:16:22.480" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""I think there's a lot of similarities to be drawn with""" start="00:16:27.894" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""searching on a computer in the sense that when we search for""" start="00:16:30.360" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""something, there's oftentimes a story we kind of have as to""" start="00:16:35.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""what search terms exist, where we expect to find the file.""" start="00:16:39.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""For example, if you're implementing a new feature, you'll""" start="00:16:43.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""often have some search terms in mind that you think will be""" start="00:16:46.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""relevant. Some search terms, you might think they have a""" start="00:16:49.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""possibility of being relevant, but maybe you're not sure.""" start="00:16:54.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""There's some directories where you know that they're not""" start="00:16:57.600" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""relevant. There's other criteria like, well, you know that""" start="00:17:02.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""maybe somebody in particular worked on this code.""" start="00:17:07.760" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""What if you could incorporate that information? Like, I know""" start="00:17:11.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""this author, he's always working on this feature. What if""" start="00:17:16.320" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""I just give the files that this person works on a higher""" start="00:17:21.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""probability than ones he doesn't work on? Or maybe you think""" start="00:17:25.520" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that this is a file that's committed too often. You think""" start="00:17:32.600" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that maybe the amount of times of commits it receives""" start="00:17:38.600" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""should change your probability of this file being""" start="00:17:43.440" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""relevant. That's where p-search comes in.""" start="00:17:47.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Its aim is to be a framework in order to incorporate all these""" start="00:17:52.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""sorts of different prior information into your searching""" start="00:17:57.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""process. You're able to say things like, I want files""" start="00:18:01.360" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""authored by this user to be given higher probability. I want""" start="00:18:06.000" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""this author to be given a lower priority. I know this author""" start="00:18:11.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""never works on this code. If he has a commit, then lower its""" start="00:18:13.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""probability, or you can specify specific paths, or you can""" start="00:18:18.760" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""specify multiple search terms, weighing different ones""" start="00:18:24.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""according to how you think those terms should be relevant.""" start="00:18:30.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""So with p-search, we're able to incorporate information""" start="00:18:38.920" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""from multiple sources. Here, for example, we have a prior""" start="00:18:42.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""of type git author, and we're looking for all of the files""" start="00:18:46.280" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that are committed to by Lars. So the more commits he has,""" start="00:18:52.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the higher probability is given to that file. Suppose""" start="00:18:56.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""there's a feature I know he worked on, but I don't know the""" start="00:19:01.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""file or necessarily even key terms of it. Well, with this, I""" start="00:19:04.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""can incorporate that information.""" start="00:19:09.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""So let's search again. Let's add display.""" start="00:19:12.141" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Let's see what responses we get back here. We can add""" start="00:19:16.000" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""as many of these criteria as we want. We can even specify that""" start="00:19:22.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the title of the file name should be a certain type. Let's""" start="00:19:27.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""say we're only concerned about C files. We add the file""" start="00:19:31.520" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""name should contain .c in it. With this, now we""" start="00:19:36.600" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""notice that all of the C files containing display authored""" start="00:19:45.400" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""by Lars should be given higher probability. We can""" start="00:19:51.320" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""continue to add these priors as we feel fit. The workflow""" start="00:19:56.280" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""that I found helps when searching is that you'll add""" start="00:20:02.720" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""criteria, you'll see some good results come up and some bad""" start="00:20:07.520" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""results come up. So you'll often find a pattern in those""" start="00:20:11.360" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""bad results, like, oh, I don't want test files, or this""" start="00:20:15.320" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""directory isn't relevant, or something like that. Then""" start="00:20:18.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""you can update your prior distribution, adding its""" start="00:20:22.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""criteria, and then rerun it, and then it will get different""" start="00:20:27.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""probabilities for the files. So in the end, you'll have a""" start="00:20:31.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""list of results that's tailor-made to the thing you're""" start="00:20:35.160" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""searching for.""" start="00:20:37.640" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Importance""" start="00:20:40.405" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""There's a couple of other features I""" start="00:20:40.405" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""want to go through. One thing is that each of these priors,""" start="00:20:41.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""you can specify the importance. In other words, how""" start="00:20:49.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""important is this particular piece of information to your""" start="00:20:55.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""search? So here, everything is of importance medium. But""" start="00:21:01.120" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""let's say I really care about something having the word""" start="00:21:05.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""display in it. I'm going to change its importance.""" start="00:21:07.880" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""Instead of medium, I'll change its importance to high.""" start="00:21:12.680" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""What that does essentially is things that don't have""" start="00:21:18.600" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""display in it are given a much bigger penalty and things with""" start="00:21:23.280" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the word display in it are rated much higher.""" start="00:21:28.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""With this, we're able to fine-tune the results that we get.""" start="00:21:28.129" video="mainVideo-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Complement or inverse""" start="00:21:38.560" video="mainVideo-p-search" id="subtitle"]]</div>[[!template text="""Another thing you can do is that you can add the complement or""" start="00:21:38.560" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the inverse of certain queries. Let's say you want to""" start="00:21:45.640" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""search for display, but you don't want it to contain the word""" start="00:21:49.760" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""frame. With the complement option on, when we create this""" start="00:21:53.240" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""search prior, now it's going to be searching for frame, but""" start="00:21:58.040" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""instead of increasing the search score, it's going to""" start="00:22:01.840" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""decrease it if it contains the word frame.""" start="00:22:04.960" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""So here, things related to frame are kind of""" start="00:22:07.000" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""deprioritized. We can also say that we really don't want""" start="00:22:14.320" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""the search to contain the word frame by increasing its""" start="00:22:18.080" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""importance. So with all these composable pieces, we can""" start="00:22:21.600" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""create kind of a search that's tailor-made to our needs.""" start="00:22:27.200" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""That concludes this talk. There's a lot more I could talk""" start="00:22:33.413" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""about with regards to research, so definitely follow the""" start="00:22:35.760" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""project if you're interested. Thanks for watching, and I""" start="00:22:37.800" video="mainVideo-p-search" id="subtitle"]]
+[[!template text="""hope you enjoy the rest of the conference.""" start="00:22:40.640" video="mainVideo-p-search" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+<div class="transcript transcript-qanda"><a name="p-search-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""...starting the recording here in the chat, and I see some""" start="00:00:00.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""questions already coming in. So thank you so much for your""" start="00:00:03.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""talk, Zac, and I'll step out of your way and let you field""" start="00:00:06.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""some of these questions.""" start="00:00:09.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Sounds good. All right, so let's see. I'm going off of the""" start="00:00:10.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""question list.""" start="00:00:22.000" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think a reduced version of this functionality could be integrated into isearch?""" start="00:00:22.970" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""So the first one is about having reduced""" start="00:00:22.970" video="qanda-p-search" id="subtitle"]]
+[[!template text="""version of the functionality integrated into iSearch. So""" start="00:00:25.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""yeah, with the way things are set up, it is essentially a""" start="00:00:32.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""framework. So""" start="00:00:37.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you can create a candidate. So just a review from the talk. So""" start="00:00:42.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you have these candidate generators which generate search""" start="00:00:46.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""candidates. So you can have a file system candidate which""" start="00:00:49.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""generates these file documents, which have text content in""" start="00:00:54.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""them. In theory, you could have like a website candidate""" start="00:00:58.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""generator, and it could be like a web crawler. I mean, so""" start="00:01:01.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""there's a lot of different options. So one option, it's on my""" start="00:01:06.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""mind, and I hope to get to this soon, is create a defun, like a""" start="00:01:10.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""defun candidate generator. So basically it takes a file,""" start="00:01:15.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""splits it up into like defunds, kind of like just like what""" start="00:01:18.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""iSearch would do. and then use each of those, the body of""" start="00:01:22.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""those, as a content for the search session. So, I mean,""" start="00:01:26.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""essentially you could just, you could start up a session,""" start="00:01:30.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and there's like programmatic ways to start these up too. So""" start="00:01:35.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you could, if such a candidate generator was created, you""" start="00:01:39.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""could easily, and just like, you know, one command. Get the""" start="00:01:42.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""defunds, create a search session with it, and then just go""" start="00:01:49.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""straight to your query. So, definitely, something""" start="00:01:54.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just like this is in the works. And I guess another thing is""" start="00:02:01.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""interface.""" start="00:02:06.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""The whole dedicated buffer is helpful for searching, but""" start="00:02:08.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""with this isearch case, there's currently not a way to have a""" start="00:02:17.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""reduced UI, where it's just like, OK, I have these function""" start="00:02:21.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""defuns for the current file. I just want them to pop up at the""" start="00:02:27.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""bottom so I can quickly go through it. So currently, I don't""" start="00:02:32.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""have that. But such a UI is definitely, yeah, thinking about""" start="00:02:35.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""how that could be done.""" start="00:02:41.200" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Any idea how this would work with personal information like Zettlekastens?""" start="00:02:45.360" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Alright, so yeah. So next question. Any idea how this""" start="00:02:45.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""will work with personal information like Zettelkasten?""" start="00:02:50.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""So this is, this is like, I mean, it's essentially usable as""" start="00:02:52.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""is with Zettelkasten method. So, I mean, that I mean""" start="00:02:58.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""basically what like for example org-roam, and I think other""" start="00:03:04.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""ones like Denote, they put all these files in the""" start="00:03:08.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""directory, and so with the already existing file system""" start="00:03:12.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""candidate generator all you'd have to do is set that to be the""" start="00:03:15.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""directory of your Zettelkasten system and then it would""" start="00:03:19.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just pick up all the files in there and""" start="00:03:23.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""then add those as search candidates. So you could easily""" start="00:03:26.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just search whatever system you have.""" start="00:03:28.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Based off of the ways it's set up, if you had maybe your""" start="00:03:33.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""dailies you didn't want to search, it's just as easy to add a""" start="00:03:36.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""criteria saying, I don't want dailies to be searched. Like""" start="00:03:41.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""give, like just eliminate the date, like the things from the""" start="00:03:44.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""daily from the sub directory. And then there you go. you have""" start="00:03:47.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""your Zettelkasten search engine, and you could just copy""" start="00:03:51.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the, you know, there's, I mean, I need, I'm working on""" start="00:03:57.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""documentation for this to kind of set this up easily, but,""" start="00:04:00.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you know, you could just create your simple command, just""" start="00:04:03.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like, your simple command, just like, just take in a text""" start="00:04:06.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""query, run it through the system, and then just get your""" start="00:04:10.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""search results right there. So yeah, definitely that is a""" start="00:04:14.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""use case that's on top of my mind.""" start="00:04:19.600" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How good does the search work for synonyms especially if you use different languages?""" start="00:04:22.041" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""So next one, how good does a""" start="00:04:22.041" video="qanda-p-search" id="subtitle"]]
+[[!template text="""search work for synonyms, especially if you use different""" start="00:04:23.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""languages? Okay, this is a good question because with the""" start="00:04:26.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""way that VM25 works, it's essentially just like trying to""" start="00:04:30.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""find where terms occur and just counts them up.""" start="00:04:34.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I mean, this is something I couldn't get into. There's just""" start="00:04:41.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""too much on the topic of information retrieval to kind of go""" start="00:04:44.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""into this, but there is a whole kind of field of just like, how""" start="00:04:46.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""do you, given a search term, how do you know what you should""" start="00:04:52.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""search for? So like popular kind of industrial search""" start="00:04:58.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""engines, like they have kind of this feature where you can""" start="00:05:02.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like define synonyms, define, term replacement. So""" start="00:05:07.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""whenever you see this term, it should be this. And it even""" start="00:05:11.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""gets even further.""" start="00:05:14.080" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Plurals""" start="00:05:15.092" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""If someone searches for a plural string,""" start="00:05:15.092" video="qanda-p-search" id="subtitle"]]
+[[!template text="""how do you get the singular from that and search for that? So""" start="00:05:19.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""this is a huge topic that currently p-search doesn't""" start="00:05:22.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""address, but it's on the top of my mind as to how. So that's one""" start="00:05:27.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""part.""" start="00:05:33.520" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Different languages""" start="00:05:33.883" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""The next part is for different languages, one thing""" start="00:05:33.883" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that kind of seems like it's promising is vector search,""" start="00:05:39.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""which, I mean, with the way p-search is set up, you could""" start="00:05:42.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""easily just create a vector search prior, plug it into the""" start="00:05:47.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""system, and start using it. The only problem is that kind of""" start="00:05:51.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the vector search functions, like you have to do like cosine""" start="00:05:54.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""similarity, like if you have like 10,000 documents, If""" start="00:05:58.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you're writing Elisp to calculate the cosine similarity""" start="00:06:03.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""between the vectors, that's going to be very slow. And so now""" start="00:06:06.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the whole can of worms of indexing comes up. And how do you do""" start="00:06:09.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that? And is that going to be native elisp? And so that's a""" start="00:06:14.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""whole other can of worms. So yeah, vector search seems""" start="00:06:17.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""promising. And then hopefully maybe other traditional""" start="00:06:21.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""synonyms, stemming, that kind of stuff for alternate""" start="00:06:25.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""terms, that could also be incorporated.""" start="00:06:33.440" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: When searching by author I know authors may setup a new machine and not put the exact same information. Is this doing anything to combine those into one author?""" start="00:06:40.200" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Okay, next one. When searching by author, I know authors may""" start="00:06:40.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""set up a new machine and not put the exact same information.""" start="00:06:43.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Is this doing anything to combine these two in one author?""" start="00:06:47.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Okay, so for this one, it's not. So it's like the way the get""" start="00:06:49.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""prior is currently set up is that it just does like a get""" start="00:06:54.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""command to get all the get authors. You select one and then it""" start="00:06:58.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just uses that. But the thing is, is if you knew the two emails""" start="00:07:02.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that user might have used, the two usernames, you could just""" start="00:07:07.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""set up the""" start="00:07:12.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""two priors. One for the old user's email, and then just add""" start="00:07:14.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""another prior for the new user's email. And then that would""" start="00:07:19.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""be a way to just get both of those set up. So that's kind of a""" start="00:07:24.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""running theme throughout p-search is that It's made to be""" start="00:07:29.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""very flexible and very kind of like Lego block ish kind of""" start="00:07:32.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like you can just, you know, if you need, you know, if""" start="00:07:36.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""something doesn't meet your needs, you know, it's easy to""" start="00:07:39.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""put pieces in, create new components of the search""" start="00:07:41.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""engine. Let's see, a cool powerful grep &quot;Rak&quot; to maybe have""" start="00:07:45.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""some good ideas. I have searches record code while""" start="00:07:51.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""searching. Okay. So. Okay, that's interesting. I'll have""" start="00:07:58.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""to look into this""" start="00:08:04.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""tool. I haven't seen that. I do kind of keep my eyes out for""" start="00:08:05.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""these kind of things. One thing I have seen that was kind of""" start="00:08:15.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that, I mean, looked interesting was kind of like AST, like""" start="00:08:18.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the treesitter, the treesitter grep tools. But like, you""" start="00:08:24.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""can grep for a string in the language itself. So that's""" start="00:08:29.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""something I think would be cool to implement either,""" start="00:08:35.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""because I mean, there's treesitter in Emacs, so it's""" start="00:08:37.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""possible to do a new list. If not, there are those kind of like""" start="00:08:41.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""treesitter. So that's, that's something that I think would""" start="00:08:44.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""be cool to incorporate.""" start="00:08:47.720" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you thought about integrating results from using cosine similarity with a deep-learning based vector embedding?""" start="00:08:50.720" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Let's see. Have you thought about integrating results from""" start="00:08:50.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""using cosine similarity with a deep learning based vector""" start="00:08:58.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""embedding? Yeah, exactly. So yeah, this kind of goes back to""" start="00:09:01.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the topic before it. Definitely the whole semantic search""" start="00:09:06.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""with vector embeddings, that's something that, I mean, it""" start="00:09:09.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""would be actually kind of trivial to implement that in""" start="00:09:12.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""p-search. But like I said, computing the cosine similarity""" start="00:09:15.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""in elisp, it's probably too slow.""" start="00:09:20.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""And then also there's a whole question of how do you get the embeddings?""" start="00:09:25.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Like, how do you get the system running locally on your""" start="00:09:34.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""machine if you want to run it that or, I mean, so that's""" start="00:09:36.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""actually another kind of aspect that I need to look into.""" start="00:09:41.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Okay, so let's see.""" start="00:09:48.880" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is it possible to save/bookmark searches or search templates so they can be used again and again?""" start="00:10:01.940" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Okay, next question. Let's see. I'm sorry if this has been""" start="00:10:01.940" video="qanda-p-search" id="subtitle"]]
+[[!template text="""covered. Is it possible to save/bookmark searches or search""" start="00:10:06.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""templates so they can be used again and again? Exactly. So""" start="00:10:09.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just recently I added bookmarking capabilities. So""" start="00:10:14.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you can essentially just bookmark whatever search session you""" start="00:10:18.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""have. And yeah, and it's just, it was just a bookmark. You can""" start="00:10:21.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just open and just like reopen that, rerun that search from""" start="00:10:26.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""where you left off. So there's that. And then also, I tried to""" start="00:10:29.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""set this up so that there is a one-to-one mapping of a Lisp""" start="00:10:36.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""object to the search session. So from every search session""" start="00:10:40.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you make, you should be able to get a, there's a command to do""" start="00:10:44.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""this, to get a data representation of the search. So it would""" start="00:10:49.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just be like some plist. All you have to do is just take that""" start="00:10:55.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""plist, call this function p-search-setup-buffer with that""" start="00:11:00.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""data. And then that function should set up the session as you""" start="00:11:04.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""left off. So then like, you know, you could make your""" start="00:11:09.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""commands easy. You can make custom search commands super""" start="00:11:12.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""easy. You just get the data representation of that search,""" start="00:11:15.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""find what pieces you want the user to be able to, you know, the""" start="00:11:18.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""search term, make that a parameter in the""" start="00:11:22.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""command, in the interactive code. So you'd have like""" start="00:11:26.334" video="qanda-p-search" id="subtitle"]]
+[[!template text="""print on top and then there you go. You have,""" start="00:11:29.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you have a command to do the search""" start="00:11:31.907" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just like just right there. So, so""" start="00:11:34.328" video="qanda-p-search" id="subtitle"]]
+[[!template text="""there's a lot of those things and there's a lot more that""" start="00:11:35.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""could be done. Like maybe having, you know, there's kind of""" start="00:11:38.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""in the works and like thinking about having groups of groups""" start="00:11:41.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of these things, like maybe you can set up like, Oh, I always""" start="00:11:45.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""add these three criteria together. So I, you know, maybe I""" start="00:11:48.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""can make a preset out of these and make them easy, easily""" start="00:11:51.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""addable. So yeah. A lot of things like that are, you know, I'm""" start="00:11:54.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""thinking about a lot of things about that, so.""" start="00:11:58.080" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: You mentioned about candidate generators. Could you explain about to what the score is assigned to?""" start="00:12:02.800" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Okay, so next question. You mentioned about candidate""" start="00:12:02.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""generators. Could you explain about what the score is""" start="00:12:06.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""assigned to? Is this to a line or whatever the candidate""" start="00:12:08.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""generates? How does it work with our junior demo? Okay,""" start="00:12:12.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""yeah, so this is a, this is, so actually I had to implement, I""" start="00:12:17.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""had to rewrite p-search just to get this part right. So the""" start="00:12:21.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""candidate generator generates documents. Documents have""" start="00:12:26.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""properties. So the most notable property is the content""" start="00:12:31.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""property. So essentially what happens is that when you""" start="00:12:36.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""create a file system candidate generator and give it a""" start="00:12:40.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""directory, the code goes into the directory, kind of""" start="00:12:42.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""recursively goes through all the directories, and""" start="00:12:45.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""generates a candidate, which is just like a simple list""" start="00:12:49.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""form. It's saying, this is a file, the file path is this. So""" start="00:12:51.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that's the document ID. So this is saying, this is a file,""" start="00:12:55.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""it's a file, and its file path is this. And so from that, you""" start="00:13:00.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""get all of the different properties, the sub properties. If""" start="00:13:05.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you're given that, you know how to get the content. If you're""" start="00:13:09.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""given that, you know how to... So all these properties come""" start="00:13:11.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""out. And then also the candidate generator is the thing that""" start="00:13:15.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""knows how best to search for the terms. So for example, there""" start="00:13:18.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""is a buffer candidate generator. What that does is it just""" start="00:13:25.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""puts all your buffers as search candidates. So obviously""" start="00:13:29.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you can't, you can't run ripgrep on buffers like you can't you""" start="00:13:34.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""can't do that, you can't run ripgrep on just like yeah just""" start="00:13:37.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just like buffers that don't have files attached or, for""" start="00:13:41.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""example, maybe there's like an internet search candidate""" start="00:13:44.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""generator, like a web crawler thing. You just imagine it""" start="00:13:47.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""goes to a website, kind of crawls all the links and all that,""" start="00:13:51.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and then just gets your web pages for the candidates.""" start="00:13:55.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Obviously, you can't use ripgrep for that either. So, every""" start="00:13:58.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""candidate generator knows how best to search for the terms""" start="00:14:01.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of what candidate it's generating. So, the file system""" start="00:14:04.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""candidate generator will say, okay, I have a base""" start="00:14:08.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""directory. So, if you ask me, the file system candidate""" start="00:14:12.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""generator, how to get the terms, it knows it's set up to use""" start="00:14:17.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""ripgrep. And so, it runs ripgrep, and so then it goes""" start="00:14:21.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""through, it runs the command, gets the counts, and then""" start="00:14:25.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""store those counts. So, the lines have nothing. At this""" start="00:14:29.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""point, the lines have nothing. There's no notion of lines at""" start="00:14:32.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""all. It's just document, document ID with the amount of""" start="00:14:36.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""times it matched. And that's all you need to run this BM25""" start="00:14:40.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""algorithm. But then when you get the top results, you""" start="00:14:43.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""obviously want to see the lines that matched. And so there's""" start="00:14:47.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""another thing, another method to kind of get the exact""" start="00:14:51.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""thing, to kind of match out the particular lines. And so""" start="00:14:56.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that's a separate mechanism. And that can be done in Elist,""" start="00:15:00.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""because if you're not displaying, that's kind of a design""" start="00:15:03.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""decision of P-Search, is that it only displays like maybe 10""" start="00:15:05.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""or 20. It doesn't display all the results. So you can have""" start="00:15:09.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Elist just go crazy with just like highlighting things,""" start="00:15:12.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""picking the best kind of pieces to show. So yeah, that's how""" start="00:15:16.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that's set up.""" start="00:15:22.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""So, here's perhaps a good moment for me to just jump in and""" start="00:15:27.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""comment that in a minute or so we will break away with the live""" start="00:15:38.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""stream to give people an hour of less content to make sure""" start="00:15:42.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""everybody goes and takes their lunch and break a little bit.""" start="00:15:47.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""But if you would like to keep going in here, Love to love to""" start="00:15:50.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""take as many questions. And, of course, we will include""" start="00:15:55.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that all when we publish the Q and A. Sounds good. Yeah, I'll go""" start="00:15:59.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and stick around on the stream as we cut away, as we've got a""" start="00:16:06.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""little video surprise we've all prepared to play, just some""" start="00:16:12.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""comments from an Emacs user dated in 2020 or something like""" start="00:16:16.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""this. I forget the detail. Thank you again so much, Zac, for""" start="00:16:19.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""your fascinating talk.""" start="00:16:29.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, so, okay.""" start="00:16:30.960" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: easy filtering with orderless - did this or something like this help or infulce the design of psearch?""" start="00:16:32.302" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""This makes me really think about the""" start="00:16:32.302" video="qanda-p-search" id="subtitle"]]
+[[!template text="""emergent workflows with Denote and easy filtering with""" start="00:16:33.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""orderless.""" start="00:16:36.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Did this or something like this help influence the design of""" start="00:16:36.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""p-search? Yeah, exactly. So, I mean, yeah, I mean, there's""" start="00:16:42.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just so many different searches. Like, it's just kind of""" start="00:16:47.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""mind-boggling. Like, you could search for whatever you want""" start="00:16:49.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""on your computer. Like, there's just so much, like, you""" start="00:16:52.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""can't, yeah, you can't just like, you can't just like hard""" start="00:16:54.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""code any of these things. It's all malleable. Like maybe""" start="00:17:01.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""somebody wants to search these directories. And so, yeah,""" start="00:17:04.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like""" start="00:17:09.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""exactly like that use case of having a directory of files""" start="00:17:10.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""where""" start="00:17:18.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""they contain your personal knowledge management system.""" start="00:17:18.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, that use case definitely was at the top of my mind.""" start="00:17:25.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:17:33.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Let's see, so Git covers the multiple names thing itself.""" start="00:17:35.880" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Notmuch with the p-search UI""" start="00:17:56.960" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Okay, yeah,""" start="00:17:56.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""so something about notmuch with p-search UI. Actually,""" start="00:18:00.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""interestingly, I think notmuch is, I haven't used it""" start="00:18:09.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""myself, but that's the, email something about yeah so i mean""" start="00:18:16.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""this is like these things are just like these these kind of""" start="00:18:22.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""extensions could kind of go go forever but one thing i""" start="00:18:25.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""thought about is like i use mu4e for email""" start="00:18:30.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and that uses a full-fledged index. And so having""" start="00:18:33.370" video="qanda-p-search" id="subtitle"]]
+[[!template text="""some method to kind of reach into these different systems""" start="00:18:41.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and kind of be kind of like a front end for this.""" start="00:18:44.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Another thing is maybe SQL database.""" start="00:18:47.939" video="qanda-p-search" id="subtitle"]]
+[[!template text="""You can create a candidate generator from a SQLite query""" start="00:18:52.001" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and then... yeah...""" start="00:18:55.824" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I've had tons of ideas of different things you could""" start="00:19:02.583" video="qanda-p-search" id="subtitle"]]
+[[!template text="""incorporate into the system. Slowly,""" start="00:19:05.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""they're being implemented. Just recently, I implemented""" start="00:19:09.560" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Info""" start="00:19:13.600" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""an info file candidate generator. So it lists out all the""" start="00:19:13.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""info files, and then it creates a candidate for each of the""" start="00:19:17.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""info nodes. So it turns out, yeah, I mean, it works pretty, I""" start="00:19:21.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""mean, just as well as Google. So I'm up for my own testing.""" start="00:19:26.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Let's see, you can search a buffer using ripgrep feeding in""" start="00:19:32.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""as standard in to the ripgrep process, can't you? Yep, yeah,""" start="00:19:40.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you can definitely search a buffer that way. So, yeah, I""" start="00:19:44.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""mean, based off of I mean, if this, yeah, so one thing that""" start="00:19:50.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""came up is that the system wants, I mean, I wanted the system""" start="00:19:56.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""to be able to search a lot of different things. And so it came""" start="00:19:59.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""up that I had, you know, implementing,""" start="00:20:03.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""doing these search things, having an Elist""" start="00:20:06.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""implementation, despite it being slow, would be""" start="00:20:10.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""necessary. So like anything that isn't represented as a""" start="00:20:13.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""file, Elisp, there's a mechanism in p-search to search for""" start="00:20:17.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""it.""" start="00:20:21.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""So, yeah, so having that redundancy kind of lets you get into""" start="00:20:23.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the, you know, using kind of ripgrep for the big scale""" start="00:20:29.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""things. But then when you get to the individual file, you""" start="00:20:32.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""know, just going back to Elisp to kind of get the finer""" start="00:20:37.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""details seems to, you know, seems to end up working pretty""" start="00:20:41.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""well.""" start="00:20:47.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Thank you all for listening. Yeah, sounds like we're about""" start="00:21:04.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""out of questions. Hi, Zacc. I have a question or still a""" start="00:21:27.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""question. I just want to thank everybody one more time for""" start="00:21:31.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""their participation, especially you for speaking, Zack. I""" start="00:21:34.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""look forward to playing with p-search myself. Thank you.""" start="00:21:37.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, there might be one last question. Is there someone?""" start="00:21:41.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yes, there is. I don't know if you can understand me, but""" start="00:21:44.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""thank you for making this lovely thing""" start="00:21:48.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I feel inspired to try it out and I'm thinking about how to""" start="00:21:50.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""integrate it because it sounds modular and nicely thought""" start="00:21:57.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""out. One small question. Have you thought about Project L""" start="00:22:04.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""integration? And then I have a little bigger question about""" start="00:22:09.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the interface.""" start="00:22:13.720" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""project.el integration""" start="00:22:14.880" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Yeah, project.el integration, it's used in a couple of ways.""" start="00:22:14.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""It's kind of used to kind of as like kind of like a default.""" start="00:22:20.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""This is the directory I want to search for the default""" start="00:22:25.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""p-search command. It does, yeah, it kind of goes off of""" start="00:22:31.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""project.el. If there is a project, it kind of says, okay, this,""" start="00:22:33.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I want to search this project. And so it kind of, it used that""" start="00:22:37.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""as a default. So there's that. Because I use the project-grep""" start="00:22:40.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""or git-grep search a lot and maybe this is a better solution to""" start="00:22:46.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the search and the interface you have right now for the""" start="00:22:50.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""search results.""" start="00:22:55.320" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How happy are you with the interface?""" start="00:22:56.477" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""How happy are you with it and have you""" start="00:22:56.477" video="qanda-p-search" id="subtitle"]]
+[[!template text="""thought about improving or have you ideas for""" start="00:22:58.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""improvements? Yeah, well actually what you see in the demo""" start="00:23:02.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""in the video isn't... There's actually, there is an""" start="00:23:06.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""improvement in the current code. Basically, what it""" start="00:23:09.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""does is it scans there's the current default as it scans""" start="00:23:13.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the entire file for all of the searches.""" start="00:23:17.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""It finds the window that that has the highest score. So it kind""" start="00:23:20.055" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of goes through entire file and just says... And it kind of finds""" start="00:23:25.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like the piece of the section of text that has the most""" start="00:23:29.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""matches with the terms that score the best. So it's, I mean,""" start="00:23:33.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that section is pretty good. I mean, that, so yeah, that,""" start="00:23:37.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that ends up working pretty well. So I mean, in terms of other""" start="00:23:40.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""UI stuff, there's, there's tons, there's tons more that""" start="00:23:44.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""could be done, like, especially like debug ability or like""" start="00:23:46.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""introspection. Like, so this, this result, like, for""" start="00:23:50.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""example, this result ranks really high. Maybe you don't""" start="00:23:53.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""know why though. It's like, because of this, this text query""" start="00:23:57.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""arrow, was it because of this criteria? I think""" start="00:24:01.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""there's some UI elements that could kind of help the user""" start="00:24:04.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""understand why results are scoring high or low. So that's""" start="00:24:09.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""definitely... And that makes a lot of sense to me. You know, a""" start="00:24:12.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""lot of it is demystifying, like understanding what you're""" start="00:24:15.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""learning better and not just finding the right thing. A lot""" start="00:24:19.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of it is, you know, kind of exploring your data. I love that.""" start="00:24:22.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Thanks. Okay. I'm not trying to hurry us through either by""" start="00:24:26.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""any stretch. I would be happy to see this be a conversation.""" start="00:24:31.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I also want to be considerate of your time. And I also wanted to""" start="00:24:36.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""make a quick shout out to everybody who's been updating and""" start="00:24:42.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""helping us capture the questions and the comments and the""" start="00:24:45.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""etherpad. That's just a big help to the extent that people""" start="00:24:50.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""are jumping in there and you know, revising and extending""" start="00:24:53.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and just doing the best job we can to capture all the""" start="00:24:57.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""thoughtful remarks.""" start="00:24:59.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, thank you, Zac. I'm not too sure what to ask anymore,""" start="00:25:00.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""but yes, would love to try it out now. Yeah, I mean,""" start="00:25:14.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""definitely feel free to...""" start="00:25:20.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""any feedback, here's my mail, or issues...""" start="00:25:22.077" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I mean I'm happy to get any any feedback. It's""" start="00:25:25.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""still in the early stages, so still kind of a lot of""" start="00:25:29.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""documentation that needs to be writing. There's a lot.""" start="00:25:31.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""There's a lot on the roadmap, but yeah, I mean, hopefully, I""" start="00:25:35.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""could even publish this to ELPA and have a nice""" start="00:25:38.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""manual so yeah hopefully yeah those come soon. Epic.""" start="00:25:42.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""That sounds great, yes.""" start="00:25:47.728" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""gptel""" start="00:25:50.280" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""The ability to save your searches kind of reminds me of like""" start="00:25:50.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the gptel package for the AI, where you can save searches,""" start="00:25:59.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""which makes it feel a lot more different. And yeah, we don't""" start="00:26:05.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""have something for that with search, but yeah, that's a""" start="00:26:10.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""whole different dynamic where it's like, okay, yeah, and""" start="00:26:14.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""makes it a unique tool that is, I guess would be unique to""" start="00:26:19.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Emacs where you don't see that with like this AI package""" start="00:26:24.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""where the gptel is kind of unique because it's not just throw""" start="00:26:28.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""away. It's how did I get this? How did I search for it? And be an""" start="00:26:31.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""organic search, kind of like the orderless and vertico""" start="00:26:37.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and...""" start="00:26:40.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, that's a good, I mean, that brings me to another thing""" start="00:26:43.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""in that, so,""" start="00:26:46.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I mean, you could easily...""" start="00:26:48.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you could create bridges from p-search to these different""" start="00:26:53.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""other packages, like, for example, kind of a RAG search,""" start="00:26:57.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like there's this RAG, there's this thing called a RAG""" start="00:27:01.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""workflow, which is kind of popular these days. It's like""" start="00:27:04.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""retrieval augmented generation. So, you do a search and""" start="00:27:06.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""then based off the search results you get, then you pass""" start="00:27:11.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""those into LLM. So, the cool thing is that like you could use""" start="00:27:14.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""p-search for the retrieval. And so you could even like, I""" start="00:27:20.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""mean, you could even ask an LM to come up with the search terms""" start="00:27:25.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and then have it search. There's no""" start="00:27:28.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""programmatical interface now to do this exact workflow.""" start="00:27:32.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""But I mean, there's another kind of direction I'm starting""" start="00:27:35.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""to think about. So like you could have maybe""" start="00:27:39.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""a question answer kind of workflow where it does""" start="00:27:43.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like an initial search for the terms and then you get the top""" start="00:27:47.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""results and then you can put that through maybe gptel or all""" start="00:27:51.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""these other different systems. So that's, and that seems""" start="00:27:57.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like a promising thing. And then another thing is like,""" start="00:27:59.760" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Saving a search""" start="00:28:01.480" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""well, you mentioned the ability to save a search.""" start="00:28:01.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""One thing I've noticed""" start="00:28:10.595" video="qanda-p-search" id="subtitle"]]
+[[!template text="""kind of like with the DevOps workflows is, I'll write a""" start="00:28:11.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""CLI command that I do, or like a calculator command. Then I end""" start="00:28:15.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""up in the org mode document, write what I wrote, had the""" start="00:28:20.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""results in there, and then I'll go back to that.""" start="00:28:24.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""It's like, oh, this is why, this is that calculation I did""" start="00:28:26.944" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and this is why I did it.""" start="00:28:31.967" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I'll have run the same tool three different""" start="00:28:34.008" video="qanda-p-search" id="subtitle"]]
+[[!template text="""times to get three different answers, if it was like a""" start="00:28:36.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""calculator, for example.""" start="00:28:40.520" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Workflows""" start="00:28:41.800" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""But yeah, that's a very unique feature that isn't seen and""" start="00:28:41.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""will make me look at it and see about integrating it into my""" start="00:28:49.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""workflow. Yeah, I think you get on some interesting, you""" start="00:28:53.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""know, kind of what makes Emacs really unique there and how""" start="00:28:59.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""to... interesting kind of ways to exploit""" start="00:29:03.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Emacs to learn in the problem. I'm seeing a number of""" start="00:29:07.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""ways you're getting at that. For example, if I think about""" start="00:29:12.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like an automation workflow, and there's just a million""" start="00:29:15.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""we'll say, assumptions that are baked into a search""" start="00:29:19.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""product, so to speak, like represented by a Google search or""" start="00:29:22.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Bing or what have you. And then as I unpack that and repack it""" start="00:29:26.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""from an Emacs workflow standpoint, thinking about, well,""" start="00:29:31.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""first of all, what is the yak I'm shaving? And then also, what""" start="00:29:35.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""does doing it right mean? How would I reuse this? How would I""" start="00:29:39.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""make the code accessible to others for their own purposes in""" start="00:29:43.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""a free software world kind of way? and all of the different""" start="00:29:47.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""sort of say like orthogonal headspacey kind of things,""" start="00:29:52.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""right? Emacs brings a lot to the table from a search""" start="00:29:57.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""standpoint because I'm going to want to think about. I'm""" start="00:30:00.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""going to want to think about where does the UI come in? Where""" start="00:30:03.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""might the user want to get involved interactively? Where""" start="00:30:07.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""might the user want to get involved declaratively with""" start="00:30:11.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""their configuration, perhaps based on the particular""" start="00:30:14.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""environment where this Emacs is running? And there's just a""" start="00:30:16.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""lot of what Emacs users think about that really applies.""" start="00:30:21.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I'll use the word again, orthogonally across all my many""" start="00:30:24.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""workflows as an Emacs user. You know, the search is just such""" start="00:30:28.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""a big word. Yeah, that's actually, this exact point I was""" start="00:30:33.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""thinking about with this. It's like, I mean, it seems kind of""" start="00:30:38.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""obvious, like just like using grep or something, just like to""" start="00:30:43.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""get search counts, like, okay, you can just run the command,""" start="00:30:46.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""get the term counts and you could just run it through a""" start="00:30:49.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""relatively simple algorithm. to get your search score. So""" start="00:30:51.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""if it's this easy, though, why don't we see this in other... And""" start="00:30:55.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the results are actually surprisingly good. So why don't we""" start="00:31:01.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""see this anywhere, really? And it occurred to me that just""" start="00:31:06.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the amount of configuration... The amount of setup you have to""" start="00:31:10.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""do to get it right.""" start="00:31:16.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""It's above this threshold that you need something like""" start="00:31:20.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Emacs to kind of get pushed through that configuration.""" start="00:31:24.600" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Transient and configuration""" start="00:31:27.857" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""So for example, that's why I rely heavily on transient""" start="00:31:27.857" video="qanda-p-search" id="subtitle"]]
+[[!template text="""to set up the system. 'Cause like, if you want to get good""" start="00:31:30.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""search results, you're going to have to configure a lot""" start="00:31:34.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of stuff. I want this directory. I want this, I don't""" start="00:31:36.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""want this directory. I want these search terms, you know,""" start="00:31:38.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""there's a lot to set up. And in most programs, I mean, they""" start="00:31:41.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""don't have an easy way to, I mean, they'll often try and try to""" start="00:31:48.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""hide all this complexity. Like they say, okay, our users""" start="00:31:52.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""too, you know, we don't want to, you know, we don't wanna, you""" start="00:31:55.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""know, make our users, we don't wanna scare our users with""" start="00:31:59.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like, complicated search engine configuration. So we're""" start="00:32:02.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just going to do it all in the background and we're just not""" start="00:32:06.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""going to let the user even know that it's happening. I mean,""" start="00:32:09.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that's the third time you've made me laugh out loud. Sorry""" start="00:32:12.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""for interrupting you, but yeah, you're just spot on there.""" start="00:32:15.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""You're some people's users. Am I right? like, you know, and""" start="00:32:17.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""also some people's workflows.""" start="00:32:23.000" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Problem space""" start="00:32:25.391" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""And, you know, another case""" start="00:32:25.391" video="qanda-p-search" id="subtitle"]]
+[[!template text="""where just like, if you're thinking about Emacs, you either""" start="00:32:27.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""have to pick a tunnel to dive into and be like, no, this is""" start="00:32:30.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""going to be right for my work, or your problem space is never""" start="00:32:33.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""ending in terms of discovering the ways other people are""" start="00:32:37.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""using Emacs and how that breaks your feature. and how that""" start="00:32:40.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""breaks your conceptualization of the problem space,""" start="00:32:45.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""right? Or you just have to get so narrowed down that can""" start="00:32:49.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""actually be hard to find people that are quite understand""" start="00:32:53.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you, right? You get into the particular, well, it solves""" start="00:32:57.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""these three problems for me. Well, what are these three""" start="00:33:00.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""problems again? And this is a month to unpack. You have Emacs""" start="00:33:03.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and I don't know, it's like you got a lot of, they all agree is""" start="00:33:08.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like we're going to use elisp to set variables every emacs""" start="00:33:12.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""package is going to do that we're going to use elisp and have a""" start="00:33:16.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""search in place to put our documentation and like it does""" start="00:33:21.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""also eliminate a lot of confusion and gives a lot of""" start="00:33:25.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""expectations of what they want. One thing that I'm""" start="00:33:32.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""surprised I haven't seen elsewhere is you have the""" start="00:33:37.720" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""consult-omni""" start="00:33:39.856" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""consult-omni package which allows you to search multiple websites""" start="00:33:39.856" video="qanda-p-search" id="subtitle"]]
+[[!template text="""simultaneously for multiple web search engines. and put""" start="00:33:44.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""them in one thing and it's like, and then you use orderless.""" start="00:33:49.800" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""orderless""" start="00:33:52.800" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""Why would you use orderless? Because that's what you""" start="00:33:52.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""configured and you know exactly what you wanna use and you""" start="00:33:55.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""use the same font and your same mini buffer and you use all""" start="00:33:57.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that existing configuration because, well, you're an""" start="00:34:01.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Emacs user or like you're a command line user. You know how""" start="00:34:04.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you want these applications to go. You don't want them to be""" start="00:34:07.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""reinvented the wheel 1600 times in 1,600 different ways,""" start="00:34:11.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you want it to use your mini buffer, your font, your et""" start="00:34:17.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""cetera, et cetera, et cetera. But I haven't""" start="00:34:23.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""seen a website where I can search multiple websites at the""" start="00:34:28.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""same time in something like Emacs before. And it's like,""" start="00:34:32.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""yeah, with my sorting algorithm,""" start="00:34:35.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, exactly. Yeah. Yeah. Yeah. I mean, just setting the""" start="00:34:38.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""bar for configuration and set up just like, yeah, you have to""" start="00:34:49.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""have a list. Yeah. I mean, it, it does, obviously it's not,""" start="00:34:57.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""it's not most beginner beginner friendly, but I mean, it,""" start="00:35:02.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""yeah, it definitely widens the amount of the solution space""" start="00:35:05.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you can have to such problems. Oh my gosh, you used the word""" start="00:35:10.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""solution space. I love it. But on the flip side, it's like,""" start="00:35:14.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""why does Emacs get this consult-omni package? Or let's see,""" start="00:35:18.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you have elfeed-youtube where it will put a flowing""" start="00:35:25.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""transcript on a YouTube video or you got your package. Why""" start="00:35:30.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""does it get all these applications? And I don't see""" start="00:35:34.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""applications like this as much outside of Emacs. So there's""" start="00:35:39.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""a way that it just makes it easier.""" start="00:35:45.680" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""User interface""" start="00:35:46.268" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""It's because user""" start="00:35:46.268" video="qanda-p-search" id="subtitle"]]
+[[!template text="""interface is the, you know, it's the economy stupid of""" start="00:35:47.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""technology, right? If you grab people by the UX, you can sell""" start="00:35:51.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""a million of any product that solves problem that I didn't""" start="00:35:58.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""think technology could solve, or that I didn't think I had""" start="00:36:01.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the patience to use technology to solve, which is a lot of""" start="00:36:04.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""times what it comes down to. And here exactly is the, you""" start="00:36:08.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""know, the the Emacs sort of conundrum, right? How much time""" start="00:36:12.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""should I spend today updating my Emacs so that tomorrow I can""" start="00:36:16.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just work more, right? And, you know, I love that little""" start="00:36:20.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""graph of the Emacs learning curve, right? Where it's this""" start="00:36:26.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""concentric, it becomes this concentric spiral, right? The""" start="00:36:29.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Vim learning curve is like a ladder, right? Or, you know, and""" start="00:36:33.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""And the nano learning curve is like just a flat plane, you""" start="00:36:38.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""know, or a ladder, a vertical ladder or a horizontal ladder.""" start="00:36:44.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""There we go. And the Emacs learning curve is this kind of""" start="00:36:49.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""straight up line until it curves back on itself and""" start="00:36:56.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""eventually spirals. And the more you learn, the harder it is""" start="00:36:59.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""to learn the next thing. And are you really moving forward at""" start="00:37:03.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""all? Like, it just works for me. What a great analogy. And""" start="00:37:05.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that's my answer, I think. Yeah. You know, it's because""" start="00:37:09.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""we... The spiral is great. Sorry. There are each of these""" start="00:37:15.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""weird little packages that some of us, you know, it solves""" start="00:37:20.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that one problem and lets us get back to work. And for others,""" start="00:37:26.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""it makes us go, gosh, now that makes me rethink a whole bunch""" start="00:37:29.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of things because there's... Like I don't even know what""" start="00:37:32.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you're talking about with some of your conceptualizations""" start="00:37:35.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of UI. Maybe it comes from Visual Studio, and I've not""" start="00:37:37.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""used that or something. So for you, it's a perfectly normal UX""" start="00:37:41.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""paradigm that you kind of lean on for others. It's like you""" start="00:37:44.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""know occupying some screen space and I don't know what the""" start="00:37:48.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""gadgets do and when I open them up... They're thinking""" start="00:37:52.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""about... they have... they imply their own""" start="00:37:57.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""abstractions let's say logically against a programming""" start="00:38:01.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""language. This would be tree sitter, right. If i'm not used to""" start="00:38:03.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""thinking in terms of an abstract abstract syntax tree, some""" start="00:38:07.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of the concepts just aren't as natural for me. If i'm used to""" start="00:38:11.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like emacs at a more fundamental level is, or the old modes""" start="00:38:14.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""right, we're used to them thinking in terms of progressing""" start="00:38:19.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""forward through some text, managing a stack of markers into""" start="00:38:23.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the text, right? It's a different paradigm. The world""" start="00:38:26.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""changes. Emacs kind of supports it all. That's why all the""" start="00:38:29.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""apps are built there. That's why when you're talking about""" start="00:38:33.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that spiral. what that hints at is that this is really just a""" start="00:38:37.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""different algorithm that you're transferring out that""" start="00:38:40.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""makes some things a lot easier and some things a lot harder.""" start="00:38:44.240" video="qanda-p-search" id="subtitle"]]
+[[!template text="""That's why I was bringing in those three packages, because""" start="00:38:47.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""in some way it's making these search terms with reusable...""" start="00:38:51.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Let's see... saveable buffers or interactive buffers in a way""" start="00:38:59.709" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that... in a way, that is bigger than what I think it should have,""" start="00:39:07.084" video="qanda-p-search" id="subtitle"]]
+[[!template text="""especially in comparison to like how many people use""" start="00:39:10.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""YouTube, but I don't see very many YouTube apps that will""" start="00:39:15.480" video="qanda-p-search" id="subtitle"]]
+[[!template text="""show Rolling subtitle list that you can click on to move up""" start="00:39:20.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and down the video""" start="00:39:26.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""even though YouTube's been around for years.""" start="00:39:27.316" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Why does Emacs have a very good implementation""" start="00:39:30.140" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that was duct taped together? So before I let you respond to""" start="00:39:33.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that, Zac, let me just say we're coming up on eating up a""" start="00:39:37.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""whole half hour of your lunchtime and thank you for giving us""" start="00:39:40.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that extra time. But let me just say, let's, you know, if I""" start="00:39:43.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""could ask you to take like up to another five minutes and then""" start="00:39:47.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I'll try to kick us off here and make sure everybody does""" start="00:39:50.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""remember to eat.""" start="00:39:53.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, so yeah, it looks like there's one other question. So""" start="00:39:55.000" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think the Emacs being kinda slow will get in the way of being able to run a lot of scoring algorithms?""" start="00:40:04.120" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""yeah, do you think Emacs being kind of slow will get in the way""" start="00:40:04.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of being able to run a lot of scoring algorithms? So this is""" start="00:40:06.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""actually a thought I had. Yeah, Emacs, because the code""" start="00:40:11.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""currently kind of does, I mean, it kind of does, it's kind of""" start="00:40:15.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""dumb in a lot of places. a lot of times it just, it does just go""" start="00:40:19.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""through all the files and then just compute some score for""" start="00:40:24.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""them. But I'm surprised that it's, that part actually isn't""" start="00:40:27.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that slow. Like, like it turns out like, okay, like if you""" start="00:40:30.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""take, for example, Emacs, like the Emacs directory or the""" start="00:40:34.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Emacs Git repository, or maybe another big Git repository,""" start="00:40:40.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like you could have an Elisp function enumerate those, and""" start="00:40:44.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""multiply some numbers, maybe multiply 10 numbers""" start="00:40:49.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""together. And that isn't that slow. And that's the bulk of""" start="00:40:52.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""what the only thing that Elisp has to do is just like multiply""" start="00:41:01.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""these numbers. Obviously, if you have to resort to Elisp to""" start="00:41:05.800" video="qanda-p-search" id="subtitle"]]
+[[!template text="""search all the files and you have like 10 or 100,000 files,""" start="00:41:11.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""then yeah, Emacs will be slow""" start="00:41:15.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""to manually search, like if you're not using ripgrep or any""" start="00:41:18.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""faster tool and you have, and you have millions of files and""" start="00:41:23.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""yeah, it will be slow. But what I noticed though is like, for""" start="00:41:26.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""example, let's say you want to search for, let's say you want""" start="00:41:30.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""to search like info directory, like info files for Emacs and""" start="00:41:35.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""the Emacs info file and the Elisp info file. So those are two""" start="00:41:40.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""decently sized kind of books, kind of like reference""" start="00:41:46.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""material on Emacs.""" start="00:41:49.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Relying on Elisp to search both of those together, it's""" start="00:41:50.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""actually pretty, it's actually like almost instant. I""" start="00:41:56.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""mean, it's not slow enough. So I think that's""" start="00:41:58.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""another thing is like scale. Like I think on, on kind of like""" start="00:42:00.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""individual human level scales, I think Elisp can be good""" start="00:42:03.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""enough. if you're going on the scale of like enterprise,""" start="00:42:09.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""like all the repositories, all the Git repositories of an""" start="00:42:14.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""enterprise, then yeah, that scale might, it might, it might""" start="00:42:18.400" video="qanda-p-search" id="subtitle"]]
+[[!template text="""be too much. But I think on, on the scale of what most""" start="00:42:21.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""individuals have to deal with on a daily basis, like for""" start="00:42:26.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""example, maybe somebody has some, yeah, I mean, I think it""" start="00:42:30.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""should, I think it hopefully should be enough. And if not,""" start="00:42:34.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""there's always room for optimizations.""" start="00:42:36.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, so so I'll redirect you a little bit because based on a""" start="00:42:39.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""couple of things I got into, you know, or if you want to be done""" start="00:42:56.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""be like, you know, give me the hi sign by all means and we can""" start="00:43:00.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""we can shut up shop, but I'm curious, you know, what are what""" start="00:43:04.760" video="qanda-p-search" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Boundary conditions""" start="00:43:08.640" video="qanda-p-search" id="subtitle"]]</div>[[!template text="""are your boundary conditions? What what tends to cause you""" start="00:43:08.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""to to to write something more complicated and what what""" start="00:43:13.080" video="qanda-p-search" id="subtitle"]]
+[[!template text="""causes you to? So to work around it with more complex""" start="00:43:16.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""workflow in Emacs terms, like where do you break out the big""" start="00:43:20.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""guns? Just thinking about, like search, we talked about,""" start="00:43:23.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""maybe that's too abstract a question, but just general""" start="00:43:27.920" video="qanda-p-search" id="subtitle"]]
+[[!template text="""usage. Search is an example where almost all of us have""" start="00:43:31.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""probably written something to go find something, right?""" start="00:43:36.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, I mean, this is a good question. I'm actually of the""" start="00:43:39.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""idea, at my work, for example, I tried to get rid of all, I""" start="00:43:43.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""mean, this is probably a typical Emacs user thing, but like,""" start="00:43:52.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I mean, I think that just like getting, just like having""" start="00:43:54.880" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Emacs expand to whatever it can get into and whatever it can""" start="00:43:59.320" video="qanda-p-search" id="subtitle"]]
+[[!template text="""automate, like any task, any, like, just like the more you""" start="00:44:02.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""can kind of get that coded, I actually find that kind of like,""" start="00:44:08.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""I mean, it is kind of like a meme. Like, yeah, I have to""" start="00:44:13.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""configure my Emacs until it's fun, and then I'll do it. But I""" start="00:44:20.440" video="qanda-p-search" id="subtitle"]]
+[[!template text="""actually I actually think that maybe for like a normal""" start="00:44:24.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""software developer, if you invest, if you invest, maybe,""" start="00:44:27.960" video="qanda-p-search" id="subtitle"]]
+[[!template text="""maybe you have like some spare time after you've done all""" start="00:44:32.000" video="qanda-p-search" id="subtitle"]]
+[[!template text="""your tasks, if you invest all that time in, in just like kind""" start="00:44:34.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""of going through all the workflows, all the, you know, just,""" start="00:44:39.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""just getting all of that in, in Emacs, then I think that that,""" start="00:44:42.360" video="qanda-p-search" id="subtitle"]]
+[[!template text="""that acts as kind of like a, it kind of like a productivity""" start="00:44:46.280" video="qanda-p-search" id="subtitle"]]
+[[!template text="""multiplier. And so. So I found that, I mean, I found to not""" start="00:44:52.040" video="qanda-p-search" id="subtitle"]]
+[[!template text="""have those boundaries. I mean, obviously there's things""" start="00:44:56.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you can't do, like web-based things. I mean, that's a hard""" start="00:44:59.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""boundary, but that's more because... Yeah, there's really""" start="00:45:04.600" video="qanda-p-search" id="subtitle"]]
+[[!template text="""not much to do about that. Nobody's written a front-end""" start="00:45:10.200" video="qanda-p-search" id="subtitle"]]
+[[!template text="""engine, and too much of the forebrain is occupied with""" start="00:45:13.720" video="qanda-p-search" id="subtitle"]]
+[[!template text="""things that should happen on the &quot;end-users""" start="00:45:18.760" video="qanda-p-search" id="subtitle"]]
+[[!template text="""infrastructure&quot;, so to speak. So with like 40 seconds left, I""" start="00:45:22.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""was going to say a minute, but I guess, any final thoughts?""" start="00:45:29.840" video="qanda-p-search" id="subtitle"]]
+[[!template text="""Yeah, I mean, just thank you for listening, and And thank you""" start="00:45:33.520" video="qanda-p-search" id="subtitle"]]
+[[!template text="""for putting this on. It's a really nice conference to have,""" start="00:45:40.160" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and I'm glad things like this exist. So thank you. Yeah, it's""" start="00:45:45.560" video="qanda-p-search" id="subtitle"]]
+[[!template text="""you and the other folks on this call. Thank you so much,""" start="00:45:50.680" video="qanda-p-search" id="subtitle"]]
+[[!template text="""PlasmaStrike, and all the rest of you for hopping on the BBB""" start="00:45:54.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""and having such an interesting discussion. Keeps it really""" start="00:45:58.640" video="qanda-p-search" id="subtitle"]]
+[[!template text="""fun for us as organizers. And thanks, everybody, for being""" start="00:46:03.120" video="qanda-p-search" id="subtitle"]]
+[[!template text="""here.""" start="00:46:08.240" video="qanda-p-search" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [zacromero@posteo.com](mailto:zacromero@posteo.com?subject=Comment%20for%20EmacsConf%202023%20p-search%3A%20p-search%3A%20a%20local%20search%20engine%20in%20Emacs)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/p-search-before.md b/2024/info/p-search-before.md
index ead4ef8e..fc7c8c39 100644
--- a/2024/info/p-search-before.md
+++ b/2024/info/p-search-before.md
@@ -1,18 +1,58 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 23-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="p-search">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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 stroke-width="3" x="192" y="75" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 23-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-p-search.html>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Waiting for a caption volunteer
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T16:20:00Z" end="2024-12-07T16:45:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~11:20 AM - 11:45 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~10:20 AM - 10:45 AM CST (US/Central)<br />Saturday, Dec 7 2024, ~9:20 AM - 9:45 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~8:20 AM - 8:45 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~4:20 PM - 4:45 PM UTC <br />Saturday, Dec 7 2024, ~5:20 PM - 5:45 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~6:20 PM - 6:45 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~9:50 PM - 10:15 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~12:20 AM - 12:45 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~1:20 AM - 1:45 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/dev/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+04:34.296 Search engine in Emacs: the index
+06:21.757 Search engine in Emacs: Ranking
+06:43.553 tf-idf: term-frequency x inverse-document-frequency
+07:41.160 BM25
+08:41.200 Searching with p-search
+10:41.457 Flight AF 447
+16:06.771 Modifying priors
+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://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 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?
+05:15.092 Plurals
+05:33.883 Different languages
+06:40.200 Q: When searching by author I know authors may setup a new machine and not put the exact same information. Is this doing anything to combine those into one author?
+08:50.720 Q: Have you thought about integrating results from using cosine similarity with a deep-learning based vector embedding?
+10:01.940 Q: Is it possible to save/bookmark searches or search templates so they can be used again and again?
+12:02.800 Q: You mentioned about candidate generators. Could you explain about to what the score is assigned to?
+16:32.302 Q: easy filtering with orderless - did this or something like this help or infulce the design of psearch?
+17:56.960 Q: Notmuch with the p-search UI
+19:13.600 Info
+22:14.880 project.el integration
+22:56.477 Q: How happy are you with the interface?
+25:50.280 gptel
+28:01.480 Saving a search
+28:41.800 Workflows
+31:27.857 Transient and configuration
+32:25.391 Problem space
+33:39.856 consult-omni
+33:52.800 orderless
+35:46.268 User interface
+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="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/p-search-nav.md b/2024/info/p-search-nav.md
index fec80a98..94ac3f62 100644
--- a/2024/info/p-search-nav.md
+++ b/2024/info/p-search-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/flp">The Free Life Planner: Empowering lives with Emacs-based AI</a>
-Next by time: <a href="/2024/talks/color">Colour your Emacs with ease</a>
-Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2024/watch/dev">Watch</a></strong>
+Previous by track: <a href="/2024/talks/rust">An experimental Emacs core in Rust</a>
+Next by track: <a href="/2024/talks/julia">Exploring shared philosophies in Julia and Emacs</a>
+Track: <span class="sched-track Development">Development</span>
</div>
diff --git a/2024/info/papers-after.md b/2024/info/papers-after.md
index 085d363f..667c8553 100644
--- a/2024/info/papers-after.md
+++ b/2024/info/papers-after.md
@@ -1,7 +1,467 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [vincent.conus@pm.me](mailto:vincent.conus@pm.me?subject=Comment%20for%20EmacsConf%202023%20papers%3A%20Writing%20academic%20papers%20in%20Org-Roam)
+<div class="transcript transcript-mainVideo"><a name="papers-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""Okay. Hi, everyone. My name is Vincent. I'm a PhD student in""" start="00:00:00.000" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""Nanzan University, Japan. Today I'm going to present to""" start="00:00:04.800" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""you how I'm using Org notes and Org Roam to write academic""" start="00:00:07.440" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""papers. The slides I'm going to present here are available""" start="00:00:11.800" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""in the Git repository, so you can check them later""" start="00:00:15.000" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""if you want to.""" start="00:00:17.306" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What?""" start="00:00:20.130" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""Firstly what are we talking about here?""" start="00:00:20.130" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""So in general, it's possible, if you have any Org nodes,""" start="00:00:21.911" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""to export them as LaTeX. Given some extra configuration,""" start="00:00:26.693" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""it's possible, basically, to reproduce any LaTeX setup""" start="00:00:31.316" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that you would use to create documents with an Org file.""" start="00:00:34.957" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""In my case, I'm using that system to take some notes""" start="00:00:42.032" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that I have in my org-roam system""" start="00:00:46.754" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""and to export that into finished academic papers""" start="00:00:48.454" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that you can submit eventually to a conference and so on.""" start="00:00:52.240" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""Actually, before I submit that proposal, after I submit""" start="00:00:56.280" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that proposal, I just noticed that Mike Hamrick in last""" start="00:00:59.440" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""year's EmacsConf made a very extensive presentation about""" start="00:01:03.560" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""org export. But in here, I just want to showcase my usage of""" start="00:01:07.880" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""org-roam and to present what are the configuration I'm""" start="00:01:13.040" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""using to be able to achieve that. Why do that?""" start="00:01:16.960" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why?""" start="00:01:21.377" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""In general, like I said, I'm using that""" start="00:01:21.377" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""as part of my writing system, so in""" start="00:01:23.038" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""having org-roam notes that can be exported as a document""" start="00:01:26.640" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""make for a great workflow in my opinion. It makes Org even""" start="00:01:30.240" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""more versatile, so if you use that for maybe writing code in""" start="00:01:34.160" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""the literate programming, now you're going to be also able""" start="00:01:38.840" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""to export that into any format you want.""" start="00:01:41.600" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""The Org notes are very clean. In my opinion, it looks""" start="00:01:47.560" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""better to work in Org rather than editing LaTeX code""" start="00:01:49.880" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""directly. The centralized bibliography system is also""" start="00:01:53.800" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""great because it allows to have just a few notes that you can""" start="00:01:58.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""reference everywhere and have links to them. Of course""" start="00:02:02.560" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""everything is happening inside of Emacs so you have access""" start="00:02:06.600" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""to all the tools you are used to like Magit or Projectile and""" start="00:02:09.480" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""whatnot.""" start="00:02:13.360" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Challenges""" start="00:02:16.215" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""However, to quote one of the funniest recent""" start="00:02:16.215" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""video about Emacs: &quot;[With LaTeX,] I used to spend hours trying to""" start="00:02:18.600" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""get the image on the right page. Now I use Org Mode LaTeX and""" start="00:02:23.000" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""just accept it's impossible.&quot; Like all the jokes in that""" start="00:02:25.600" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""video, it lands in very well because there is some truth to""" start="00:02:28.760" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that in that with that system you are not getting rid of""" start="00:02:32.800" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""the complexity of LaTeX, so if you have problems, you're going to""" start="00:02:38.240" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""have to deal with the very long logs. It's a layer on top of""" start="00:02:41.240" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""LaTeX, so if you need to debug your configuration, if you""" start="00:02:45.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""want to adjust something specific, you would need to be""" start="00:02:50.520" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""proficient in LaTeX and also in being very at ease with""" start="00:02:53.000" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""your Emacs configuration. The way to use the Org export is""" start="00:02:58.880" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""less documented than using LaTeX so if you want to implement""" start="00:03:03.120" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""something, probably it's going to be described in pure LaTeX,""" start="00:03:06.640" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""and then you're going to need to adjust that to make it work""" start="00:03:09.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""inside your Org files. I explained before that the""" start="00:03:13.600" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""bibliography system is great, although it's very picky""" start="00:03:17.680" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""on the way it works, especially to be exported. Depending""" start="00:03:20.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""on the template you are using, you might run into issues""" start="00:03:26.360" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""with some packages that are in conflict, so there is""" start="00:03:29.240" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that to be taken in mind.""" start="00:03:33.200" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Basic Org to PDF""" start="00:03:35.320" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""In general, if you have a Org note, you can simply export it""" start="00:03:35.320" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""with a C-c C-e and l o with the menu that appears. I can""" start="00:03:41.520" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""show that briefly: C-e, then you have the menu. You can select""" start="00:03:46.200" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""l and o to export. That works very well. In general,""" start="00:03:49.480" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""with that, you are able to deal with everything that you have""" start="00:03:53.520" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""in your normal Org notes. If you have images, tables,""" start="00:03:56.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""links, it's going to be exported in a way that looks decent.""" start="00:03:59.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""That's what we are starting with.""" start="00:04:03.560" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How to LaTeX properly, though?""" start="00:04:08.061" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""However, if you want to make a publication,""" start="00:04:08.061" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""if you have a template that you receive""" start="00:04:11.544" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""from a conference or whatnot, you want to be able to adapt""" start="00:04:13.480" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""your Org notes to be able to export it exactly the way you""" start="00:04:17.480" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""want. I'm going to present the four points that I'm""" start="00:04:20.520" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""showing here that are, for me, the elements that you need to""" start="00:04:23.040" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""be careful with when you try to work with templates and""" start="00:04:25.920" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""exporting to LaTeX.""" start="00:04:29.880" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""LaTeX-specific headers""" start="00:04:32.304" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""Firstly, you have headers. So basically,""" start="00:04:32.304" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""this allows to add LaTeX elements that are going""" start="00:04:34.526" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""to be at the top of the file. You're going to have the title.""" start="00:04:37.120" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""You're going to have your extra packages here. You're going""" start="00:04:41.560" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""to have your class. I'm going to present that later. That's""" start="00:04:44.120" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""the part that you're going to adjust to make it look like the""" start="00:04:46.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text=""".tex template that you receive.""" start="00:04:50.480" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Using a formatting class file""" start="00:04:54.625" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""Then you have the formatting class file. That's a .cls file""" start="00:04:54.625" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that you would receive as a part of the template.""" start="00:04:58.626" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""This one is used instead of the typical doc class like article.""" start="00:05:01.787" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""The way I'm using them is to add an entry,""" start="00:05:08.148" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""like add an element to the list or get a""" start="00:05:10.589" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""class in my Emacs init. This way I can use the CLS file""" start="00:05:12.760" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""directly and also give the parameters that I want. In that""" start="00:05:18.600" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""case, I'm going to have a apris.cls next to my Org note,""" start="00:05:22.720" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""and it's going to be able to to use it.""" start="00:05:26.403" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Using a different LaTeX command""" start="00:05:31.395" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""A third element is, in some cases,""" start="00:05:31.395" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""you might want to use a different LaTeX compiler to build""" start="00:05:33.600" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""your project, to build your notes. That can be done per""" start="00:05:38.360" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""file, per note, in my opinion, that's the most flexible way,""" start="00:05:41.720" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""by editing, by adding this line as the very first line of your""" start="00:05:45.320" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""file and thus changing the LaTeX PDF process variable. And""" start="00:05:48.520" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""in there, you can put multiple commands in a row.""" start="00:05:52.600" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""For example you can have the shell""" start="00:06:00.462" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""escape to have the minted note block, the BibTeX element, so""" start="00:06:01.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that works very well. When you add that, you need to""" start="00:06:06.080" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""reload your file, though. Something to keep in mind.""" start="00:06:08.960" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""References links for bibliography""" start="00:06:13.138" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""Lastly, you have the bibliography. When you have a reference,""" start="00:06:13.138" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""when you want to put a reference, you can use the""" start="00:06:17.000" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""org-roam-bibtex package that needs to be installed. Then you""" start="00:06:19.880" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""have some configuration to to be set so you have the bibtex""" start="00:06:23.720" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""compilation bibliography, where you explain where is your""" start="00:06:27.760" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""your reference file, your bib file. You can also give a path""" start="00:06:31.200" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""for where to search for PDFs. If you have matching names""" start="00:06:35.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""with your BibTeX entries and some PDF files in there,""" start="00:06:40.080" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""they're going to be linked. I'm going to show that later. So""" start="00:06:44.040" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that's something that's going to be part of your init""" start="00:06:46.480" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""configuration as part of the org-roam-bibtex package""" start="00:06:49.200" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""configuration. Then in the node you are exporting, you want""" start="00:06:53.040" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""to add a section called reference. Here you can set a style""" start="00:06:56.480" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""for the bibliography. Again you put which of the""" start="00:07:01.320" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""reference file you want to use.""" start="00:07:06.480" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Examples""" start="00:07:09.720" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""With all of that, I'm going to show some examples. Here I""" start="00:07:09.720" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""have an Org note that I used as the file to be exported into a""" start="00:07:15.560" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""publication. You can see up front, I set all my headers""" start="00:07:21.760" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""package. I have some extra package I put. I have the class""" start="00:07:26.720" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that is something that is next to it. You can see in the""" start="00:07:30.520" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""files, I have the apris.cls just here.""" start="00:07:35.840" video="mainVideo-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Tags""" start="00:07:41.240" video="mainVideo-papers" id="subtitle"]]</div>[[!template text="""Also, with all of that, you can also add tags. I""" start="00:07:41.240" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""didn't explain that, but you can also ignore some""" start="00:07:47.120" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""sections. That's quite convenient as well. Here we""" start="00:07:49.400" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""have some section, and if you want to add a bibliography,""" start="00:07:52.720" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""you're going to do c l cite:, you can put some cite entry, put""" start="00:07:57.360" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""any file in there, no description, and you're going to put""" start="00:08:05.000" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""some link like that. It's very convenient because, firstly,""" start="00:08:08.200" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""it's going to be exported as a reference like I'm going to""" start="00:08:11.920" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""show later, but also it gives you access to it directly from""" start="00:08:14.520" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""the note. If I click the thing here, I have some menu, I can""" start="00:08:18.080" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""open the bibliography page.""" start="00:08:22.680" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""I can also open the PDF that was linked to it. If I do""" start="00:08:31.040" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that, here is the file that pops up that was linked to the""" start="00:08:34.800" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""bibliography. That's great. Otherwise, within""" start="00:08:38.920" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that document, you're going to have other things you can""" start="00:08:44.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""have. Figures with parameters set on top, footnotes as well if""" start="00:08:47.760" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""that's something that you need. For example, here it's a""" start="00:08:53.280" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""section that's not exported, but you can have your""" start="00:08:57.280" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""normal footnotes. We can go back and forth. If they are in""" start="00:09:00.960" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""the exported section, they're going to be""" start="00:09:04.080" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""managed. So with that, you can export the notes. You're going to""" start="00:09:07.760" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""C-c C-e so you have that menu for exporting""" start="00:09:11.920" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""Org files. You do l for LaTeX and then o for running directly as""" start="00:09:16.880" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""PDF and opening it. It takes a little while to build. Here we""" start="00:09:23.480" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""are. The templates have been used, so there is a""" start="00:09:27.400" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""two-column situation happening, we have a specific header""" start="00:09:31.360" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""format and figures and the citation that we put. It's""" start="00:09:34.880" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""happening, it's shown here, and it's also going to be""" start="00:09:41.520" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""visible at the end in the reference section. Like I""" start="00:09:45.080" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""said, a fully ready, finished paper can be""" start="00:09:49.880" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""produced this way. That's all that I had for today.""" start="00:09:55.480" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""Thank you very much for your attention. I am""" start="00:10:01.120" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""available for questions on IRC or in the video chat.""" start="00:10:03.200" video="mainVideo-papers" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:10:06.233" video="mainVideo-papers" id="subtitle"]]
+
+</div>
+
+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: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.""" 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.""" 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"]]
+[[!template text="""presentation that wasn't able to fit in, I suggest we just""" start="00:01:08.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""start taking questions. All right. So yeah, right now I'm""" start="00:01:11.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""reading the question from IRC and also from the pad. So I""" start="00:01:16.560" video="qanda-papers" id="subtitle"]]
+[[!template text="""guess I'm gonna take what's already written there.""" start="00:01:19.440" video="qanda-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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!""" start="00:01:23.160" video="qanda-papers" id="subtitle"]]</div>[[!template text="""So the first one is asking, I'd be interested in how to start this""" start="00:01:23.160" video="qanda-papers" id="subtitle"]]
+[[!template text="""journey to write academic paper in org-roam when not having""" start="00:01:27.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""used Emacs org mode yet. So I saw this one before and I guess it""" start="00:01:30.240" video="qanda-papers" id="subtitle"]]
+[[!template text="""would be possible to do that, to use Org documents only""" start="00:01:36.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""as the way that you are writing papers. Maybe you can""" start="00:01:43.040" video="qanda-papers" id="subtitle"]]
+[[!template text="""just use that as a template that you're going to export.""" start="00:01:46.760" video="qanda-papers" id="subtitle"]]
+[[!template text="""If you are familiar with LaTeX, it's going to be more useful,""" start="00:01:51.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""and maybe more convenient to work with inside of""" start="00:01:54.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""Emacs. But then I'm not 100% sure if that's... How do you say""" start="00:01:59.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""that? Maybe, in my opinion, the benefits of using""" start="00:02:05.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""org-roam in that setup is that you can link the things. For""" start="00:02:10.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""me, I'm using the search function for org-roam to just""" start="00:02:14.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""navigate between the files. So that's really some, a good""" start="00:02:18.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""advantage, but like, yeah, that could be, like Leo said in""" start="00:02:21.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""the presentation, that's some, maybe that's something you""" start="00:02:26.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""can start using org-mode with to write papers. So yeah.""" start="00:02:28.040" video="qanda-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How about connecting Emacs Org-Roam to Zotero? Is that something you have experience with?""" start="00:02:35.840" video="qanda-papers" id="subtitle"]]</div>[[!template text="""Second question. So how about connecting Emacs or Roam""" start="00:02:35.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""to Zotero? Is that something that you have experience with?""" start="00:02:38.880" video="qanda-papers" id="subtitle"]]
+[[!template text="""Not at all. Actually, I used briefly Zotero in the past and I""" start="00:02:42.080" video="qanda-papers" id="subtitle"]]
+[[!template text="""really didn't like it or didn't really get into that. I don't""" start="00:02:47.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""know. But right now,""" start="00:02:51.440" video="qanda-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Out of curiosity, how do you manage your bibliography? Do you do it from inside Emacs, or using a separate program like Zotero?""" start="00:02:55.600" video="qanda-papers" id="subtitle"]]</div>[[!template text="""I don't connect that at all. The question after, out of""" start="00:02:55.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""curiosity, how do you manage your bibliography? Do you do it""" start="00:03:00.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""from inside Emacs or using a separate program, ex: Zotero?""" start="00:03:03.560" video="qanda-papers" id="subtitle"]]
+[[!template text="""Because personally, I have struggled to do it from Emacs,""" start="00:03:06.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""though I have wanted to for some time. So the way I manage that""" start="00:03:09.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""is I just have a couple of .bib files that I edit by hand, where""" start="00:03:13.880" video="qanda-papers" id="subtitle"]]
+[[!template text="""I put the reference when I find them.""" start="00:03:20.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""And yeah, I just showed very briefly in the presentation,""" start="00:03:25.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""but the way.""" start="00:03:28.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""One of the great thing with the org reference system is that""" start="00:03:34.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""if you have your bibliographic files that are connected to""" start="00:03:39.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""that system, you can just like, you can put the link, the""" start="00:03:43.240" video="qanda-papers" id="subtitle"]]
+[[!template text="""reference to the paper, like click on it from your org note,""" start="00:03:47.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""and then you can open the PDF. You can open the DOI link to open""" start="00:03:51.880" video="qanda-papers" id="subtitle"]]
+[[!template text="""the whatever publisher page.""" start="00:03:56.480" video="qanda-papers" id="subtitle"]]
+[[!template text="""So no, I don't use Zotero and I just edit bib or bib files by""" start="00:04:00.720" video="qanda-papers" id="subtitle"]]
+[[!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: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"]]
+[[!template text="""get everything working in Emacs.""" start="00:04:44.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""Yeah, for sure. And""" start="00:04:49.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""yeah, I guess the way I'm doing it, I understand the appeal""" start="00:04:54.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""for having it integrated in the browser. Maybe""" start="00:05:02.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""that's something I should look up, actually, because right""" start="00:05:03.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""now I just like doing it very much by hand, like going on the""" start="00:05:06.280" video="qanda-papers" id="subtitle"]]
+[[!template text="""publisher page and copying the bibtex block and""" start="00:05:09.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""just using putting that in my file. Yes, it can be not a very""" start="00:05:15.200" video="qanda-papers" id="subtitle"]]
+[[!template text="""efficient workflow on that side. But after that, you're""" start="00:05:20.040" video="qanda-papers" id="subtitle"]]
+[[!template text="""having the PDF and having it inside the note.""" start="00:05:23.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""Yeah, it's great. Yeah. To some extent, it kind of depends on""" start="00:05:26.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""the reference system that is used by the field in which you""" start="00:05:30.760" video="qanda-papers" id="subtitle"]]
+[[!template text="""are or the university in which you're publishing. Because""" start="00:05:33.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""sometimes, you know, you're going to have some basic BibTeX""" start="00:05:36.280" video="qanda-papers" id="subtitle"]]
+[[!template text="""file and sometimes you're going to have better BibTeX""" start="00:05:39.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""files. And those are very different metadata that you need""" start="00:05:41.480" video="qanda-papers" id="subtitle"]]
+[[!template text="""to reconcile. And depending on which LaTeX compiler you're""" start="00:05:44.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""using, be it zLaTeX[??], be it regular LaTeX, lualatex, it's""" start="00:05:49.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""going to be all different. So it's a whole can of worms that""" start="00:05:52.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""I'm not sure we want to be opening now. But if you are""" start="00:05:55.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""interested and if you're not too attached about getting""" start="00:05:57.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""everything right, it's really easy to get started with""" start="00:06:01.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""stuff like org-roam-bibtex. It's supposed to get you""" start="00:06:03.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""most of the way down to a working setup. And if you need to get""" start="00:06:06.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""everything working down to the comma based on your""" start="00:06:11.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""reference system, that's going to be a little harder. But""" start="00:06:14.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""it's possible. I managed to do it and many people actually""" start="00:06:16.480" video="qanda-papers" id="subtitle"]]
+[[!template text="""managed to do it. Okay, anyway, so let's move on to the next""" start="00:06:19.440" video="qanda-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How do you start a new document?""" start="00:06:22.600" video="qanda-papers" id="subtitle"]]</div>[[!template text="""question. All right, so the next question asking how do you""" start="00:06:22.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""start a new document? There are a lot of headers you have to""" start="00:06:26.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""set up. Do you use a template? I'm curious if you use your""" start="00:06:31.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""snippets to deal with all of these LaTeX org metacommands.""" start="00:06:34.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""So I don't use a snippets template of any kind for that.""" start="00:06:38.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""Probably I should. That's actually a good idea. I'm""" start="00:06:44.760" video="qanda-papers" id="subtitle"]]
+[[!template text="""probably going to look into that. No, the way I do actually is""" start="00:06:47.280" video="qanda-papers" id="subtitle"]]
+[[!template text="""I just reuse some previous documents. I copy it, delete all""" start="00:06:51.280" video="qanda-papers" id="subtitle"]]
+[[!template text="""the contents and adjust it until it works the way I like.""" start="00:06:56.200" video="qanda-papers" id="subtitle"]]
+[[!template text="""The main issue in general after that step is to make it work""" start="00:07:01.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""with the template I receive and Let's say if I have some""" start="00:07:09.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""template that needs to work with another LaTeX compiler,""" start="00:07:14.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""I'm probably going to try to copy an existing file that I have""" start="00:07:20.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""that uses the same compiler to save me some work. But yeah,""" start="00:07:26.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""no, I don't use any snippet or something. Probably I should,""" start="00:07:30.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""but I'm just doing it the quick and dirty way to just copy some""" start="00:07:37.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""existing thing.""" start="00:07:40.880" video="qanda-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What do you think of using citar with org-roam-bibtex?""" start="00:07:41.720" video="qanda-papers" id="subtitle"]]</div>[[!template text="""Then what do you think of citar with org-roam-bibtex? It seems""" start="00:07:41.720" video="qanda-papers" id="subtitle"]]
+[[!template text="""that bibtex completion is tied to org-roam-bibtex. I don't""" start="00:07:48.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""know. I never really looked into citar that much. I""" start="00:07:56.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""don't know about that. I don't know either, so I'm not going""" start="00:08:02.080" video="qanda-papers" id="subtitle"]]
+[[!template text="""to be able to help on this one.""" start="00:08:06.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""Because yeah, the bibtex completion is tied to the overall""" start="00:08:07.760" video="qanda-papers" id="subtitle"]]
+[[!template text="""bibtex. I guess so. So what I'm interpreting, because I do,""" start="00:08:17.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""so BibTeX completion is the single motor that drives helm""" start="00:08:24.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""BibTeX and Ivy BibTeX. Perhaps there's another""" start="00:08:30.040" video="qanda-papers" id="subtitle"]]
+[[!template text="""alternative now that is using the Vertico stack for""" start="00:08:32.720" video="qanda-papers" id="subtitle"]]
+[[!template text="""completion. But org-roam-bibtex was interfacing with BibTeX""" start="00:08:35.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""completion to retrieve all the references from a bib file.""" start="00:08:40.400" video="qanda-papers" id="subtitle"]]
+[[!template text="""and I assume citar would be something very similar in a way""" start="00:08:46.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""that it interfaces with a bib file, but I couldn't tell you""" start="00:08:50.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""more. I need to explore a little more and sadly I haven't""" start="00:08:54.040" video="qanda-papers" id="subtitle"]]
+[[!template text="""touched any of this stack in like three years, so I'm a little""" start="00:08:57.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""out of touch. I guess this is what comes with leaving""" start="00:09:00.760" video="qanda-papers" id="subtitle"]]
+[[!template text="""academia to go work as a corporate developer. I'm no longer""" start="00:09:03.200" video="qanda-papers" id="subtitle"]]
+[[!template text="""so interested in the publishing process, even though I'm""" start="00:09:07.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""obviously very appreciative of people who still do, and""" start="00:09:10.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""especially people who use""" start="00:09:12.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""Yeah, same here. I definitely going to look into the citar""" start="00:09:13.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""package to see what's possible. Maybe can be using in some""" start="00:09:20.240" video="qanda-papers" id="subtitle"]]
+[[!template text="""way that is useful for me. Yeah.""" start="00:09:23.400" video="qanda-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Most academic journals insist that papers are formatted in their own custom LaTeX documentclass.  Does org-roam make it easy to do that?""" start="00:09:26.320" video="qanda-papers" id="subtitle"]]</div>[[!template text="""And if I go to the next question, so most academic journal""" start="00:09:26.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""insist that paper are formatted in their own custom LaTeX""" start="00:09:30.920" video="qanda-papers" id="subtitle"]]
+[[!template text="""document class. Does org-roam make it easy to do that? The""" start="00:09:33.640" video="qanda-papers" id="subtitle"]]
+[[!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: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 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 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"]]
+[[!template text="""template and you don't have to worry about it. Yeah, it's an""" start="00:11:22.160" video="qanda-papers" id="subtitle"]]
+[[!template text="""interesting topic because the thing about, on one side, you""" start="00:11:27.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""know, you want to have, when you're using LaTeX, it kind of""" start="00:11:32.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""translates into you caring a lot about the document that you""" start="00:11:36.160" video="qanda-papers" id="subtitle"]]
+[[!template text="""produce. Either you care about how quickly you can turn a""" start="00:11:39.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""plain text document into a very nicely formatted PDF at the""" start="00:11:42.880" video="qanda-papers" id="subtitle"]]
+[[!template text="""end, or, you know, you just care about the output of your""" start="00:11:46.720" video="qanda-papers" id="subtitle"]]
+[[!template text="""documents, making sure that everything is properly""" start="00:11:52.240" video="qanda-papers" id="subtitle"]]
+[[!template text="""formatted. We were talking about references just before,""" start="00:11:54.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""you know, the formatting rule for references are highly""" start="00:11:57.040" video="qanda-papers" id="subtitle"]]
+[[!template text="""dependent upon the manual that you're using and, you know,""" start="00:12:00.240" video="qanda-papers" id="subtitle"]]
+[[!template text="""some people really care about this. And what I found in my""" start="00:12:04.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""particular experience, my own personal experience""" start="00:12:07.160" video="qanda-papers" id="subtitle"]]
+[[!template text="""writing for academia, was that I was more in the latter crowd""" start="00:12:09.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""that really cared about the output format and making sure""" start="00:12:15.200" video="qanda-papers" id="subtitle"]]
+[[!template text="""everything was correct and it's really a struggle to get""" start="00:12:17.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""everything working especially when you're transpiling""" start="00:12:20.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""from Org Mode documents straight into LaTeX. You're""" start="00:12:23.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""obviously going to be resorting to a number of hacks to get""" start="00:12:27.200" video="qanda-papers" id="subtitle"]]
+[[!template text="""everything working like Vincent just mentioned with the""" start="00:12:30.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""class or you're going to end up with many imported files just""" start="00:12:32.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""to get everything working, but really you're fighting""" start="00:12:36.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""against the tide if you want to get something a little""" start="00:12:40.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""different from what is shipping with Walmart. Maybe""" start="00:12:42.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""everything has gotten better since I was writing my papers,""" start="00:12:45.760" video="qanda-papers" id="subtitle"]]
+[[!template text="""but generally... Kindly disagree. Yeah, go on. I kindly""" start="00:12:48.480" video="qanda-papers" id="subtitle"]]
+[[!template text="""disagree. I actually, I'm surprised that a lot of template""" start="00:12:53.880" video="qanda-papers" id="subtitle"]]
+[[!template text="""is so complex that you don't just change the document class,""" start="00:12:57.160" video="qanda-papers" id="subtitle"]]
+[[!template text="""but also need to do something else. I'd say it's rather""" start="00:13:00.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""uncommon. I guess it depends on the area of your search.""" start="00:13:03.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""Yeah, exactly. I mean, that's it. It just needs CLS and""" start="00:13:05.920" video="qanda-papers" id="subtitle"]]
+[[!template text="""that's all. Yeah, but it really depends on, as you said, on""" start="00:13:12.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""the field in which you're publishing. Some fields are a""" start="00:13:17.560" video="qanda-papers" id="subtitle"]]
+[[!template text="""little more lax with their rules. And just the fact that you""" start="00:13:19.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""can introduce mathematic formulas kind of makes LaTeX the""" start="00:13:22.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""de facto for publishing math documents. But when you're""" start="00:13:26.480" video="qanda-papers" id="subtitle"]]
+[[!template text="""doing humanities, they're more attached to other kinds of""" start="00:13:29.920" video="qanda-papers" id="subtitle"]]
+[[!template text="""formatting. So I think things are much better, anyway,""" start="00:13:33.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""since I started five years ago. Oh, yeah. I have heard from""" start="00:13:36.880" video="qanda-papers" id="subtitle"]]
+[[!template text="""humanities people Microsoft Word. Yes. Sadly, that's the""" start="00:13:42.920" video="qanda-papers" id="subtitle"]]
+[[!template text="""format we're fighting against. Yeah. As for document,""" start="00:13:46.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""yeah, for LaTeX classes, it is a customization and it is the""" start="00:13:51.880" video="qanda-papers" id="subtitle"]]
+[[!template text="""right way to customize this thing, that's all. I'm not sure""" start="00:13:57.080" video="qanda-papers" id="subtitle"]]
+[[!template text="""why it's a hack. It's not a hack. It's an actual user""" start="00:14:00.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""customization. Right. So, we've got about four more""" start="00:14:04.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""minutes of question. Vincent, we've got a couple of Yeah. So""" start="00:14:08.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""I've got a little voice talking in my ear telling me that""" start="00:14:13.560" video="qanda-papers" id="subtitle"]]
+[[!template text="""exactly the same thing. So we've got about two more""" start="00:14:15.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""questions. Vincent, do you want to field them? Sure. So, are""" start="00:14:17.840" video="qanda-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Are you using zotra or org-ref?""" start="00:14:21.160" video="qanda-papers" id="subtitle"]]</div>[[!template text="""you using Zotra (sending some link) or org-ref? No, I don't.""" start="00:14:21.160" video="qanda-papers" id="subtitle"]]
+[[!template text="""I've never heard of Zotra, actually. Looking that very""" start="00:14:27.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""briefly. That's something I'm going to have to look into.""" start="00:14:31.880" video="qanda-papers" id="subtitle"]]
+[[!template text="""Apparently, the short for Zotero translator, so that might""" start="00:14:34.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""be something useful for me since I'm not using Zotero yet,""" start="00:14:38.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""maybe trying to combine. But no, I've never really tried""" start="00:14:41.760" video="qanda-papers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How much of this is tied to org-roam specifically?""" start="00:14:45.120" video="qanda-papers" id="subtitle"]]</div>[[!template text="""these, but I will. Then the last question, how much of this is""" start="00:14:45.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""tied to Org-roam specifically? Not a lot. Actually apart""" start="00:14:52.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""from the org-roam-bibtex, I think.""" start="00:14:59.480" video="qanda-papers" id="subtitle"]]
+[[!template text="""Maybe I'm mixing up stuff there. But no, not a lot actually.""" start="00:15:02.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""It's just the fact that I'm using that as a in my org-roam""" start="00:15:11.920" video="qanda-papers" id="subtitle"]]
+[[!template text="""system. But apart from that, most of, I mean, actually all of""" start="00:15:15.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""the exports can be done from a normal org-note or any other""" start="00:15:22.160" video="qanda-papers" id="subtitle"]]
+[[!template text="""knowledge management system that you do with org-notes. So""" start="00:15:27.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""no, it's not specifically tied to org-roam, just that""" start="00:15:31.800" video="qanda-papers" id="subtitle"]]
+[[!template text="""that's the way I'm using it. And I'm showing it this way, but""" start="00:15:34.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""yeah, actually the export process can be, can be done with,""" start="00:15:38.400" video="qanda-papers" id="subtitle"]]
+[[!template text="""Yes, specifically tight work room. Yeah, just confirming""" start="00:15:41.760" video="qanda-papers" id="subtitle"]]
+[[!template text="""this, the only way Org Roam intervenes into this process is""" start="00:15:49.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""just referencing""" start="00:15:54.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""bibliography elements. It just kind of intercedes a little""" start="00:15:57.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""bit between what Org Roam usually does. But when it comes to""" start="00:16:00.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""the exports to LaTeX and PDF eventually, that's completely""" start="00:16:03.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""deferring to org exports. So, ox-latex and all of this. So,""" start="00:16:08.760" video="qanda-papers" id="subtitle"]]
+[[!template text="""we are not intervening in any way into this transpiling""" start="00:16:13.280" video="qanda-papers" id="subtitle"]]
+[[!template text="""format. One comment. Yeah, I don't know if I imagine it is,""" start="00:16:16.040" video="qanda-papers" id="subtitle"]]
+[[!template text="""but it looked from the slides that it was our graph was it.""" start="00:16:20.720" video="qanda-papers" id="subtitle"]]
+[[!template text="""Sorry, that it was? org-ref, org-ref.""" start="00:16:25.760" video="qanda-papers" id="subtitle"]]
+[[!template text="""Yes. Because it is a link system for citations. Built-in""" start="00:16:35.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""citations, which is, there is a built-in citation system in""" start="00:16:42.720" video="qanda-papers" id="subtitle"]]
+[[!template text="""art mode. It uses, it doesn't use links. It has a special way""" start="00:16:46.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""to cite things. Yeah, because I believe, yeah, go on please,""" start="00:16:50.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""Vincent. No, I just wanted to say, in that case, I'm using the""" start="00:16:57.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""link with the cite command. I'm not using the org-roam link""" start="00:17:01.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""for the reference. I didn't really show that very""" start="00:17:10.120" video="qanda-papers" id="subtitle"]]
+[[!template text="""carefully. But then, yeah, it's a site element that is""" start="00:17:14.080" video="qanda-papers" id="subtitle"]]
+[[!template text="""exported. So the roam part is just like, you can access the""" start="00:17:17.680" video="qanda-papers" id="subtitle"]]
+[[!template text="""org notes that you have attached to a reference paper. But""" start="00:17:21.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""that's it. Okay, because I was confused by why the""" start="00:17:26.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""bibliography is a link, why style is a link, because it is the""" start="00:17:31.880" video="qanda-papers" id="subtitle"]]
+[[!template text="""approach org-ref uses.""" start="00:17:35.920" video="qanda-papers" id="subtitle"]]
+[[!template text="""Ah, right. Okay, I see. Yeah, the thing is, actually I don't""" start="00:17:37.240" video="qanda-papers" id="subtitle"]]
+[[!template text="""know why, but In my experience, using the org-roam,""" start="00:17:47.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""org-roam-bibtex links doesn't export or doesn't export""" start="00:17:52.160" video="qanda-papers" id="subtitle"]]
+[[!template text="""properly. So like adding them with the org-ref-cite worked""" start="00:17:57.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""better. So that's, that's why I'm using these. If I may""" start="00:18:02.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""interject. If you're using org-ref-cite, you're using""" start="00:18:05.360" video="qanda-papers" id="subtitle"]]
+[[!template text="""org-ref-for-export, which is slightly different. I'm""" start="00:18:07.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""going to interject very quickly because sadly we are a""" start="00:18:11.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""little pressed for time because we are heading into the next""" start="00:18:14.040" video="qanda-papers" id="subtitle"]]
+[[!template text="""discussion. So just very quickly, if you want to continue""" start="00:18:15.920" video="qanda-papers" id="subtitle"]]
+[[!template text="""the discussion, the BBB room is available at""" start="00:18:18.560" video="qanda-papers" id="subtitle"]]
+[[!template text="""emacsconf-org. You can go to the talk and get the link to join""" start="00:18:21.280" video="qanda-papers" id="subtitle"]]
+[[!template text="""the BBB. And the stream will be moving on to the next stream in""" start="00:18:24.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""about 5 to 10 seconds. So I'll see you on the other side. And""" start="00:18:27.320" video="qanda-papers" id="subtitle"]]
+[[!template text="""thank you, Vincent. Thank you. All right, sorry for cutting""" start="00:18:30.240" video="qanda-papers" id="subtitle"]]
+[[!template text="""a little abruptly. It's because we use crontabs to move to""" start="00:18:36.440" video="qanda-papers" id="subtitle"]]
+[[!template text="""the next talk. And sadly, I don't have any leeway on this. So""" start="00:18:38.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""feel free to continue the discussion. I'll be moving on to""" start="00:18:42.520" video="qanda-papers" id="subtitle"]]
+[[!template text="""make sure everything is working. So enjoy the discussion.""" start="00:18:45.280" video="qanda-papers" id="subtitle"]]
+[[!template text="""Thank you very much. Bye-bye.""" start="00:18:48.640" video="qanda-papers" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [vincent.conus@pm.me](mailto:vincent.conus@pm.me?subject=Comment%20for%20EmacsConf%202023%20papers%3A%20Writing%20academic%20papers%20in%20Org-Roam)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/papers-before.md b/2024/info/papers-before.md
index 67126f85..46876d15 100644
--- a/2024/info/papers-before.md
+++ b/2024/info/papers-before.md
@@ -1,18 +1,42 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 11-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="papers">
-<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="/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.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="/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 stroke-width="3" x="13" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 11-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-papers.html>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Waiting for a caption volunteer
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T14:10:00Z" end="2024-12-07T14:20:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~9:10 AM - 9:20 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~8:10 AM - 8:20 AM CST (US/Central)<br />Saturday, Dec 7 2024, ~7:10 AM - 7:20 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~6:10 AM - 6:20 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~2:10 PM - 2:20 PM UTC <br />Saturday, Dec 7 2024, ~3:10 PM - 3:20 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~4:10 PM - 4:20 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~7:40 PM - 7:50 PM IST (Asia/Kolkata)<br />Saturday, Dec 7 2024, ~10:10 PM - 10:20 PM +08 (Asia/Singapore)<br />Saturday, Dec 7 2024, ~11:10 PM - 11:20 PM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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?
+02:16.215 Challenges
+03:35.320 Basic Org to PDF
+04:08.061 How to LaTeX properly, though?
+04:32.304 LaTeX-specific headers
+04:54.625 Using a formatting class file
+05:31.395 Using a different LaTeX command
+06:13.138 References links for bibliography
+07:09.720 Examples
+07:41.240 Tags
+
+"""]]<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 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?
+06:22.600 Q: How do you start a new document?
+07:41.720 Q: What do you think of using citar with org-roam-bibtex?
+09:26.320 Q: Most academic journals insist that papers are formatted in their own custom LaTeX documentclass.  Does org-roam make it easy to do that?
+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="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/papers-nav.md b/2024/info/papers-nav.md
index 7d153318..8182a92c 100644
--- a/2024/info/papers-nav.md
+++ b/2024/info/papers-nav.md
@@ -1,7 +1,6 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/sat-open">Saturday opening remarks</a>
-Next by time: <a href="/2024/talks/project">Managing writing project metadata with org-mode</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Next by track: <a href="/2024/talks/project">Managing writing project metadata with org-mode</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/pgmacs-after.md b/2024/info/pgmacs-after.md
index 5181bb61..255b74a1 100644
--- a/2024/info/pgmacs-after.md
+++ b/2024/info/pgmacs-after.md
@@ -1,7 +1,603 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [eric.marsden@risk-engineering.org](mailto:eric.marsden@risk-engineering.org?subject=Comment%20for%20EmacsConf%202023%20pgmacs%3A%20PGmacs%3A%20browsing%20and%20editing%20PostgreSQL%20databases%20from%20Emacs)
+<div class="transcript transcript-mainVideo"><a name="pgmacs-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.260" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""Hi, this is a short presentation about PGmacs,""" start="00:00:01.260" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""which is a browsing and editing interface for""" start="00:00:04.180" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Postgres databases.""" start="00:00:07.100" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""My name is Eric Marsden, and I'm the""" start="00:00:08.920" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""developer of this Emacs Lisp library.""" start="00:00:11.320" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""PGmacs was inspired by sqlite-mode, which is a""" start="00:00:14.800" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""great feature available from Emacs 29 onwards.""" start="00:00:17.420" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It allows you to view and modify SQLite""" start="00:00:21.060" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""databases you might have lying around.""" start="00:00:24.560" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It's a really great feature.""" start="00:00:26.760" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It would be even better, however, if it""" start="00:00:28.140" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""were able to use a real database.""" start="00:00:30.840" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And I happen to know that was possible""" start="00:00:34.540" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""because a few years ago, I wrote an""" start="00:00:36.200" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Emacs Lisp library, pg.el, which implements the wire""" start="00:00:38.120" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""protocol used for communication over the network between""" start="00:00:42.920" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a Postgres client and the Postgres backend, the""" start="00:00:46.280" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Postgres server.""" start="00:00:49.600" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""I've included here an example of what it""" start="00:00:51.580" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""looks like to use this library.""" start="00:00:53.560" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""You connect to the database by specifying the""" start="00:00:54.820" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""database name, your username, your password, potentially the""" start="00:00:58.240" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""hostname that you're connecting to.""" start="00:01:01.520" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Once you're connected, you can then execute SQL""" start="00:01:03.800" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""statements, for example, to create a new table,""" start="00:01:06.680" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""to insert values into that table, and to""" start="00:01:10.180" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""count the number of rows in a table.""" start="00:01:13.860" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And pg.el does automatic type conversion to""" start="00:01:17.100" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""and from Emacs Lisp types and Postgres types for""" start="00:01:20.300" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""you.""" start="00:01:24.180" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:01:26.710" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""Probably the best is to jump straight into""" start="00:01:26.710" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a demo of PGmacs.""" start="00:01:29.170" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""When we connect to a database, we see""" start="00:01:31.210" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""up the top of the buffer, some information""" start="00:01:34.130" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""about the backend that we're connected to, some""" start="00:01:36.330" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""version information and the total database size on""" start="00:01:39.070" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""disk.""" start="00:01:42.010" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""There are some shortcuts to some commands we""" start="00:01:43.090" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""can run on the database, and there's a""" start="00:01:45.170" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""list of tables that we have access to,""" start="00:01:47.370" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""with again, metainformation about their size on""" start="00:01:50.230" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""disk and their owner.""" start="00:01:52.650" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Now, we can enter a table by pressing""" start="00:01:53.650" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""return.""" start="00:01:56.490" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Here we again see some metainformation about""" start="00:01:58.510" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""the table, such as the list of columns,""" start="00:02:01.230" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""the SQL type of each column, any defaults""" start="00:02:05.510" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""that might be present and any SQL constraints.""" start="00:02:08.490" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We see any indexes that might be present""" start="00:02:11.970" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""on this table, and then we see the""" start="00:02:14.370" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""list of rows of data in the table.""" start="00:02:16.790" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""If we see any information which is incorrect""" start="00:02:19.830" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""or incomplete, we can easily fix it by""" start="00:02:22.870" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""pressing enter again, and this updates the information""" start="00:02:26.710" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""present in the database.""" start="00:02:36.300" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""PGmacs shows us this in the minibuffer""" start="00:02:38.200" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""it has updated one row.""" start="00:02:39.840" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can look at help for the key""" start="00:02:43.540" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""bindings that are present in this type of""" start="00:02:45.440" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""buffer.""" start="00:02:47.440" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""If we scroll down, we can see that""" start="00:02:48.120" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""we can upcase the value of a cell""" start="00:02:49.580" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""with M-u.""" start="00:02:51.580" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Let's try that out.""" start="00:02:52.920" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Okay, here we have updated the value of""" start="00:02:56.430" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""the cell in the database.""" start="00:02:58.950" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can now lowercase it, and we can""" start="00:03:00.830" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""put it back to the initial""" start="00:03:03.330" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""title case of the value.""" start="00:03:06.510" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can also run a shell command on""" start="00:03:09.010" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a cell value, to count the number of""" start="00:03:11.550" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""characters, for example.""" start="00:03:14.570" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can run a shell command with a""" start="00:03:17.570" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""prefix argument, which updates the value in the""" start="00:03:20.390" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""database with the output from the shell command.""" start="00:03:22.990" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""So that has updated the database.""" start="00:03:27.470" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""If we do that again, that will reverse""" start="00:03:30.270" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""the value. If we come back""" start="00:03:32.790" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""to the list of tables, we see""" start="00:03:39.750" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""that there is a table which is called""" start="00:03:41.590" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""deleteme.""" start="00:03:43.010" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can try renaming this table with R,""" start="00:03:43.890" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""we can look at what is in this""" start="00:03:50.380" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""table.""" start="00:03:52.880" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Deletion""" start="00:03:53.960" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""Okay, there is only one row of information""" start="00:03:53.960" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""that doesn't seem very important, so let's delete""" start="00:03:56.600" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""that.""" start="00:03:59.280" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Let's now delete the table with DEL.""" start="00:04:02.160" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""PGmacs asks for confirmation, and we've deleted the""" start="00:04:07.980" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""table.""" start="00:04:11.000" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Now when we have a big table with""" start="00:04:13.390" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a lot of data, PGmacs is going to""" start="00:04:15.470" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""show us the results paginated, so we can""" start="00:04:18.250" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""go chunk by chunk through the table.""" start="00:04:21.150" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can implement a where filter on the""" start="00:04:24.370" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""rows to only show the rows that match""" start="00:04:28.070" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a certain SQL clause.""" start="00:04:30.570" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""So for example, here we have some temperature""" start="00:04:33.110" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""measurements.""" start="00:04:35.450" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We want to focus on measurements that are""" start="00:04:36.490" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""more than 40 degrees Celsius, for example.""" start="00:04:38.690" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Okay, we have now filtered on a certain""" start="00:04:45.980" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""number of rows.""" start="00:04:48.120" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""The filter is shown to us just up""" start="00:04:49.540" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""here, and we see here that we have""" start="00:04:51.240" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""some values that look anomalous.""" start="00:04:53.540" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""There's one, 140, and one is 61.""" start="00:04:56.500" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We probably want to delete them, they represent""" start="00:04:59.840" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""errors.""" start="00:05:02.980" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can mark them for deletion with d,""" start="00:05:04.080" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""and then really delete them, expunge them, as""" start="00:05:06.560" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""in Dired, with x.""" start="00:05:09.680" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Export""" start="00:05:12.880" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""We can export this table in CSV format,""" start="00:05:12.880" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""thanks to this little button up here.""" start="00:05:16.480" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Here we have our table conveniently formatted as""" start="00:05:19.860" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""CSV.""" start="00:05:22.760" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can also export a particular row to""" start="00:05:23.400" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""JSON by typing j, let's look at""" start="00:05:28.480" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""what that looks like.""" start="00:05:32.080" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Okay, here's the JSON for one of the""" start="00:05:37.810" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""rows in the table.""" start="00:05:40.230" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""HStore""" start="00:05:42.250" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""Now let's look at a table that contains""" start="00:05:42.250" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a column of type HStore.""" start="00:05:44.270" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""This is a Postgres-specific key-value map.""" start="00:05:46.430" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Then the attributes column is of type""" start="00:05:49.110" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""JSON, which can be stored natively in Postgres.""" start="00:05:51.170" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It's possible to edit these values using a""" start="00:05:54.750" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""widget-based interface by typing w, and here""" start="00:05:56.910" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""we have a convenient interface for modifying these""" start="00:06:00.490" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""types of values.""" start="00:06:03.630" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Likewise, for the JSON type parameter, we can""" start="00:06:05.410" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""update using a widget-based interface.""" start="00:06:08.390" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Connecting to a different database""" start="00:06:11.510" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""Let's connect to a different database.""" start="00:06:11.510" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We do that with a M-x pgmacs, and""" start="00:06:14.490" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""then enter our username and password.""" start="00:06:18.910" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Here we have the list of tables present""" start="00:06:27.310" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""in this database.""" start="00:06:29.390" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""SchemaSpy""" start="00:06:31.110" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""PGmacs has some support for running the SchemaSpy""" start="00:06:31.110" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""utility, which generates a graphical representation of the""" start="00:06:33.690" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""relationships between tables in this database, which can""" start="00:06:37.950" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""be useful when you're discovering the database.""" start="00:06:41.710" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Here is the SVG that's output by this""" start="00:06:45.170" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""utility.""" start="00:06:47.870" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""This is a test database containing information about""" start="00:06:50.860" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a digital media store.""" start="00:06:53.840" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It has a table with information about the""" start="00:06:55.880" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""tracks that are available.""" start="00:06:58.160" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""If we look at this table, we""" start="00:07:00.960" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""see that we have the name of the""" start="00:07:03.480" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""track, a reference to the album, album ID.""" start="00:07:04.780" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""This is a reference to a foreign key,""" start="00:07:09.240" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a key in the table which is called""" start="00:07:11.660" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""album.""" start="00:07:13.520" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Now we can follow this foreign key reference""" start="00:07:14.820" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""simply by pressing Enter, and here we find""" start="00:07:16.840" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""it's the album called For Those About To""" start="00:07:20.580" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Rock.""" start="00:07:23.100" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And in the same way, here we have""" start="00:07:24.260" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a foreign key reference to the relevant artist""" start="00:07:26.420" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""which we can follow.""" start="00:07:28.780" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""That's, of course, AC/DC.""" start="00:07:30.080" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Convenience queries""" start="00:07:32.620" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""And finally, PGmacs has some convenience queries that""" start="00:07:32.620" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""allows us to list the procedures which are""" start="00:07:35.720" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""defined in this database.""" start="00:07:38.280" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Here we have the built-in procedures, mostly""" start="00:07:40.260" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""used by the PostGIS extension.""" start="00:07:42.820" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can also display some more information about""" start="00:07:48.430" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""our backend.""" start="00:07:52.110" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Here we have the list of extensions which""" start="00:07:53.090" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""are available.""" start="00:07:56.450" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can load one of these extensions if""" start="00:07:57.470" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""we have the rights to do that.""" start="00:08:00.250" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Here we've loaded the relevant extension.""" start="00:08:02.350" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can show some information about the Postgres""" start="00:08:06.210" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""settings also, and update them if we have""" start="00:08:08.850" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""the rights to do that.""" start="00:08:16.650" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Emacs as an application development platform""" start="00:08:18.850" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""Now I'm preaching to the converted, but Emacs""" start="00:08:18.850" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""is a really great application development platform.""" start="00:08:21.650" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""PGmacs is currently around 3000 lines of code.""" start="00:08:25.510" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""A first point of comparison, PGCLI, which is""" start="00:08:29.630" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a text user interface for accessing Postgres implemented""" start="00:08:32.510" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""in Python, is 17,000 lines of code.""" start="00:08:36.409" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""PGAdmin4, which is a well-known Python GUI""" start="00:08:40.390" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""for administrating Postgres databases, is almost half a""" start="00:08:43.190" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""million lines of code.""" start="00:08:47.010" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And DBeaver, implemented in Java, is almost a""" start="00:08:48.410" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""million lines of code.""" start="00:08:51.450" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Developing things on Emacs, you get for""" start="00:08:53.130" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""free portability between different platforms.""" start="00:08:56.030" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""As I'm showing you, it works great on""" start="00:08:58.470" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Linux, which is where I developed this library.""" start="00:09:00.130" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It also works perfectly in the terminal, except""" start="00:09:03.070" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""for some of the functionality I showed, which""" start="00:09:06.530" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""requires SVG support.""" start="00:09:08.530" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It also works well, if you're into that""" start="00:09:10.970" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""kind of thing, on MacOS and on Windows.""" start="00:09:12.630" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And it even works perfectly on Haiku, which""" start="00:09:15.830" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""is a free BeOS clone.""" start="00:09:19.130" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Emacs is actually really pretty on this operating""" start="00:09:21.300" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""system, so congratulations to the people who did""" start="00:09:23.870" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""the port there.""" start="00:09:26.590" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Now, of course, the main advantage of building""" start="00:09:27.530" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""on the Emacs development platform, is that the""" start="00:09:29.350" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""application is easy for the user to extend.""" start="00:09:32.430" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Extending pgmacs""" start="00:09:36.250" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""To illustrate that, previously we were looking at""" start="00:09:36.250" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a table of temperature measurements.""" start="00:09:38.690" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Imagine we want to highlight rows in this""" start="00:09:42.070" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""table, which look anomalous, where the value looks""" start="00:09:44.510" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a bit extreme.""" start="00:09:48.430" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""That's quite easy to do with a bit""" start="00:09:50.090" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""of Emacs Lisp.""" start="00:09:52.150" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We define a function, which, if the cell""" start="00:09:54.610" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""value is bigger than 40, is going to""" start="00:09:58.410" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""display it in a face which has a""" start="00:10:01.570" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""dark red foreground.""" start="00:10:03.850" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can now register this display function for""" start="00:10:05.950" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""the measurement column in the temperatures table.""" start="00:10:08.890" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And if we reopen the table now, we""" start="00:10:12.190" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""see that the anomalous measurements are indeed highlighted""" start="00:10:16.490" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""in red.""" start="00:10:19.950" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Another example, imagine we have a table which""" start="00:10:24.100" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""contains image data.""" start="00:10:27.320" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""There's a column which is of BYTEA type,""" start="00:10:29.200" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""which contains images in binary form.""" start="00:10:31.740" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can display these inline as follows.""" start="00:10:35.340" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We create an inline image display function, using""" start="00:10:40.340" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Emacs' image support.""" start="00:10:44.900" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And then we'd register this function to display""" start="00:10:47.080" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""the image column in the inline image table.""" start="00:10:49.540" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""If we now reopen the inline image table,""" start="00:10:52.780" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""we see the images are displayed inline.""" start="00:10:56.060" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And as a final example of customisation, here's""" start="00:10:59.660" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""how to bind a key to a specific""" start="00:11:03.160" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""function, in the row-list buffer.""" start="00:11:05.440" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Let's define a function that does a DuckDuckGo""" start="00:11:08.800" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""lookup for a particular value in""" start="00:11:12.080" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""the Emacs web browser.""" start="00:11:15.500" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""We can define a function which does a""" start="00:11:18.080" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""funcall on the cell value for this""" start="00:11:22.140" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""DuckDuckGo lookup function.""" start="00:11:24.400" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And finally we can define a key, the""" start="00:11:27.100" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""capital D key, in the row-list map,""" start="00:11:30.060" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""which calls this function that does a""" start="00:11:33.540" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""DuckDuckGo lookup.""" start="00:11:35.480" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And now if I'm browsing information in a""" start="00:11:37.240" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""table that I want to do a web""" start="00:11:39.600" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""search on, I can use my D shortcut""" start="00:11:41.580" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""and see some web results concerning the cell.""" start="00:11:45.380" video="mainVideo-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:11:49.400" video="mainVideo-pgmacs" id="subtitle"]]</div>[[!template text="""So to conclude, the source and installation instructions""" start="00:11:49.400" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""for PGmacs are available on GitHub.""" start="00:11:53.880" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It requires Emacs 29.""" start="00:11:56.680" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""There is a prebuilt container image which you""" start="00:11:59.260" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""can use for testing.""" start="00:12:01.620" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It's a Docker image.""" start="00:12:02.980" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""The Docker image only works in terminal mode.""" start="00:12:04.580" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And of course that's a recommended way of""" start="00:12:06.160" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""testing Emacs Lisp code that you load""" start="00:12:08.380" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""into your Emacs before having read it.""" start="00:12:11.020" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It works with any recent version of Postgres""" start="00:12:13.360" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""over the past 10 years, including the latest""" start="00:12:15.720" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""release, Postgres 17.""" start="00:12:18.580" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It does work with a certain number of""" start="00:12:20.440" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""databases that are compatible with Postgres, such as""" start="00:12:22.700" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""ParadeDB, TimescaleDB and IvorySQL.""" start="00:12:26.440" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""However, it doesn't work with all databases that""" start="00:12:30.940" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""claim to be Postgres compatible.""" start="00:12:33.560" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""It doesn't work, for example, with CrateDB or""" start="00:12:35.340" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""with CockroachDB or some others that you see""" start="00:12:37.840" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""listed here.""" start="00:12:39.960" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""The reason for that is that these databases""" start="00:12:40.760" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""don't implement the system tables that PGmacs queries""" start="00:12:42.660" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""to obtain information about the columns present in""" start="00:12:46.440" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""a table, the size on disk, the ownership""" start="00:12:49.600" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""of tables, etc.""" start="00:12:52.220" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""PGmacs supports TLS encrypted connections to the database,""" start="00:12:54.600" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""as well as local Unix socket connections.""" start="00:12:58.380" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""And in terms of stability, I would classify""" start="00:13:02.040" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""it as beta status.""" start="00:13:04.600" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""I do use it myself in production on""" start="00:13:06.680" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""some not very important data.""" start="00:13:09.200" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Really, it works quite well.""" start="00:13:11.560" video="mainVideo-pgmacs" id="subtitle"]]
+[[!template text="""Thanks for your attention.""" start="00:13:14.300" video="mainVideo-pgmacs" id="subtitle"]]
+
+</div>
+
+Captioner: eric
+
+<div class="transcript transcript-qanda"><a name="pgmacs-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""And I believe we are live. Hi, Eric, how are you doing? Very""" start="00:00:00.000" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""well, thanks. It's a pleasure to have you as one of our""" start="00:00:10.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""speakers but it's also very nice to see you present about""" start="00:00:15.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""pgmacs because I found your talk to be very didactic and very""" start="00:00:19.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""visual. So thank you for taking the time to do a very nice""" start="00:00:24.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""presentation. I wanted to give the opportunity as I do with""" start="00:00:26.480" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""other speakers to maybe talk about some stuff that you could""" start="00:00:31.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""not include into the talk because of the format. So is there""" start="00:00:36.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""anything you'd like to share with the viewers that you""" start="00:00:39.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""weren't able to include?""" start="00:00:41.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Oh, I think I gave most of the most of the relevant""" start="00:00:45.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""information. This is a fairly young application. I've been""" start="00:00:50.720" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""developing this since roughly the beginning of the year. So""" start="00:00:54.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""there are probably some rough edges that people will run""" start="00:00:58.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""into if they use Postgres differently from what I do. Or they""" start="00:01:02.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""hear maybe conflicts with some other Emacs packages that""" start="00:01:07.480" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""people use that I don't use. So I would really welcome people""" start="00:01:10.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""trying it out and sending out bug reports if they do""" start="00:01:14.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""encounter some. Yeah, I mean, it's usually... Go on,""" start="00:01:19.360" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""please. Yeah, that would certainly help to make sure it's""" start="00:01:23.480" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""nice and robust. And of course, if you're letting this loose""" start="00:01:29.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""on some production database that you might have, you want""" start="00:01:31.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""this to be quite robust, obviously. Yeah, indeed. Because""" start="00:01:35.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""usually, you know, when you start publishing packages like""" start="00:01:41.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""this, that's when you realize that it has bad interaction""" start="00:01:43.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""with other modes in the Emacs of other persons. But""" start="00:01:46.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""especially when you're dealing with databases, you also""" start="00:01:49.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""realize that the domain space of what you're trying to do""" start="00:01:52.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""with your mode also is hugely dependent on what people have""" start="00:01:54.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""in their database, which schema they have. So, indeed, if""" start="00:01:59.000" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""you have been interested, and I think plenty of people have""" start="00:02:03.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""been interested by what you've presented, part of the""" start="00:02:05.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""reason a software becomes great is that you've got plenty of""" start="00:02:09.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""people making bug reports and making sure that all the""" start="00:02:11.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""faults have been ironed out. So, you know what your task is. I""" start="00:02:14.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""will also ask you, particularly right now, people""" start="00:02:18.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""currently viewing, to add your questions on the pad as""" start="00:02:21.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""usual, because you've had plenty of nice reactions, but I'm""" start="00:02:24.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""sure you have plenty of questions as well. So Eric, what I'll""" start="00:02:27.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""be doing, I'll be reading you the questions so that it's a""" start="00:02:30.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""little more didactic. Starting with the first one. This is""" start="00:02:33.760" video="qanda-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you know if PGmacs works with TRAMP?""" start="00:02:37.440" video="qanda-pgmacs" id="subtitle"]]</div>[[!template text="""brilliant, thank you. Do you know if pgmacs works with TRAMP?""" start="00:02:37.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""I often use TRAMP multi-hop to access databases both""" start="00:02:41.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""remotely when accessing via bastion server and locally""" start="00:02:44.120" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""when using OCI containers. I believe you've already""" start="00:02:46.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""answered but if you could just perhaps read your answer as""" start="00:02:49.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""well for everyone to benefit from it. Yep, sure, that's my""" start="00:02:53.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""comment indeed. So I haven't currently implemented any""" start="00:02:58.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""TRAMP support. I'm not sure that TRAMP is really useful for""" start="00:03:02.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""this type of situation, because as I understand it, TRAMP is""" start="00:03:07.560" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""establishing SSH connections itself to remote servers.""" start="00:03:11.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""pgmacs is doing the same thing, so it doesn't currently have""" start="00:03:17.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""any support for hooking in with the TRAMP support. Right.""" start="00:03:22.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Pardon me if I missed the presentation. Oh, go on, please. I""" start="00:03:27.400" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""guess you could set up an SSH tunnel. It does work with an SSH""" start="00:03:31.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""tunnel, obviously, but there's no support for hooking into""" start="00:03:34.360" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""an SSH tunnel that TRAMP might be able to create. I'm not sure""" start="00:03:39.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""TRAMP actually uses SSH tunnels rather than direct""" start="00:03:43.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""commands, but anyway. Yeah, I think that might be useful.""" start="00:03:46.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Yeah, I don't know either. I don't have the answer whether""" start="00:03:51.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""TRAMP actually can create tunnels like this. I'm usually""" start="00:03:54.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""used to TRAMP connecting to an endpoint, be it a directory or""" start="00:03:59.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""a file, and the tunnel is just you accessing the file. But""" start="00:04:02.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""usually, if you're trying to access a remote Postgres""" start="00:04:06.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""database, you would probably manage the port forwarding in""" start="00:04:08.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""a separate terminal just to be able to make sure that""" start="00:04:12.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""everything maps correctly to your machine, and then you""" start="00:04:15.200" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""would launch pgmacs with the forward port information.""" start="00:04:17.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""That's, I assume, how you would do it anyway. But yeah, I""" start="00:04:21.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""mean, if you could specify what you mean by TRAMP support and""" start="00:04:25.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""if you have something specific in mind, I'm talking to the""" start="00:04:29.120" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""questioner, feel free to specify and we'll see if you can""" start="00:04:31.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""answer it. But in the meantime, moving to the next question.""" start="00:04:35.120" video="qanda-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How did you come up with this brilliant idea?""" start="00:04:38.240" video="qanda-pgmacs" id="subtitle"]]</div>[[!template text="""Great work, I'm impressed. How did you come up with this""" start="00:04:38.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""brilliant idea, I assume, to create pgmacs? Well, thanks for""" start="00:04:42.000" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""the compliment. It's a lot of fun developing something""" start="00:04:49.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""which is, as I said, such a small amount of code and which""" start="00:04:52.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""provides quite a bit of useful functionality. In""" start="00:04:57.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""particular, if you compare it with existing Terminal mode""" start="00:05:02.360" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""applications for manipulating Postgres data, they are""" start="00:05:06.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""not as extensible as Emacs is naturally. So I actually got""" start="00:05:12.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""the idea for developing this when I first tested out the""" start="00:05:19.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""SQLite mode, which is available in Emacs 29.1.""" start="00:05:23.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""And I thought, well, that's really quite impressive. And it""" start="00:05:27.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""allows you to delete rows and insert content and so on. And I""" start="00:05:31.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""was thinking, yeah, Emacs is a, is a useful environment to do""" start="00:05:37.360" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""that. And since several years ago, when I was doing my PhD, so""" start="00:05:42.360" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""to avoid doing my PhD, I was developing Emacs, I was""" start="00:05:50.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""developing stuff in Emacs Lisp and one of the libraries I""" start="00:05:54.000" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""developed was an interface to Postgres over the network. So""" start="00:05:58.400" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""that's the library called pg.el, which is used by pgmacs to""" start="00:06:02.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""access Postgres and to do all the parsing of data which""" start="00:06:08.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""arrives in Postgres formats into the Emacs Lisp into the""" start="00:06:14.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Emacs corresponding versions. So, for example, integers""" start="00:06:19.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""are passed as Emacs integers, floating point numbers as""" start="00:06:23.000" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""floating point numbers, and so on. Right, yeah. I mean, it's""" start="00:06:25.400" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""pretty needed, obviously, when you have such a tooling like""" start="00:06:30.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""this, to make sure that the type conversion works properly,""" start="00:06:34.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""because the types that you have in Postgres do not""" start="00:06:37.360" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""necessarily map over to what we have in Emacs. Like, I'm""" start="00:06:39.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""interested, how would you handle g's and b columns in pgmacs?""" start="00:06:43.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""JSON is mapped to an edis dict, a dictionary.""" start="00:06:49.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""It depends on the top level object type for your JSON column.""" start="00:06:55.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""If it's an array, it's mapped to an Emacs Lisp array. If it's a""" start="00:07:03.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""dict, which is most common, it's mapped to an Emacs Lisp""" start="00:07:07.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""dictionary. All right, well it makes perfect sense. So I can""" start="00:07:12.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""break in with a question. Thanks, I just helped myself to the""" start="00:07:17.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""BBB privilege of kind of running around backstage, being a""" start="00:07:21.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""helper backstage. So thanks for your awesome talk, Eric. I""" start="00:07:26.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""super appreciated it. You know, I noticed that you that""" start="00:07:31.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""you're on a slightly older version of Emacs that I deal with""" start="00:07:36.720" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""in helping with producing the Windows binaries I run into""" start="00:07:43.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""and with some other stuff I do. I'm dealing with that""" start="00:07:49.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""friction of sometimes I've got some work of my own that""" start="00:07:53.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""applies against a specific version of Emacs and it's a bunch""" start="00:07:56.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""of work to think about moving it forward. Just curious if you""" start="00:07:59.720" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""started thinking about that or if you routine, if that's a""" start="00:08:02.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""routine that you haven't done or there's something maybe""" start="00:08:06.480" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""specifically going on with, you know, with trunk""" start="00:08:09.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""development that looks intimidating to deal with. Thanks""" start="00:08:14.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""for the comment. I'm not sure I'm using a really old version""" start="00:08:20.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""for Windows. I don't really develop often on Windows, but I I""" start="00:08:24.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""occasionally check that it works, and I took a screenshot""" start="00:08:29.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""that I included in the slides here, but I think I'm using""" start="00:08:32.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""29.4, the current version on Windows. I thought I saw 29.1,""" start="00:08:34.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""so that's probably my, I probably missed it when it went by.""" start="00:08:40.560" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""My bad. No, no, I use it via the choco package updater so that""" start="00:08:48.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""updates the Emacs version quite easily on Windows. So""" start="00:08:54.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""thanks for your work on maintaining Windows binaries. I""" start="00:08:58.480" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""realize that was- I sit downstream at the end of a lot of other""" start="00:09:03.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""people's hard work and then just focus on trying to QA well""" start="00:09:07.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""and help catch problems early. It's really fun. But of""" start="00:09:11.400" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""course, my pleasure.""" start="00:09:15.560" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Coming back to the previous question, so the the""" start="00:09:16.400" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""questionnaire actually provided a little more context. So""" start="00:09:21.800" video="qanda-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""TRAMP continued""" start="00:09:26.920" video="qanda-pgmacs" id="subtitle"]]</div>[[!template text="""with docker.el, kubel, etc, it's often possible to, for""" start="00:09:26.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""example, select a container pod or whatever that is hosted""" start="00:09:30.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""on the machine you've connected to via TRAMP, such as""" start="00:09:33.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Podman, colon image colon path and trigger a terminal shell""" start="00:09:36.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""as well as pull forward on other similar things. It'd be nice""" start="00:09:41.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""to be able to use this tool in a similar way since it would open""" start="00:09:44.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""up the ability to use it with complex connection""" start="00:09:47.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""configuration. Doing SSH tunnel manually is of course""" start="00:09:49.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""totally fine in practice and if it is actually the case""" start="00:09:53.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""personally when I need to remote into a kubernetes machine I""" start="00:09:56.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""use POSIX script that I use on most of my machines but I don't""" start="00:10:01.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""do it inside Emacs. But yeah, if such a thing is possible via""" start="00:10:05.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""TRAMP, it definitely feels like it would be possible to do""" start="00:10:08.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""something similar in pgmacs. So perhaps that's a path of""" start="00:10:11.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""investigation for you that has opened up. Yeah, thanks for""" start="00:10:14.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""these comments. I'll look into that indeed if people have""" start="00:10:19.560" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""some shortcuts registered in TRAMP. So not for a terminal,""" start="00:10:22.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""because pgmacs won't work through a terminal, but through a""" start="00:10:26.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""port forward, then that would be convenient. I'll see how""" start="00:10:29.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""easy that is to set up. Yeah, I'm pretty sure the way it works""" start="00:10:33.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""is that it starts some processes in the background in Emacs""" start="00:10:38.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""just to either maintain the port forward or to maybe remap""" start="00:10:41.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""some kubecon things or whatever. So with pgmacs,""" start="00:10:45.360" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""considering complex pipelines to get to the end""" start="00:10:49.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""destination, it feels like it would be possible to do""" start="00:10:51.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""something. But perhaps it's not the responsibility of""" start="00:10:54.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""pgmacs, perhaps it's the responsibility of another,""" start="00:10:57.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""perhaps something that would target TRAMP more so than""" start="00:11:00.200" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""pgmacs. But it's nice to see again how the beauty of Emacs""" start="00:11:03.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""is that everything is Elisp at the end, and the way they""" start="00:11:08.400" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""interact, you might want to question yourself whether this""" start="00:11:12.120" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""belongs more to pgmacs or more to TRAMP, but at the end of the""" start="00:11:16.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""day, both applications will be able to benefit from the""" start="00:11:18.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""functions of the other. So that's the beauty of the""" start="00:11:22.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""philosophy right here. I do see... Absolutely, I agree.""" start="00:11:24.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Sorry, before we move to different questions, an""" start="00:11:29.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""additional point. I should point out that to warn people""" start="00:11:32.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""that probably running over an SSH tunnel is going to be a bit""" start="00:11:36.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""slow. I mostly use it on my own machine via a local Unix""" start="00:11:41.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""connection. And for some reason that I haven't understood,""" start="00:11:46.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""pgmacs is quite a bit slower when it's even connecting to the""" start="00:11:50.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""same database on the local machine, but via Emacs' network""" start="00:11:55.120" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""support instead of via the Unix socket support. There is""" start="00:12:00.360" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""like a factor 10 difference in throughput and in latency. I""" start="00:12:05.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""don't really understand why currently, because it's using""" start="00:12:11.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""exactly the same Emacs Lisp level primitives. And when you""" start="00:12:15.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""do this using other libraries like libpq, which is the""" start="00:12:21.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Postgres standard official library for connecting to""" start="00:12:24.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Postgres, there's not such a performance difference. So""" start="00:12:30.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""there's probably something that is not working perfectly""" start="00:12:34.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""in the Emacs network support. I'll have to see whether I can""" start="00:12:39.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""investigate how to improve that performance. Yeah, I'm""" start="00:12:43.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""going to say it sounds like a great bug to have because it""" start="00:12:48.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""feels like it will allow you to dig deeper into Emacs to""" start="00:12:53.000" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""understand what is going on here. Because as you said,""" start="00:12:57.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""normally it's supposed to work exactly the same,""" start="00:12:59.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""especially if it's still in your local machine, but it""" start="00:13:01.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""doesn't. Personally, that's the kind of bug that I really""" start="00:13:04.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""like and that I'd like to spend more time investigating. So""" start="00:13:07.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""perhaps you might think otherwise, but I wish you luck on the""" start="00:13:11.200" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""debugging with this particular matter. All right, moving""" start="00:13:14.760" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""to the last question that we have and then we'll probably go""" start="00:13:18.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""on a little bit of a break.""" start="00:13:21.520" video="qanda-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is sqlite-mode also capable of all of this functionality (table relations, etc)? If not, will it be possible to abstract out this functionality from pgmacs somehow?""" start="00:13:22.966" video="qanda-pgmacs" id="subtitle"]]</div>[[!template text="""Question. Is SQLite mode also""" start="00:13:22.966" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""capable of all of this functionality, table relations,""" start="00:13:25.400" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""etc.? If not, would it be possible to abstract out this""" start="00:13:28.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""functionality from pgmacs somehow?""" start="00:13:31.560" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""So I'm not very familiar with SQLite because I don't really""" start="00:13:33.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""use it very much myself. I'm not sure I can answer that""" start="00:13:41.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""question. Sorry about that. I think it is probably a bit more""" start="00:13:46.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""basic because SQLite itself is quite a bit more basic in""" start="00:13:53.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""terms of the types of indexes it's able to support and the""" start="00:13:56.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""types of constraints it's able to support. Is it relevant to""" start="00:14:01.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""create an abstract API for connecting to databases? I think""" start="00:14:09.200" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""there is already actually a library that abstracts out from""" start="00:14:13.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""SQLite and Postgres. Postgres, when you connect to it via a""" start="00:14:19.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""PSQL subsystem,""" start="00:14:25.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""it might be worthwhile doing that, but there are often a few""" start="00:14:29.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""minor differences in SQL syntax and so on between""" start="00:14:38.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""databases. So it might be difficult to have something that""" start="00:14:42.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""really works with generic queries in an effective way. All""" start="00:14:45.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""these SQL dialects are a little bit different,""" start="00:14:53.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""unfortunately. So there was another question about I was""" start="00:14:58.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""just going to read out the next question.""" start="00:15:02.320" video="qanda-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Would it be possible to move it into Emacs tree? Are the maintainers interested in it?""" start="00:15:06.511" video="qanda-pgmacs" id="subtitle"]]</div>[[!template text="""So have you thought""" start="00:15:06.511" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""about integrating your work into the Emacs tree? Do you know""" start="00:15:07.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""if people are interested? This was a question from the past.""" start="00:15:12.560" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Yeah, I think it's probably a bit young to do so, so far.""" start="00:15:17.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""I'm updating it quite regularly. Maybe once it's more""" start="00:15:24.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""stabilized, I wouldn't necessarily object to this. I have""" start="00:15:30.120" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""some sort of philosophical objections to giving away my""" start="00:15:35.400" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""copyright, so I'm not sure that will actually be possible.""" start="00:15:38.560" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Oh, that'd be interesting. I'd love to get you on maybe a""" start="00:15:42.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""panel talk about that sometime. Something I'd think about.""" start="00:15:48.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Well, from a very simple point of view, I think that the""" start="00:15:51.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""copyright and the system works well with the existing""" start="00:15:56.000" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""license and without a license transfer, so I don't feel that""" start="00:16:01.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""the, sorry, without a copyright transfer,""" start="00:16:05.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""I don't feel that the copyright transfer is really a necessary step for""" start="00:16:07.767" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""taking things away from maintainers. It feels like asking""" start="00:16:14.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""the maintainers to give up on some of their copyright...""" start="00:16:21.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Indeed. Yeah, I see where that's a little beyond our scope,""" start="00:16:26.560" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""but it's a fascinating topic and I appreciate your sharing""" start="00:16:30.000" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""your views there. I mean, that sounds like a whole topic of""" start="00:16:33.520" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""its own, frankly.""" start="00:16:36.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Yeah. Corwin, do you want to fill the last question? Sure. So""" start="00:16:41.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""the question was, I almost missed this one, so glad I didn't.""" start="00:16:47.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""This may have been answered already.""" start="00:16:52.040" video="qanda-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What do you use for the in-buffer tables? Vtable?""" start="00:16:53.850" video="qanda-pgmacs" id="subtitle"]]</div>[[!template text="""What do you use for""" start="00:16:53.850" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""in-buffer tables? Do you use vtable? Yep. Thanks for the""" start="00:16:55.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""question. It is indeed vtable. However, it's not really""" start="00:17:00.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""vtable. It's a fork that I made, which is called pgmix table.""" start="00:17:04.600" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""because Vtable doesn't have exactly the right""" start="00:17:10.920" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""functionality in particular for recoloring rows when you""" start="00:17:17.200" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""add a row. So I've currently forked this. I'm thinking about""" start="00:17:22.120" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""giving those back as patches to Vtable, plausibly.""" start="00:17:28.240" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""I know that there is some ongoing work also on vTable in the""" start="00:17:36.360" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""core. So I'll have to look at what is plausible to feed back""" start="00:17:40.720" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""into the main version.""" start="00:17:45.840" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""All right, great. I think we are nearing the end of the Q&A. We""" start="00:17:46.720" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""are due to move to the next talk in about three minutes now. I""" start="00:17:55.200" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""can fill 30 seconds or a minute of that with I guess one more""" start="00:17:59.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""maybe back and forth and I'll try to be quicker this time.""" start="00:18:02.720" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""First of all, thanks for your kind remarks. But my question""" start="00:18:05.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""wasn't really about Windows so much, it was just how I'm""" start="00:18:08.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""relating... So have you, let me put it more simply, have you""" start="00:18:11.840" video="qanda-pgmacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Integrating with Emacs 30?""" start="00:18:16.640" video="qanda-pgmacs" id="subtitle"]]</div>[[!template text="""started looking at integrating with Emacs 30 or with the""" start="00:18:16.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""master branch at all? Do you have any sense of how much work""" start="00:18:20.640" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""it's going to be for you to carry things forward there? I've""" start="00:18:24.680" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""tested it with the pre-release, yes. I mean, just a very""" start="00:18:27.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""basic testing and everything works perfectly. There's""" start="00:18:31.040" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""really no... There was no difference that I have noticed""" start="00:18:35.080" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""between 29.4 and the 30 pre-release on the aspects that I use""" start="00:18:39.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""at least in Emacs. Neato.""" start="00:18:46.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""That was it, Leo. Thanks for letting me back in for one more""" start="00:18:48.960" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""bite at the apple there. And I appreciate everybody tuning""" start="00:18:56.440" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""in and participating in the Q&A and this awesome talk.""" start="00:18:58.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""Thanks for your questions. That was great. Yeah, and thank""" start="00:19:03.480" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""you for answering them and for the presentation as well. So""" start="00:19:06.880" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""we'll be moving in about two minutes to the next talk, which""" start="00:19:10.320" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""is pre-recorded as well. Well, we didn't really give you the""" start="00:19:14.200" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""chance, Eric, to have the last word. So do you have any last""" start="00:19:20.160" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""word?""" start="00:19:29.400" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""please try it out, try out pgmacs and send some feedback""" start="00:19:29.800" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""that'll help improve it over time. Sure, great. Well, thank""" start="00:19:34.480" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""you so much, Eric, for taking the time to come to the""" start="00:19:39.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""conference, and we'll see you soon. Thank you. Bye,""" start="00:19:41.560" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""everyone. Bye. And we'll be live with the next talk in about 1""" start="00:19:46.000" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""minute 30. So we'll take a little bit of a breather, go make""" start="00:19:50.280" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""some coffee, go take a bio break. We'll be back soon. See you""" start="00:19:53.120" video="qanda-pgmacs" id="subtitle"]]
+[[!template text="""in a bit.""" start="00:19:56.600" video="qanda-pgmacs" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [eric.marsden@risk-engineering.org](mailto:eric.marsden@risk-engineering.org?subject=Comment%20for%20EmacsConf%202023%20pgmacs%3A%20PGmacs%3A%20browsing%20and%20editing%20PostgreSQL%20databases%20from%20Emacs)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/pgmacs-before.md b/2024/info/pgmacs-before.md
index 8c1de6c1..1770f8ee 100644
--- a/2024/info/pgmacs-before.md
+++ b/2024/info/pgmacs-before.md
@@ -1,18 +1,40 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 14-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="pgmacs">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect stroke-width="3" x="377" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 10-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-pgmacs.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="2024-12-08T18:35:00Z" end="2024-12-08T18:45:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~1:35 PM - 1:45 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~12:35 PM - 12:45 PM CST (US/Central)<br />Sunday, Dec 8 2024, ~11:35 AM - 11:45 AM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~10:35 AM - 10:45 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~6:35 PM - 6:45 PM UTC <br />Sunday, Dec 8 2024, ~7:35 PM - 7:45 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~8:35 PM - 8:45 PM EET (Europe/Athens)<br />Monday, Dec 9 2024, ~12:05 AM - 12:15 AM IST (Asia/Kolkata)<br />Monday, Dec 9 2024, ~2:35 AM - 2:45 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~3:35 AM - 3:45 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+05:12.880 Export
+05:42.250 HStore
+06:11.510 Connecting to a different database
+06:31.110 SchemaSpy
+07:32.620 Convenience queries
+08:18.850 Emacs as an application development platform
+09:36.250 Extending pgmacs
+11:49.400 Conclusion
+
+"""]]<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 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
+13:22.966 Q: Is sqlite-mode also capable of all of this functionality (table relations, etc)? If not, will it be possible to abstract out this functionality from pgmacs somehow?
+15:06.511 Q: Would it be possible to move it into Emacs tree? Are the maintainers interested in it?
+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="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/pgmacs-nav.md b/2024/info/pgmacs-nav.md
index 2f6ab0e8..6370572b 100644
--- a/2024/info/pgmacs-nav.md
+++ b/2024/info/pgmacs-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/hywiki">HyWiki: Fast, hyperlinked note-taking with no markup required</a>
-Next by time: <a href="/2024/talks/blee">About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/hyperbole">Fun things with GNU Hyperbole</a>
+Next by track: <a href="/2024/talks/literate">Literate programming for the 21st Century</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/project-after.md b/2024/info/project-after.md
index a7f8a052..14447599 100644
--- a/2024/info/project-after.md
+++ b/2024/info/project-after.md
@@ -1,7 +1,1132 @@
<!-- 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%20project%3A%20Managing%20writing%20project%20metadata%20with%20org-mode)
+<div class="transcript transcript-mainVideo"><a name="project-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""Good morning. I'm Blaine Mooers. I'm an associate""" start="00:00:00.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""professor of biochemistry and physiology at the""" start="00:00:10.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""University of Oklahoma Health Sciences in Oklahoma City.""" start="00:00:12.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I'm going to be talking about the utilization of Org mode to""" start="00:00:15.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""write a specific kind of log file for thinking about writing""" start="00:00:21.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""projects, in particular research articles. I have stored a""" start="00:00:26.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""template for this file on GitHub. You can find it at Mooers""" start="00:00:31.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Lab. If you go to the landing page and scroll down to""" start="00:00:35.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Emacs-related, you'll find a link to it.""" start="00:00:40.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I am a structural biologist. I utilize X-ray""" start="00:00:47.280" video="mainVideo-project" id="subtitle"]]
+[[!template text="""crystallography to determine the structures of proteins""" start="00:00:50.680" video="mainVideo-project" id="subtitle"]]
+[[!template text="""and nucleic acids that are important in human health. Our""" start="00:00:53.360" video="mainVideo-project" id="subtitle"]]
+[[!template text="""workflow is shown across the top. We start out with a""" start="00:00:58.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""purified material that we crystallize as shown by that""" start="00:01:01.880" video="mainVideo-project" id="subtitle"]]
+[[!template text="""elongated rod-shaped crystal on the left. We will mount""" start="00:01:04.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""that in a cold stream and collect diffraction data with""" start="00:01:09.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""X-rays in the instrument to the right. That instrument will""" start="00:01:14.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""generate an image like the one to the right where you see a""" start="00:01:20.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""bunch of spots. That's a diffraction pattern from the""" start="00:01:23.560" video="mainVideo-project" id="subtitle"]]
+[[!template text="""crystal. After rotating the crystal for one degree, we'll""" start="00:01:26.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""rotate the crystal 180 degrees to get a full data set that""" start="00:01:29.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""we'll process with a computer. This will lead to the""" start="00:01:33.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""chicken-wire map of electron density shown further to the""" start="00:01:37.360" video="mainVideo-project" id="subtitle"]]
+[[!template text="""right. Then on the far right, we have compared""" start="00:01:43.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""electrostructures of two drug molecules from two""" start="00:01:50.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""different structures, overlapped after superimposing""" start="00:01:54.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""a wild type protein and a mutant protein. We're trying to""" start="00:01:59.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""analyze how the mutant was preventing one of the drugs from""" start="00:02:02.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""binding. These kind of analyses we can develop that are""" start="00:02:05.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""drugs. In this case, the drugs are being used to treat lung""" start="00:02:12.200" video="mainVideo-project" id="subtitle"]]
+[[!template text="""cancer.""" start="00:02:16.520" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Starting a new writing project""" start="00:02:20.080" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""When I start a new writing project, I will assign it a number.""" start="00:02:20.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""In this case, I'm developing a review article about the""" start="00:02:24.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""detection of crystals in images collected with""" start="00:02:29.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""microscopes like the image in the upper left.""" start="00:02:32.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""The article is about the utilization of AI to help with that""" start="00:02:33.862" video="mainVideo-project" id="subtitle"]]
+[[!template text="""detection of crystals. I start the name of the folder with""" start="00:02:42.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""this index number, and I store the manuscript folders in the""" start="00:02:49.040" video="mainVideo-project" id="subtitle"]]
+[[!template text="""top level of my home directory to ease navigation.""" start="00:02:55.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Whenever I pop open a terminal window, I just enter 0573, hit""" start="00:02:59.160" video="mainVideo-project" id="subtitle"]]
+[[!template text="""TAB to autocomplete the name of the folder, and I'll be right""" start="00:03:03.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""in the appropriate folder. I also use that index number to""" start="00:03:07.280" video="mainVideo-project" id="subtitle"]]
+[[!template text="""label the names of the files. I start every project with""" start="00:03:11.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""three files: a manuscript, the log file that I'll be talking""" start="00:03:14.880" video="mainVideo-project" id="subtitle"]]
+[[!template text="""about today, and an annotated bibliography, which is kind""" start="00:03:19.520" video="mainVideo-project" id="subtitle"]]
+[[!template text="""of like one on steroids. Annotated bibliography for the""" start="00:03:22.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""21st century, not the 20th century annotated bibliography""" start="00:03:26.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""you worked on as an undergraduate.""" start="00:03:30.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I have developed templates not only for Org Mode, but also""" start="00:03:37.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""for other markup languages, like R Markdown and LaTeX. I""" start="00:03:40.280" video="mainVideo-project" id="subtitle"]]
+[[!template text="""actually developed this""" start="00:03:45.360" video="mainVideo-project" id="subtitle"]]
+[[!template text="""log file template over a dozen years ago in LaTeX. I also""" start="00:03:49.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""have developed it for Typst. Typst is independent of LaTeX.""" start="00:03:54.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""It's inspired by LaTeX, but it's written in Rust, and""" start="00:03:58.160" video="mainVideo-project" id="subtitle"]]
+[[!template text="""it's extremely fast.""" start="00:04:04.080" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The writing log""" start="00:04:05.480" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""My writing process involves having the writing log at the""" start="00:04:05.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""center of the process. That's where I began the writing""" start="00:04:11.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""project. On the right, I have the manuscript and all its""" start="00:04:14.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""components highlighted in yellow. On the right,""" start="00:04:19.680" video="mainVideo-project" id="subtitle"]]
+[[!template text="""hopefully I said on the right, I have the manuscript with all""" start="00:04:25.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""its components highlighted in yellow. On the left, I have""" start="00:04:29.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the annotated bibliography.""" start="00:04:33.200" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Starting the research paper""" start="00:04:36.960" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""When I start a research paper, I will do this after I have""" start="00:04:36.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""built up a strong idea from various sources, and then I'll""" start="00:04:42.200" video="mainVideo-project" id="subtitle"]]
+[[!template text="""sit down and go through a series of steps outlined in the""" start="00:04:49.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""writing log to develop that central hypothesis into""" start="00:04:54.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""several paragraphs that are used in the introduction of the""" start="00:04:59.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""manuscript. The rest of the manuscript is built around that""" start="00:05:03.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""central hypothesis, so the results section will include""" start="00:05:08.160" video="mainVideo-project" id="subtitle"]]
+[[!template text="""experiments that address the central hypothesis, and it""" start="00:05:11.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""will exclude experiments that have nothing to do with it.""" start="00:05:15.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Likewise, the discussion points address the central""" start="00:05:19.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""hypothesis.""" start="00:05:22.720" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Outline""" start="00:05:25.310" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""When I'm done developing that introduction""" start="00:05:25.310" video="mainVideo-project" id="subtitle"]]
+[[!template text="""in, say, three or four hours, I'll have an outline in hand. At""" start="00:05:27.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""least for the results and discussion section, the outline""" start="00:05:33.440" video="mainVideo-project" id="subtitle"]]
+[[!template text="""will be detailed down to at least a sub-heading level.""" start="00:05:38.200" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I'll move those components over to the manuscript on the""" start="00:05:44.200" video="mainVideo-project" id="subtitle"]]
+[[!template text="""right. As work is done to address that central""" start="00:05:47.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""hypothesis, the manuscript will be updated. Also as""" start="00:05:53.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""exploration of the literature continues, new ideas will""" start="00:05:58.120" video="mainVideo-project" id="subtitle"]]
+[[!template text="""flow in to the manuscript through the log file.""" start="00:06:01.360" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Another kind of writing log - accountability""" start="00:06:11.440" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""You've probably heard of another kind of writing log, which""" start="00:06:11.440" video="mainVideo-project" id="subtitle"]]
+[[!template text="""is more of an accountability tool, a tool you use to hold""" start="00:06:13.520" video="mainVideo-project" id="subtitle"]]
+[[!template text="""yourself accountable in terms of your commitment to work on""" start="00:06:16.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""your writing projects.""" start="00:06:20.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""So, this idea of carrying out this""" start="00:06:24.717" video="mainVideo-project" id="subtitle"]]
+[[!template text="""documentation is supported by research done by""" start="00:06:29.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Robert Boice. He found that those academics""" start="00:06:32.717" video="mainVideo-project" id="subtitle"]]
+[[!template text="""who record their writing""" start="00:06:35.839" video="mainVideo-project" id="subtitle"]]
+[[!template text="""are four times more productive than those that do not.""" start="00:06:39.101" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Those that actually share their writing with""" start="00:06:42.003" video="mainVideo-project" id="subtitle"]]
+[[!template text="""colleagues are nine times more productive. This is sort of a""" start="00:06:44.120" video="mainVideo-project" id="subtitle"]]
+[[!template text="""case in point. This is a snapshot of a Google sheet of such a""" start="00:06:47.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""writing log that I was sharing as part of a Google workbook.""" start="00:06:55.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I was sharing it with three other colleagues. I had the""" start="00:07:03.280" video="mainVideo-project" id="subtitle"]]
+[[!template text="""possibility of them taking a peek at my Google sheet, and that""" start="00:07:06.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""possibility I found to be highly motivating.""" start="00:07:14.320" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Reducing switching costs""" start="00:07:17.458" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""As you can see, on July 24th, 2023, I worked on five different writing""" start="00:07:17.458" video="mainVideo-project" id="subtitle"]]
+[[!template text="""projects. This would not have been possible if it had not""" start="00:07:22.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""been for having five separate writing logs where I could""" start="00:07:25.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""figure out where I had started and where I would report the""" start="00:07:29.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""day's progress before maybe taking a break and then""" start="00:07:32.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""switching to another writing project. The writing log""" start="00:07:36.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""helps reduce switching costs between projects.""" start="00:07:41.200" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Motivation""" start="00:07:46.480" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""My motivation for developing this project-specific log""" start="00:07:46.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""that I'm presenting here is to support clearer thinking""" start="00:07:57.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""about the science that I'm trying to do, hopefully leading""" start="00:08:02.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""to better science, as well as accelerating the completion""" start="00:08:06.880" video="mainVideo-project" id="subtitle"]]
+[[!template text="""of the writing project. The secondary purpose is to enable""" start="00:08:10.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""working on multiple writing projects in parallel. This is""" start="00:08:13.440" video="mainVideo-project" id="subtitle"]]
+[[!template text="""important to be able to harness your subconscious. If you""" start="00:08:17.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""work on project A for a few hours in the morning, say early""" start="00:08:21.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""morning, then late morning you work on project B.""" start="00:08:25.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""While you're working on project B,""" start="00:08:28.211" video="mainVideo-project" id="subtitle"]]
+[[!template text="""your subconscious is busy working away on project A.""" start="00:08:33.861" video="mainVideo-project" id="subtitle"]]
+[[!template text="""As a result, perhaps the following morning,""" start="00:08:39.142" video="mainVideo-project" id="subtitle"]]
+[[!template text="""when you wake up or while you're taking a shower or""" start="00:08:43.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""commuting, new ideas will emerge for projects A and B as a""" start="00:08:46.280" video="mainVideo-project" id="subtitle"]]
+[[!template text="""result of these background jobs that you have launched. If""" start="00:08:52.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""you don't work on project A, then you're not going to get the""" start="00:08:55.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""benefit the following morning. The side effects of using""" start="00:08:58.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""this writing log are that it reduces the fear of forgetting""" start="00:09:04.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""and also reduces the fear of losing momentum. These are two""" start="00:09:07.440" video="mainVideo-project" id="subtitle"]]
+[[!template text="""barriers to attempting to carry out work on multiple""" start="00:09:10.200" video="mainVideo-project" id="subtitle"]]
+[[!template text="""writing projects in a given day. This problem of dealing""" start="00:09:15.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""with multiple writing projects is one that is not discussed""" start="00:09:19.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""in books about writing. It's apparently a very difficult""" start="00:09:22.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""problem. I think my writing log is a successful solution to""" start="00:09:26.040" video="mainVideo-project" id="subtitle"]]
+[[!template text="""that problem.""" start="00:09:29.760" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Overview of the writing log""" start="00:09:31.520" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""This is an overview of the writing log in Org mode. It has""" start="00:09:31.520" video="mainVideo-project" id="subtitle"]]
+[[!template text="""various components. I don't have time to go through all of""" start="00:09:39.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""them in detail, but you can see its structure. We get this""" start="00:09:42.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""summary view when you open up the file. You have this in the""" start="00:09:48.680" video="mainVideo-project" id="subtitle"]]
+[[!template text="""header for a startup command overview. Then I just click""" start="00:09:54.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""on the heading and hit TAB to see the contents below. So""" start="00:10:04.120" video="mainVideo-project" id="subtitle"]]
+[[!template text="""normally, I'm just going to go straight to the daily log.""" start="00:10:08.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""In this case, it starts on line 944.""" start="00:10:11.440" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""LaTeX preamble in opened drawer""" start="00:10:17.295" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""I don't have to scroll all the way down to it,""" start="00:10:17.295" video="mainVideo-project" id="subtitle"]]
+[[!template text="""because thanks to the support""" start="00:10:19.256" video="mainVideo-project" id="subtitle"]]
+[[!template text="""for folding of these sections in Org mode, if I open up the""" start="00:10:21.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""drawer labeled :PREAMBLE:, you can see that I have imported a""" start="00:10:27.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""number of LaTeX packages to enhance the format of the PDF""" start="00:10:31.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""file that is upon export.""" start="00:10:38.880" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Informative header""" start="00:10:42.668" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""I have commands that are listed""" start="00:10:42.668" video="mainVideo-project" id="subtitle"]]
+[[!template text="""below at the bottom for providing a fancy header. This""" start="00:10:44.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""header has the current date as well as a running title and the""" start="00:10:49.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""current page number and total number of pages. You can see""" start="00:10:54.520" video="mainVideo-project" id="subtitle"]]
+[[!template text="""in the center the header at the start of page 2. You can see the""" start="00:10:58.200" video="mainVideo-project" id="subtitle"]]
+[[!template text="""bottom of page 1 where the page number is at the bottom of the""" start="00:11:04.200" video="mainVideo-project" id="subtitle"]]
+[[!template text="""page. These headers are very useful if you happen to print""" start="00:11:09.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""out several log files and their corresponding manuscripts""" start="00:11:17.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""and take them with you to work on them while traveling.""" start="00:11:22.880" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Invariably, the pages will get intermingled, and you'll have""" start="00:11:25.360" video="mainVideo-project" id="subtitle"]]
+[[!template text="""to sort them out when you return home. These headers ease""" start="00:11:29.440" video="mainVideo-project" id="subtitle"]]
+[[!template text="""that problem. You can see that the table of contents that begin""" start="00:11:33.680" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the writing log is hyperlinked to various sections. In""" start="00:11:39.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""addition to the table of contents, the log file, of course,""" start="00:11:44.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""will support various graphical objects like images,""" start="00:11:48.520" video="mainVideo-project" id="subtitle"]]
+[[!template text="""tables, equations, code listings. I also have added""" start="00:11:51.560" video="mainVideo-project" id="subtitle"]]
+[[!template text="""LaTeX support for an index, a list of acronyms, glossary,""" start="00:11:56.040" video="mainVideo-project" id="subtitle"]]
+[[!template text="""mathematical notation, and literature cited. It takes no""" start="00:12:00.280" video="mainVideo-project" id="subtitle"]]
+[[!template text="""effort to add these in, so why not have them available? These""" start="00:12:05.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""features are also available in the annotated bibliography""" start="00:12:10.040" video="mainVideo-project" id="subtitle"]]
+[[!template text="""template, which helps support making that annotated""" start="00:12:12.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""bibliography far more relevant and interesting.""" start="00:12:16.360" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Four workflows""" start="00:12:21.400" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""This shows a list of four workflows that I'm going to""" start="00:12:21.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""discuss, since I don't have time to go through each""" start="00:12:28.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""of the items. Obviously, project initiation""" start="00:12:32.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""occurs on day one. If I have a three- or four-hour block of time,""" start="00:12:36.280" video="mainVideo-project" id="subtitle"]]
+[[!template text="""that's sufficient to finish project initiation. Then""" start="00:12:39.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the daily workflow is obviously what occurs every day to""" start="00:12:45.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""move the project forward. The periodic assessments are""" start="00:12:49.360" video="mainVideo-project" id="subtitle"]]
+[[!template text="""done on a monthly or weekly basis, generally on the weekly""" start="00:12:54.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""basis as the submission deadline approaches. Then""" start="00:12:57.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""after you have received the galley proofs and sent them""" start="00:13:02.560" video="mainVideo-project" id="subtitle"]]
+[[!template text="""back, there are a few chores that need to be done in terms of""" start="00:13:05.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""project closeout. This is an example of a protocol""" start="00:13:09.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""that could be followed to do that, and an example of the kinds""" start="00:13:13.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""of more or less appendix material that could be included in""" start="00:13:18.520" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the writing log to help get these things done.""" start="00:13:21.800" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Project initiation workflow""" start="00:13:28.080" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""This shows a project initiation section of the workflow.""" start="00:13:28.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I go through a series of sections that include advice""" start="00:13:31.680" video="mainVideo-project" id="subtitle"]]
+[[!template text="""about what I need to do to complete each section. The""" start="00:13:39.120" video="mainVideo-project" id="subtitle"]]
+[[!template text="""rationale section asks me like, why are you doing this? Why""" start="00:13:45.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""should you do this? Why not somebody else? Those sort of""" start="00:13:50.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""fundamental questions. Then I have""" start="00:13:54.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""a drawer labeled guidance that I have,""" start="00:14:01.288" video="mainVideo-project" id="subtitle"]]
+[[!template text="""and that headline immediately above,""" start="00:14:05.330" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I have this :noexport: keyword so that guidance is not""" start="00:14:07.191" video="mainVideo-project" id="subtitle"]]
+[[!template text="""written out upon export to the PDF unless you want it. If you""" start="00:14:11.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""want it, you have to remove the :noexport: tag. Then I have the""" start="00:14:17.040" video="mainVideo-project" id="subtitle"]]
+[[!template text="""response to these questions--in this case, a list of""" start="00:14:20.440" video="mainVideo-project" id="subtitle"]]
+[[!template text="""journals that I'm targeting for submission of this review""" start="00:14:25.200" video="mainVideo-project" id="subtitle"]]
+[[!template text="""article. I have a plan B journal picked out in case the""" start="00:14:29.200" video="mainVideo-project" id="subtitle"]]
+[[!template text="""editors decide to reject it. Having a plan B journal""" start="00:14:32.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""picked out is a decision you can make at the time of""" start="00:14:43.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""submission, so that you're prepared to move quickly if the""" start="00:14:48.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""article is rejected.""" start="00:14:55.960" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Daily workflow""" start="00:14:56.960" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""This shows the daily workflow section. Each entry has a""" start="00:14:56.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""date. I sometimes annotate the dated entries with a small""" start="00:15:04.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""phrase to highlight certain events. Within a given entry,""" start="00:15:09.440" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I'll have a list of accomplishments. That's sort of the bare""" start="00:15:14.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""minimum of what I include. This just demonstrates how""" start="00:15:17.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""relatively brief these entries are. Just whatever""" start="00:15:20.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""distinct accomplishments were made are listed.""" start="00:15:25.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Sometimes I'll include the goals for that day.""" start="00:15:30.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I'll always include the correspondence related to the""" start="00:15:37.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""project. I'll copy and paste an email into a quote""" start="00:15:40.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""environment from LaTeX.""" start="00:15:44.440" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I have a snippet template for auto-generating these""" start="00:15:49.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""entries. It will insert the date, for example, in the""" start="00:15:54.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""subheading. Then below that, I'll have the next action,""" start="00:15:59.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""following David Allen's Getting Things Done approach""" start="00:16:04.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""where you identify the next thing that needs to be done.""" start="00:16:06.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""That may have come from a to-do list that's indicated below that.""" start="00:16:08.551" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Beyond that, there's sections for some writing""" start="00:16:14.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""accountability, and then a reminder to go about updating""" start="00:16:19.040" video="mainVideo-project" id="subtitle"]]
+[[!template text="""your Zettelkasten and Org-roam if you have come across any""" start="00:16:23.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""nuggets of knowledge you want to add to your Org-roam. Then""" start="00:16:28.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""below that, there's another section for the storage of""" start="00:16:32.360" video="mainVideo-project" id="subtitle"]]
+[[!template text="""additions to be made to the manuscript. Maybe they're not""" start="00:16:39.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""ready to go yet, so this provides a spot for them to be""" start="00:16:42.920" video="mainVideo-project" id="subtitle"]]
+[[!template text="""incubated, a sandbox, if you will, where you have room to""" start="00:16:47.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""develop them further before they're ready to be""" start="00:16:51.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""transferred over to the main manuscript. I also have a""" start="00:16:53.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""section there too for the incubation of new ideas for new""" start="00:16:58.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""projects.""" start="00:17:04.240" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Metadata and metacognition""" start="00:17:05.751" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""So this kind of metadata and metacognition about""" start="00:17:05.751" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the project are often stored in commented out regions or in""" start="00:17:09.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""comments, like MS Word documents. These are often stripped""" start="00:17:13.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""out in the rush to submit the manuscript, and they're quite""" start="00:17:18.040" video="mainVideo-project" id="subtitle"]]
+[[!template text="""often lost. Yet they can be invaluable, not only for the""" start="00:17:21.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""preparation of future manuscripts, but they can be very""" start="00:17:26.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""invaluable for responding to critiques by reviewers. This""" start="00:17:30.240" video="mainVideo-project" id="subtitle"]]
+[[!template text="""writing log provides ample room for the safe storage of such""" start="00:17:38.280" video="mainVideo-project" id="subtitle"]]
+[[!template text="""information, such knowledge.""" start="00:17:42.840" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Periodic assessment workflow""" start="00:17:48.885" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""Then periodically, every several months or weeks,""" start="00:17:48.885" video="mainVideo-project" id="subtitle"]]
+[[!template text="""we'll carry out an assessment of""" start="00:17:53.667" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the project. We go through a checklist for the completion of""" start="00:17:55.160" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the manuscript. We also have a timeline with milestones""" start="00:18:02.120" video="mainVideo-project" id="subtitle"]]
+[[!template text="""identified.""" start="00:18:06.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Of course, Org has these wonderful tables that are very""" start="00:18:07.440" video="mainVideo-project" id="subtitle"]]
+[[!template text="""dynamic. If you need a wider column to accommodate a new""" start="00:18:13.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""entry, it self-adjusts. These self-adjusting tables""" start="00:18:18.880" video="mainVideo-project" id="subtitle"]]
+[[!template text="""are one reason why I was attracted to Org mode, because coming""" start="00:18:23.360" video="mainVideo-project" id="subtitle"]]
+[[!template text="""from LaTex, where trying to make changes to""" start="00:18:29.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""tables is quite difficult. Below that, there's a""" start="00:18:33.040" video="mainVideo-project" id="subtitle"]]
+[[!template text="""section to make assessments. There are four questions that""" start="00:18:37.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""I address about the status of the project. One really good""" start="00:18:39.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""question is, why can't you submit this project today?""" start="00:18:43.840" video="mainVideo-project" id="subtitle"]]
+[[!template text="""What's holding it back?""" start="00:18:46.560" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Other such existential questions""" start="00:18:49.351" video="mainVideo-project" id="subtitle"]]
+[[!template text="""are important to ask from time to time.""" start="00:18:55.215" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Project closeout workflow""" start="00:18:56.960" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""Then finally, the project closeout workflow.""" start="00:18:56.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""So this is in the form of a checklist.""" start="00:19:03.634" video="mainVideo-project" id="subtitle"]]
+[[!template text="""This checklist in the main template""" start="00:19:06.478" video="mainVideo-project" id="subtitle"]]
+[[!template text="""is already included, but you could include it from an""" start="00:19:09.080" video="mainVideo-project" id="subtitle"]]
+[[!template text="""external file. Of course, that checklist will be only in""" start="00:19:13.480" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the PDF when it's included in this fashion. It won't be in the""" start="00:19:19.960" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Org file, but you can view that checklist by clicking on its""" start="00:19:22.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""file path. It serves as a link that will open up in an Org""" start="00:19:27.600" video="mainVideo-project" id="subtitle"]]
+[[!template text="""buffer. The advantage of taking a modular approach to this""" start="00:19:32.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""sort of appendix material is that you can update your""" start="00:19:40.120" video="mainVideo-project" id="subtitle"]]
+[[!template text="""protocols and the updated protocols will be available to""" start="00:19:43.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""all log files across all projects.""" start="00:19:46.400" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Conclusions""" start="00:19:49.640" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""In conclusion, this project-specific log file helps""" start="00:19:49.640" video="mainVideo-project" id="subtitle"]]
+[[!template text="""narrow the focus on one project. It provides space to harbor""" start="00:19:56.320" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the thinking about that project, and it helps support the""" start="00:20:02.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""project initiation and sustain its momentum and""" start="00:20:08.680" video="mainVideo-project" id="subtitle"]]
+[[!template text="""facilitate its completion. The side effects of using this""" start="00:20:14.000" video="mainVideo-project" id="subtitle"]]
+[[!template text="""log file for one project is that it dampens the fear of""" start="00:20:21.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""forgetting, the fear of losing momentum, which inhibits us""" start="00:20:27.400" video="mainVideo-project" id="subtitle"]]
+[[!template text="""working on more than one project in a given day.""" start="00:20:31.440" video="mainVideo-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Acknowledgements""" start="00:20:34.520" video="mainVideo-project" id="subtitle"]]</div>[[!template text="""I would like to thank my friends at the Oklahoma Data Science""" start="00:20:34.520" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Workshop. We hold this workshop every third Friday at noon""" start="00:20:42.560" video="mainVideo-project" id="subtitle"]]
+[[!template text="""central time by Zoom. It's open to participation by people""" start="00:20:47.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""from all around the world. Send me an email if you are""" start="00:20:53.760" video="mainVideo-project" id="subtitle"]]
+[[!template text="""interested in the applications of computing to scientific""" start="00:20:56.880" video="mainVideo-project" id="subtitle"]]
+[[!template text="""research. I participate occasionally in these Emacs""" start="00:21:01.520" video="mainVideo-project" id="subtitle"]]
+[[!template text="""meetups, and I have shared this writing blog with members of""" start="00:21:06.800" video="mainVideo-project" id="subtitle"]]
+[[!template text="""the UK Research Software Engineer group through the Emacs""" start="00:21:11.360" video="mainVideo-project" id="subtitle"]]
+[[!template text="""Research Slack channel. My efforts are supported by""" start="00:21:18.720" video="mainVideo-project" id="subtitle"]]
+[[!template text="""funding from these grants. I'll be happy to take any""" start="00:21:24.280" video="mainVideo-project" id="subtitle"]]
+[[!template text="""questions.""" start="00:21:28.800" video="mainVideo-project" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+<div class="transcript transcript-qanda"><a name="project-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""And about, I think we are live. Okay, hi again everyone. And hi""" start="00:00:00.000" video="qanda-project" id="subtitle"]]
+[[!template text="""Blaine, how are you doing? Fantastic, happy to be here.""" start="00:00:10.320" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, it's good to see you again. We were just reminiscing in""" start="00:00:14.680" video="qanda-project" id="subtitle"]]
+[[!template text="""a room right now that it's almost been a year exactly since we""" start="00:00:17.480" video="qanda-project" id="subtitle"]]
+[[!template text="""last spoke because you were at the EmacsConf last year. That's""" start="00:00:20.240" video="qanda-project" id="subtitle"]]
+[[!template text="""right. This is great fun. Yeah, well, thank you for coming in""" start="00:00:23.880" video="qanda-project" id="subtitle"]]
+[[!template text="""and especially every time you come with a very well-crafted""" start="00:00:28.560" video="qanda-project" id="subtitle"]]
+[[!template text="""talks talking about, you know, what you do with Org Mode, Org""" start="00:00:33.080" video="qanda-project" id="subtitle"]]
+[[!template text="""Roam and whatever. And it's really fascinating as someone""" start="00:00:37.280" video="qanda-project" id="subtitle"]]
+[[!template text="""who develops and use those tools constantly to see you put""" start="00:00:41.040" video="qanda-project" id="subtitle"]]
+[[!template text="""them in action so well. Because you, you know, the way you""" start="00:00:43.480" video="qanda-project" id="subtitle"]]
+[[!template text="""talk about your research, it really reminds me on what we""" start="00:00:46.200" video="qanda-project" id="subtitle"]]
+[[!template text="""were, sorry, I've got elves talking in my ears and I'm still""" start="00:00:49.720" video="qanda-project" id="subtitle"]]
+[[!template text="""not used to it at this point. But it's really nice to see you""" start="00:00:53.280" video="qanda-project" id="subtitle"]]
+[[!template text="""put all of this together into a very cohesive way for you to""" start="00:00:56.640" video="qanda-project" id="subtitle"]]
+[[!template text="""write. Okay, let me just share my screen and I'll be sharing""" start="00:01:00.360" video="qanda-project" id="subtitle"]]
+[[!template text="""the questions. Where is it? All right, take presenter. And I""" start="00:01:03.760" video="qanda-project" id="subtitle"]]
+[[!template text="""will be sharing the questions. All right. Can you see my""" start="00:01:11.880" video="qanda-project" id="subtitle"]]
+[[!template text="""screen all right? I can, yes. OK, cool. So we move straight to""" start="00:01:18.080" video="qanda-project" id="subtitle"]]
+[[!template text="""the question. Let me just check on the time. I think we have""" start="00:01:24.160" video="qanda-project" id="subtitle"]]
+[[!template text="""about until 10.20, which is in 17 minutes. So let's take""" start="00:01:27.000" video="qanda-project" id="subtitle"]]
+[[!template text="""about 10 to 15 minutes of question time. And if people have""" start="00:01:32.000" video="qanda-project" id="subtitle"]]
+[[!template text="""joined on BBB, we'll also be taking questions live. All""" start="00:01:35.640" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: what does 0573 means in your init. file name?""" start="00:01:38.600" video="qanda-project" id="subtitle"]]</div>[[!template text="""right. Starting with the first question, what does 0573""" start="00:01:38.600" video="qanda-project" id="subtitle"]]
+[[!template text="""mean in your init file name? So this name is, you can think of""" start="00:01:44.080" video="qanda-project" id="subtitle"]]
+[[!template text="""it as a prefix or a stub. It's an index number that I utilize""" start="00:01:49.720" video="qanda-project" id="subtitle"]]
+[[!template text="""before a short name that describes the project. So I have all""" start="00:01:55.880" video="qanda-project" id="subtitle"]]
+[[!template text="""my projects in my home directory, and I just start typing the""" start="00:02:01.480" video="qanda-project" id="subtitle"]]
+[[!template text="""project number or index number. in the terminal and I have""" start="00:02:06.120" video="qanda-project" id="subtitle"]]
+[[!template text="""autocompletion available through oh my ZSH package. So I""" start="00:02:12.200" video="qanda-project" id="subtitle"]]
+[[!template text="""just hit tab and it autocompletes the name of the project and""" start="00:02:17.880" video="qanda-project" id="subtitle"]]
+[[!template text="""pops me into that folder. And so I find this to be very easy for""" start="00:02:21.200" video="qanda-project" id="subtitle"]]
+[[!template text="""navigating between projects. As you saw, I work on multiple""" start="00:02:26.320" video="qanda-project" id="subtitle"]]
+[[!template text="""projects in a given day and this helps me move about. And I""" start="00:02:30.920" video="qanda-project" id="subtitle"]]
+[[!template text="""also use this number at the start of the log file name and at""" start="00:02:37.400" video="qanda-project" id="subtitle"]]
+[[!template text="""the start of the manuscript name and the start of the, I also""" start="00:02:45.640" video="qanda-project" id="subtitle"]]
+[[!template text="""have an annotated bibliography. So all those files are""" start="00:02:50.640" video="qanda-project" id="subtitle"]]
+[[!template text="""identified just in case I accidentally save one to the wrong""" start="00:02:54.080" video="qanda-project" id="subtitle"]]
+[[!template text="""folder. I can avoid, I can sort them out later. Great""" start="00:02:59.360" video="qanda-project" id="subtitle"]]
+[[!template text="""question. Thank you. Next question, which I think is going""" start="00:03:04.640" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What does Zettelkasten mean?""" start="00:03:09.520" video="qanda-project" id="subtitle"]]</div>[[!template text="""to be a long one. What does Zettelkasten mean? So this means""" start="00:03:09.520" video="qanda-project" id="subtitle"]]
+[[!template text="""like, I guess, notebox, something along those lines. You""" start="00:03:16.160" video="qanda-project" id="subtitle"]]
+[[!template text="""can think of it as a- Yeah, spitbox usually, that's the word""" start="00:03:20.720" video="qanda-project" id="subtitle"]]
+[[!template text="""we use. Thank you. So this is a kind of like a card catalog""" start="00:03:24.880" video="qanda-project" id="subtitle"]]
+[[!template text="""system that when it was done on paper, and now it's being done""" start="00:03:29.160" video="qanda-project" id="subtitle"]]
+[[!template text="""electronically through various software packages. So in""" start="00:03:33.360" video="qanda-project" id="subtitle"]]
+[[!template text="""the Emacs world, org-roam is a one of several alternate""" start="00:03:38.680" video="qanda-project" id="subtitle"]]
+[[!template text="""packages that you can use. Prot has the note and there's a""" start="00:03:43.200" video="qanda-project" id="subtitle"]]
+[[!template text="""couple others. So, idea is that you create a note, usually a,""" start="00:03:48.000" video="qanda-project" id="subtitle"]]
+[[!template text="""ultimately what you want to do is create a nugget of""" start="00:03:59.080" video="qanda-project" id="subtitle"]]
+[[!template text="""knowledge from your reading that you've done. and you add it""" start="00:04:04.240" video="qanda-project" id="subtitle"]]
+[[!template text="""to this note system in such a way that you can recover it more""" start="00:04:09.480" video="qanda-project" id="subtitle"]]
+[[!template text="""easily than what had to be done in the old days with index""" start="00:04:15.880" video="qanda-project" id="subtitle"]]
+[[!template text="""cards.""" start="00:04:20.160" video="qanda-project" id="subtitle"]]
+[[!template text="""So you set up backlinks and then you can use the search""" start="00:04:23.720" video="qanda-project" id="subtitle"]]
+[[!template text="""features in Org Roam to filter and find the notes again in the""" start="00:04:28.200" video="qanda-project" id="subtitle"]]
+[[!template text="""future. Org Roam has a wonderful GUI interface where you can""" start="00:04:34.920" video="qanda-project" id="subtitle"]]
+[[!template text="""display it as a knowledge graph, essentially, all your""" start="00:04:43.080" video="qanda-project" id="subtitle"]]
+[[!template text="""nodes and the backlinks between them. I set mine up in a""" start="00:04:47.080" video="qanda-project" id="subtitle"]]
+[[!template text="""rather hierarchical fashion to, at least right now, it's""" start="00:04:52.480" video="qanda-project" id="subtitle"]]
+[[!template text="""pretty hierarchical at this point, but it may become more""" start="00:04:56.640" video="qanda-project" id="subtitle"]]
+[[!template text="""disorganized over time. But I find it I'm sort of a visual""" start="00:05:01.960" video="qanda-project" id="subtitle"]]
+[[!template text="""person. I like mind maps a lot. I find that this visual""" start="00:05:07.680" video="qanda-project" id="subtitle"]]
+[[!template text="""display of my Zettelkasten is similar, resembles to a""" start="00:05:12.520" video="qanda-project" id="subtitle"]]
+[[!template text="""certain degree, a mind map.""" start="00:05:16.920" video="qanda-project" id="subtitle"]]
+[[!template text="""Okay, well, that's a pretty good definition of what""" start="00:05:22.440" video="qanda-project" id="subtitle"]]
+[[!template text="""Zettelkasten is, and you also went on to specify what it""" start="00:05:25.600" video="qanda-project" id="subtitle"]]
+[[!template text="""means inside Emacs, so thank you. I think that clarifies it""" start="00:05:28.840" video="qanda-project" id="subtitle"]]
+[[!template text="""for the two people in the room who still do not know, after""" start="00:05:31.600" video="qanda-project" id="subtitle"]]
+[[!template text="""attending four Emacs conferences, what is the""" start="00:05:34.200" video="qanda-project" id="subtitle"]]
+[[!template text="""Zettelkasten method. Moving on to the next question,""" start="00:05:36.760" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How many papers are you writing at the same time?""" start="00:05:41.760" video="qanda-project" id="subtitle"]]</div>[[!template text="""how many papers are you writing at the same time? Because I""" start="00:05:41.760" video="qanda-project" id="subtitle"]]
+[[!template text="""believe you mentioned that you had concurrent papers being""" start="00:05:44.400" video="qanda-project" id="subtitle"]]
+[[!template text="""written during your presentation. So I'm probably working""" start="00:05:47.760" video="qanda-project" id="subtitle"]]
+[[!template text="""on, in a given year, somewhere between 10 and 15. How many do I""" start="00:05:51.960" video="qanda-project" id="subtitle"]]
+[[!template text="""get published in a year? Probably anywhere from one to four""" start="00:05:57.840" video="qanda-project" id="subtitle"]]
+[[!template text="""or five. So these papers often, the work on them spans""" start="00:06:03.200" video="qanda-project" id="subtitle"]]
+[[!template text="""multiple years. will start working on a paper when I begin,""" start="00:06:08.640" video="qanda-project" id="subtitle"]]
+[[!template text="""before I begin the experiments, ideally, because I'm""" start="00:06:13.560" video="qanda-project" id="subtitle"]]
+[[!template text="""trying to do hypothesis-driven research. And so that helps""" start="00:06:16.520" video="qanda-project" id="subtitle"]]
+[[!template text="""define the scope of the project and limit the number of""" start="00:06:23.440" video="qanda-project" id="subtitle"]]
+[[!template text="""rabbit holes I go down. So, but through the nature of the""" start="00:06:27.560" video="qanda-project" id="subtitle"]]
+[[!template text="""work, there's a lot of waiting required in my case for""" start="00:06:32.960" video="qanda-project" id="subtitle"]]
+[[!template text="""crystals to grow and then the opportunity to collect""" start="00:06:36.920" video="qanda-project" id="subtitle"]]
+[[!template text="""diffraction data on the crystals. And then the structures""" start="00:06:39.680" video="qanda-project" id="subtitle"]]
+[[!template text="""have to be determined and refined and analyzed and then""" start="00:06:43.880" video="qanda-project" id="subtitle"]]
+[[!template text="""deposited, figures have to be made. So a lot of steps are""" start="00:06:48.560" video="qanda-project" id="subtitle"]]
+[[!template text="""involved that those take generally span, that work can span""" start="00:06:52.800" video="qanda-project" id="subtitle"]]
+[[!template text="""several years.""" start="00:06:57.760" video="qanda-project" id="subtitle"]]
+[[!template text="""In a given day, I try to work on two papers, ideally. I haven't""" start="00:07:02.560" video="qanda-project" id="subtitle"]]
+[[!template text="""been doing so well lately over the past month.""" start="00:07:09.400" video="qanda-project" id="subtitle"]]
+[[!template text="""In the past year, there was a couple of days where I worked on""" start="00:07:12.280" video="qanda-project" id="subtitle"]]
+[[!template text="""five papers. There was something like a half dozen where I""" start="00:07:19.760" video="qanda-project" id="subtitle"]]
+[[!template text="""worked on four, about 40 days where I worked on three, and I""" start="00:07:24.240" video="qanda-project" id="subtitle"]]
+[[!template text="""think there was something like about 100 days where I worked""" start="00:07:29.160" video="qanda-project" id="subtitle"]]
+[[!template text="""on two papers a day, about 140 days where I just worked on one.""" start="00:07:33.480" video="qanda-project" id="subtitle"]]
+[[!template text="""So my idea is, I've been sort of developing more recently is""" start="00:07:41.000" video="qanda-project" id="subtitle"]]
+[[!template text="""that I'll start doing like the generative writing on a paper""" start="00:07:45.720" video="qanda-project" id="subtitle"]]
+[[!template text="""at the beginning of the day on the paper project I'm most""" start="00:07:49.160" video="qanda-project" id="subtitle"]]
+[[!template text="""excited about. I tried to, I'm a night owl. I tried to do this""" start="00:07:51.960" video="qanda-project" id="subtitle"]]
+[[!template text="""work early in the morning when I'm half awake to try to""" start="00:07:55.440" video="qanda-project" id="subtitle"]]
+[[!template text="""overcome my internal editor that inhibits me from writing""" start="00:08:00.520" video="qanda-project" id="subtitle"]]
+[[!template text="""prose freely. And so the idea is just to get a lot of words out,""" start="00:08:03.440" video="qanda-project" id="subtitle"]]
+[[!template text="""worry about editing them later. And then after about three""" start="00:08:09.880" video="qanda-project" id="subtitle"]]
+[[!template text="""hours, I'll switch to the second project that I'm less""" start="00:08:14.640" video="qanda-project" id="subtitle"]]
+[[!template text="""excited about. And I can go for another 90 minutes to two""" start="00:08:18.000" video="qanda-project" id="subtitle"]]
+[[!template text="""hours on that project. So I build up a lot of momentum, and""" start="00:08:22.000" video="qanda-project" id="subtitle"]]
+[[!template text="""then I do the switch. And I find that switch to be relatively""" start="00:08:27.720" video="qanda-project" id="subtitle"]]
+[[!template text="""easy. So my process will be On project A, make some final""" start="00:08:31.960" video="qanda-project" id="subtitle"]]
+[[!template text="""notes about what was accomplished in the writing log. Then""" start="00:08:37.360" video="qanda-project" id="subtitle"]]
+[[!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: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"]]
+[[!template text="""generative fashion much longer than that, your""" start="00:09:15.360" video="qanda-project" id="subtitle"]]
+[[!template text="""productivity goes down quite a bit. You're better off""" start="00:09:17.840" video="qanda-project" id="subtitle"]]
+[[!template text="""switching to a completely different activity and then""" start="00:09:21.280" video="qanda-project" id="subtitle"]]
+[[!template text="""using your experience doing that writing to essentially""" start="00:09:24.040" video="qanda-project" id="subtitle"]]
+[[!template text="""launch background jobs in your subconscious. And so you""" start="00:09:30.160" video="qanda-project" id="subtitle"]]
+[[!template text="""will get those ideas in the shower the next morning.""" start="00:09:33.200" video="qanda-project" id="subtitle"]]
+[[!template text="""I find it really funny because I also relate. I've also""" start="00:09:37.480" video="qanda-project" id="subtitle"]]
+[[!template text="""worked a lot on organization as linked to paper writing but""" start="00:09:44.520" video="qanda-project" id="subtitle"]]
+[[!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.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"]]
+[[!template text="""it's really fun for me to hear you talk about, oh, I need to""" start="00:10:11.720" video="qanda-project" id="subtitle"]]
+[[!template text="""select two topics, but no longer than 90 minutes per topic,""" start="00:10:15.360" video="qanda-project" id="subtitle"]]
+[[!template text="""because it's really about maximizing your output for""" start="00:10:19.160" video="qanda-project" id="subtitle"]]
+[[!template text="""creativity. And overall, your entire chat, your entire""" start="00:10:21.320" video="qanda-project" id="subtitle"]]
+[[!template text="""presentation here is about really maximizing the""" start="00:10:25.240" video="qanda-project" id="subtitle"]]
+[[!template text="""engagement that you have between outputs and your""" start="00:10:28.520" video="qanda-project" id="subtitle"]]
+[[!template text="""cognition. And I really find this amazing how down to the T""" start="00:10:32.960" video="qanda-project" id="subtitle"]]
+[[!template text="""you've managed to do this. And it actually leads me to""" start="00:10:37.160" video="qanda-project" id="subtitle"]]
+[[!template text="""another question which is being asked of you, which is,""" start="00:10:40.280" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How you capture those ideas when when you are away from Emacs?""" start="00:10:42.680" video="qanda-project" id="subtitle"]]</div>[[!template text="""how do you capture those ideas when you are away from Emacs? And""" start="00:10:42.680" video="qanda-project" id="subtitle"]]
+[[!template text="""perhaps not only those you have in the showers, but also""" start="00:10:45.960" video="qanda-project" id="subtitle"]]
+[[!template text="""elsewhere. So that's a great question. Over the past year, I""" start="00:10:48.000" video="qanda-project" id="subtitle"]]
+[[!template text="""actually, last January, upon recommendation of a senior""" start="00:10:53.920" video="qanda-project" id="subtitle"]]
+[[!template text="""colleague, I bought a digital voice recorder for $85 from""" start="00:10:59.240" video="qanda-project" id="subtitle"]]
+[[!template text="""Sony, and it's the best investment I've made in a very long""" start="00:11:05.400" video="qanda-project" id="subtitle"]]
+[[!template text="""time. other than my laptop computer, because I then record""" start="00:11:10.280" video="qanda-project" id="subtitle"]]
+[[!template text="""my thoughts. So I have a half hour commute. And to me, that's""" start="00:11:16.400" video="qanda-project" id="subtitle"]]
+[[!template text="""largely a waste of time. I wish I lived a lot closer to work.""" start="00:11:21.440" video="qanda-project" id="subtitle"]]
+[[!template text="""But I use that time to generate ideas. So maybe I'll start my""" start="00:11:25.360" video="qanda-project" id="subtitle"]]
+[[!template text="""day at home for 90 minutes, worked on paper A, and then I might""" start="00:11:33.680" video="qanda-project" id="subtitle"]]
+[[!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: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"]]
+[[!template text="""transcript that's in pretty good shape. I don't have to do""" start="00:12:19.680" video="qanda-project" id="subtitle"]]
+[[!template text="""very much editing. And I'll then copy that over and work on""" start="00:12:23.280" video="qanda-project" id="subtitle"]]
+[[!template text="""it, clean it up, and pluck out the ideas that I think might be""" start="00:12:29.160" video="qanda-project" id="subtitle"]]
+[[!template text="""useful. Unfortunately, I'm not very I'm not away from my""" start="00:12:33.080" video="qanda-project" id="subtitle"]]
+[[!template text="""computer that much. I'm in front of it, 12, 14 hours a day. So""" start="00:12:40.440" video="qanda-project" id="subtitle"]]
+[[!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: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"]]
+[[!template text="""phone, but these days. Yeah, but I think there's a pretty""" start="00:13:30.600" video="qanda-project" id="subtitle"]]
+[[!template text="""significant upside because, you know, you talk about cell""" start="00:13:35.720" video="qanda-project" id="subtitle"]]
+[[!template text="""phones here, but before you were talking about the 90""" start="00:13:38.640" video="qanda-project" id="subtitle"]]
+[[!template text="""minutes of uninterrupted focus on a given topic. And I think""" start="00:13:41.000" video="qanda-project" id="subtitle"]]
+[[!template text="""plenty of people would be envious of this ability to focus""" start="00:13:44.800" video="qanda-project" id="subtitle"]]
+[[!template text="""for that long on a topic. And I guess if we are to thread the""" start="00:13:48.360" video="qanda-project" id="subtitle"]]
+[[!template text="""needle here, well, the lack of cell phone might be for""" start="00:13:54.520" video="qanda-project" id="subtitle"]]
+[[!template text="""something for this ability to focus. So take of this what you""" start="00:13:57.240" video="qanda-project" id="subtitle"]]
+[[!template text="""will. True, I am a sucker for the web browser. I can get""" start="00:14:00.840" video="qanda-project" id="subtitle"]]
+[[!template text="""distracted going down various rabbit holes thanks to""" start="00:14:06.800" video="qanda-project" id="subtitle"]]
+[[!template text="""Google searches and that sort of thing. Likewise, email is""" start="00:14:11.760" video="qanda-project" id="subtitle"]]
+[[!template text="""another tension grabber. So, there's those other battles I""" start="00:14:17.280" video="qanda-project" id="subtitle"]]
+[[!template text="""have to fight too. So, right, that is a huge battle that all of""" start="00:14:22.400" video="qanda-project" id="subtitle"]]
+[[!template text="""us face is developing focus and being able to maintain""" start="00:14:27.600" video="qanda-project" id="subtitle"]]
+[[!template text="""focus. Right. So, we have about three more minutes of""" start="00:14:31.840" video="qanda-project" id="subtitle"]]
+[[!template text="""questions. So, thank you so much already for answering many""" start="00:14:37.160" video="qanda-project" id="subtitle"]]
+[[!template text="""questions. How about we do a quick fire for the remaining""" start="00:14:39.280" video="qanda-project" id="subtitle"]]
+[[!template text="""questions and then maybe we will take a question from... from""" start="00:14:43.320" video="qanda-project" id="subtitle"]]
+[[!template text="""here or in the room. So how about we go for the next one?""" start="00:14:47.080" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What if an ideas does not belong to any current working manuscript?""" start="00:14:50.273" video="qanda-project" id="subtitle"]]</div>[[!template text="""What if an ID does not belong""" start="00:14:50.273" video="qanda-project" id="subtitle"]]
+[[!template text="""to any current working manuscript? So I""" start="00:14:51.574" video="qanda-project" id="subtitle"]]
+[[!template text="""have a sandbox area in the log file.""" start="00:14:55.200" video="qanda-project" id="subtitle"]]
+[[!template text="""So if it's likely going to be related to something to a""" start="00:14:57.800" video="qanda-project" id="subtitle"]]
+[[!template text="""certain degree, if the idea is totally unrelated to""" start="00:15:04.320" video="qanda-project" id="subtitle"]]
+[[!template text="""anything I'm working on, then I will""" start="00:15:09.120" video="qanda-project" id="subtitle"]]
+[[!template text="""I maintain a 700 through 750 words. I maintain a kind of a""" start="00:15:12.720" video="qanda-project" id="subtitle"]]
+[[!template text="""external diary and I just capture those kind of ideas there.""" start="00:15:21.360" video="qanda-project" id="subtitle"]]
+[[!template text="""So, I have access to a web interface to this big text area with""" start="00:15:26.720" video="qanda-project" id="subtitle"]]
+[[!template text="""nothing in it. And I just dump ideas all day long in there. So,""" start="00:15:31.200" video="qanda-project" id="subtitle"]]
+[[!template text="""and I save that away. I have that in a big LaTeX document""" start="00:15:37.080" video="qanda-project" id="subtitle"]]
+[[!template text="""currently on Overleaf. but each day has its own page. And so""" start="00:15:42.800" video="qanda-project" id="subtitle"]]
+[[!template text="""that information is captured and I can recover it. And maybe""" start="00:15:50.000" video="qanda-project" id="subtitle"]]
+[[!template text="""it's gonna take me a week, a month, a year to take that idea and""" start="00:15:53.080" video="qanda-project" id="subtitle"]]
+[[!template text="""think about it. And then eventually I'll get to a point where""" start="00:15:57.600" video="qanda-project" id="subtitle"]]
+[[!template text="""I have a critical mass of momentum and data and so forth,""" start="00:16:00.280" video="qanda-project" id="subtitle"]]
+[[!template text="""where I could start a new writing project. But you're right,""" start="00:16:04.280" video="qanda-project" id="subtitle"]]
+[[!template text="""that is a problem, capturing those ideas and keeping track""" start="00:16:08.280" video="qanda-project" id="subtitle"]]
+[[!template text="""of them. The Xenocasting can also help with that. Right. OK,""" start="00:16:11.400" video="qanda-project" id="subtitle"]]
+[[!template text="""so we have time for one more question and I think I'm going to""" start="00:16:16.720" video="qanda-project" id="subtitle"]]
+[[!template text="""skip this one. You can take all the time you want after we're""" start="00:16:19.160" video="qanda-project" id="subtitle"]]
+[[!template text="""done with the live show for you to answer in BBB, obviously,""" start="00:16:22.680" video="qanda-project" id="subtitle"]]
+[[!template text="""and even after the conference. But I'd really like to finish""" start="00:16:25.680" video="qanda-project" id="subtitle"]]
+[[!template text="""on this one.""" start="00:16:28.320" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: If there were one habit from your process (referencing your extensive flow chart) that you want active learners/professional researchers to adopt, which would it be and why?""" start="00:16:28.802" video="qanda-project" id="subtitle"]]</div>[[!template text="""So, if there were one habit from your process,""" start="00:16:28.802" video="qanda-project" id="subtitle"]]
+[[!template text="""referencing your extensive flowchart, that you want""" start="00:16:31.880" video="qanda-project" id="subtitle"]]
+[[!template text="""active learners or professional researchers to adopt,""" start="00:16:35.080" video="qanda-project" id="subtitle"]]
+[[!template text="""which would it be and why? So,""" start="00:16:37.840" video="qanda-project" id="subtitle"]]
+[[!template text="""I think just keeping that daily diary, that's the essential""" start="00:16:44.480" video="qanda-project" id="subtitle"]]
+[[!template text="""part for overcoming the fear of forgetting and the fear of""" start="00:16:50.000" video="qanda-project" id="subtitle"]]
+[[!template text="""losing momentum. One reason why people don't work on two""" start="00:16:55.240" video="qanda-project" id="subtitle"]]
+[[!template text="""projects a day is that they fear losing momentum on the first""" start="00:16:58.320" video="qanda-project" id="subtitle"]]
+[[!template text="""project they're working on. But we often are stuck with""" start="00:17:02.400" video="qanda-project" id="subtitle"]]
+[[!template text="""working on multiple writing projects, and they're best""" start="00:17:07.320" video="qanda-project" id="subtitle"]]
+[[!template text="""done over longer periods of time rather than in a hasty""" start="00:17:10.000" video="qanda-project" id="subtitle"]]
+[[!template text="""fashion. I try to avoid binge writing, although I do my share""" start="00:17:13.200" video="qanda-project" id="subtitle"]]
+[[!template text="""of that, too. Okay, well, Blaine, thank you so much for all""" start="00:17:18.680" video="qanda-project" id="subtitle"]]
+[[!template text="""your questions. The stream is going to move to the next chat""" start="00:17:23.480" video="qanda-project" id="subtitle"]]
+[[!template text="""and talk. We're moving to the next talk of the day, but feel""" start="00:17:29.200" video="qanda-project" id="subtitle"]]
+[[!template text="""free to stay in a room. For everyone interested in asking""" start="00:17:32.000" video="qanda-project" id="subtitle"]]
+[[!template text="""more questions to Blaine, the BBB, sorry, BigBlueButton""" start="00:17:35.160" video="qanda-project" id="subtitle"]]
+[[!template text="""link is available on the website. You can join and ask""" start="00:17:38.480" video="qanda-project" id="subtitle"]]
+[[!template text="""questions directly to Blaine. And otherwise, we'll make""" start="00:17:41.240" video="qanda-project" id="subtitle"]]
+[[!template text="""sure that all the remaining questions on the pad get their""" start="00:17:43.320" video="qanda-project" id="subtitle"]]
+[[!template text="""answer eventually. Thank you so much, Blaine. You're""" start="00:17:45.480" video="qanda-project" id="subtitle"]]
+[[!template text="""welcome. Bye-bye. Bye.""" start="00:17:48.240" video="qanda-project" id="subtitle"]]
+[[!template text="""okay I think the stream is moving on. Just making sure. okay. Yes""" start="00:17:56.560" video="qanda-project" id="subtitle"]]
+[[!template text="""we are moving on to the next stream. So Blaine, I'm going to need to""" start="00:18:00.080" video="qanda-project" id="subtitle"]]
+[[!template text="""get ready for the next talk. Thank you so much for all your""" start="00:18:02.080" video="qanda-project" id="subtitle"]]
+[[!template text="""answers and feel free to answer your questions. I'm""" start="00:18:04.920" video="qanda-project" id="subtitle"]]
+[[!template text="""sorry that i didn't get to fill your question live. It's just""" start="00:18:08.080" video="qanda-project" id="subtitle"]]
+[[!template text="""there was a lot of questions actually. It was a comment. Okay.""" start="00:18:11.760" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Off-stream Q&A""" start="00:18:16.600" video="qanda-project" id="subtitle"]]</div>[[!template text="""Yeah, yeah. You mentioned about that you sit all the day in""" start="00:18:16.600" video="qanda-project" id="subtitle"]]
+[[!template text="""front of computer, right? And I have to say, it's not too""" start="00:18:24.200" video="qanda-project" id="subtitle"]]
+[[!template text="""different from a bathroom if you get distracted by web""" start="00:18:28.000" video="qanda-project" id="subtitle"]]
+[[!template text="""browser. I also have the same problem. And one interesting""" start="00:18:31.440" video="qanda-project" id="subtitle"]]
+[[!template text="""solution I found at some point is that I pry my mind about""" start="00:18:34.920" video="qanda-project" id="subtitle"]]
+[[!template text="""certain task, I leave my office and I go for a walk while""" start="00:18:38.680" video="qanda-project" id="subtitle"]]
+[[!template text="""thinking about this. And that really forces to focus""" start="00:18:44.040" video="qanda-project" id="subtitle"]]
+[[!template text="""because while you're working you have nothing else to do.""" start="00:18:49.080" video="qanda-project" id="subtitle"]]
+[[!template text="""You cannot go and like go like searching Google and stuff""" start="00:18:52.840" video="qanda-project" id="subtitle"]]
+[[!template text="""like that. It can really help in some cases.""" start="00:18:57.000" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, I try to. Periodically, I'll try to restart doing the""" start="00:19:03.360" video="qanda-project" id="subtitle"]]
+[[!template text="""Pomodoro method, where you're supposed to get up every 25""" start="00:19:09.560" video="qanda-project" id="subtitle"]]
+[[!template text="""minutes and take a break. But that requires a lot of""" start="00:19:12.880" video="qanda-project" id="subtitle"]]
+[[!template text="""discipline. And it also has, I find I'm more exhausted by""" start="00:19:17.960" video="qanda-project" id="subtitle"]]
+[[!template text="""following that method at the end of the day. But I think the""" start="00:19:23.800" video="qanda-project" id="subtitle"]]
+[[!template text="""problem with, well, I think in part- No, no, I don't mean""" start="00:19:26.880" video="qanda-project" id="subtitle"]]
+[[!template text="""Pomodoro actually. I mean, more like showers. Because when""" start="00:19:30.920" video="qanda-project" id="subtitle"]]
+[[!template text="""you take a shower, you think about something, right? When""" start="00:19:36.080" video="qanda-project" id="subtitle"]]
+[[!template text="""you just go for a walk, you again think about it. So this is not""" start="00:19:39.080" video="qanda-project" id="subtitle"]]
+[[!template text="""a break to take rest. It's a break to think away from""" start="00:19:43.160" video="qanda-project" id="subtitle"]]
+[[!template text="""computer.""" start="00:19:46.120" video="qanda-project" id="subtitle"]]
+[[!template text="""And you prime yourself, your brain by... picking something""" start="00:19:49.040" video="qanda-project" id="subtitle"]]
+[[!template text="""to work on. So I have a project, I think, like certain""" start="00:19:54.240" video="qanda-project" id="subtitle"]]
+[[!template text="""questions I want to think about. I sometimes take my, like a""" start="00:19:56.720" video="qanda-project" id="subtitle"]]
+[[!template text="""piece of paper with me. And then when I walk, I like take""" start="00:20:01.080" video="qanda-project" id="subtitle"]]
+[[!template text="""notes. You can record voice in your case. And like half an""" start="00:20:05.320" video="qanda-project" id="subtitle"]]
+[[!template text="""hour and you can really generate ideas.""" start="00:20:10.280" video="qanda-project" id="subtitle"]]
+[[!template text="""I have been doing a similar thing. I will take a clipboard.""" start="00:20:15.240" video="qanda-project" id="subtitle"]]
+[[!template text="""Maybe I'll have, um, Some blank pages where I'll write, jot""" start="00:20:18.520" video="qanda-project" id="subtitle"]]
+[[!template text="""down ideas as I walk. I'll go for like a half hour, hour-long""" start="00:20:24.800" video="qanda-project" id="subtitle"]]
+[[!template text="""walk and also read a paper sometimes, and in the process of""" start="00:20:29.800" video="qanda-project" id="subtitle"]]
+[[!template text="""reading, I get ideas.""" start="00:20:33.880" video="qanda-project" id="subtitle"]]
+[[!template text="""The clipboard though is socially less acceptable. It""" start="00:20:39.160" video="qanda-project" id="subtitle"]]
+[[!template text="""reminds people of their gym teacher, I think, or their""" start="00:20:45.160" video="qanda-project" id="subtitle"]]
+[[!template text="""marine drill sergeant, and they give me all kinds of weird""" start="00:20:49.360" video="qanda-project" id="subtitle"]]
+[[!template text="""looks. Even though they're walking and reading their cell""" start="00:20:53.800" video="qanda-project" id="subtitle"]]
+[[!template text="""phone, looking down at their cell phone, they give me weird""" start="00:20:59.280" video="qanda-project" id="subtitle"]]
+[[!template text="""looks for looking down at a clipboard as I walk. So there's""" start="00:21:03.760" video="qanda-project" id="subtitle"]]
+[[!template text="""that weird aspect to it. It's kind of hilarious.""" start="00:21:08.600" video="qanda-project" id="subtitle"]]
+[[!template text="""Thank you very much for the comment. Yeah, hopefully it's""" start="00:21:16.720" video="qanda-project" id="subtitle"]]
+[[!template text="""helpful. Because I really struggled about this web browser""" start="00:21:21.480" video="qanda-project" id="subtitle"]]
+[[!template text="""in the past. Not so much these days. Very good.""" start="00:21:24.800" video="qanda-project" id="subtitle"]]
+[[!template text="""That's good to hear.""" start="00:21:28.347" video="qanda-project" id="subtitle"]]
+[[!template text="""I asked,""" start="00:21:57.280" video="qanda-project" id="subtitle"]]
+[[!template text="""when I write notes, I've noticed like with the""" start="00:21:57.640" video="qanda-project" id="subtitle"]]
+[[!template text="""Getting Things Done and the Zettelkasten, I like to separate them""" start="00:22:06.520" video="qanda-project" id="subtitle"]]
+[[!template text="""out. And beyond that, I also like to separate them out on""" start="00:22:10.400" video="qanda-project" id="subtitle"]]
+[[!template text="""daily things and the global things. So that, for instance,""" start="00:22:14.760" video="qanda-project" id="subtitle"]]
+[[!template text="""your Zettelkasten, a daily would be like a journal. If you""" start="00:22:19.960" video="qanda-project" id="subtitle"]]
+[[!template text="""separate it out, It gives a lot of tension of, oh, well, if""" start="00:22:24.720" video="qanda-project" id="subtitle"]]
+[[!template text="""it's just a stray thought, I'll write it into my journal if I""" start="00:22:29.600" video="qanda-project" id="subtitle"]]
+[[!template text="""don't know where it goes. If I can think of a permanent place""" start="00:22:33.120" video="qanda-project" id="subtitle"]]
+[[!template text="""for it to go, it goes into the Zettelkasten. Same thing with,""" start="00:22:36.960" video="qanda-project" id="subtitle"]]
+[[!template text="""and then with like the getting things done is like, I don't,""" start="00:22:41.480" video="qanda-project" id="subtitle"]]
+[[!template text="""you start with like a fresh sheet of paper every single day or""" start="00:22:44.600" video="qanda-project" id="subtitle"]]
+[[!template text="""note or whatever. You ever done, you have tricks like that""" start="00:22:48.160" video="qanda-project" id="subtitle"]]
+[[!template text="""that you've noticed? So I'm sort of doing something similar""" start="00:22:54.640" video="qanda-project" id="subtitle"]]
+[[!template text="""through this. Well, to be honest, I like at the start of the""" start="00:22:59.360" video="qanda-project" id="subtitle"]]
+[[!template text="""day, I actually will just do sort of a brain dump of what""" start="00:23:04.280" video="qanda-project" id="subtitle"]]
+[[!template text="""happened the day before, just to try to get writing again.""" start="00:23:07.400" video="qanda-project" id="subtitle"]]
+[[!template text="""And these days, because of carpal tunnel syndrome, I'll use""" start="00:23:11.880" video="qanda-project" id="subtitle"]]
+[[!template text="""a voice speech to text to generate that initial text. And I'm""" start="00:23:16.960" video="qanda-project" id="subtitle"]]
+[[!template text="""just trying to, build up momentum of generating words. And""" start="00:23:22.160" video="qanda-project" id="subtitle"]]
+[[!template text="""so I capture, but I'm also adding to that document""" start="00:23:28.480" video="qanda-project" id="subtitle"]]
+[[!template text="""throughout the day. And so that is available through the web""" start="00:23:35.560" video="qanda-project" id="subtitle"]]
+[[!template text="""browser. I have a tab open to 750 words all the time. There's""" start="00:23:40.720" video="qanda-project" id="subtitle"]]
+[[!template text="""an alternate to it that is called Write Honey, that somebody""" start="00:23:47.280" video="qanda-project" id="subtitle"]]
+[[!template text="""in Berlin started, because they benefited so greatly from""" start="00:23:51.720" video="qanda-project" id="subtitle"]]
+[[!template text="""this practice. They have made it available for free,""" start="00:23:55.920" video="qanda-project" id="subtitle"]]
+[[!template text="""apparently for life. And so there's no word limit, whereas I""" start="00:23:58.680" video="qanda-project" id="subtitle"]]
+[[!template text="""have a grandfathered version of 750 words, and I have a word""" start="00:24:05.040" video="qanda-project" id="subtitle"]]
+[[!template text="""limit of 5,000 words. I rarely hit it. It's nice to know that""" start="00:24:10.600" video="qanda-project" id="subtitle"]]
+[[!template text="""right honey doesn't have that limit. So, that's how I'm""" start="00:24:15.520" video="qanda-project" id="subtitle"]]
+[[!template text="""capturing things. And then, so some of that text winds up""" start="00:24:20.600" video="qanda-project" id="subtitle"]]
+[[!template text="""being moved into my log file or even sometimes into the""" start="00:24:26.200" video="qanda-project" id="subtitle"]]
+[[!template text="""manuscript.""" start="00:24:32.280" video="qanda-project" id="subtitle"]]
+[[!template text="""So maybe a little less organized than the getting things""" start="00:24:37.800" video="qanda-project" id="subtitle"]]
+[[!template text="""done approach with the dailies and then the refiling""" start="00:24:42.080" video="qanda-project" id="subtitle"]]
+[[!template text="""process. So I don't do any refiling. I want to file once. I""" start="00:24:47.560" video="qanda-project" id="subtitle"]]
+[[!template text="""don't want to file a second time or have to go back and handle""" start="00:24:54.320" video="qanda-project" id="subtitle"]]
+[[!template text="""something a second time. So that's my rationale for the""" start="00:24:58.080" video="qanda-project" id="subtitle"]]
+[[!template text="""approach I take. I'm not using it. I've had various""" start="00:25:03.320" video="qanda-project" id="subtitle"]]
+[[!template text="""iterations of systems I've used, but I think my favorite one""" start="00:25:08.160" video="qanda-project" id="subtitle"]]
+[[!template text="""for like getting things done is actually not using""" start="00:25:12.760" video="qanda-project" id="subtitle"]]
+[[!template text="""Org Agenda, just like making a blank sheet and kind of doing""" start="00:25:15.560" video="qanda-project" id="subtitle"]]
+[[!template text="""like a template where it's just like, and separating my""" start="00:25:18.800" video="qanda-project" id="subtitle"]]
+[[!template text="""tasks out into three categories, like core tasks, like, and""" start="00:25:24.040" video="qanda-project" id="subtitle"]]
+[[!template text="""rule of thumb is like, if it's beyond three, it's too much too""" start="00:25:28.120" video="qanda-project" id="subtitle"]]
+[[!template text="""many. And like core tasks, secondary tasks and unplanned""" start="00:25:32.280" video="qanda-project" id="subtitle"]]
+[[!template text="""tasks. So these, those three categories, like for""" start="00:25:36.360" video="qanda-project" id="subtitle"]]
+[[!template text="""instance, the core task, if it's greater than three, it's""" start="00:25:39.760" video="qanda-project" id="subtitle"]]
+[[!template text="""too many. That way is like, when you look back, then you can""" start="00:25:42.040" video="qanda-project" id="subtitle"]]
+[[!template text="""see, like, if I got my core tasks done, I did really good. or if""" start="00:25:47.000" video="qanda-project" id="subtitle"]]
+[[!template text="""I got a lot of secondary tasks but not my core tasks done, I got""" start="00:25:51.440" video="qanda-project" id="subtitle"]]
+[[!template text="""side reactions with things that don't matter.""" start="00:25:56.880" video="qanda-project" id="subtitle"]]
+[[!template text="""If I got a lot of unplanned tasks,""" start="00:25:58.874" video="qanda-project" id="subtitle"]]
+[[!template text="""I could look at those unplanned tasks to see, oh yeah, okay,""" start="00:26:00.640" video="qanda-project" id="subtitle"]]
+[[!template text="""that was fine. Okay, the day didn't go as""" start="00:26:03.680" video="qanda-project" id="subtitle"]]
+[[!template text="""planned, but it was, yeah. That's an excellent suggestion.""" start="00:26:07.640" video="qanda-project" id="subtitle"]]
+[[!template text="""I generally just And I ended up long of a to-do list. It's""" start="00:26:15.000" video="qanda-project" id="subtitle"]]
+[[!template text="""impossible to accomplish in a day. Then I just like""" start="00:26:20.120" video="qanda-project" id="subtitle"]]
+[[!template text="""furnaces. Another trick that I liked was I also put like that""" start="00:26:25.080" video="qanda-project" id="subtitle"]]
+[[!template text="""under like a week. Cause it makes more sense to do it under a""" start="00:26:29.800" video="qanda-project" id="subtitle"]]
+[[!template text="""week. And then I'd have like subheadings under that, like,""" start="00:26:34.720" video="qanda-project" id="subtitle"]]
+[[!template text="""you know, so week day. Um, then I'd have those three""" start="00:26:39.080" video="qanda-project" id="subtitle"]]
+[[!template text="""categories for each of the tasks and then kind of as an""" start="00:26:45.080" video="qanda-project" id="subtitle"]]
+[[!template text="""unofficial day at the end, I just like have a staging area for""" start="00:26:48.600" video="qanda-project" id="subtitle"]]
+[[!template text="""all tasks. So I just kind of, then I just, I want to be using org""" start="00:26:51.720" video="qanda-project" id="subtitle"]]
+[[!template text="""agenda. So then I just be moving up and down, you know, cause""" start="00:26:56.200" video="qanda-project" id="subtitle"]]
+[[!template text="""you could, cause you're able to rearrange stuff in org mode""" start="00:27:00.320" video="qanda-project" id="subtitle"]]
+[[!template text="""so easily. I don't know if there's a good way of, that's been""" start="00:27:03.200" video="qanda-project" id="subtitle"]]
+[[!template text="""my favorite iteration""" start="00:27:08.080" video="qanda-project" id="subtitle"]]
+[[!template text="""of doing it. So I wrote a little function that pops in the""" start="00:27:11.920" video="qanda-project" id="subtitle"]]
+[[!template text="""to-dos that are specific to a particular project in the log""" start="00:27:20.760" video="qanda-project" id="subtitle"]]
+[[!template text="""file for that project.""" start="00:27:25.440" video="qanda-project" id="subtitle"]]
+[[!template text="""And then I add the log file name to the list of org files that""" start="00:27:31.360" video="qanda-project" id="subtitle"]]
+[[!template text="""Org Agenda searches, so those to-dos will show up. But my""" start="00:27:36.600" video="qanda-project" id="subtitle"]]
+[[!template text="""list is too long, and that becomes overwhelming. So I'll""" start="00:27:41.920" video="qanda-project" id="subtitle"]]
+[[!template text="""just assign a to-do heading to the top item in my to-do list to""" start="00:27:46.200" video="qanda-project" id="subtitle"]]
+[[!template text="""try to, but maybe it should be three. That would be a""" start="00:27:51.400" video="qanda-project" id="subtitle"]]
+[[!template text="""reasonable compromise.""" start="00:27:54.480" video="qanda-project" id="subtitle"]]
+[[!template text="""That's a good idea.""" start="00:27:58.480" video="qanda-project" id="subtitle"]]
+[[!template text="""So you're doing weekly planning then? I can show up. I was.""" start="00:28:03.880" video="qanda-project" id="subtitle"]]
+[[!template text="""This is, yeah, this was, yeah. What ended up making me stop is""" start="00:28:12.880" video="qanda-project" id="subtitle"]]
+[[!template text="""I didn't know how to make a template of it. And I, I ended up""" start="00:28:16.880" video="qanda-project" id="subtitle"]]
+[[!template text="""getting annoyed by manually changing the days every single""" start="00:28:20.440" video="qanda-project" id="subtitle"]]
+[[!template text="""time and naming like my files and stuff like that. If I Maybe""" start="00:28:25.880" video="qanda-project" id="subtitle"]]
+[[!template text="""if I did it now, I could figure out how to program it or if I""" start="00:28:29.760" video="qanda-project" id="subtitle"]]
+[[!template text="""spent enough time, but that's what I think eventually made""" start="00:28:34.160" video="qanda-project" id="subtitle"]]
+[[!template text="""me stop doing it. So there's a, um, you can make a snippet for""" start="00:28:36.440" video="qanda-project" id="subtitle"]]
+[[!template text="""the week and then you could have code in the snippet that""" start="00:28:42.480" video="qanda-project" id="subtitle"]]
+[[!template text="""would generate the dates automatically. Um, So I have like""" start="00:28:45.680" video="qanda-project" id="subtitle"]]
+[[!template text="""for my daily entry, I have a snippet called entry and then I""" start="00:28:51.520" video="qanda-project" id="subtitle"]]
+[[!template text="""hit tab and our control or whatever to insert the snippet and""" start="00:28:56.600" video="qanda-project" id="subtitle"]]
+[[!template text="""that has the current date already entered. So I skip that, I""" start="00:29:02.080" video="qanda-project" id="subtitle"]]
+[[!template text="""don't have to deal with that. So I think you could probably""" start="00:29:07.920" video="qanda-project" id="subtitle"]]
+[[!template text="""feed what you want to accomplish to a copilot, for example,""" start="00:29:13.480" video="qanda-project" id="subtitle"]]
+[[!template text="""being copilot. I've been using Bing Copilot""" start="00:29:18.640" video="qanda-project" id="subtitle"]]
+[[!template text="""for the past three or four months to return""" start="00:29:21.802" video="qanda-project" id="subtitle"]]
+[[!template text="""Elisp code that works 90% of the time.""" start="00:29:25.834" video="qanda-project" id="subtitle"]]
+[[!template text="""I've been pretty impressed. And it's free. So no""" start="00:29:29.228" video="qanda-project" id="subtitle"]]
+[[!template text="""API key required. It runs. So I guess I installed the Bing""" start="00:29:34.400" video="qanda-project" id="subtitle"]]
+[[!template text="""Copilot plugin in the Google Chrome.""" start="00:29:43.120" video="qanda-project" id="subtitle"]]
+[[!template text="""And that's what I've been using.""" start="00:29:49.363" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, I can show you my screen if""" start="00:29:50.200" video="qanda-project" id="subtitle"]]
+[[!template text="""you want to see what the screen looks like.""" start="00:30:00.808" video="qanda-project" id="subtitle"]]
+[[!template text="""I can email you the template. I kind of have it saved as a""" start="00:30:05.853" video="qanda-project" id="subtitle"]]
+[[!template text="""template. I've got to find it, though. Let's see.""" start="00:30:06.840" video="qanda-project" id="subtitle"]]
+[[!template text="""Not exactly set up to.""" start="00:30:12.640" video="qanda-project" id="subtitle"]]
+[[!template text="""Alright, so. I""" start="00:30:17.440" video="qanda-project" id="subtitle"]]
+[[!template text="""don't know if you can see this well enough, but...""" start="00:30:44.160" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, let's make it bigger. Can you see that at all? I can see a""" start="00:30:50.160" video="qanda-project" id="subtitle"]]
+[[!template text="""little bit of it. Yeah, it's kind of blurry.""" start="00:30:59.600" video="qanda-project" id="subtitle"]]
+[[!template text="""Alright, well. But then you just do that right there. So it's""" start="00:31:01.280" video="qanda-project" id="subtitle"]]
+[[!template text="""all color coded. I, so I get a sense of, uh, uh, what the kind of""" start="00:31:07.400" video="qanda-project" id="subtitle"]]
+[[!template text="""greenish blue lines must be or days, I guess, or. Okay. Well,""" start="00:31:13.240" video="qanda-project" id="subtitle"]]
+[[!template text="""right. There's like, so you can see like startup show two""" start="00:31:18.600" video="qanda-project" id="subtitle"]]
+[[!template text="""levels. Then I have like numbers right there. So right on one""" start="00:31:22.640" video="qanda-project" id="subtitle"]]
+[[!template text="""day you have like the core tasks, there's three out of four""" start="00:31:27.520" video="qanda-project" id="subtitle"]]
+[[!template text="""done. Then I have like secondary and unplanned and then.""" start="00:31:30.920" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, that's just the general idea""" start="00:31:37.120" video="qanda-project" id="subtitle"]]
+[[!template text="""So that this is you raise you know the so the dilemma I face of""" start="00:31:42.080" video="qanda-project" id="subtitle"]]
+[[!template text="""course is that I have maintain like a to-do list and our""" start="00:31:50.320" video="qanda-project" id="subtitle"]]
+[[!template text="""project specific and then there's the all the other things I""" start="00:31:55.120" video="qanda-project" id="subtitle"]]
+[[!template text="""have to do and So there should be like some The org agenda""" start="00:31:58.800" video="qanda-project" id="subtitle"]]
+[[!template text="""should be a way of being able to pull the two sets together, I""" start="00:32:04.440" video="qanda-project" id="subtitle"]]
+[[!template text="""guess.""" start="00:32:09.880" video="qanda-project" id="subtitle"]]
+[[!template text="""I had broken up my,""" start="00:32:10.320" video="qanda-project" id="subtitle"]]
+[[!template text="""well, I had way too many to-do lists stored in various""" start="00:32:16.960" video="qanda-project" id="subtitle"]]
+[[!template text="""places.""" start="00:32:25.360" video="qanda-project" id="subtitle"]]
+[[!template text="""And so that's a problem, I guess, when you have too many""" start="00:32:25.920" video="qanda-project" id="subtitle"]]
+[[!template text="""to-dos and the org Agenda becomes overwhelming and sort of""" start="00:32:32.200" video="qanda-project" id="subtitle"]]
+[[!template text="""discourages Yeah, I figure that the general task on that is""" start="00:32:37.360" video="qanda-project" id="subtitle"]]
+[[!template text="""like I start writing things up. I get more and more items.""" start="00:32:44.480" video="qanda-project" id="subtitle"]]
+[[!template text="""I'll make a master to-do list. Oh my master to-do list has too""" start="00:32:49.200" video="qanda-project" id="subtitle"]]
+[[!template text="""many items. Let me throw it out Well, there's another name""" start="00:32:52.320" video="qanda-project" id="subtitle"]]
+[[!template text="""for that kind of list you could you know called a grass""" start="00:32:58.760" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Time Power""" start="00:33:01.560" video="qanda-project" id="subtitle"]]</div>[[!template text="""catcher list. So Charles Hobbs was this, he wrote a book in""" start="00:33:01.560" video="qanda-project" id="subtitle"]]
+[[!template text="""the 80s called Time Power. And he had like, you know, so he was""" start="00:33:06.960" video="qanda-project" id="subtitle"]]
+[[!template text="""one of these time management gurus. And so, let's""" start="00:33:16.080" video="qanda-project" id="subtitle"]]
+[[!template text="""see, you get the name of some, like Tony Robbins and,""" start="00:33:22.680" video="qanda-project" id="subtitle"]]
+[[!template text="""I forget the name of the other guy, that's Brian Tracy. So""" start="00:33:26.520" video="qanda-project" id="subtitle"]]
+[[!template text="""that they have kind of pushed the same kind of similar""" start="00:33:34.880" video="qanda-project" id="subtitle"]]
+[[!template text="""approaches. But Charles Hobbs had a very more organized""" start="00:33:39.120" video="qanda-project" id="subtitle"]]
+[[!template text="""approach, I think, and more disciplined. And he identified""" start="00:33:43.280" video="qanda-project" id="subtitle"]]
+[[!template text="""that kind of list as a grass catcher list, where you have a""" start="00:33:46.680" video="qanda-project" id="subtitle"]]
+[[!template text="""list of items that you think you might want to do, but you""" start="00:33:49.440" video="qanda-project" id="subtitle"]]
+[[!template text="""haven't prioritized them yet. And you haven't scheduled""" start="00:33:52.840" video="qanda-project" id="subtitle"]]
+[[!template text="""them yet. but they need a safe place to be stored. When time""" start="00:33:57.360" video="qanda-project" id="subtitle"]]
+[[!template text="""permits, the idea was you would pull items off that grass""" start="00:34:03.200" video="qanda-project" id="subtitle"]]
+[[!template text="""catcher list and move it into a to-do item that you will""" start="00:34:06.200" video="qanda-project" id="subtitle"]]
+[[!template text="""schedule and commit to getting done. That was the idea,""" start="00:34:10.600" video="qanda-project" id="subtitle"]]
+[[!template text="""separating them between core tasks, secondary tasks,""" start="00:34:18.080" video="qanda-project" id="subtitle"]]
+[[!template text="""unplanned tasks, because your whole day can't be planned.""" start="00:34:21.000" video="qanda-project" id="subtitle"]]
+[[!template text="""Right, right. You have things you have to do that are""" start="00:34:24.120" video="qanda-project" id="subtitle"]]
+[[!template text="""unscheduled that come through your door or land in your""" start="00:34:27.920" video="qanda-project" id="subtitle"]]
+[[!template text="""inbox or land in your email. You've got to do them. And then""" start="00:34:31.320" video="qanda-project" id="subtitle"]]
+[[!template text="""core tasks, I don't know, like to-do lists, their whole""" start="00:34:35.240" video="qanda-project" id="subtitle"]]
+[[!template text="""point is. So for instance, like journal and Zettelkasten""" start="00:34:38.800" video="qanda-project" id="subtitle"]]
+[[!template text="""are kind of, and like that's global lists versus the daily""" start="00:34:43.280" video="qanda-project" id="subtitle"]]
+[[!template text="""lists are kind of. done a little differently. With""" start="00:34:46.680" video="qanda-project" id="subtitle"]]
+[[!template text="""Zettelkasten, it's organic. Things build up. If you make a""" start="00:34:49.400" video="qanda-project" id="subtitle"]]
+[[!template text="""note, it's great. If you don't, if it has a small amount,""" start="00:34:53.640" video="qanda-project" id="subtitle"]]
+[[!template text="""that's great. Have a small note. With a daily to-do, you want""" start="00:34:56.360" video="qanda-project" id="subtitle"]]
+[[!template text="""to use it to make decisions. That's the idea of having the""" start="00:35:00.480" video="qanda-project" id="subtitle"]]
+[[!template text="""core task and the secondary task separate because the whole""" start="00:35:05.200" video="qanda-project" id="subtitle"]]
+[[!template text="""thing about it is, I wanna use this to eliminate what I'm""" start="00:35:08.640" video="qanda-project" id="subtitle"]]
+[[!template text="""going to do. It's to choose what I'm going to do, like the core""" start="00:35:12.720" video="qanda-project" id="subtitle"]]
+[[!template text="""tasks. Because if I can get my core tasks, I can be happy with""" start="00:35:15.760" video="qanda-project" id="subtitle"]]
+[[!template text="""my previous days. And then I would probably start using""" start="00:35:19.840" video="qanda-project" id="subtitle"]]
+[[!template text="""agenda a lot more if I was more consistent with using like""" start="00:35:26.520" video="qanda-project" id="subtitle"]]
+[[!template text="""these as like weekly files. I don't know. But then the whole""" start="00:35:30.640" video="qanda-project" id="subtitle"]]
+[[!template text="""goal thing is just like, let me see what I wanna populate the""" start="00:35:34.440" video="qanda-project" id="subtitle"]]
+[[!template text="""day list with. So how many core tasks wind up spanning""" start="00:35:37.560" video="qanda-project" id="subtitle"]]
+[[!template text="""multiple days because they're such big projects?""" start="00:35:43.880" video="qanda-project" id="subtitle"]]
+[[!template text="""I would need more time using the system before I'd figure""" start="00:35:47.360" video="qanda-project" id="subtitle"]]
+[[!template text="""something like that out. As I said, I'm not using it right""" start="00:35:54.520" video="qanda-project" id="subtitle"]]
+[[!template text="""now, but that has been my favorite iteration of using these.""" start="00:35:59.680" video="qanda-project" id="subtitle"]]
+[[!template text="""So within the core tasks, do you assign priorities? So the""" start="00:36:04.760" video="qanda-project" id="subtitle"]]
+[[!template text="""way I would translate this a little bit would be like in this""" start="00:36:13.520" video="qanda-project" id="subtitle"]]
+[[!template text="""method that Charles Hobbs had, he had a category for the""" start="00:36:20.280" video="qanda-project" id="subtitle"]]
+[[!template text="""items that you really have to get done, and they're really""" start="00:36:25.000" video="qanda-project" id="subtitle"]]
+[[!template text="""important. And so they get a priority of A. And then the""" start="00:36:29.400" video="qanda-project" id="subtitle"]]
+[[!template text="""secondary tasks would get a priority of B. But then within""" start="00:36:34.120" video="qanda-project" id="subtitle"]]
+[[!template text="""the A category, you would number them like one through""" start="00:36:39.520" video="qanda-project" id="subtitle"]]
+[[!template text="""three, I guess. All right, so this would be part of the""" start="00:36:42.080" video="qanda-project" id="subtitle"]]
+[[!template text="""purpose of separating the daily list or like the weekly list""" start="00:36:45.040" video="qanda-project" id="subtitle"]]
+[[!template text="""from the global list. So for instance, your global list,""" start="00:36:49.080" video="qanda-project" id="subtitle"]]
+[[!template text="""you'd say, I want this project that will take a long duration""" start="00:36:51.720" video="qanda-project" id="subtitle"]]
+[[!template text="""of time. But your daily list would just say, I want to work on""" start="00:36:55.680" video="qanda-project" id="subtitle"]]
+[[!template text="""it today, even if I don't get it done today. Like, I want to""" start="00:37:00.640" video="qanda-project" id="subtitle"]]
+[[!template text="""work on it today. then maybe you can link like for instance""" start="00:37:05.040" video="qanda-project" id="subtitle"]]
+[[!template text="""that your daily list to that global list or something along""" start="00:37:11.400" video="qanda-project" id="subtitle"]]
+[[!template text="""those lines. But that would be I think a good answer to that""" start="00:37:16.240" video="qanda-project" id="subtitle"]]
+[[!template text="""type of problem because yeah, the daily list is like""" start="00:37:20.480" video="qanda-project" id="subtitle"]]
+[[!template text="""supposed to be for that day, not for, Like for instance, you""" start="00:37:24.720" video="qanda-project" id="subtitle"]]
+[[!template text="""start out clean, you make the list like that would probably""" start="00:37:31.000" video="qanda-project" id="subtitle"]]
+[[!template text="""be your first task for the week is what do I want for the week?""" start="00:37:34.680" video="qanda-project" id="subtitle"]]
+[[!template text="""Then you have some tasks that you do with staging. And then""" start="00:37:38.600" video="qanda-project" id="subtitle"]]
+[[!template text="""like for instance, since you look at it as a whole week at a""" start="00:37:41.640" video="qanda-project" id="subtitle"]]
+[[!template text="""time, you're able to rearrange it and say, these are the""" start="00:37:43.800" video="qanda-project" id="subtitle"]]
+[[!template text="""things I wanna get done this week. This is what I really wanna""" start="00:37:47.560" video="qanda-project" id="subtitle"]]
+[[!template text="""get done on this day. This is what I don't care about on this""" start="00:37:51.160" video="qanda-project" id="subtitle"]]
+[[!template text="""day or yeah.""" start="00:37:53.640" video="qanda-project" id="subtitle"]]
+[[!template text="""Another person that kind of, and this is kind of related,""" start="00:37:53.960" video="qanda-project" id="subtitle"]]
+[[!template text="""there's this idea of""" start="00:38:03.080" video="qanda-project" id="subtitle"]]
+[[!template text="""of time blocking. So obviously, three tasks, core tasks,""" start="00:38:05.560" video="qanda-project" id="subtitle"]]
+[[!template text="""maybe they're going to take three or four hours each or two or""" start="00:38:14.040" video="qanda-project" id="subtitle"]]
+[[!template text="""three. And you can assign blocks of time in your schedule to""" start="00:38:18.840" video="qanda-project" id="subtitle"]]
+[[!template text="""get them done. And often, what happens is they take longer""" start="00:38:23.920" video="qanda-project" id="subtitle"]]
+[[!template text="""than you expect. And you have to extend the blocks. Calvin""" start="00:38:30.040" video="qanda-project" id="subtitle"]]
+[[!template text="""Newport has a that's a kind of approach he advocates is you""" start="00:38:33.800" video="qanda-project" id="subtitle"]]
+[[!template text="""and I think the power to that is you're you. you're mapping""" start="00:38:39.360" video="qanda-project" id="subtitle"]]
+[[!template text="""out, you know, you're allocating the time to do these things""" start="00:38:43.520" video="qanda-project" id="subtitle"]]
+[[!template text="""and you're seeing how you actually, how much time things""" start="00:38:48.600" video="qanda-project" id="subtitle"]]
+[[!template text="""actually take. And then you, so you wind up adjusting in the""" start="00:38:52.680" video="qanda-project" id="subtitle"]]
+[[!template text="""future. And the idea is with this approach is do it on paper.""" start="00:38:56.120" video="qanda-project" id="subtitle"]]
+[[!template text="""And then you have to like, uh, if something takes longer,""" start="00:39:00.080" video="qanda-project" id="subtitle"]]
+[[!template text="""that pushes everything else down. You just wind up""" start="00:39:03.560" video="qanda-project" id="subtitle"]]
+[[!template text="""redrawing your schedule for the day, uh, manually. And, um,""" start="00:39:06.600" video="qanda-project" id="subtitle"]]
+[[!template text="""So it's kind of laborious, and that labor is supposed to""" start="00:39:12.800" video="qanda-project" id="subtitle"]]
+[[!template text="""inhibit you from spending too much time on a project. As you""" start="00:39:17.400" video="qanda-project" id="subtitle"]]
+[[!template text="""know, you've got the pain of redrawing everything if you""" start="00:39:21.800" video="qanda-project" id="subtitle"]]
+[[!template text="""spend too much time on the first project.""" start="00:39:24.960" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, there was a, let's see. It's whatever you strategy you""" start="00:39:27.920" video="qanda-project" id="subtitle"]]
+[[!template text="""want to do. Like for instance, to me, it's like doing it this""" start="00:39:37.000" video="qanda-project" id="subtitle"]]
+[[!template text="""way makes me say, I want to focus on like what matters. Then""" start="00:39:40.360" video="qanda-project" id="subtitle"]]
+[[!template text="""it'll tell me if I feel good about that day, depends on what""" start="00:39:45.520" video="qanda-project" id="subtitle"]]
+[[!template text="""algorithm, what level and what type of strategy you're""" start="00:39:49.240" video="qanda-project" id="subtitle"]]
+[[!template text="""using. If you're using time blocking, you're optimizing""" start="00:39:52.760" video="qanda-project" id="subtitle"]]
+[[!template text="""for each level of time block where I'm, where's like, And you""" start="00:39:56.120" video="qanda-project" id="subtitle"]]
+[[!template text="""can combine the approaches. It'd be trickier. But like, now""" start="00:40:02.880" video="qanda-project" id="subtitle"]]
+[[!template text="""let's see. I was listening to a talk with Jordan Peterson.""" start="00:40:09.360" video="qanda-project" id="subtitle"]]
+[[!template text="""One of the things he said that really resonated with me is""" start="00:40:12.920" video="qanda-project" id="subtitle"]]
+[[!template text="""like, you wanna use a calendar, but the first rule of using a""" start="00:40:15.160" video="qanda-project" id="subtitle"]]
+[[!template text="""calendar is don't let the calendar tyrannize you. Because""" start="00:40:19.120" video="qanda-project" id="subtitle"]]
+[[!template text="""like the first thing you wanna do whenever you use a calendar""" start="00:40:24.600" video="qanda-project" id="subtitle"]]
+[[!template text="""is schedule every single minute of the day Now you don't have""" start="00:40:28.000" video="qanda-project" id="subtitle"]]
+[[!template text="""any room for if any task overruns at all. And after a couple of""" start="00:40:33.040" video="qanda-project" id="subtitle"]]
+[[!template text="""tests, you're like, I don't want to do this anymore. I rebel.""" start="00:40:37.280" video="qanda-project" id="subtitle"]]
+[[!template text="""I'm going to throw it out. So one kind of combination is""" start="00:40:42.720" video="qanda-project" id="subtitle"]]
+[[!template text="""through this Pomodoro method I mentioned earlier, where""" start="00:40:49.880" video="qanda-project" id="subtitle"]]
+[[!template text="""you would sort of like block out, say, two hours. You work for""" start="00:40:53.800" video="qanda-project" id="subtitle"]]
+[[!template text="""like 25 minutes, take a little, break for up to five minutes""" start="00:40:57.720" video="qanda-project" id="subtitle"]]
+[[!template text="""and get back to work. And then after two hours, you're to take""" start="00:41:02.200" video="qanda-project" id="subtitle"]]
+[[!template text="""like a 15 minute break in the morning. In the afternoon, you""" start="00:41:07.280" video="qanda-project" id="subtitle"]]
+[[!template text="""might even let that break run longer and you might only have""" start="00:41:11.120" video="qanda-project" id="subtitle"]]
+[[!template text="""three work sessions between breaks. So because you're""" start="00:41:14.600" video="qanda-project" id="subtitle"]]
+[[!template text="""going to be more run down in the afternoon. And so you build in""" start="00:41:19.280" video="qanda-project" id="subtitle"]]
+[[!template text="""some""" start="00:41:24.320" video="qanda-project" id="subtitle"]]
+[[!template text="""into your schedule, some flex like, okay, that's supposed""" start="00:41:26.920" video="qanda-project" id="subtitle"]]
+[[!template text="""to be a break time, but you know, maybe some urgency comes up""" start="00:41:31.640" video="qanda-project" id="subtitle"]]
+[[!template text="""and you got to deal with, um, and you have to break out of this,""" start="00:41:34.440" video="qanda-project" id="subtitle"]]
+[[!template text="""uh, Pomodoro technique. So, uh, that, that, that's one way""" start="00:41:38.000" video="qanda-project" id="subtitle"]]
+[[!template text="""of kind of scheduling in some, uh, flexibility is through""" start="00:41:44.040" video="qanda-project" id="subtitle"]]
+[[!template text="""the breaks at Peterson's[??], right. Right. That... I can't, I""" start="00:41:48.800" video="qanda-project" id="subtitle"]]
+[[!template text="""can't... I don't schedule to that kind of detail. That's just""" start="00:41:54.400" video="qanda-project" id="subtitle"]]
+[[!template text="""too oppressive.""" start="00:41:59.240" video="qanda-project" id="subtitle"]]
+[[!template text="""Well, neither do I, but it's like that, like I, that's, I""" start="00:42:00.040" video="qanda-project" id="subtitle"]]
+[[!template text="""don't try to, to me, the much more interesting question that""" start="00:42:05.400" video="qanda-project" id="subtitle"]]
+[[!template text="""I tried to do is like, let's try to make sure I do the important""" start="00:42:09.120" video="qanda-project" id="subtitle"]]
+[[!template text="""things. Cause if I do those, my life would probably move a lot""" start="00:42:12.480" video="qanda-project" id="subtitle"]]
+[[!template text="""quicker. If I get, if I choose a couple items that I really""" start="00:42:15.200" video="qanda-project" id="subtitle"]]
+[[!template text="""want and am able to consistently do them, I think my life""" start="00:42:19.320" video="qanda-project" id="subtitle"]]
+[[!template text="""would bastically start improving. Not necessarily if I can""" start="00:42:22.240" video="qanda-project" id="subtitle"]]
+[[!template text="""play the game of optimizing every hour.""" start="00:42:26.320" video="qanda-project" id="subtitle"]]
+[[!template text="""Maybe that could be, and it's a place to start rather, and I""" start="00:42:28.880" video="qanda-project" id="subtitle"]]
+[[!template text="""think it'd be the most effective place to start. And if I got""" start="00:42:36.880" video="qanda-project" id="subtitle"]]
+[[!template text="""better at using it all the time, perhaps I'd be playing""" start="00:42:39.080" video="qanda-project" id="subtitle"]]
+[[!template text="""optimizing every hour game. But this is the game I think""" start="00:42:42.720" video="qanda-project" id="subtitle"]]
+[[!template text="""would be best bang for buck for me to optimize now. What""" start="00:42:47.000" video="qanda-project" id="subtitle"]]
+[[!template text="""you're trying to optimize for is accomplishing these core""" start="00:42:52.720" video="qanda-project" id="subtitle"]]
+[[!template text="""tasks, getting them done as quickly as possible, or as""" start="00:42:56.040" video="qanda-project" id="subtitle"]]
+[[!template text="""effectively as possible, and as effectively as you need, or""" start="00:43:03.560" video="qanda-project" id="subtitle"]]
+[[!template text="""whatever your goal is. But yeah, focusing on that rather""" start="00:43:10.560" video="qanda-project" id="subtitle"]]
+[[!template text="""than the scheduling, I think. Plus, a core task could be, I""" start="00:43:15.360" video="qanda-project" id="subtitle"]]
+[[!template text="""don't know, catch up on all my house chores, or let, or do a""" start="00:43:19.680" video="qanda-project" id="subtitle"]]
+[[!template text="""specific one if it's really big or like, I don't know, it's""" start="00:43:26.120" video="qanda-project" id="subtitle"]]
+[[!template text="""whatever you want it to be. It's like, you can make them""" start="00:43:28.880" video="qanda-project" id="subtitle"]]
+[[!template text="""bigger or smaller depending on, on how you word them and""" start="00:43:32.160" video="qanda-project" id="subtitle"]]
+[[!template text="""everything. Cause like, if you say cap, capture all of your""" start="00:43:37.560" video="qanda-project" id="subtitle"]]
+[[!template text="""house chores up for like one week and you haven't done""" start="00:43:40.920" video="qanda-project" id="subtitle"]]
+[[!template text="""anything, that's probably a little too ambitious.""" start="00:43:44.880" video="qanda-project" id="subtitle"]]
+[[!template text="""That's right. Yeah, well, a lot of. Yeah.""" start="00:43:47.280" video="qanda-project" id="subtitle"]]
+[[!template text="""I spend, I don't know, at least 15 minutes, half an hour at the""" start="00:43:56.440" video="qanda-project" id="subtitle"]]
+[[!template text="""beginning of the day, sort of my my planning and sort of my""" start="00:44:03.040" video="qanda-project" id="subtitle"]]
+[[!template text="""initial writing session is involves a bit of planning and""" start="00:44:07.120" video="qanda-project" id="subtitle"]]
+[[!template text="""there's always. A lot more time. So generally, depending on""" start="00:44:12.360" video="qanda-project" id="subtitle"]]
+[[!template text="""the nature of your work,""" start="00:44:20.400" video="qanda-project" id="subtitle"]]
+[[!template text="""it can take up to 15% of your time. It can take quite a bit of""" start="00:44:21.280" video="qanda-project" id="subtitle"]]
+[[!template text="""time. And I think people don't really acknowledge that as""" start="00:44:28.120" video="qanda-project" id="subtitle"]]
+[[!template text="""part of your work is planning. And it can take a significant""" start="00:44:33.920" video="qanda-project" id="subtitle"]]
+[[!template text="""amount of time.""" start="00:44:39.040" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, that's what I was meaning though is like the very first""" start="00:44:39.840" video="qanda-project" id="subtitle"]]
+[[!template text="""thing I think people generally always try to do with the""" start="00:44:44.800" video="qanda-project" id="subtitle"]]
+[[!template text="""scanners like look at how productive I can be let's schedule""" start="00:44:48.120" video="qanda-project" id="subtitle"]]
+[[!template text="""every single minute up and it's like You're not gonna want to""" start="00:44:51.280" video="qanda-project" id="subtitle"]]
+[[!template text="""do that for very long and it's not gonna work out And what you""" start="00:44:55.320" video="qanda-project" id="subtitle"]]
+[[!template text="""were saying about The pomodoro technique one of the core""" start="00:45:00.520" video="qanda-project" id="subtitle"]]
+[[!template text="""Let's see, one of the benefits could be described of another""" start="00:45:06.360" video="qanda-project" id="subtitle"]]
+[[!template text="""benefit I've seen of like multiple habits books is if you""" start="00:45:11.920" video="qanda-project" id="subtitle"]]
+[[!template text="""start multiple small habits where you try to do them""" start="00:45:16.880" video="qanda-project" id="subtitle"]]
+[[!template text="""consistently, you give yourself an opening to where if you""" start="00:45:19.600" video="qanda-project" id="subtitle"]]
+[[!template text="""get into the flow state, you can do a lot more of it. Like, I""" start="00:45:23.320" video="qanda-project" id="subtitle"]]
+[[!template text="""don't know, let's say you got a habit of, I don't know, just""" start="00:45:28.280" video="qanda-project" id="subtitle"]]
+[[!template text="""write a journal entry. You're a journal entry of like at""" start="00:45:31.760" video="qanda-project" id="subtitle"]]
+[[!template text="""least two lines. I don't know that could very easily turn to""" start="00:45:36.520" video="qanda-project" id="subtitle"]]
+[[!template text="""like three paragraphs and if you have like a whole bunch of""" start="00:45:39.280" video="qanda-project" id="subtitle"]]
+[[!template text="""Like the pomodoro technique it could be like stubs to allow""" start="00:45:42.760" video="qanda-project" id="subtitle"]]
+[[!template text="""you to do more stuff""" start="00:45:46.280" video="qanda-project" id="subtitle"]]
+[[!template text="""Where are they in spur to allow inspiration to allow you to""" start="00:45:47.640" video="qanda-project" id="subtitle"]]
+[[!template text="""generate inspiration and then capture it when it strikes if""" start="00:45:54.320" video="qanda-project" id="subtitle"]]
+[[!template text="""the mood fancies you""" start="00:45:57.240" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, so that's kind of an issue with the Pomodoro""" start="00:45:58.760" video="qanda-project" id="subtitle"]]
+[[!template text="""technique. So, one idea is that you just, if you really have""" start="00:46:08.320" video="qanda-project" id="subtitle"]]
+[[!template text="""to break out, because the idea is too big to put on the back""" start="00:46:13.840" video="qanda-project" id="subtitle"]]
+[[!template text="""burner and hold in place, then you do have to break out of the""" start="00:46:19.360" video="qanda-project" id="subtitle"]]
+[[!template text="""Pomodoro and go, you know, jot down a quick note or three""" start="00:46:24.360" video="qanda-project" id="subtitle"]]
+[[!template text="""paragraphs.""" start="00:46:30.040" video="qanda-project" id="subtitle"]]
+[[!template text="""but like how much... You don't get to count that as a""" start="00:46:30.720" video="qanda-project" id="subtitle"]]
+[[!template text="""Pomodoro. You have to like reset your count because you've""" start="00:46:36.840" video="qanda-project" id="subtitle"]]
+[[!template text="""broken it. I mean, according to that method, it's""" start="00:46:40.680" video="qanda-project" id="subtitle"]]
+[[!template text="""kind of rigid. It's a different algorithm optimizing for""" start="00:46:48.760" video="qanda-project" id="subtitle"]]
+[[!template text="""different things. And this may just be like a by-product,""" start="00:46:52.880" video="qanda-project" id="subtitle"]]
+[[!template text="""but this could be very easily like a core advantage that may""" start="00:46:55.480" video="qanda-project" id="subtitle"]]
+[[!template text="""or may not be the core reason that you were using it but didn't""" start="00:47:00.760" video="qanda-project" id="subtitle"]]
+[[!template text="""realize it, and may not be something that it's optimizing""" start="00:47:05.600" video="qanda-project" id="subtitle"]]
+[[!template text="""for. So""" start="00:47:08.720" video="qanda-project" id="subtitle"]]
+[[!template text="""are you developing a Emacs package then with your template?""" start="00:47:17.400" video="qanda-project" id="subtitle"]]
+[[!template text="""No. As I said,""" start="00:47:22.160" video="qanda-project" id="subtitle"]]
+[[!template text="""My next steps where I think would make it work a lot better is""" start="00:47:30.320" video="qanda-project" id="subtitle"]]
+[[!template text="""if I figured out some way of automatically filling out the""" start="00:47:36.320" video="qanda-project" id="subtitle"]]
+[[!template text="""dates or maybe automatically adding the file per week into""" start="00:47:40.000" video="qanda-project" id="subtitle"]]
+[[!template text="""and out of Org Agenda. That would be my next steps. I think if I""" start="00:47:45.440" video="qanda-project" id="subtitle"]]
+[[!template text="""did that, it would have a much greater chance of becoming""" start="00:47:52.000" video="qanda-project" id="subtitle"]]
+[[!template text="""part of my workflow at all times. Yeah, I bet you could do it""" start="00:47:55.720" video="qanda-project" id="subtitle"]]
+[[!template text="""pretty Something I got to work with the help of copilot. I'm""" start="00:48:01.880" video="qanda-project" id="subtitle"]]
+[[!template text="""not a wizard yet at Emacs Lisp, but I find that copilot is""" start="00:48:08.440" video="qanda-project" id="subtitle"]]
+[[!template text="""quite helpful.""" start="00:48:14.960" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, their AIs are definitely interesting.""" start="00:48:26.440" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Do you use a lot of TeX inside Org Mode?""" start="00:48:32.800" video="qanda-project" id="subtitle"]]</div>[[!template text="""So. do you ever use any, uh, a lot of TeX inside of org mode?""" start="00:48:32.800" video="qanda-project" id="subtitle"]]
+[[!template text="""No, mostly because I know that like I could try to learn it,""" start="00:48:38.280" video="qanda-project" id="subtitle"]]
+[[!template text="""but I just don't have a need for it. So yeah. And then also like""" start="00:48:49.640" video="qanda-project" id="subtitle"]]
+[[!template text="""I remember learning, when I learned HTML, I like writing""" start="00:48:57.640" video="qanda-project" id="subtitle"]]
+[[!template text="""HTML more than like, for instance, Word, because it was a lot""" start="00:49:05.280" video="qanda-project" id="subtitle"]]
+[[!template text="""more transparent, like a plain text document is, and kind of""" start="00:49:08.520" video="qanda-project" id="subtitle"]]
+[[!template text="""wrote the ordered list, unordered list, in such a way that it""" start="00:49:14.960" video="qanda-project" id="subtitle"]]
+[[!template text="""kind of looked similar to the page. But I find that I like Org""" start="00:49:20.160" video="qanda-project" id="subtitle"]]
+[[!template text="""Mode more than,""" start="00:49:25.600" video="qanda-project" id="subtitle"]]
+[[!template text="""HTML because, well, it's optimized for, like, my writing""" start="00:49:26.440" video="qanda-project" id="subtitle"]]
+[[!template text="""and consumption and overall use case rather than, like,""" start="00:49:35.480" video="qanda-project" id="subtitle"]]
+[[!template text="""optimizing it for somebody else to view, which I generally""" start="00:49:38.480" video="qanda-project" id="subtitle"]]
+[[!template text="""don't have as much.""" start="00:49:43.360" video="qanda-project" id="subtitle"]]
+[[!template text="""But, so, like, I don't know. Org Mode is what I'm going to end""" start="00:49:45.040" video="qanda-project" id="subtitle"]]
+[[!template text="""up using the most, so. I just want to use LaTeX enough.""" start="00:49:52.800" video="qanda-project" id="subtitle"]]
+[[!template text="""Although I'd be interested in learning LaTeX snippets""" start="00:49:57.880" video="qanda-project" id="subtitle"]]
+[[!template text="""inside of Org Mode for like the math stuff, but then again, I""" start="00:50:01.000" video="qanda-project" id="subtitle"]]
+[[!template text="""just never have to type it. So my attitude towards Org Mode""" start="00:50:06.520" video="qanda-project" id="subtitle"]]
+[[!template text="""changed radically over the summer. I was avoiding it""" start="00:50:13.480" video="qanda-project" id="subtitle"]]
+[[!template text="""somewhat before and then when I realized I can keep all the""" start="00:50:18.200" video="qanda-project" id="subtitle"]]
+[[!template text="""great aspects of LaTeX and still use all the great features""" start="00:50:25.440" video="qanda-project" id="subtitle"]]
+[[!template text="""of Org Mode. So I view now, I think of Org Mode as a wrapper""" start="00:50:33.280" video="qanda-project" id="subtitle"]]
+[[!template text="""around LaTeX. I know it's not really that, but by thinking""" start="00:50:39.960" video="qanda-project" id="subtitle"]]
+[[!template text="""about it that way, uh, it's much more palatable to me to, uh,""" start="00:50:44.560" video="qanda-project" id="subtitle"]]
+[[!template text="""uh, just go, uh, commit to doing as much as possible in org""" start="00:50:49.160" video="qanda-project" id="subtitle"]]
+[[!template text="""mode. So I've been, that's what I've been doing. Um, this""" start="00:50:54.680" video="qanda-project" id="subtitle"]]
+[[!template text="""fall is just, uh, every document I started as an org file.""" start="00:50:58.560" video="qanda-project" id="subtitle"]]
+[[!template text="""I imagine I would like it if I knew it, it's just because I,""" start="00:51:01.840" video="qanda-project" id="subtitle"]]
+[[!template text="""because I imagine it would feel to me like HTML, or it's just""" start="00:51:09.960" video="qanda-project" id="subtitle"]]
+[[!template text="""like, Yeah, I can write it, I can format it the way I want to.""" start="00:51:13.320" video="qanda-project" id="subtitle"]]
+[[!template text="""This is just guesses from my experience with HTML. I can read""" start="00:51:18.520" video="qanda-project" id="subtitle"]]
+[[!template text="""the source code of it and kind of get an idea of how it will look""" start="00:51:24.440" video="qanda-project" id="subtitle"]]
+[[!template text="""like, but I just...""" start="00:51:27.680" video="qanda-project" id="subtitle"]]
+[[!template text="""It's like if you're gonna use the Linux terminal, but you're""" start="00:51:30.920" video="qanda-project" id="subtitle"]]
+[[!template text="""gonna use it for an hour a week every... Yeah, an hour a week.""" start="00:51:36.800" video="qanda-project" id="subtitle"]]
+[[!template text="""It's just like, it's just not enough time to dedicate to""" start="00:51:41.640" video="qanda-project" id="subtitle"]]
+[[!template text="""learn it for to start paying off. That's right. And you can""" start="00:51:45.200" video="qanda-project" id="subtitle"]]
+[[!template text="""always export your org file to an HTML file.""" start="00:51:48.280" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah.""" start="00:51:52.560" video="qanda-project" id="subtitle"]]
+[[!template text="""But the org file is what I stare at 95% of the time or more. I""" start="00:51:56.080" video="qanda-project" id="subtitle"]]
+[[!template text="""only use a PDF. So I export to PDF generally. And when I export""" start="00:52:06.040" video="qanda-project" id="subtitle"]]
+[[!template text="""to HTML, it's very cool. I like looking at the document in the""" start="00:52:10.520" video="qanda-project" id="subtitle"]]
+[[!template text="""web browser. I like navigating it. But I generally will""" start="00:52:16.240" video="qanda-project" id="subtitle"]]
+[[!template text="""export it to PDF so I can print it out when I'm traveling to""" start="00:52:20.880" video="qanda-project" id="subtitle"]]
+[[!template text="""carry out editing. But that's just a small, tiny fraction of""" start="00:52:24.880" video="qanda-project" id="subtitle"]]
+[[!template text="""the time that I'm actually working with the document. So""" start="00:52:30.440" video="qanda-project" id="subtitle"]]
+[[!template text="""most of the time it's in org mode. You know, maybe it doesn't""" start="00:52:34.040" video="qanda-project" id="subtitle"]]
+[[!template text="""look as pretty as in, you know, uh, HTML, but it's, uh, it's so""" start="00:52:38.120" video="qanda-project" id="subtitle"]]
+[[!template text="""such a pleasure to work in because of the way you can reorder""" start="00:52:44.200" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org Mode versus Markdown""" start="00:52:48.680" video="qanda-project" id="subtitle"]]</div>[[!template text="""lists, you know, create headlines. So what about org mode""" start="00:52:48.680" video="qanda-project" id="subtitle"]]
+[[!template text="""versus Markdown? Cause I know when, cause when I looked at""" start="00:52:55.120" video="qanda-project" id="subtitle"]]
+[[!template text="""org mode versus Markdown, I was like, yeah, more stuff""" start="00:52:57.720" video="qanda-project" id="subtitle"]]
+[[!template text="""supports Markdown, but. Org mode has more stuff built into""" start="00:53:00.560" video="qanda-project" id="subtitle"]]
+[[!template text="""it, like the calendar and agenda stuff. And it's obvious""" start="00:53:05.040" video="qanda-project" id="subtitle"]]
+[[!template text="""what this is supposed to be in org mode. And Emacs has got the""" start="00:53:10.520" video="qanda-project" id="subtitle"]]
+[[!template text="""best client. I use Emacs. And I think it's got a better syntax""" start="00:53:14.560" video="qanda-project" id="subtitle"]]
+[[!template text="""than Markdown. You've got stuff like Obsidian and Notes.""" start="00:53:18.920" video="qanda-project" id="subtitle"]]
+[[!template text="""And what about the Markdown? So Markdown, I use it a lot on""" start="00:53:23.320" video="qanda-project" id="subtitle"]]
+[[!template text="""GitHub repositories for the readme files. Sometimes I'll""" start="00:53:30.960" video="qanda-project" id="subtitle"]]
+[[!template text="""do them in org, but generally just go with the GitHub""" start="00:53:35.480" video="qanda-project" id="subtitle"]]
+[[!template text="""Markdown. But tables are still kind of a pain in Markdown,""" start="00:53:38.960" video="qanda-project" id="subtitle"]]
+[[!template text="""whereas tables are such a pleasure to build in org mode,""" start="00:53:44.160" video="qanda-project" id="subtitle"]]
+[[!template text="""because you have that dynamic adjusting of the column width""" start="00:53:48.720" video="qanda-project" id="subtitle"]]
+[[!template text="""as you make entries that become wider. And it's so easy to add""" start="00:53:52.960" video="qanda-project" id="subtitle"]]
+[[!template text="""columns. And it's so hard to add columns. It's much harder in""" start="00:53:59.240" video="qanda-project" id="subtitle"]]
+[[!template text="""Markdown and in LaTeX. It's more of a pain to add new columns.""" start="00:54:04.160" video="qanda-project" id="subtitle"]]
+[[!template text="""So the table aspect, that, to me, was one of the killer""" start="00:54:12.480" video="qanda-project" id="subtitle"]]
+[[!template text="""features. And then the other killer feature, of course, is""" start="00:54:16.920" video="qanda-project" id="subtitle"]]
+[[!template text="""the literate programming or interactive programming. So""" start="00:54:20.440" video="qanda-project" id="subtitle"]]
+[[!template text="""interactive computing that you can do where you have a code""" start="00:54:24.160" video="qanda-project" id="subtitle"]]
+[[!template text="""block and then you can execute it and have the output show up""" start="00:54:26.560" video="qanda-project" id="subtitle"]]
+[[!template text="""right below the code block. And""" start="00:54:30.640" video="qanda-project" id="subtitle"]]
+[[!template text="""org modes support for that kind of interactive computing is""" start="00:54:35.160" video="qanda-project" id="subtitle"]]
+[[!template text="""I'm not aware of anything more sophisticated, because you""" start="00:54:40.840" video="qanda-project" id="subtitle"]]
+[[!template text="""could have parallel sessions. You could have four Python""" start="00:54:46.040" video="qanda-project" id="subtitle"]]
+[[!template text="""sessions going, each of them labeled differently. And""" start="00:54:50.800" video="qanda-project" id="subtitle"]]
+[[!template text="""they're all walled off from each other. They don't see each""" start="00:54:55.040" video="qanda-project" id="subtitle"]]
+[[!template text="""other. Or you can have different programming languages. So""" start="00:54:57.520" video="qanda-project" id="subtitle"]]
+[[!template text="""you can do polyglottic""" start="00:55:07.080" video="qanda-project" id="subtitle"]]
+[[!template text="""programming where you have... Maybe Python's generating a""" start="00:55:11.040" video="qanda-project" id="subtitle"]]
+[[!template text="""table, and then that table gets, you decide you want to plot""" start="00:55:14.360" video="qanda-project" id="subtitle"]]
+[[!template text="""it using R, or you want to use ggplot2 and R to plot it, so that""" start="00:55:18.240" video="qanda-project" id="subtitle"]]
+[[!template text="""table gets fed into R in the next code block down, and then""" start="00:55:24.200" video="qanda-project" id="subtitle"]]
+[[!template text="""below it, you get a graph made in R, or you can make it in new""" start="00:55:29.720" video="qanda-project" id="subtitle"]]
+[[!template text="""plot, or you could, or some other, or you could move it into a""" start="00:55:33.560" video="qanda-project" id="subtitle"]]
+[[!template text="""LaTeX code block, plot the data in with Tikz,""" start="00:55:39.560" video="qanda-project" id="subtitle"]]
+[[!template text="""or you could move it into Clojure and use one of the""" start="00:55:47.400" video="qanda-project" id="subtitle"]]
+[[!template text="""Clojure plotting programs. Just kind of limitless what you""" start="00:55:52.720" video="qanda-project" id="subtitle"]]
+[[!template text="""can do in terms of recombining the best of different""" start="00:55:56.400" video="qanda-project" id="subtitle"]]
+[[!template text="""programming languages.""" start="00:56:00.120" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah, let's see. The literate DevOps are really good talks""" start="00:56:01.600" video="qanda-project" id="subtitle"]]
+[[!template text="""and subjects to get into this type of stuff. And they give a""" start="00:56:09.240" video="qanda-project" id="subtitle"]]
+[[!template text="""very good example of some tips on how to do this. You start""" start="00:56:13.360" video="qanda-project" id="subtitle"]]
+[[!template text="""writing in the previous or past tenses, though. You got the""" start="00:56:17.120" video="qanda-project" id="subtitle"]]
+[[!template text="""answer already, and then your notes are already formatted""" start="00:56:20.360" video="qanda-project" id="subtitle"]]
+[[!template text="""out as you're doing it for after the fact. And like, one thing""" start="00:56:23.720" video="qanda-project" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Raku""" start="00:56:28.560" video="qanda-project" id="subtitle"]]</div>[[!template text="""I like doing a lot is using the Raku language as a calculator,""" start="00:56:28.560" video="qanda-project" id="subtitle"]]
+[[!template text="""because I can just type in math as normal and it all works.""" start="00:56:32.680" video="qanda-project" id="subtitle"]]
+[[!template text="""I've tried that. Yeah, you can just say like, I don't know, 25""" start="00:56:37.240" video="qanda-project" id="subtitle"]]
+[[!template text="""times four with, and you can put like parentheses in it. I'm""" start="00:56:44.920" video="qanda-project" id="subtitle"]]
+[[!template text="""not exactly, I haven't used it very heavily. Oh, it also""" start="00:56:49.560" video="qanda-project" id="subtitle"]]
+[[!template text="""supports Unicode. So if you wanted to have""" start="00:56:55.040" video="qanda-project" id="subtitle"]]
+[[!template text="""the not equals sign, the Unicode not equals sign, it will""" start="00:57:01.840" video="qanda-project" id="subtitle"]]
+[[!template text="""actually do that. Cool. Or like the division sign. I don't""" start="00:57:07.320" video="qanda-project" id="subtitle"]]
+[[!template text="""know how it will do it. Yeah. But yeah. And then using that in,""" start="00:57:12.920" video="qanda-project" id="subtitle"]]
+[[!template text="""I also wrote a shell script where it would just help me do a""" start="00:57:22.760" video="qanda-project" id="subtitle"]]
+[[!template text="""calculation. I was trying to do a business calculation""" start="00:57:28.240" video="qanda-project" id="subtitle"]]
+[[!template text="""where I was, and I'd have variable names and I ended up""" start="00:57:31.880" video="qanda-project" id="subtitle"]]
+[[!template text="""writing the, in the parentheses I'd have enters, returns,""" start="00:57:35.360" video="qanda-project" id="subtitle"]]
+[[!template text="""and then just a variable name with like a dollar sign, kind of""" start="00:57:39.320" video="qanda-project" id="subtitle"]]
+[[!template text="""like how you'd have in the shell. And I outputted every""" start="00:57:42.320" video="qanda-project" id="subtitle"]]
+[[!template text="""single line that I had in the enter.""" start="00:57:45.800" video="qanda-project" id="subtitle"]]
+[[!template text="""six or 10 variables in this paragraph, the paragraph""" start="00:57:47.480" video="qanda-project" id="subtitle"]]
+[[!template text="""spanned, I don't know, like four lines or something like""" start="00:57:54.480" video="qanda-project" id="subtitle"]]
+[[!template text="""that. Maybe, yeah, something, I think it was along those""" start="00:57:57.760" video="qanda-project" id="subtitle"]]
+[[!template text="""lines. And I was just thinking of like what this would be in""" start="00:58:01.040" video="qanda-project" id="subtitle"]]
+[[!template text="""something else, just like, it was a lot nicer. Yeah, I had""" start="00:58:04.600" video="qanda-project" id="subtitle"]]
+[[!template text="""like equations for the variable, like in like one line, but""" start="00:58:07.880" video="qanda-project" id="subtitle"]]
+[[!template text="""when I wrote that, what my output should be is like, like I""" start="00:58:10.880" video="qanda-project" id="subtitle"]]
+[[!template text="""wasn't putting all of these like, you know, string join,""" start="00:58:13.840" video="qanda-project" id="subtitle"]]
+[[!template text="""string join, string join, It looked relatively close to""" start="00:58:16.360" video="qanda-project" id="subtitle"]]
+[[!template text="""what my terminal output would be, and then a later iteration""" start="00:58:21.160" video="qanda-project" id="subtitle"]]
+[[!template text="""I found on this was, let's write what I'm going to put into the""" start="00:58:25.240" video="qanda-project" id="subtitle"]]
+[[!template text="""command line, made a couple changeable variables in it, and""" start="00:58:29.040" video="qanda-project" id="subtitle"]]
+[[!template text="""then I can see my results, and that ended up being very nice.""" start="00:58:36.120" video="qanda-project" id="subtitle"]]
+[[!template text="""Ended up being nicer than the shells. Yeah, ended up""" start="00:58:40.040" video="qanda-project" id="subtitle"]]
+[[!template text="""enhancing that shell script that I wrote.""" start="00:58:44.200" video="qanda-project" id="subtitle"]]
+[[!template text="""That's a Raku calculator.""" start="00:58:45.960" video="qanda-project" id="subtitle"]]
+[[!template text="""Uh, it's the Raku programming language, which I was just""" start="00:58:50.920" video="qanda-project" id="subtitle"]]
+[[!template text="""using it, which I was just using as, which I'll just use as""" start="00:58:57.760" video="qanda-project" id="subtitle"]]
+[[!template text="""just straight up that calculator. Cause I'll do like,""" start="00:59:02.480" video="qanda-project" id="subtitle"]]
+[[!template text="""because it supports math well enough that I, like I, yeah,""" start="00:59:06.080" video="qanda-project" id="subtitle"]]
+[[!template text="""you can put like 25 divided by four and it doesn't start""" start="00:59:12.000" video="qanda-project" id="subtitle"]]
+[[!template text="""doing, what's the word, modular fractal, the double math,""" start="00:59:17.240" video="qanda-project" id="subtitle"]]
+[[!template text="""like it,""" start="00:59:24.440" video="qanda-project" id="subtitle"]]
+[[!template text="""if it's,""" start="00:59:28.080" video="qanda-project" id="subtitle"]]
+[[!template text="""the double math where it's like negative .2 versus like""" start="00:59:28.640" video="qanda-project" id="subtitle"]]
+[[!template text="""minus one, or sometimes it'll do optimized computer math""" start="00:59:34.440" video="qanda-project" id="subtitle"]]
+[[!template text="""where it doesn't give you the right answer, why people will""" start="00:59:40.400" video="qanda-project" id="subtitle"]]
+[[!template text="""like Mathematica.""" start="00:59:44.000" video="qanda-project" id="subtitle"]]
+[[!template text="""So, how do you, do you access it through, in org mode then?""" start="00:59:44.640" video="qanda-project" id="subtitle"]]
+[[!template text="""I'll do it in that. Sometimes I just fire up a Raku shell, but""" start="00:59:56.440" video="qanda-project" id="subtitle"]]
+[[!template text="""one of the biggest things I'll fire up a Raku shell for is like""" start="01:00:05.200" video="qanda-project" id="subtitle"]]
+[[!template text="""just, um, what's oh just recently I was just like doing it for""" start="01:00:09.160" video="qanda-project" id="subtitle"]]
+[[!template text="""some math and like how many people how much money will I have""" start="01:00:17.400" video="qanda-project" id="subtitle"]]
+[[!template text="""to spend on Christmas oh I've got I'm gonna buy this gift it's""" start="01:00:20.400" video="qanda-project" id="subtitle"]]
+[[!template text="""gonna cost this much and then I've got so let's I think 15""" start="01:00:24.560" video="qanda-project" id="subtitle"]]
+[[!template text="""times four because it's no 60 divided by four because it was a""" start="01:00:33.800" video="qanda-project" id="subtitle"]]
+[[!template text="""four pack And then times, and then I put it in parentheses,""" start="01:00:37.960" video="qanda-project" id="subtitle"]]
+[[!template text="""oh, four plus like two plus two, because like of the""" start="01:00:42.920" video="qanda-project" id="subtitle"]]
+[[!template text="""families, each of the units, and I just started doing it that""" start="01:00:47.520" video="qanda-project" id="subtitle"]]
+[[!template text="""way. And I put them all in a parentheses. And then at the end of""" start="01:00:49.120" video="qanda-project" id="subtitle"]]
+[[!template text="""this spit out the numbers, like, so I could just use the""" start="01:00:53.480" video="qanda-project" id="subtitle"]]
+[[!template text="""parentheses without thinking about, you know, like, oh,""" start="01:00:55.960" video="qanda-project" id="subtitle"]]
+[[!template text="""I'm actually in a programming language. No, I just kind of""" start="01:00:58.280" video="qanda-project" id="subtitle"]]
+[[!template text="""wrote it like I was in algebra, algebra, not in,""" start="01:01:02.680" video="qanda-project" id="subtitle"]]
+[[!template text="""not finding some special program, not finding a""" start="01:01:07.280" video="qanda-project" id="subtitle"]]
+[[!template text="""calculator, because it's easy for me to file up a terminal.""" start="01:01:11.360" video="qanda-project" id="subtitle"]]
+[[!template text="""Then I open that up, and it all just works. Plus, I also got a""" start="01:01:15.000" video="qanda-project" id="subtitle"]]
+[[!template text="""full programming language behind it if I ever need it.""" start="01:01:20.440" video="qanda-project" id="subtitle"]]
+[[!template text="""I wasn't aware that it utilizes standard math notation""" start="01:01:22.640" video="qanda-project" id="subtitle"]]
+[[!template text="""rather than the Polish math notation that we use in ELISP.""" start="01:01:33.680" video="qanda-project" id="subtitle"]]
+[[!template text="""Um, that's interesting because it's, it's in the list""" start="01:01:37.280" video="qanda-project" id="subtitle"]]
+[[!template text="""family of programming languages.""" start="01:01:42.840" video="qanda-project" id="subtitle"]]
+[[!template text="""Yeah. It's like, Hey, I can use, I can actually use my math""" start="01:01:45.280" video="qanda-project" id="subtitle"]]
+[[!template text="""knowledge. I can use the order of operations.""" start="01:01:54.400" video="qanda-project" id="subtitle"]]
+[[!template text="""Yep.""" start="01:01:57.880" video="qanda-project" id="subtitle"]]
+[[!template text="""I just wish that when I was in high school, they started""" start="01:02:00.880" video="qanda-project" id="subtitle"]]
+[[!template text="""telling me how to practically use this rather than me""" start="01:02:08.000" video="qanda-project" id="subtitle"]]
+[[!template text="""discover it years later when I'm out of it. Yeah.""" start="01:02:10.240" video="qanda-project" id="subtitle"]]
+[[!template text="""Well, I probably better move along to attend the other""" start="01:02:14.120" video="qanda-project" id="subtitle"]]
+[[!template text="""talks. All right. So it's been great talking to you, Plasma""" start="01:02:27.400" video="qanda-project" id="subtitle"]]
+[[!template text="""Strike. Yep, you too.""" start="01:02:32.840" video="qanda-project" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [blaine-mooers@ouhsc.edu](mailto:blaine-mooers@ouhsc.edu?subject=Comment%20for%20EmacsConf%202023%20project%3A%20Managing%20writing%20project%20metadata%20with%20org-mode)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/project-before.md b/2024/info/project-before.md
index 5a59d8d5..dd34cb38 100644
--- a/2024/info/project-before.md
+++ b/2024/info/project-before.md
@@ -1,18 +1,52 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 22-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="project">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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 stroke-width="3" x="54" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 22-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-project.html>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Waiting for a caption volunteer
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T14:40:00Z" end="2024-12-07T15:00:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~9:40 AM - 10:00 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~8:40 AM - 9:00 AM CST (US/Central)<br />Saturday, Dec 7 2024, ~7:40 AM - 8:00 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~6:40 AM - 7:00 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~2:40 PM - 3:00 PM UTC <br />Saturday, Dec 7 2024, ~3:40 PM - 4:00 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~4:40 PM - 5:00 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~8:10 PM - 8:30 PM IST (Asia/Kolkata)<br />Saturday, Dec 7 2024, ~10:40 PM - 11:00 PM +08 (Asia/Singapore)<br />Saturday, Dec 7 2024, ~11:40 PM - 12:00 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+04:36.960 Starting the research paper
+05:25.310 Outline
+06:11.440 Another kind of writing log - accountability
+07:17.458 Reducing switching costs
+07:46.480 Motivation
+09:31.520 Overview of the writing log
+10:17.295 LaTeX preamble in opened drawer
+10:42.668 Informative header
+12:21.400 Four workflows
+13:28.080 Project initiation workflow
+14:56.960 Daily workflow
+17:05.751 Metadata and metacognition
+17:48.885 Periodic assessment workflow
+18:56.960 Project closeout workflow
+19:49.640 Conclusions
+20:34.520 Acknowledgements
+
+"""]]<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 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?
+10:42.680 Q: How you capture those ideas when when you are away from Emacs?
+14:50.273 Q: What if an ideas does not belong to any current working manuscript?
+16:28.802 Q: If there were one habit from your process (referencing your extensive flow chart) that you want active learners/professional researchers to adopt, which would it be and why?
+18:16.600 Off-stream Q&A
+33:01.560 Time Power
+48:32.800 Do you use a lot of TeX inside Org Mode?
+52:48.680 Org Mode versus Markdown
+56:28.560 Raku
+"""]]<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/project-nav.md b/2024/info/project-nav.md
index ccc6cc97..488a1090 100644
--- a/2024/info/project-nav.md
+++ b/2024/info/project-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/papers">Writing academic papers in Org-Roam</a>
-Next by time: <a href="/2024/talks/gypsum">Gypsum: my clone of Emacs and ELisp written in Scheme</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/papers">Writing academic papers in Org-Roam</a>
+Next by track: <a href="/2024/talks/org-update">The Future of Org</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/regex-after.md b/2024/info/regex-after.md
index 6ef39592..6d3b1a32 100644
--- a/2024/info/regex-after.md
+++ b/2024/info/regex-after.md
@@ -1,6 +1,412 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
+<div class="transcript transcript-mainVideo"><a name="regex-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hello, I'm Danny McClanahan. This is EmacsConf 2024. And""" start="00:00:00.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this presentation is ostensibly about Emacs Regex""" start="00:00:13.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""compilation. But it'll lead a lot more in future""" start="00:00:17.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""directions. Thanks for coming on this journey with me.""" start="00:00:22.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""This presentation is 50 slides, 50 footnotes, and that's""" start="00:00:30.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""intended for it to be a resource later on for your perusal. We""" start="00:00:36.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""are unfortunately not going to be able to go into all of it,""" start="00:00:40.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""but I will try to be within 20 minutes so we can make it""" start="00:00:44.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""throughout Q&A. This is the structure of the talk.""" start="00:00:49.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""But enough about me. Who are you? And why are you here?""" start="00:00:56.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""I'm Danny McClanahan.""" start="00:01:03.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""My experience is a lot in build tools, especially in the""" start="00:01:09.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""package managers. That started because I realized I was""" start="00:01:13.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""wasting a lot of time. Then I didn't like that. I""" start="00:01:19.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""started wasting a lot of time, trying to avoid wasting time.""" start="00:01:23.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Then I ended up... going so far around that I ended up""" start="00:01:29.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""stopping other people from wasting their own time, in this""" start="00:01:35.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""case, regarding failing builds. But this is a kind of""" start="00:01:40.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""pattern that you'll see. I'm talking a lot about patterns in""" start="00:01:44.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this presentation. Parsing in text is another one of""" start="00:01:47.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""those tendencies that I have. Why am I here? I've got a lot""" start="00:01:52.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""of feelings about text. For the next 20 minutes, I'm""" start="00:01:57.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""making it your problem.""" start="00:02:00.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""First off, a huge shout out to Emacs Devel and the Emacs""" start="00:02:06.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""community in general. I spent a lot of time learning about""" start="00:02:09.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""what I'm about to talk about. I was definitely super""" start="00:02:12.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""confused at first. Then when I became less confused and I""" start="00:02:15.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""decided I was going to look at the regular expressions of the""" start="00:02:19.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Regex engine, I was like, oh, it's old C code. It's""" start="00:02:23.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Emacs. We can just use modern techniques. Turns out that's""" start="00:02:28.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""wrong for kind of two reasons. One, because using modern""" start="00:02:33.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""techniques or other engines don't necessarily do what""" start="00:02:37.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Emacs regex engine currently does. Then secondarily,""" start="00:02:41.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""that's not actually as interesting as the other kind of""" start="00:02:44.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""larger goals that emacs-devel discussed. Thank you, Eli""" start="00:02:48.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Zaretskii, so, so much, especially Pip Cet and everyone else""" start="00:02:52.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""as well--I believe--Pip Cet, I hope I'm pronouncing that""" start="00:02:56.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""correctly. Thank you so much. I'll be shouting you out""" start="00:02:59.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""later as well. Then these larger goals ended up""" start="00:03:01.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""overlapping a lot with my own research interests. And""" start="00:03:04.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""that's very exciting. I'm hoping it's exciting for you""" start="00:03:07.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""too. What is a regular expression? And when and how does""" start="00:03:09.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""implementation match formal theory? So what does formal""" start="00:03:14.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""theory mean? And we'll talk about that.""" start="00:03:16.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""What is a regular expression? So I might ask you this""" start="00:03:24.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""question, and you might give an answer. Then I might ask""" start="00:03:27.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""someone else, and they might have an answer. Then I might""" start="00:03:30.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""ask myself, and I might try to think of an answer. Our""" start="00:03:33.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""answers would, you know, see, the thing is, they'd all be""" start="00:03:38.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""correct, but they'd probably be slightly different, and""" start="00:03:41.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""they'd be different in kind of important ways. I'm""" start="00:03:45.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""using formal theory to kind of describe what unifies these""" start="00:03:50.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""interpretations and what causes this sort of divergence,""" start="00:03:55.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""both over time and then across code bases. I'm kind of""" start="00:04:00.120" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""putting a flag in the ground here and saying formal theory is""" start="00:04:05.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""actually a really, really negative influence, I think, but""" start="00:04:09.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""it can be better. That's what I'm going to talk about in""" start="00:04:13.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this talk, in this presentation. We might ask, how did""" start="00:04:16.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this happen? and we might try to find a start state. We""" start="00:04:19.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""might put that place at the theories of formal languages""" start="00:04:26.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""that kind of arose, especially post Turing and post""" start="00:04:30.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Chomsky. Especially there was this really, really""" start="00:04:34.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""interesting and powerful relationship with formal""" start="00:04:37.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""languages between representation and computation. And""" start="00:04:40.120" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""then on top of that, we have regex as this really powerful""" start="00:04:43.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""union of theory and practice And then, like I mentioned,""" start="00:04:48.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this is kind of divergence that kind of occurs. This""" start="00:04:52.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""divergence happens for a good reason. This happens because""" start="00:04:55.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""people were adding implementations and people adding""" start="00:04:58.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""features to implementations. While the people adding""" start="00:05:02.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""these features were often academics, they were""" start="00:05:04.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""industries, people that were hobbyists, they were""" start="00:05:06.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""interested in building practical tools. This is a good""" start="00:05:09.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""thing. This is still a good thing, even though it moves a""" start="00:05:12.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""little bit away from formal theory. But we start seeing some""" start="00:05:14.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""cracks developing, and we'll go into that in a second. We're""" start="00:05:18.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""just going to kind of electric slide into the 1980s here, and""" start="00:05:22.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""we're going to be confronted with two occurrences very""" start="00:05:27.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""similarly. We might call it simultaneous discovery. In""" start="00:05:31.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""1983, you have Michael Jackson demonstrating the""" start="00:05:35.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""moonwalk. Three years later, we have backtracking""" start="00:05:38.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""developed to stimulate EGREP-style regular expressions.""" start="00:05:42.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""These would both be incredibly influential in their own""" start="00:05:45.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""kind of branching paths. Here's where the gloves come""" start="00:05:48.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""off. Formal theory, I claim, remains largely concerned""" start="00:05:54.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""with incremental improvements to artificial benchmarks,""" start="00:06:00.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""and much less with expanding models to cover actual user""" start="00:06:03.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""needs. This isn't just about, oh, if you listened to""" start="00:06:07.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""users, that you'd be a nicer person, you'd be a better""" start="00:06:11.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""engineer. What I'm actually saying is that they're missing""" start="00:06:16.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""out. When you don't listen to applications, you miss out on a""" start="00:06:19.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""lot of fantastic opportunities for novel theory. So""" start="00:06:23.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this is, again, my complaint with formal theory as it""" start="00:06:26.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""stands. But we're gonna do better. Before we get better,""" start="00:06:30.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""we're gonna get, a little bit worse for a bit. We're going to""" start="00:06:34.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""actually get a little bit worse is better. What I mean by""" start="00:06:36.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""that is, by the 1990s, we start looking into these""" start="00:06:40.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""non-backtracking engines. This is a bit of a reaction to""" start="00:06:43.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""backtracking. The current ones include RE2,""" start="00:06:46.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""hyperscan, and the rust regex library. These are all""" start="00:06:50.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""great. I'll talk about them later as well. They make use""" start="00:06:53.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""of these. They kind of call back to the earlier formal""" start="00:06:56.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""theory. They have linear runtimes for well-specified""" start="00:06:58.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""search tasks.""" start="00:07:01.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""What happens if that doesn't fit your needs? We're going to""" start="00:07:02.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""talk about that. We're going to table that for a second,""" start="00:07:08.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""and we're going to focus more on Emacs, the subject of this""" start="00:07:11.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""conference. What are regex used for? And in this""" start="00:07:15.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""particular case, they're used for lots of things, with""" start="00:07:19.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""practically, and I think they should be. But more""" start="00:07:22.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""specifically, how do Emacs users use them? And I'm going to""" start="00:07:25.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""focus in on this text as input and output. I'll be kind of""" start="00:07:29.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""elaborating on this analogy as we continue. Why is text""" start="00:07:32.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""powerful? Text as I/O. The reason text programming""" start="00:07:38.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""languages and not just programming languages, but""" start="00:07:43.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""languages themselves, the reason why they're successful""" start="00:07:45.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""and why they propagate, I claim, is because text is both""" start="00:07:49.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""input readable and output writable. What this means""" start="00:07:52.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""is that if you receive something in text, you can read it, And""" start="00:07:56.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""then you can also write it, you can modify it, and you can""" start="00:08:01.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""produce a new version of it. You're on a kind of level""" start="00:08:04.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""playing field. That's not always the case, though. You""" start="00:08:06.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""recall that I've worked a lot with build systems and package""" start="00:08:10.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""managers. There's a discussion that goes by the name of""" start="00:08:15.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""software supply chain security. I think it's a massive""" start="00:08:21.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""joke. The reason why is because people largely raise it""" start="00:08:25.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""to explain why their for-profit company with their""" start="00:08:29.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""for-profit product is going to solve the problem for you, as""" start="00:08:34.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""opposed to the commons of open source. If you are unable to""" start="00:08:38.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""modify or deploy your code without employing an opaque""" start="00:08:41.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""external system, I think, then you have a hidden""" start="00:08:45.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""dependency. you don't remove a dependency, you just, by,""" start="00:08:48.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""for example, paying into a for-profit product or using a""" start="00:08:53.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""closed-off supply chain, you end up just having a hidden""" start="00:08:59.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""dependency, you end up just displacing that. This can""" start="00:09:01.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""actually exert arbitrary control over your programming""" start="00:09:04.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""output and potentially even your thoughts. This is really""" start="00:09:07.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""important. I'm going to dive in a little bit deeper and I'm""" start="00:09:11.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""going to overload the term locality here. I'm going to""" start="00:09:15.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""say, if you cannot reproduce a system locally, it becomes an""" start="00:09:19.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""opaque external system. I'm going to give examples""" start="00:09:22.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""here, and these are going to be a bit of a hot take. First""" start="00:09:25.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""off, GUI IDEs. I think we might, well, some of us might agree""" start="00:09:27.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""with that here. I say development environments that only""" start="00:09:30.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""allow you to use a graphical interface, do not expose""" start="00:09:34.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""interaction with text, are explicitly trying to kind of""" start="00:09:38.120" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""place you on a separate kind of plane where you're not an""" start="00:09:42.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""equal contributor to the people who make the development""" start="00:09:46.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""environment, make the development kind of frameworks""" start="00:09:50.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""here. We'll go one further. Cloud services are precisely,""" start="00:09:53.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""you know, they're useful for things that, you know, that""" start="00:09:57.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""require large domain computation, but, you know, Twitter,""" start="00:10:00.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""for example, didn't actually ever use any cloud services,""" start="00:10:04.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""external ones, because it was really important for them to""" start="00:10:08.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""actually own their own hardware, their own computation,""" start="00:10:12.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""their own thinking. Cloud services are a way to ensure""" start="00:10:15.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""that you're unable to reproduce a system without paying an""" start="00:10:20.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""amount per month, an amount per day, an amount per second, an""" start="00:10:24.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""amount per cycle to an external entity. I'm just going to""" start="00:10:28.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""conclude this with, I'd say, the argumentum ad absurdum,""" start="00:10:32.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""here, where large language models are all of these at once.""" start="00:10:35.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""They are a cloud service, specifically, and this is what""" start="00:10:39.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""makes them very evil, to make it so that, similar to GUI IDEs,""" start="00:10:42.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""so that text itself loses that ability to be both readable""" start="00:10:48.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""and writable. Instead, text is both unreadable, because""" start="00:10:52.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""it's produced by a machine, and then also unwritable,""" start="00:10:56.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""because you're subservient and subjugated to the machine,""" start="00:10:59.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""to the large language model to produce the code in the first""" start="00:11:03.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""place. You lose this input, output, readable, writable""" start="00:11:05.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""behavior that I claim text has specifically. To""" start="00:11:08.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""underline this, what is text? Text is local. Finally,""" start="00:11:13.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""we're at the subject of this conference. Emacs, I have""" start="00:11:19.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""double hearts with text. I start off the slide saying Emacs""" start="00:11:23.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""is a text editor. I think that's a good start. Which""" start="00:11:27.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""implements much of its own logic and user interface via""" start="00:11:31.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""text. What this means is that, you know, I say without""" start="00:11:34.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""trying, Emacs tries very hard, but without trying so hard,""" start="00:11:38.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Emacs, is imbued with all of the capabilities that text has""" start="00:11:42.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""specifically. When you use text like Emacs does, and""" start="00:11:47.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""particularly you then start offering mechanisms to query,""" start="00:11:51.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""to transform, and to generally metaprogram text itself,""" start="00:11:55.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""you don't just have the ability to edit code in new ways. And""" start="00:12:00.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this is something that I think is often lost, maybe not by""" start="00:12:03.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""participants of this conference, you particularly start""" start="00:12:07.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""being able to not only just edit code differently, but to""" start="00:12:11.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""change the way that you think about code and actually to""" start="00:12:14.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""expand your range of thought, the range of actions that you""" start="00:12:16.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""can perform. You can actually start then editing at the""" start="00:12:20.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""speed of thought. This is where especially Regex kind of""" start="00:12:22.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""comes into play. Finally, we get to the subject of the""" start="00:12:25.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""title of this talk. I'm about to disappoint a lot of""" start="00:12:30.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""people. I claim for good reason. Unfortunately, it's a""" start="00:12:33.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""very brief walkthrough, but I'm going to go over what the""" start="00:12:38.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""current Emacs Redix engine is. This is going to give us""" start="00:12:41.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""enough context for the next section on future directions.""" start="00:12:43.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Quickly, it's a backtracking engine over a multi-byte""" start="00:12:48.120" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""code point. I'll define what that means. It's in""" start="00:12:51.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""regex-emacs.c. It's invoked in two ways, which you'll see""" start="00:12:53.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""is actually the same way, over a single contiguous string""" start="00:12:58.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""input. This is a Lisp string that you pass in. or over the""" start="00:13:01.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""two halves of the gap buffer. This is when you match""" start="00:13:05.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""against a buffer text. We'll go into that a little bit""" start="00:13:07.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""more, but this is one of the really actually interesting and""" start="00:13:11.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""specific things about Emacs Regex Engine as it stands. So""" start="00:13:13.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""very, very quickly, this is the data layout. This is just, if""" start="00:13:17.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""you're interested, this is where the code lies. So""" start="00:13:21.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""regex-emacs.h has re-pattern buffer, which is a struct""" start="00:13:24.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Actually, you know, I love, by the way, I love the Emacs C""" start="00:13:30.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""source code. It's so nice to read. It made all this so, so""" start="00:13:34.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""easy. I really appreciated it. In this particular case,""" start="00:13:37.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""I'm just going to focus on re-pattern buffer actually has""" start="00:13:41.120" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""the compiler. It's a C struct. It has every single thing""" start="00:13:44.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""that is needed to execute the regular expression against a""" start="00:13:48.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""string input or against a buffer input. This buffer,""" start="00:13:52.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""It's not an Emacs buffer. It refers to just the instruction""" start="00:13:56.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""table and the match loop. Again, this is very, very""" start="00:13:59.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""brief, but I want to specifically focus on the first part. So""" start="00:14:04.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this is this inner matching loop, and there's a prologue,""" start="00:14:07.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""and then there's a loop body, and there's an epilogue. And""" start="00:14:11.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""the prologue is the really, really interesting part. I say""" start="00:14:15.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""extract current and next char. What Emacs does here, it""" start="00:14:18.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""doesn't just reach for the next byte. It actually will""" start="00:14:22.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""perform lazily in some sense, this variable integer size""" start="00:14:27.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""VAR decoding for multi-byte, and it'll actually then""" start="00:14:31.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""decode the next one to four bytes. Up to 32 bits at once, and""" start="00:14:36.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""then it'll actually go into the loop. We'll talk about the""" start="00:14:43.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""implications of that later. Next, in the body of the loop, we""" start="00:14:46.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""read the instruction from the instruction pointer, which""" start="00:14:52.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""is, again, in that buffer field. Then we have this big""" start="00:14:54.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""switch statement, which is actually, love a big switch""" start="00:14:57.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""statement, super easy to read, super easy to understand""" start="00:14:59.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""kind of what's occurring. Then that's the loop body. And""" start="00:15:02.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""then at the end of it, we either increment the instruction""" start="00:15:05.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""pointer if it was matching a single character or something""" start="00:15:08.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""along those lines, or if it was a jump, we don't do that. A""" start="00:15:11.120" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""jump, however, it's not referring to a jump in the sense of a""" start="00:15:14.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""go-to, but a jump that's elsewhere within that table, that""" start="00:15:18.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""buffer field. If you've included a capture, we write""" start="00:15:22.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""that end position there. Of course, well, as you may""" start="00:15:25.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""recall, the zeroth capture is, of course, the entire match""" start="00:15:29.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""string. If the capture is zero, then we know we've""" start="00:15:34.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""actually completed that match. That's really great.""" start="00:15:36.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""I would love to receive Q&A about this as well. I've spent a""" start="00:15:39.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""lot of time kind of learning and understanding it. But it's""" start="00:15:43.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""really interesting that this can be described in a single""" start="00:15:46.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""slide because it's really simple. That simplicity is""" start="00:15:49.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""actually a really powerful thing. I'll mention that in""" start="00:15:52.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""the next section. I say, is that all? And I apologize for""" start="00:15:54.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""not doing so. But please, please ask questions in Q&A or""" start="00:15:58.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""message me about this, because I think it's really, really,""" start="00:16:02.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""again, interesting. Again, I find the code relatively""" start="00:16:05.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""easy to read. Now, here's, I think this is actually the""" start="00:16:07.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""point of the talk. The rest of it was, you know, I think just me""" start="00:16:12.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""posturing. This is the really, really interesting part.""" start="00:16:15.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""This is the ways that we can improve, well, not just we can""" start="00:16:18.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""improve stuff in Emacs, but why those are the right things to""" start="00:16:22.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""improve. Then also how that can be a model for even things""" start="00:16:25.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""outside of Emacs. This is gonna be a lot of text. I'm not""" start="00:16:30.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""gonna go through all of it. This is the one thing that I tried.""" start="00:16:35.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""This is the thing that I thought would be a slam dunk, easy""" start="00:16:38.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""solution. My initial thought process was, well, We tried""" start="00:16:42.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""very hard to do an LRU cache here. It works. It's actually""" start="00:16:47.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""very effective. However, though, we don't actually give""" start="00:16:52.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""the user, the list programmer, the ability to then say, I""" start="00:16:57.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""know that this regex is something that is going to be used""" start="00:17:00.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""again. I made an artificial benchmark. I made an""" start="00:17:03.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""artificial benchmark because I wanted to show there is one""" start="00:17:06.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""very specific case that it does solve, but it's the same""" start="00:17:10.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""issue with the artificial benchmarks. mentioned earlier.""" start="00:17:13.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""It's very specifically crafted in order to show that this""" start="00:17:16.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""particular solution would produce some speedup. What""" start="00:17:21.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this means is it just creates more than 20 regexps in a row. It""" start="00:17:25.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""compiles them. Then, of course, because we just don't""" start="00:17:29.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""pay the compile costs, because we don't go through that""" start="00:17:31.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""cache eviction process, it ends up being faster. But this""" start="00:17:35.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""isn't really mean very much, particularly the goal here,""" start="00:17:39.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""you know, the goal would have been to show that the compile""" start="00:17:42.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""cache is actually causing the performance issue in""" start="00:17:45.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""comparison to pre-compiling it. That's not something""" start="00:17:48.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""I've been able to show. Match over bytes, not cars. So""" start="00:17:51.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this is when I said at the beginning, oh, I came in and I think,""" start="00:17:56.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""oh, we can just use modern regex engine techniques. This is""" start="00:17:59.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""really what I meant. In particular, I mentioned in this""" start="00:18:02.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""match loop here that there's this, prolog that does this""" start="00:18:05.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""varring decoding. What this means is that every single""" start="00:18:09.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""iteration of that loop is going to be interspersed with this""" start="00:18:13.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""not being able to read a fixed number of bytes, but a variable""" start="00:18:18.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""number of bytes just depending upon the Unicode character""" start="00:18:21.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""or the Unicode code point or the multibyte code point. So""" start="00:18:24.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this ends up, again, being relatively difficult to""" start="00:18:27.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""optimize because processors operate over bytes and not""" start="00:18:29.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""over code points. Yes, we might consider a multi-byte CPU at""" start="00:18:32.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""some point. But this is a really, really simple thing. It's""" start="00:18:38.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""just generating automata that operate over bytes as""" start="00:18:41.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""opposed to code points. This kind of goes into the much more""" start="00:18:45.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""abstract one. There's a lot of text here, and we're not""" start="00:18:48.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""going to go into it. But the really, really important point""" start="00:18:51.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""that I'm specifically mentioning here is this explicit""" start="00:18:56.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""control over linguistic complexity. That's the""" start="00:18:58.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""abstract kind of point. I want to introduce the inputs and""" start="00:19:02.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""the outputs. Basically, when you perform a search, or a""" start="00:19:06.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""match, or a parse, those are different tasks. They'll""" start="00:19:11.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""have different expected inputs and different desired""" start="00:19:14.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""outputs. Right now, Emacs, the API for the regular""" start="00:19:17.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""expression engine and for matching, It doesn't allow""" start="00:19:21.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""specialization on this. Or rather, if we do specialize on""" start="00:19:24.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""particular inputs, if we have a heuristic to check if a regex""" start="00:19:27.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""is actually a literal string, that's not something that the""" start="00:19:31.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""user actually has control over. For example, you can make""" start="00:19:33.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""a mistake escaping something, and then you don't have a""" start="00:19:36.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""literal, and then you accidentally have behavior that you""" start="00:19:39.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""totally didn't expect. Not just correctness issues, but""" start="00:19:42.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""also performance issues. I really like this one. I like""" start="00:19:44.280" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this a lot, because I didn't think of it at all. I think it's""" start="00:19:48.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""better than in all of my ideas. This was proposed, at least""" start="00:19:52.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""to me, by Pip Cet, and I really hope that I'm pronouncing your""" start="00:19:58.120" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""name correctly. I'm sorry I didn't ask you beforehand,""" start="00:20:01.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""emacs-devel. In particular, this was after a couple of""" start="00:20:04.480" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""responses where I was trying to say, oh, I want to give the""" start="00:20:08.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""list programmer, way back in here, I want to give the list""" start="00:20:12.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""programmer the ability to control compilation in some""" start="00:20:15.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""sense. you know, he mentioned, I think he is correct, you""" start="00:20:20.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""know, there's no real introspection. That happens""" start="00:20:25.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""because it's written in C. I was thinking, oh, if I turn""" start="00:20:28.440" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this into a list object that gives the list programmer the""" start="00:20:33.120" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""power and the ability to do more with that, but it doesn't""" start="00:20:35.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""actually because it's still in C. At first, I was""" start="00:20:40.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""thinking, oh, we can make the C part more flexible. But""" start="00:20:42.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""actually, especially if we want to do almost any of the""" start="00:20:46.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""things we previously mentioned, I think basically that""" start="00:20:50.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""this is... I think that if I'm not going to do it, somebody""" start="00:20:52.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""else really should do it, and I think we should maybe even do""" start="00:20:56.600" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""it together, because I think this is really, I think, how we""" start="00:20:58.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""can start experimenting, and not just experimenting, but""" start="00:21:01.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""because, as mentioned here, we have libgccjit, we have the""" start="00:21:04.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""native compiler, we have the ability to opt, like,""" start="00:21:07.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""specifically to generate specific code for this, so why not""" start="00:21:09.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""implement the or a Redix engine itself in list, And this""" start="00:21:12.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""gives us the ability to introspect it. That's one of the""" start="00:21:15.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""things I mentioned at the beginning. But it actually gives""" start="00:21:18.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""us the ability to then actually look at all the previous""" start="00:21:20.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""implementations, to explicitly compile beforehand, to""" start="00:21:23.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""match against bytes, to specialize and dispatch based upon""" start="00:21:28.160" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""input and output. This is something that, you know, it's""" start="00:21:32.520" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""super simple.""" start="00:21:36.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""It's really smart. I'm really, really glad that Pip""" start="00:21:38.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""mentioned this because it is, I think, the right way to solve""" start="00:21:40.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""the rest of it. We're at the final section. I talked a""" start="00:21:44.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""lot about, you know, kind of abstract, you know, thoughts.""" start="00:21:49.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""I talked a little about, you know, specific solutions.""" start="00:21:52.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""But I especially talked about, you know, what is Regex and""" start="00:21:55.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Emacs? And I don't know if I had a lot of specific examples of""" start="00:22:00.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""it. I'm going to just describe kind of my, I guess,""" start="00:22:02.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""motivation, my impetus. Then I think something that's""" start="00:22:06.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""really something to chew on for the future. Do I have any""" start="00:22:09.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""concrete examples? Yes. Well, you can decide if they're""" start="00:22:12.640" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""concrete. Or am I just posturing? Also, yes. helm, rg. Helm,""" start="00:22:15.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Erg, it's literally just M-x grep, it uses ripgrep, which""" start="00:22:22.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""is written by the same author of the Rust regex [??]. It""" start="00:22:27.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""happens to be very, very fast. In particular, I use this tool""" start="00:22:32.000" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""with ripgrep on the Twitter monorepo, and I was able to""" start="00:22:36.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""search very, very large amounts of code that was on my local""" start="00:22:39.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""machine using regular expressions. I think this is one""" start="00:22:42.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""thing that I think is really, really important, because""" start="00:22:46.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""when you want to scale, People say the word scaling and they""" start="00:22:49.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""assume there's a specific kind of answer for that. I've""" start="00:22:52.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""just found that text is not only flexible, it's actually""" start="00:22:56.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""something that can be more performant than the alternative""" start="00:23:01.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""and not only more performant, but more productive. It's""" start="00:23:04.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""again, it's just M-x grep using ripgrep. There's a tool""" start="00:23:07.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""deadgrep by Wilfred Hughes, which is also fantastic. I""" start="00:23:10.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""think it's actually better than this, but this one's mine so""" start="00:23:12.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""I can mess around with it. But this tool is kind of why,""" start="00:23:15.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""especially I started looking into Emacs and looking into""" start="00:23:19.200" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""changing the way that, or at least diving into how the""" start="00:23:21.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""regular expression matching actually kind of works, both""" start="00:23:24.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""in Emacs and then in ripgrep. We'll go to the next one.""" start="00:23:27.560" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""This is something that does exist and continues to exist.""" start="00:23:30.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""This is something that doesn't quite exist yet. I'm""" start="00:23:34.120" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""calling it telepathy grams. It's, you know, it's the name,""" start="00:23:36.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""and it's very, you know, it doesn't work, but it's a code""" start="00:23:41.360" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""search tool that, in this case, precompiles the database to""" start="00:23:44.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""execute NFAs against. I was thinking, how can I beat And""" start="00:23:47.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""the first thing I thought is, well, as I have worked on build""" start="00:23:51.880" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""tools, especially in monorepos, one of the things that the""" start="00:23:55.040" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""pants build tool from Twitter does is it uses a file watcher""" start="00:23:57.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""to ensure that instead of having to constantly read in the""" start="00:24:00.800" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""entire contents of a file, which may be very, very large, it""" start="00:24:04.240" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""only does so when the file has been changed. Finally, I""" start="00:24:10.080" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""want to conclude on this note, which is just that the stuff I""" start="00:24:13.680" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""didn't learn from emacs devel, I learned from Paul""" start="00:24:16.920" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""Wankadia, Jr., who is the RE2 maintainer, and he taught me""" start="00:24:20.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""quite a lot from 2023 to 2024. I'm thankful for the time""" start="00:24:25.320" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""that I learned from you, so thank you, Paul. With that, we're""" start="00:24:32.400" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""at point-max. Call me, beat me, if you want to reach me and or""" start="00:24:37.960" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""hire me. These are places that you can reach me at. There are""" start="00:24:42.760" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""probably others. Feel free to suggest other ways to contact""" start="00:24:45.840" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""me. But for now, this is the end. Thank you so much for your""" start="00:24:49.720" video="mainVideo-regex" id="subtitle"]]
+[[!template text="""time. I really appreciate it.""" start="00:24:53.200" video="mainVideo-regex" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
Questions or comments? Please e-mail [dmcC2@hypnicjerk.ai](mailto:dmcC2@hypnicjerk.ai?subject=Comment%20for%20EmacsConf%202023%20regex%3A%20Emacs%20regex%20compilation%20and%20future%20directions%20for%20expressive%20pattern%20matching)
diff --git a/2024/info/regex-before.md b/2024/info/regex-before.md
index 7ab5ba4e..b8bf89db 100644
--- a/2024/info/regex-before.md
+++ b/2024/info/regex-before.md
@@ -1,18 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="regex">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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 stroke-width="3" x="41" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 20-min talk; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf>
-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="2024-12-08T14:30:00Z" end="2024-12-08T14:50:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~9:30 AM - 9:50 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~8:30 AM - 8:50 AM CST (US/Central)<br />Sunday, Dec 8 2024, ~7:30 AM - 7:50 AM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~6:30 AM - 6:50 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~2:30 PM - 2:50 PM UTC <br />Sunday, Dec 8 2024, ~3:30 PM - 3:50 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~4:30 PM - 4:50 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~8:00 PM - 8:20 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~10:30 PM - 10:50 PM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~11:30 PM - 11:50 PM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Format: 25-min talk ; Q&A: IRC
+Status: TO_FOLLOW_UP
+<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/regex-nav.md b/2024/info/regex-nav.md
index b5a4ae77..8621c13c 100644
--- a/2024/info/regex-nav.md
+++ b/2024/info/regex-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/links">Unlocking linked data: replacing specialized apps with an Org-based semantic wiki</a>
-Next by time: <a href="/2024/talks/learning">Survival of the skillest: Thriving in the learning jungle</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/links">Unlocking linked data: replacing specialized apps with an Org-based semantic wiki</a>
+Next by track: <a href="/2024/talks/learning">Survival of the skillest: Thriving in the learning jungle</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/repro-before.md b/2024/info/repro-before.md
index efd13d76..d9c35617 100644
--- a/2024/info/repro-before.md
+++ b/2024/info/repro-before.md
@@ -1,14 +1,9 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sat 2024-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="repro">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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 stroke-width="3" x="555" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,133)"><text font-weight="bold" 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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 20-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-repro.html>
+Format: 20-min talk cancelled
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="2024-12-07T20:45:00Z" end="2024-12-07T21:05:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~3:45 PM - 4:05 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~2:45 PM - 3:05 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~1:45 PM - 2:05 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~12:45 PM - 1:05 PM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~8:45 PM - 9:05 PM UTC <br />Saturday, Dec 7 2024, ~9:45 PM - 10:05 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~10:45 PM - 11:05 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~2:15 AM - 2:35 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~4:45 AM - 5:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~5:45 AM - 6:05 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/dev/">Find out how to watch and participate</a></strong></div>
+Status: Sorry, this talk has been cancelled
+
diff --git a/2024/info/repro-nav.md b/2024/info/repro-nav.md
index 34ccc940..35ed938a 100644
--- a/2024/info/repro-nav.md
+++ b/2024/info/repro-nav.md
@@ -1,7 +1,4 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/hyperdrive">New in hyperdrive.el: org-transclusion, easy installation, and more!</a>
-Next by time: <a href="/2024/talks/writing">Emacs Writing Studio</a>
-Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2024/watch/dev">Watch</a></strong>
-</div>
+</div> \ No newline at end of file
diff --git a/2024/info/rust-after.md b/2024/info/rust-after.md
index 336249c7..d699d89f 100644
--- a/2024/info/rust-after.md
+++ b/2024/info/rust-after.md
@@ -1,7 +1,790 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [troy@troyhinckley.com](mailto:troy@troyhinckley.com?subject=Comment%20for%20EmacsConf%202023%20rust%3A%20An%20experimental%20Emacs%20core%20in%20Rust)
+<div class="transcript transcript-mainVideo"><a name="rust-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Rune""" start="00:00:00.000" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""Hello, EmacsConf. My name is Troy Hinckley, and this is my""" start="00:00:00.000" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""talk on Rune, a Rust implementation in Emacs. We strive to be""" start="00:00:05.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""bug compatible with Emacs, so you can use the same Elisp.""" start="00:00:08.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""It's still a fairly early stage experimental project, and""" start="00:00:11.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""we have some basic things implemented.""" start="00:00:14.880" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The Emacs core""" start="00:00:17.082" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""Before I get started, I want to talk a bit more""" start="00:00:17.082" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""about what the core is.""" start="00:00:19.947" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""So the Emacs core, it includes the runtime, the interpreter,""" start="00:00:21.848" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""garbage collector, everything used to run the code.""" start="00:00:24.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""It includes the GUI. It includes all the data structures.""" start="00:00:26.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""If you look underneath all the Elisp data structures,""" start="00:00:29.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""there's C code underneath there,""" start="00:00:31.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""as well as the auxiliary functions""" start="00:00:33.600" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""of which there's about 1500. In making this talk, I don't""" start="00:00:35.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""want to give the impression that I'm saying the core is""" start="00:00:39.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""outdated or that needs to be replaced or that it can't be""" start="00:00:40.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""evolved on its own, because clearly it has continued to""" start="00:00:42.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""evolve. If we look in just the last few years, we can see that""" start="00:00:45.520" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""we've added native compilation, we've added tree-sitter""" start="00:00:48.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""support, we've added color emoji, and there's work right""" start="00:00:50.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""now to add a new garbage collector to Emacs as well.""" start="00:00:52.760" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why create this?""" start="00:00:57.168" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""Why create this project? Emacs has a long history.""" start="00:00:57.168" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""It has a lot of users. It needs to support a big community.""" start="00:01:01.072" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Because of that, it has to be very conservative""" start="00:01:04.536" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""about what things it can allow into the project.""" start="00:01:06.838" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Forks like this create an""" start="00:01:10.322" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""opportunity to experiment and try new approaches.""" start="00:01:11.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""This is particularly a good use case for Rust because the C core,""" start="00:01:15.587" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""it's pretty well tested. It's been around for a long time.""" start="00:01:18.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""A lot of the bugs have been ironed out, but when you're doing a""" start="00:01:20.850" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""new greenfield project, it's very easy to introduce new""" start="00:01:22.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""undefined behavior and memory unsafety""" start="00:01:26.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""and stuff like that. Rust protects us from most of that,""" start="00:01:28.775" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""but it also gives us the ability to be fast""" start="00:01:32.377" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""and has a strong ecosystem behind it.""" start="00:01:34.938" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Rust is also really good at multi-threading.""" start="00:01:37.884" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Their phrase in the community is fearless concurrency.""" start="00:01:40.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""They should be able to write concurrent programs without""" start="00:01:43.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""having to worry about data races. It's also really high""" start="00:01:45.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""performance. It has a really good regex engine. It's known""" start="00:01:49.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""for its non-copy I/O as well.""" start="00:01:51.840" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How does this compare to other projects?""" start="00:01:55.865" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""How does this compare to other""" start="00:01:55.865" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Rust and Emacs projects, whether there's been a couple? The""" start="00:01:57.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""first is Remacs. This project was the first. It took an""" start="00:01:59.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""outside-in approach. Basically you could take a C""" start="00:02:02.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""function and replace it with a Rust function and build it""" start="00:02:05.520" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""together as one executable. This is pretty easy to do""" start="00:02:09.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""because they could both talk over the C ABI. You could""" start="00:02:11.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""swap out functions once at a time. They made really good""" start="00:02:14.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""progress at first, but eventually they ran into the problem""" start="00:02:16.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""that as you get down to the really core parts of it, you can't""" start="00:02:20.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""just replace one function at a time anymore, because some of""" start="00:02:23.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""that functionality is connected to other things. Like for""" start="00:02:25.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""example, you can't replace the garbage collector without""" start="00:02:28.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""replacing the entire garbage collection system. So the""" start="00:02:30.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""progress really kind of slowed down. Another issue with it""" start="00:02:32.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""was, is that they were doing a one-to-one rewrite, so they""" start="00:02:36.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""weren't adding any new features or functionality, just""" start="00:02:38.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""taking the same code and replacing it in Rust, which doesn't""" start="00:02:41.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""add any advantages in and of itself.""" start="00:02:43.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""This spawned Emacs-NG, which was kind of the spiritual successor to""" start="00:02:46.802" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Remacs, where they decided to add new functionality,""" start="00:02:50.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the biggest one being a JavaScript runtime,""" start="00:02:52.747" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""as well as some new renderers to Emacs.""" start="00:02:55.809" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""This is no longer actively developed though.""" start="00:02:58.231" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Multi-threading""" start="00:03:01.315" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""In this project, one of the big focuses we have is""" start="00:03:01.315" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""on multi-threading. The C core itself is, everything is""" start="00:03:04.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""designed around being single-threaded, all the data""" start="00:03:07.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""structures and everything like that. Rust has a great""" start="00:03:09.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""concurrency story. In Rust, everything is intended to be""" start="00:03:13.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""multi-threaded. That doesn't mean that everything has to""" start="00:03:15.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""run on multiple threads, but you can't write something that""" start="00:03:18.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""is limited to only running in a single-threaded""" start="00:03:20.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""environment. So this makes it really easy to use all the""" start="00:03:22.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""existing packages and build something that is""" start="00:03:25.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""concurrency safe. which is what we've done here,""" start="00:03:28.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""and that was relatively easy to do.""" start="00:03:30.481" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Multi-threading elisp""" start="00:03:32.441" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""But adding it to Elisp is the hard part,""" start="00:03:32.441" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""because we've got to come up with a good model""" start="00:03:34.782" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""for Lisp, and Elisp is just a giant ball""" start="00:03:36.503" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""of mutable state. We need to find some""" start="00:03:39.625" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""way to tame that so we can make workable concurrency""" start="00:03:41.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""out of it. There's really two ways you can do this.""" start="00:03:44.567" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""No-GIL method""" start="00:03:47.648" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""One is what I call the no-GIL method.""" start="00:03:47.648" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""This is what Python is doing, where""" start="00:03:49.269" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""you take all of your data structures, you make them""" start="00:03:51.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""concurrency safe, and then you just leave it up to the""" start="00:03:53.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""programmer to decide what they're going to do with it.""" start="00:03:56.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""They've got to build safe abstractions on top of that.""" start="00:03:58.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""One of the big downsides with this is that""" start="00:04:00.468" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""it comes with a pretty high cost.""" start="00:04:03.087" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""The last benchmarks I've seen is that by making""" start="00:04:05.248" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""everything concurrency safe in Python, single-threaded""" start="00:04:07.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""code is about 20% slower in some benchmarks.""" start="00:04:10.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Since most code is single-threaded, this has a big""" start="00:04:15.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""performance impact for most code that isn't taking""" start="00:04:19.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""advantage of the multi-threading. The other thing is this""" start="00:04:21.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""introduces a lot of nasty concurrency bugs because you can""" start="00:04:23.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""have anything mutating any part of the data from any thread,""" start="00:04:26.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""even if you can't have memory unsafety per se.""" start="00:04:29.040" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Actors""" start="00:04:32.638" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""The other option is actors,""" start="00:04:32.638" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""which are a really known way to approach this,""" start="00:04:34.739" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""where you trade some of that flexibility that you get""" start="00:04:36.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""with fully concurrent for more control and. Code and""" start="00:04:39.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""functions are shared between all the different threads,""" start="00:04:43.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""but data has to be passed along channels between different""" start="00:04:45.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""actors.""" start="00:04:50.600" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Multi-threading elisp (functions)""" start="00:04:51.252" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""We want the functions to be shared, and this""" start="00:04:51.252" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""should be pretty easy because we don't mutate functions""" start="00:04:52.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""like we do data, except when we do. In Lisp, functions are""" start="00:04:55.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""just lists like anything else. So you can mutate them""" start="00:05:00.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""just like lists. Even if you're not talking about""" start="00:05:03.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""interpreted code, like if you have a native compiled""" start="00:05:06.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""function, you can still mutate the constants inside the""" start="00:05:09.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""function. For example, here we have a function returns a""" start="00:05:11.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""string. We take that string out, we mutate that string, and""" start="00:05:14.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""now the function returns a different string. In Rune, we""" start="00:05:17.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""enforce that all functions, their constants are""" start="00:05:23.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""immutable. You can't mutate the insides of a function. You""" start="00:05:25.000" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""can still swap out functions and redefine them, but you""" start="00:05:27.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""can't mutate the inside of a function. This enables them""" start="00:05:29.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""to be safely shared across threads.""" start="00:05:32.240" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Caveats""" start="00:05:34.680" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""However, there are some caveats to this.""" start="00:05:34.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""For example, some functions actually do""" start="00:05:36.401" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""need to mutate their own data. The example that we run into is""" start="00:05:38.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""cl-generic. It uses a method cache. So it has to be able to""" start="00:05:41.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""update that cache. In this case, we just made a special""" start="00:05:44.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""case for this particular situation, but we don't know what""" start="00:05:47.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""more of these we're gonna run into the future where this is""" start="00:05:50.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""needed behavior to be able to mutate a function.""" start="00:05:53.160" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Multi-threading elisp (data)""" start="00:05:57.090" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""Okay, so functions are pretty easy.""" start="00:05:57.090" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""They just can be shared between""" start="00:05:59.811" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""threads, but data can't be immutable, at least not into the""" start="00:06:00.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""model that Emacs currently has. We have two different""" start="00:06:05.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""ways to handle this. One is we require whenever you're""" start="00:06:08.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""calling some other code in a different thread, you have to""" start="00:06:12.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""send all the variables that it's going to need over to that""" start="00:06:14.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""thread. This is how you traditionally do inside actors.""" start="00:06:17.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Any data that needs to go to a different actor needs to be sent""" start="00:06:19.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""over a channel. It's relatively easy implementation, but""" start="00:06:21.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""this is difficult in the Emacs case because everything is""" start="00:06:25.520" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""going to be accessing different variables. That means""" start="00:06:28.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""when you call something, you have to know ahead of time, all""" start="00:06:30.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the different variables that are gonna be accessed inside""" start="00:06:33.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""that other thread and put those in when you call it.""" start="00:06:34.880" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Copy values to other threads on demands""" start="00:06:38.249" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""The other option we're using is we're copying values to the""" start="00:06:38.249" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""other threads on demand. If you're running a thread, it""" start="00:06:40.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""tries to look up a variable. It doesn't have any value for""" start="00:06:43.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""that variable. It will go back and ask the main thread and it""" start="00:06:45.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""will copy that value into that thread and it can continue""" start="00:06:48.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""execution. This is nice because you can just launch some""" start="00:06:50.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""code and it'll take care of handling all the data transfer""" start="00:06:53.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""for you.""" start="00:06:55.640" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Multi-threading elisp (buffers)""" start="00:06:57.884" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""But we don't want to be copying around is buffers,""" start="00:06:57.884" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""because they can be really large. In this case, we have a""" start="00:07:00.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""mutex. Each thread could only have one current buffer that""" start="00:07:04.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""it has an exclusive lock to. This comes with some""" start="00:07:07.600" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""trade-offs, big one being that if the user tries to access""" start="00:07:12.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""some buffer, they want to type something, and a background""" start="00:07:16.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""thread is holding onto that buffer, what do we do in that""" start="00:07:18.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""situation? And we still need to hold an exclusive lock, even""" start="00:07:20.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""if we're only going to read a buffer. If you have multiple""" start="00:07:24.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""readers, they each still need to take turns because we can't""" start="00:07:26.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""determine if at some point a thread is going to try and mutate""" start="00:07:29.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the buffer. It has to be an exclusive lock. The other issue""" start="00:07:31.000" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""is buffer-locals. This is less of a implementation issue""" start="00:07:33.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""as much as it is a technical issue. Because you think about""" start="00:07:37.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""when we switch to a buffer, it has some buffer-local data and""" start="00:07:40.520" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""we have some thread-local data. As we go through, we're""" start="00:07:42.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""mutating everything. Those can get intertwined and""" start="00:07:45.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""pointing to each other. Then we switch away from that""" start="00:07:47.600" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""buffer. We need some quick way to be able to separate those""" start="00:07:49.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""out. The buffer-locals can go with the buffer-locals and""" start="00:07:51.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the thread data can stay with thread data and make copies of""" start="00:07:54.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""anything that was pointing to the other side. But we don't""" start="00:07:56.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""have a good method to determine how to separate those two,""" start="00:07:58.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""like what data belongs to this and what data belongs to this,""" start="00:08:02.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""so that we can do that quickly. We haven't found a good""" start="00:08:05.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""solution to that yet, but it's something we're still""" start="00:08:08.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""working on.""" start="00:08:09.600" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Would this actually be useful?""" start="00:08:11.903" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""The question is, would this actually be""" start="00:08:11.903" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""useful for doing real work inside Emacs? I would say,""" start="00:08:13.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""yes, there's a lot of things you can do with this. You could""" start="00:08:15.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""handle process output in the background. You can do syntax""" start="00:08:17.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""highlighting. You can do buffer search in parallel. You can""" start="00:08:20.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""do LSP. You can do fetching your mail in the background. You""" start="00:08:23.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""can have a window manager that doesn't block your window""" start="00:08:26.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""manager when Emacs is blocked. You could do""" start="00:08:29.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""something like a file system watcher that keeps up on files""" start="00:08:32.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""without blocking Emacs. This wouldn't be so great for""" start="00:08:34.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""building concurrent data structures or operating on""" start="00:08:37.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""shared data or building your own abstractions, because of the""" start="00:08:39.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""trade-offs that we've made here. Okay. That's talking""" start="00:08:42.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""about multi-threading.""" start="00:08:46.040" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Precise garbage collection""" start="00:08:46.919" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""The other thing we're going to talk""" start="00:08:46.919" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""about is precise garbage collection. In Rune, we have a""" start="00:08:47.600" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""safe, precise garbage collection because of the Rust type""" start="00:08:51.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""system. Let's look at what the problem is with garbage""" start="00:08:54.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""collection in the first place. Really, the tricky part""" start="00:08:58.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""about garbage collection is rooting. How do we find out what""" start="00:09:00.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the roots are? These are all the values that are on the""" start="00:09:03.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""stack or inside the registers. In this example here, we""" start="00:09:06.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""allocate an object. We call garbage_collect, that object's""" start="00:09:08.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""collected, and then we try and return it.""" start="00:09:11.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""It's no longer valid.""" start="00:09:13.537" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How Emacs used to deal with roots""" start="00:09:16.537" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""Let's look at how Emacs used to deal with this""" start="00:09:16.537" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""problem way back in the day. There was a system called gcpro""" start="00:09:19.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""or GC Protect, which is basically designed that every time a""" start="00:09:22.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""value needed to survive past a garbage collection point,""" start="00:09:26.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""you had to try and protect it. In order to do this, you had""" start="00:09:28.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""to declare a struct, you had to put a macro around it to root""" start="00:09:32.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the object, and then you had to unroot it when you were done--""" start="00:09:35.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""past the garbage collection. Now the value is safe. You""" start="00:09:38.000" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""can see down here, I pulled these eight rules out from a""" start="00:09:41.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""really old version of the Emacs manual about all the things""" start="00:09:44.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""you had to keep track of when you were trying to use this""" start="00:09:46.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""system. All right, so there was a special handling for""" start="00:09:49.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""nested GC protects. You had to make sure the memory was""" start="00:09:52.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""initialized. You had to make sure that traps couldn't occur""" start="00:09:54.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""between allocating and when GC protect would happen. It""" start="00:09:58.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""can be tricky because you don't always know when a function""" start="00:10:00.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""that's getting called could potentially call garbage""" start="00:10:03.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""collection. So if you got something wrong, you also""" start="00:10:06.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""might not catch it for a long time because garbage""" start="00:10:10.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""collection may only get called one out of 99 times. The other""" start="00:10:12.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""99 times is just fine. That one time it happens and you""" start="00:10:15.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""can't reproduce the issue. When you do get this wrong and""" start="00:10:19.000" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""some, something doesn't get rooted and it gets""" start="00:10:22.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""overwritten, it generally doesn't show up right where the""" start="00:10:24.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""problem is. It gets showed up way later when you actually try""" start="00:10:26.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""and access the value and the value is invalid. You've got""" start="00:10:28.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""to track it back to where that thing did not get properly""" start="00:10:31.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""rooted. It's a huge source of bugs and very hard to""" start="00:10:33.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""maintain.""" start="00:10:37.360" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Conservative stack scanning""" start="00:10:38.713" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""Emacs decided to go with a different path,""" start="00:10:38.713" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""which we call conservative stack scanning. Basically,""" start="00:10:40.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the garbage collector just looks at the stack and all the""" start="00:10:42.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""registers and any data inside there that looks like it could""" start="00:10:45.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""be a pointer, it treats it as a pointer. This is nice because""" start="00:10:47.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""you get really easy root tracking,""" start="00:10:52.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""but it also comes with some trade-offs,""" start="00:10:54.712" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""mostly that your objects are no longer movable.""" start="00:10:56.114" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Movable objects""" start="00:11:00.157" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""Why would we want movable objects in Emacs?""" start="00:11:00.157" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""There's a couple of different reasons. One is compaction.""" start="00:11:03.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""You can take all your heap, you can pack that on down because""" start="00:11:05.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""you can coalesce all your objects together. Another is that""" start="00:11:08.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""it's easy to implement generational garbage collection.""" start="00:11:11.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""You can just copy everything out of your minor heap into your""" start="00:11:13.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""older heap. Really, Emacs is kind of uniquely ideal for""" start="00:11:16.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""generational collection, because the typical way we""" start="00:11:21.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""interact with Emacs is as a series of commands. You execute""" start="00:11:24.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""some command, you'd execute the next command, you execute""" start="00:11:27.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""a command. It could be happening every key press, it could be""" start="00:11:29.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""happening with M-x. However long that command is, that is""" start="00:11:33.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the ideal length for the minor collection generation, the""" start="00:11:36.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""first generation. Because once you're done with that""" start="00:11:40.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""generation, anything that's still existing is going to be""" start="00:11:43.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""around for a very long time. So that works out really well""" start="00:11:45.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""for Emacs. We want to make this a generational collector.""" start="00:11:49.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""The other thing is with object layout. We use a lot of lists""" start="00:11:52.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""inside Emacs Lisp. Every time you go to the cdr, you've""" start="00:11:56.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""got to be chasing a pointer around the heap and following""" start="00:12:00.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""that. That can potentially result in cache misses and""" start="00:12:03.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""all sorts of other things like that. So it can take a long""" start="00:12:05.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""time. It can be quite slow. But if you have the ability to move""" start="00:12:08.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""objects, you can just relocate an entire list and lay it out""" start="00:12:12.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""in an array right next to each other inside memory.""" start="00:12:16.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""So iterating over it is just as fast as iterating over an array.""" start="00:12:19.169" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""But you can only do that if you have movable objects.""" start="00:12:22.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""I'll point out here too, that with conservative stack scanning,""" start="00:12:25.422" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""it's not that all objects are immovable. It's only ones that""" start="00:12:28.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""are pointed to from the stack or from the registers that have""" start="00:12:31.600" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""to become immovable.""" start="00:12:35.520" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How Rust makes precise GC easy""" start="00:12:38.829" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""Let's look at how Rust makes precise""" start="00:12:38.829" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""garbage collection easy. Here I have some Rust code to""" start="00:12:41.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""show kind of how the lifetime system works and what we call""" start="00:12:44.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""XOR mutability, where we can only have one mutable""" start="00:12:47.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""reference or multiple immutable references to the same""" start="00:12:49.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""thing. Here we declare a vector, we take a reference to the""" start="00:12:52.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""first element of the vector, and then we mutate the vector.""" start="00:12:56.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Now this could potentially resize the vector and move it to a""" start="00:12:59.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""different location in memory, so that reference is no""" start="00:13:02.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""longer valid. The nice thing is, Rust catches this for""" start="00:13:04.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""us. It says, hey, this is no longer valid. This reference""" start="00:13:07.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""can't survive past when you mutated it. Okay? That's""" start="00:13:10.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""exactly what we want for a garbage collector. You can see""" start="00:13:14.520" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""here, we take this in a garbage collection context, we""" start="00:13:17.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""create a new context object, we add an object, we call""" start="00:13:19.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""garbage_collect, then we try and access that object. It's no""" start="00:13:23.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""longer accessible, and Rust will prevent us from trying to""" start="00:13:26.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""access that variable. So, how do we solve this? We have a""" start="00:13:29.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""root macro. We declared this root macro, it lets us take the""" start="00:13:34.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""object and let it live past garbage collection, and""" start="00:13:39.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""everything works out. The nice thing is, this root macro""" start="00:13:41.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""will get dropped when it's out of scope, so we don't have to""" start="00:13:45.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""worry about the un-gc-protect step of this. Statically,""" start="00:13:47.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Rust will verify and tell us any object that needs to be""" start="00:13:51.520" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""rooted. If we try and access it, it'll tell us it's invalid.""" start="00:13:55.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""We have this root macro and then we can access it. So in""" start="00:13:58.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""that way, we have safe, precise garbage collection without""" start="00:14:01.000" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""any chance of introducing undefined behavior, which is""" start="00:14:03.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""really, really powerful. It's really easy because the""" start="00:14:07.480" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""type system will catch it all for us.""" start="00:14:10.000" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Other Rust niceties: proc macro""" start="00:14:13.227" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""There's some other Rust niceties I want to kind of""" start="00:14:13.227" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""talk through that are useful, but""" start="00:14:15.148" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""are not, you know, star features. One is proc macros. You""" start="00:14:16.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""can see up on the top, you can see how you declare a function""" start="00:14:21.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""inside the C core. All right. You have to use the macro. You""" start="00:14:23.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""have to put the list type, the function type,""" start="00:14:27.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the struct type, the different types of arguments""" start="00:14:29.142" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""or different number of arguments, the doc string,""" start="00:14:30.964" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""and then you can put your argument listing down inside there.""" start="00:14:33.226" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""On the Rust side, we just write this like we would""" start="00:14:36.024" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""any other Rust function. And then we put""" start="00:14:37.985" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the defun proc macro on there""" start="00:14:40.045" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""and it takes care of everything for us behind the scenes.""" start="00:14:41.286" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""A couple of cool additional things we can do with this""" start="00:14:44.187" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""is that we don't have to make everything just an object.""" start="00:14:46.408" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""We can actually make things""" start="00:14:48.728" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""more specific types. Here we have symbols. As well as""" start="00:14:49.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""you can see subfeature, it's an optional parameter, and we""" start="00:14:54.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""just make it an option inside Rust and it automatically make""" start="00:14:56.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""it an optional inside Elisp.""" start="00:15:00.920" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""This makes them really easy to write.""" start="00:15:03.600" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""I can't take credit for this is because this is""" start="00:15:05.182" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""something that I saw inside Remacs and I stole from them, but""" start="00:15:06.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""it makes the functions really easy to call from each other""" start="00:15:09.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""and really easy to write as well.""" start="00:15:11.440" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""sum types""" start="00:15:14.560" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""Another thing that's really nice is sum types.""" start="00:15:14.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""In the C core, if I wanted to get a""" start="00:15:18.524" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""string out of an object, I would first need to check that it's""" start="00:15:21.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""a string and then dereference it as a string. But if it's not a""" start="00:15:23.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""string, I may introduce undefined behavior. So in""" start="00:15:28.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""complicated code, I have to make sure that I have always""" start="00:15:30.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""checked what type it is before I try and dereference that""" start="00:15:32.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""type. We don't have to worry about any of that inside Rust""" start="00:15:34.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""because we can untag a value and we can use their some types,""" start="00:15:37.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""basically create an enum and we can match on what the""" start="00:15:41.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""different values can be. Then we only get out the types""" start="00:15:44.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""that are viable or are actually there. So we never""" start="00:15:47.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""accidentally get something out of an object that we didn't""" start="00:15:50.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""mean to, or dereference it as something that doesn't""" start="00:15:52.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""really exist. We can just match on it and we can get out the""" start="00:15:54.240" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""values that we need, which is really, really powerful.""" start="00:15:56.880" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Regex""" start="00:16:01.041" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""So there's some other Rust niceties as well working with here.""" start="00:16:01.041" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""One is the regex engine inside Rust is really fast, high""" start="00:16:03.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""performance. We are using that for the Elixir regex""" start="00:16:07.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""engine to give it high performance and worst-case""" start="00:16:10.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""guarantees.""" start="00:16:14.880" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Parsers""" start="00:16:16.052" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""The other is that Rust has a lot of really good""" start="00:16:16.052" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""parsers for things like JSON that are no copy parsers that""" start="00:16:18.600" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""are high performance. We can use those inside Rune as""" start="00:16:21.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""well.""" start="00:16:24.720" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Other changes: GUI first, terminal second""" start="00:16:27.210" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""There's a handful of other changes we're working on""" start="00:16:27.210" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""that are not Rust-specific, but we'd like to see. The first is""" start="00:16:29.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""being GUI first, terminal second. This means two things.""" start="00:16:33.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""First is that we have all of our key bindings. Right now""" start="00:16:36.760" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""inside Emacs, C-i and TAB are bound to the same key""" start="00:16:40.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""binding by default, because that's how it works inside the""" start="00:16:43.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""terminal. In the GUI, you shouldn't have that limitation.""" start="00:16:45.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""The second is that the GUI should not block when Lisp is""" start="00:16:48.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""blocked. It should be independent of that. Your GUI can""" start="00:16:52.560" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""still continue to operate when Lisp is running.""" start="00:16:55.200" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Off-screen cursor""" start="00:16:58.919" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""The other is the ability to have an off-screen cursor""" start="00:16:58.919" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""so that you can be typing on something,""" start="00:17:01.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""you can scroll up and down and the point""" start="00:17:02.700" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""doesn't have to follow you where you lose your place where""" start="00:17:04.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""you were before. You don't have to intentionally set a mark.""" start="00:17:06.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""You can just scroll and then start typing and it'll go back up""" start="00:17:09.400" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""to where it was before, like it works in most applications.""" start="00:17:11.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""And this can be optional.""" start="00:17:13.880" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Image flow""" start="00:17:16.305" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""The other is image flow. We want it""" start="00:17:16.305" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""so that you can easily flow images and you can have large""" start="00:17:18.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""images and scroll past them without jumping and you can flow""" start="00:17:20.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""text around images.""" start="00:17:23.160" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Testing""" start="00:17:24.440" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""How are we testing this project? Because there's a lot of""" start="00:17:24.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""things that you could get wrong here. One thing we're doing""" start="00:17:29.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""is we're using ERT. Emacs ships with over 7,000 built-in""" start="00:17:33.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""tests--Elisp tests. We are using this test suite to test""" start="00:17:38.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""our project as well. We can kind of use this as a dashboard""" start="00:17:42.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""of saying how close are we to getting to parity with GNU""" start="00:17:45.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""Emacs. The other thing that we have is a tool called elprop,""" start="00:17:47.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""which is an external utility that basically tests for""" start="00:17:52.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""correctness. Because really, the correctness of Rune is""" start="00:17:55.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""whatever Emacs does, because there's no official spec on""" start="00:17:58.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""how things should behave. To do this, we can go look at""" start="00:18:01.000" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the Rust function signature. We know what the arguments""" start="00:18:04.080" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""are, we know how many they are, and we know what types they""" start="00:18:07.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""should be. Given that information, we can generate a""" start="00:18:09.320" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""whole bunch of random functions feeding those types in. And""" start="00:18:11.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""then we send a copy over to Emacs, we send a copy over to Rune.""" start="00:18:15.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""They each evaluate it and they return the result and we make""" start="00:18:18.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""sure the results are the same. Then you do that for""" start="00:18:21.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""thousands of different implementations of the function.""" start="00:18:23.520" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""And it helps us find corner cases really easy without having""" start="00:18:26.200" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""to handwrite a whole bunch of different cases to test things""" start="00:18:29.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""and say, where are these two functions different?""" start="00:18:31.640" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Status""" start="00:18:36.345" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""So the current status: we already have a multi-threaded Elixir""" start="00:18:36.345" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""interpreter and bytecode engine inside there. There's no""" start="00:18:39.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""actual text editor in there yet, but the primitives are""" start="00:18:43.000" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""there. Like you can insert text, move point around,""" start="00:18:45.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""delete text, do different things like that. But we don't""" start="00:18:48.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""have a GUI hooked up to different key bindings to actually""" start="00:18:52.040" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""type on. There's just a REPL to operate in. We have about""" start="00:18:53.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""250 of the 1500 built-in functions already implemented""" start="00:18:58.160" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""inside there. There's a lot of low-hanging fruit inside this""" start="00:19:01.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""area to still be implemented.""" start="00:19:04.120" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Next directions""" start="00:19:07.247" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""The next directions we're""" start="00:19:07.247" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""working on is we're optimizing the GC. We want to make it""" start="00:19:07.720" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""generational. Like I said, right now, it's just a simple""" start="00:19:11.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""semi-spaced copying GC. We want to add a proper GUI. We need""" start="00:19:13.840" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""to implement text properties, overlays, process and job""" start="00:19:17.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""control, all that goodness right there.""" start="00:19:19.600" video="mainVideo-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How to get involved""" start="00:19:22.739" video="mainVideo-rust" id="subtitle"]]</div>[[!template text="""How can you get involved? This is hosted on GitHub.""" start="00:19:22.739" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""You can come on over.""" start="00:19:25.379" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""If you have any ideas about how to implement something or""" start="00:19:26.425" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""something you'd like to see done, go ahead and just open an""" start="00:19:28.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""issue so we can have a discussion about it. We've had lots of""" start="00:19:30.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""interesting discussions with different people coming in""" start="00:19:32.800" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""to the GitHub repo. If you're interested in contributing,""" start="00:19:34.600" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the easiest way is probably to run elprop, pick some""" start="00:19:37.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""function, run elprop on it. I promise it won't take long to""" start="00:19:40.440" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""find some issues, some discrepancy between Emacs and Rune,""" start="00:19:43.280" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""and that lets you dive into the Rust code and figure out, and""" start="00:19:45.640" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""the C code, and figure out what the difference is between the""" start="00:19:48.960" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""two. or come along and help implement your favorite""" start="00:19:50.880" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""functionality. This has been a really interesting project""" start="00:19:53.120" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""so far, and we've had a handful of different contributors on""" start="00:19:55.680" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""it who just kind of want to learn Rust or get more into""" start="00:19:58.360" video="mainVideo-rust" id="subtitle"]]
+[[!template text="""systems-level programming. Thank you.""" start="00:20:01.800" video="mainVideo-rust" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+<div class="transcript transcript-qanda"><a name="rust-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""Okay, so I'm going to look at some of the questions showing up""" start="00:00:00.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""in the etherpad we got here.""" start="00:00:06.520" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you considered using CRDTs to share buffers between threads and merge any concurrent edits automatically?""" start="00:00:08.500" video="qanda-rust" id="subtitle"]]</div>[[!template text="""It says, have you considered""" start="00:00:08.500" video="qanda-rust" id="subtitle"]]
+[[!template text="""using a CRDT to share buffers between threads and merge any""" start="00:00:09.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""concurrent edits automatically? So I have looked at that.""" start="00:00:12.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""And the problem with CRDTs is that even though they give you a""" start="00:00:16.040" video="qanda-rust" id="subtitle"]]
+[[!template text="""mathematically correct answer when you're trying to merge""" start="00:00:20.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""two conflicts, it's not always a useful answer. Like, it's""" start="00:00:22.840" video="qanda-rust" id="subtitle"]]
+[[!template text="""not coherent. If you have two things trying to edit the same""" start="00:00:26.480" video="qanda-rust" id="subtitle"]]
+[[!template text="""thing, there's no good way to resolve that. And so they""" start="00:00:29.200" video="qanda-rust" id="subtitle"]]
+[[!template text="""really work well when you have two people working live, both""" start="00:00:31.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""editing the same document, because they can fix any""" start="00:00:33.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""particular issues like that, like you would with Google""" start="00:00:35.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""Docs. But you have different packages that aren't aware of""" start="00:00:37.200" video="qanda-rust" id="subtitle"]]
+[[!template text="""each other, and you're going to run into problems. And so""" start="00:00:39.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""this is something, if you read from the Xi editor, which was""" start="00:00:42.160" video="qanda-rust" id="subtitle"]]
+[[!template text="""one of the first ones to use CRDTs, in the retrospective, he""" start="00:00:45.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""talks about how they had this problem, where the CRDTs They""" start="00:00:48.040" video="qanda-rust" id="subtitle"]]
+[[!template text="""give you an answer, but it's not always an answer that's""" start="00:00:52.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""useful. And so I feel like locks at least are going to make it.""" start="00:00:54.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""It's not going to be as efficient if you have a whole bunch of""" start="00:00:59.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""packages, but I don't imagine there's going to be a ton of""" start="00:01:00.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""those. It can actually, I think it'll be more useful in""" start="00:01:02.320" video="qanda-rust" id="subtitle"]]
+[[!template text="""practice.""" start="00:01:04.800" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Why hosted on GitHub? GitHub is nonfree. Is it possible to report bugs/send patches without using GitHub?""" start="00:01:05.874" video="qanda-rust" id="subtitle"]]</div>[[!template text="""I host on GitHub because that's what I know.""" start="00:01:05.874" video="qanda-rust" id="subtitle"]]
+[[!template text="""If there's a way to host it on somewhere else, I'd be""" start="00:01:11.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""interested in doing that. If you're interested in setting""" start="00:01:13.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""patches without using GitHub, you could always send an""" start="00:01:15.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""email. I'm more than happy to accept email patches.""" start="00:01:17.800" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think it's possible to achieve 100% compatibility with current Emacs code?""" start="00:01:22.960" video="qanda-rust" id="subtitle"]]</div>[[!template text="""Do you think it's possible to achieve with the current Emacs""" start="00:01:22.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""code? I do. I think, I think you can do that. Um, like I said,""" start="00:01:24.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""there's a couple things inside there that are intentional""" start="00:01:29.720" video="qanda-rust" id="subtitle"]]
+[[!template text="""breaks with existing Emacs code. And some of those being""" start="00:01:33.280" video="qanda-rust" id="subtitle"]]
+[[!template text="""like functions are immutable. As well as having data shared""" start="00:01:37.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""switch between different threads, which means there's""" start="00:01:43.160" video="qanda-rust" id="subtitle"]]
+[[!template text="""going to be some copying going on. So there's going to be""" start="00:01:44.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""subtle things that are going to be different. And we've""" start="00:01:46.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""really got to think about those intentionally, but I'm""" start="00:01:48.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""really going for bug compatibility with GNU Emacs so that""" start="00:01:50.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""you can take an existing Elisp package and just run it and it""" start="00:01:54.520" video="qanda-rust" id="subtitle"]]
+[[!template text="""just works, 'cause I think that's one of the big strengths of""" start="00:01:57.160" video="qanda-rust" id="subtitle"]]
+[[!template text="""the Emacs ecosystem is the millions of lines of Elisp that""" start="00:01:59.880" video="qanda-rust" id="subtitle"]]
+[[!template text="""people have written.""" start="00:02:03.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""Um, So I'm not, okay...""" start="00:02:07.480" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: so you're re-implementing elisp in rust? have you considered using a more modern lisp, such as scheme? [11:03]""" start="00:02:11.913" video="qanda-rust" id="subtitle"]]</div>[[!template text="""So since you're re-implementing Elisp and""" start="00:02:11.913" video="qanda-rust" id="subtitle"]]
+[[!template text="""Rust, have you considered using more modern Lisp such as""" start="00:02:14.280" video="qanda-rust" id="subtitle"]]
+[[!template text="""Scheme? So I'm not re-implementing Elisp and Rust. I'm""" start="00:02:17.040" video="qanda-rust" id="subtitle"]]
+[[!template text="""re-implementing the C in Rust. In fact, I would like to make""" start="00:02:20.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""more of the core that's written in C in Elisp instead of C or""" start="00:02:25.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""Rust, because then it's actually introspectible. There's""" start="00:02:30.480" video="qanda-rust" id="subtitle"]]
+[[!template text="""a talk by Tom Tromney that he gave a while ago about Emacs""" start="00:02:33.840" video="qanda-rust" id="subtitle"]]
+[[!template text="""should be Emacs Lisp. I kind of like that philosophy,""" start="00:02:38.720" video="qanda-rust" id="subtitle"]]
+[[!template text="""that as much of it as should be Elisp as possible, and we""" start="00:02:42.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""should only have C or Rust or some systems level language for""" start="00:02:44.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""really low-level stuff. Using a more modern LISP such as""" start="00:02:48.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""Scheme. I know there's, I mean, there's two talks, I think,""" start="00:02:52.320" video="qanda-rust" id="subtitle"]]
+[[!template text="""in this conference about using Scheme inside Emacs. And I""" start="00:02:54.840" video="qanda-rust" id="subtitle"]]
+[[!template text="""looked at this at one point about what if you wrote it inside""" start="00:02:58.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""Common LISP, because that's also has some really low level""" start="00:03:00.720" video="qanda-rust" id="subtitle"]]
+[[!template text="""details. And then you could go from Elisp down to Common""" start="00:03:03.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""Lisp. But the problem is, is under the hood, you still need a""" start="00:03:05.880" video="qanda-rust" id="subtitle"]]
+[[!template text="""systems language. You can't, you still need either C or Rust""" start="00:03:09.200" video="qanda-rust" id="subtitle"]]
+[[!template text="""or something underneath the Common Lisp to implement the""" start="00:03:12.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""primitives. And so it's not going to give you just two""" start="00:03:15.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""languages, you know, you'll have three. You'll have the""" start="00:03:17.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""elisp, common lisp, and C under the hood. And so in this case""" start="00:03:19.720" video="qanda-rust" id="subtitle"]]
+[[!template text="""we just have the two. We have the Elisp and the rest.""" start="00:03:24.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""All right that's all the questions I see there. Let""" start="00:03:29.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""me go look at... Okay,""" start="00:03:43.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""so I see into the chat.""" start="00:03:54.080" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you have specific features from the Rust compiler that are missing (or are nightly-only) that you would take advantage of?""" start="00:04:01.400" video="qanda-rust" id="subtitle"]]</div>[[!template text="""Does it features from the Rust compiler that are missing""" start="00:04:01.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""that way you would take advantage of? Oh, that is a great""" start="00:04:03.840" video="qanda-rust" id="subtitle"]]
+[[!template text="""question. Um, there's a handful of them. Uh, I should've""" start="00:04:06.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""written down a list of these. One of them is Polonius, which""" start="00:04:10.680" video="qanda-rust" id="subtitle"]]
+[[!template text="""is the new borrow checker because we're trying to be used""" start="00:04:13.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""lifetime to track our objects. We often run into situations""" start="00:04:17.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""where we've kind of got a hack around things because the""" start="00:04:21.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""limitations with the borrow checker. And so I have a whole""" start="00:04:24.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""bunch of like notes inside there about where. A better""" start="00:04:26.200" video="qanda-rust" id="subtitle"]]
+[[!template text="""Polonius would help inside there and help ease some of the""" start="00:04:29.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""issues. Another thing is enum variances types, because""" start="00:04:34.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""right now we have an object which is defined as a big enum that""" start="00:04:40.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""had all the possible objects, but if we want to have a subset""" start="00:04:43.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""of those objects or just pass in one of those objects, we've""" start="00:04:46.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""got to define a new struct. And so we have a whole bunch of""" start="00:04:47.480" video="qanda-rust" id="subtitle"]]
+[[!template text="""boilerplate code to define that all out. And if we had""" start="00:04:50.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""variances types, that would make the code a lot easier.""" start="00:04:52.840" video="qanda-rust" id="subtitle"]]
+[[!template text="""Another one is the allocator API. Right now we're kind of""" start="00:04:56.720" video="qanda-rust" id="subtitle"]]
+[[!template text="""working around it, but ultimately we're going to need our""" start="00:05:00.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""own allocator. And the allocator API is still nightly only.""" start="00:05:02.480" video="qanda-rust" id="subtitle"]]
+[[!template text="""So there's a couple more. I'll look at that more, but that's a""" start="00:05:07.720" video="qanda-rust" id="subtitle"]]
+[[!template text="""great question.""" start="00:05:10.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:05:24.280" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Can remacs be reused?""" start="00:05:26.880" video="qanda-rust" id="subtitle"]]</div>[[!template text="""Okay. I see a question you might not have noticed just asking""" start="00:05:26.880" video="qanda-rust" id="subtitle"]]
+[[!template text="""about reuse of Remacs. Oh, yes, so I have reused some of Remacs""" start="00:05:30.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""code, and some taken, like I mentioned, taken some of their""" start="00:05:37.160" video="qanda-rust" id="subtitle"]]
+[[!template text="""ideas, but ultimately we're using a different model""" start="00:05:40.160" video="qanda-rust" id="subtitle"]]
+[[!template text="""because under the hood in Remacs, everything is just defined""" start="00:05:45.320" video="qanda-rust" id="subtitle"]]
+[[!template text="""as an opaque external type that's defined inside Emacs and""" start="00:05:49.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""so it just pulls those in interacts with those and passes""" start="00:05:53.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""them back into C. We're trying to see what we can do if we""" start="00:05:56.160" video="qanda-rust" id="subtitle"]]
+[[!template text="""say okay we're not going to take the same... So they're bound to""" start="00:05:58.880" video="qanda-rust" id="subtitle"]]
+[[!template text="""the implementation details of Emacs, and we don't want to do""" start="00:06:02.280" video="qanda-rust" id="subtitle"]]
+[[!template text="""that. We've re-implemented all the core types""" start="00:06:06.840" video="qanda-rust" id="subtitle"]]
+[[!template text="""ourselves. So that means that we can't just take the""" start="00:06:09.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""Remacs code one for one and use it in our project, but we can""" start="00:06:12.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""take a lot of their ideas. I've spent some time reading""" start="00:06:16.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""through their documentation, different things about how""" start="00:06:18.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""they approached strings and GC""" start="00:06:20.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""and different stuff like that.""" start="00:06:23.857" video="qanda-rust" id="subtitle"]]
+[[!template text="""Looks like all the questions.""" start="00:06:24.760" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What are you thoughts on the GUI layer. Any plans on how to reimplement it?""" start="00:07:23.600" video="qanda-rust" id="subtitle"]]</div>[[!template text="""Okay, so another question. What are your thoughts on the GUI""" start="00:07:23.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""layer? Any plans on how to reimplement it? This is something""" start="00:07:26.200" video="qanda-rust" id="subtitle"]]
+[[!template text="""I've thought a lot about, but I still don't have a solid plan""" start="00:07:30.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""for. I'm not really a GUI person. I mostly work with""" start="00:07:34.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""low-level. And so my two thoughts is you can go the GTK route.""" start="00:07:37.254" video="qanda-rust" id="subtitle"]]
+[[!template text="""There's Rust bindings for that. That's well understood.""" start="00:07:42.720" video="qanda-rust" id="subtitle"]]
+[[!template text="""It's got a good support. But there's also some interesting""" start="00:07:45.520" video="qanda-rust" id="subtitle"]]
+[[!template text="""projects to try and do GUI in Rust, native Rust, and have it""" start="00:07:48.320" video="qanda-rust" id="subtitle"]]
+[[!template text="""use Rust idioms and stuff like that. And so those are things""" start="00:07:53.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""like Druid and there's eGUI and a bunch of those that are that""" start="00:07:57.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""way. And I've never used one of them, but I'd be interested to""" start="00:08:01.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""try that out first and see how well does this work and how well""" start="00:08:05.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""supported is this doing a Rust-first GUI.""" start="00:08:08.880" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: If money could fix the problem, how much would it cost to ship this with feature parity before 2026?""" start="00:08:21.240" video="qanda-rust" id="subtitle"]]</div>[[!template text="""If money could fix the problem, how much would it cost to ship""" start="00:08:21.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""this with feature parity before 2026? Ooh, in a year. Uh,""" start="00:08:23.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""that's a good question. Even if we had the money, it would""" start="00:08:28.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""take more than just me, even if I was working on it full time.""" start="00:08:32.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""Um, I don't know. That's a good question.""" start="00:08:36.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""I would think it would take a team""" start="00:08:40.631" video="qanda-rust" id="subtitle"]]
+[[!template text="""of at least a handful of people to get this""" start="00:08:41.770" video="qanda-rust" id="subtitle"]]
+[[!template text="""shipping within one year. Because there's still a lot of""" start="00:08:45.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""work to do. And even once you have everything implemented,""" start="00:08:48.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""there's a lot of bug finding and smoothing it out so that it""" start="00:08:50.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""runs as well as Emacs, which has been, you know, battle""" start="00:08:55.120" video="qanda-rust" id="subtitle"]]
+[[!template text="""tested for a long time.""" start="00:08:57.520" video="qanda-rust" id="subtitle"]]
+[[!template text="""Um, okay, so this might be a good moment for me to break in and""" start="00:08:58.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""just say that we've got about 10 minutes left before we""" start="00:09:06.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""resume new talks on on both tracks. Of course, we're happy to""" start="00:09:09.040" video="qanda-rust" id="subtitle"]]
+[[!template text="""keep this. This chat open and keep the recording going here,""" start="00:09:12.520" video="qanda-rust" id="subtitle"]]
+[[!template text="""which will share after the conference as long as as long as""" start="00:09:18.120" video="qanda-rust" id="subtitle"]]
+[[!template text="""there's discussion here. Thank you.""" start="00:09:21.600" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""GObject implementation""" start="00:09:28.350" video="qanda-rust" id="subtitle"]]</div>[[!template text="""GTK project has""" start="00:09:28.350" video="qanda-rust" id="subtitle"]]
+[[!template text="""automatic binding with a framework called GObject""" start="00:09:29.120" video="qanda-rust" id="subtitle"]]
+[[!template text="""introspection, which is what I'm using for gypsum project.""" start="00:09:31.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""Probably Rust has a G object implementation, which you can""" start="00:09:33.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""use. Yeah, I know it has some GTK bindings. Um, I'm not sure if""" start="00:09:35.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""it's specifically GObject, but that's a good path""" start="00:09:39.120" video="qanda-rust" id="subtitle"]]
+[[!template text="""because I feel like the problem""" start="00:09:41.955" video="qanda-rust" id="subtitle"]]
+[[!template text="""with the Rust GUIs is that they're all""" start="00:09:44.336" video="qanda-rust" id="subtitle"]]
+[[!template text="""very new. And so, you know, everything works in a demo, but""" start="00:09:46.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""you need something that can work across all different""" start="00:09:50.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""devices and all different platforms and have really good""" start="00:09:52.320" video="qanda-rust" id="subtitle"]]
+[[!template text="""support and good accessibility and stuff like that.""" start="00:09:54.320" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: elisp is implemented in c, so if you're not implementing elisp in rust, are you using/keeping the c implementation of elisp?""" start="00:09:56.600" video="qanda-rust" id="subtitle"]]</div>[[!template text="""All right, Elisp is implemented in C. So if you're not""" start="00:09:56.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""implementing Elisp in Rust, we're keeping the C""" start="00:10:03.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""implementation of Elisp. So let me see if I can do a better job""" start="00:10:07.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""of explaining this. So inside Emacs, you have about a""" start="00:10:13.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""million lines of Elisp. And underneath that, you have the C,""" start="00:10:18.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""which is the primitives everything's implemented yet. And""" start="00:10:21.520" video="qanda-rust" id="subtitle"]]
+[[!template text="""so we're keeping all of the Elisp, and we're just taking that""" start="00:10:24.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""C layer and replacing it with Rust. And so when you call a""" start="00:10:27.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""built-in function, it's calling into a Rust function""" start="00:10:30.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""instead of a C function under the hood. So all the Elisp stays""" start="00:10:33.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""Elisp, but the C becomes Rust.""" start="00:10:40.080" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Clarifying rewriting Elisp in Rust""" start="00:10:42.680" video="qanda-rust" id="subtitle"]]</div>[[!template text="""So looking at the IRC chat, it feels to me like maybe there's a""" start="00:10:42.680" video="qanda-rust" id="subtitle"]]
+[[!template text="""little bit of confusion around what do we mean when we say""" start="00:10:54.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""rewriting Elisp in Rust, right? I think there are some""" start="00:10:59.160" video="qanda-rust" id="subtitle"]]
+[[!template text="""people that are like, A, we're reinventing ELISP, and""" start="00:11:04.840" video="qanda-rust" id="subtitle"]]
+[[!template text="""there's other people that are like, no, we're trying to be""" start="00:11:07.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""byte-for-byte compatible with Rust.""" start="00:11:09.680" video="qanda-rust" id="subtitle"]]
+[[!template text="""So some people are questioning your no answer on that.""" start="00:11:12.880" video="qanda-rust" id="subtitle"]]
+[[!template text="""Aren't you really, maybe, is what I'm reading in there.""" start="00:11:17.501" video="qanda-rust" id="subtitle"]]
+[[!template text="""Do you want to respond to that?""" start="00:11:20.001" video="qanda-rust" id="subtitle"]]
+[[!template text="""Yeah, I'm trying to think about how I can make this""" start="00:11:21.770" video="qanda-rust" id="subtitle"]]
+[[!template text="""clearer. So the Elisp stays Elisp. We're not changing the""" start="00:11:26.120" video="qanda-rust" id="subtitle"]]
+[[!template text="""Elisp at all, or at least very minimally. We want to be able to""" start="00:11:29.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""take, like I said, bug compatible. So whatever works inside""" start="00:11:33.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""existing Emacs, you can take all the Lisp and you can run it in""" start="00:11:36.520" video="qanda-rust" id="subtitle"]]
+[[!template text="""Rune and it works the same. So the Elisp stays the same. It's""" start="00:11:40.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""just the under the hood core that is getting replaced. And""" start="00:11:43.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""this in turn adds some new features such as""" start="00:11:47.120" video="qanda-rust" id="subtitle"]]
+[[!template text="""multi-threading. So it's not exactly compatible, but""" start="00:11:49.200" video="qanda-rust" id="subtitle"]]
+[[!template text="""you should be able to use your existing code and the Elisp will""" start="00:11:52.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""stay Elisp. So the idea is that anything that I've written as""" start="00:11:55.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""an Emacs user, my config, my custom packages, whatever it""" start="00:12:00.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""may be, that's all going to be valid code. If you take, you""" start="00:12:04.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""know, the Elisp implementation as being the C code""" start="00:12:09.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""and the parts of Elisp written in Elisp""" start="00:12:13.164" video="qanda-rust" id="subtitle"]]
+[[!template text="""that represent opportunity space""" start="00:12:15.746" video="qanda-rust" id="subtitle"]]
+[[!template text="""thinking about Rust as an implementation language...""" start="00:12:18.449" video="qanda-rust" id="subtitle"]]
+[[!template text="""Okay fine. You know, you can make a semantic argument, okay""" start="00:12:20.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""we're re-implementing, we're creating""" start="00:12:24.480" video="qanda-rust" id="subtitle"]]
+[[!template text="""an alternate implementation of Elisp""" start="00:12:25.996" video="qanda-rust" id="subtitle"]]
+[[!template text="""but what Elisp is isn't the problem""" start="00:12:29.019" video="qanda-rust" id="subtitle"]]
+[[!template text="""space here. That's a fixed, a given, if you will.""" start="00:12:31.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""Is that all right?""" start="00:12:35.040" video="qanda-rust" id="subtitle"]]
+[[!template text="""That's a good way of saying it. Okay. Yeah, what you""" start="00:12:36.066" video="qanda-rust" id="subtitle"]]
+[[!template text="""said makes sense. I was kind of responding to some comments,""" start="00:12:39.200" video="qanda-rust" id="subtitle"]]
+[[!template text="""like I'm not sure it connected for everybody. Makes a lot of""" start="00:12:42.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""sense. Yeah, I wasn't sure how much I needed to expand on that""" start="00:12:44.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""and explain that, but I appreciate you jumping in.""" start="00:12:47.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""Um, okay. So if I were just going to, but...""" start="00:12:51.120" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Will your Rust implementation also be able to run Emacs bytecode? Or are you implementing it at the Lisp level?""" start="00:12:57.908" video="qanda-rust" id="subtitle"]]</div>[[!template text="""Will your Rust implementation also be able to run Emacs bytecode or the""" start="00:12:57.908" video="qanda-rust" id="subtitle"]]
+[[!template text="""implemented at the Lisp level? So I already have a bytecode""" start="00:13:02.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""interpreter inside there that runs the existing Elisp""" start="00:13:04.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""bytecode. And so that was one of the first things I did was""" start="00:13:06.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""bootstrap the interpreter and then bootstrap the bytecode""" start="00:13:09.520" video="qanda-rust" id="subtitle"]]
+[[!template text="""engine. And so we compile, we use the... because the bytecode""" start="00:13:11.680" video="qanda-rust" id="subtitle"]]
+[[!template text="""compiler is written in Emacs Lisp. So you bootstrap that""" start="00:13:15.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""and it gives you the Emacs bytecode. I have a bytecode""" start="00:13:19.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""engine that runs the bytecode. So that's already done. And""" start="00:13:22.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""you can potentially, on top of that, do something like the""" start="00:13:26.040" video="qanda-rust" id="subtitle"]]
+[[!template text="""data compilation or a JIT. But we have both an""" start="00:13:28.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""interpreter and a bytecode compiler.""" start="00:13:32.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""And I'll just break in one more time to say with about five""" start="00:13:47.020" video="qanda-rust" id="subtitle"]]
+[[!template text="""minutes left in our live time with this Q&A session, which""" start="00:13:50.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""we're happy to keep going as long as there are questions.""" start="00:13:56.320" video="qanda-rust" id="subtitle"]]
+[[!template text="""Coming up in five minutes, we'll have a talk on color on the""" start="00:13:58.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""gen track. And then right here, we'll have the p-search""" start="00:14:03.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""talk.""" start="00:14:09.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:14:09.960" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is it possible to bootstrap with just the bytecode interpreter?""" start="00:14:20.100" video="qanda-rust" id="subtitle"]]</div>[[!template text="""Is it possible to bootstrap with just the bytecode""" start="00:14:20.100" video="qanda-rust" id="subtitle"]]
+[[!template text="""interpreter? So I'll have to put in a link to one of my blog""" start="00:14:22.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""posts. So that was my original idea was to say, I don't want to""" start="00:14:25.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""have an interpreter, a bytecode interpreter and a native""" start="00:14:28.520" video="qanda-rust" id="subtitle"]]
+[[!template text="""compiler. I want to just have just one.""" start="00:14:31.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""So I'm only going to have the bytecode.""" start="00:14:33.181" video="qanda-rust" id="subtitle"]]
+[[!template text="""And so that's what I did initially.""" start="00:14:36.742" video="qanda-rust" id="subtitle"]]
+[[!template text="""The problem with that is, is that a bunch of the early bootstrap""" start="00:14:37.709" video="qanda-rust" id="subtitle"]]
+[[!template text="""Emacs code is written with the assumption""" start="00:14:42.080" video="qanda-rust" id="subtitle"]]
+[[!template text="""that it's going to be interpreted.""" start="00:14:45.118" video="qanda-rust" id="subtitle"]]
+[[!template text="""This is especially true with macros,""" start="00:14:47.279" video="qanda-rust" id="subtitle"]]
+[[!template text="""where you'll have a function defined,""" start="00:14:49.020" video="qanda-rust" id="subtitle"]]
+[[!template text="""you'll evaluate part of the function.""" start="00:14:50.822" video="qanda-rust" id="subtitle"]]
+[[!template text="""The other half of the function has macros in it""" start="00:14:52.643" video="qanda-rust" id="subtitle"]]
+[[!template text="""that are not defined yet, but it doesn't matter because they""" start="00:14:55.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""don't get used. But with the bytecode interpreter, it""" start="00:14:59.720" video="qanda-rust" id="subtitle"]]
+[[!template text="""expands all macros when it gets the function definition.""" start="00:15:02.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""And so those weren't macros when the function was expanded,""" start="00:15:04.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""and therefore they got instantiated as functions, but""" start="00:15:08.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""they're not functions, they're macros. And so I initially""" start="00:15:12.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""spent a bunch of time trying to work around this, trying to""" start="00:15:15.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""move code around, work stuff around, refactor the code to""" start="00:15:19.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""try and get it to work with only bytecode interpreter. And""" start="00:15:21.600" video="qanda-rust" id="subtitle"]]
+[[!template text="""eventually I just gave up. I said, you know what, I'm just""" start="00:15:24.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""going to write an actual interpreter to handle this because""" start="00:15:27.040" video="qanda-rust" id="subtitle"]]
+[[!template text="""trying to handle all these lazy macros is too much work. And""" start="00:15:30.040" video="qanda-rust" id="subtitle"]]
+[[!template text="""everything in the bootstrap is built with the assumption""" start="00:15:33.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""that you have lazy macro expansion.""" start="00:15:35.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""I'm guessing the Emacs bytecode interpreter isn't""" start="00:15:37.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""complete.""" start="00:15:45.160" video="qanda-rust" id="subtitle"]]
+[[!template text="""So it's mostly complete. There's a handful of opcodes that""" start="00:15:45.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""aren't implemented that are pretty easy to add that I""" start="00:15:52.280" video="qanda-rust" id="subtitle"]]
+[[!template text="""haven't run into. And there's some of them that are""" start="00:15:55.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""deprecated that aren't implemented, but it's essentially""" start="00:15:57.880" video="qanda-rust" id="subtitle"]]
+[[!template text="""complete.""" start="00:16:00.120" video="qanda-rust" id="subtitle"]]
+[[!template text="""We also provide a bytecode JIT compilation via libgcc the""" start="00:16:00.480" video="qanda-rust" id="subtitle"]]
+[[!template text="""way Emacs currently does it. Eventually I would like to...""" start="00:16:12.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""I'm more inclined to have a proper runtime JIT than an""" start="00:16:17.345" video="qanda-rust" id="subtitle"]]
+[[!template text="""ahead-of-time compiler like libgcc, like the current""" start="00:16:22.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""Emacs native compilation, because it allows you to take""" start="00:16:27.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""type information and actually apply that to the code, which""" start="00:16:29.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""can let you do more aggressive optimizations to it.""" start="00:16:34.560" video="qanda-rust" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What would it take to bootstrap Guile in Rune?""" start="00:17:03.960" video="qanda-rust" id="subtitle"]]</div>[[!template text="""He said, we may either get a new Emacs with an ancient C core""" start="00:17:03.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""with a modern Lisp, or an Emacs with modern core, but stuck""" start="00:17:06.320" video="qanda-rust" id="subtitle"]]
+[[!template text="""with ancient Elisp. So there was another project I was""" start="00:17:09.040" video="qanda-rust" id="subtitle"]]
+[[!template text="""talking to, one of the Guile implementations, about how we""" start="00:17:11.880" video="qanda-rust" id="subtitle"]]
+[[!template text="""could potentially, he was like, what would it take to""" start="00:17:16.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""bootstrap Guile in Rune, where you have both, you could have""" start="00:17:19.120" video="qanda-rust" id="subtitle"]]
+[[!template text="""Elisp and Guile running inside this project. And so we've""" start="00:17:24.480" video="qanda-rust" id="subtitle"]]
+[[!template text="""started that discussion, which I think would be, which""" start="00:17:27.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""would be interesting. But it's tricky too, because""" start="00:17:29.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""fundamentally Elisp and Guile are two different""" start="00:17:34.000" video="qanda-rust" id="subtitle"]]
+[[!template text="""languages. They have different semantics. They have""" start="00:17:36.200" video="qanda-rust" id="subtitle"]]
+[[!template text="""different ways of handling things. You've really got to""" start="00:17:38.120" video="qanda-rust" id="subtitle"]]
+[[!template text="""consider both of those when you're trying to make them work""" start="00:17:39.880" video="qanda-rust" id="subtitle"]]
+[[!template text="""together.""" start="00:17:42.480" video="qanda-rust" id="subtitle"]]
+[[!template text="""How would you do the native module system? What would be""" start="00:17:42.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""different? We can do the same thing. We have an FFI. So I""" start="00:17:57.320" video="qanda-rust" id="subtitle"]]
+[[!template text="""haven't looked into it a ton, but I feel like it could be""" start="00:17:59.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""similar. And I'm actually interested, there's a couple""" start="00:18:03.840" video="qanda-rust" id="subtitle"]]
+[[!template text="""projects on GitHub right now to have an FFI written in Elisp.""" start="00:18:06.360" video="qanda-rust" id="subtitle"]]
+[[!template text="""So you don't even need to create a separate C or Rust module,""" start="00:18:12.760" video="qanda-rust" id="subtitle"]]
+[[!template text="""because you can actually write native modules in Rust or C.""" start="00:18:17.240" video="qanda-rust" id="subtitle"]]
+[[!template text="""And so you can just have direct bindings to a C FFI written in""" start="00:18:21.680" video="qanda-rust" id="subtitle"]]
+[[!template text="""Elisp. You don't need any C code inside there. And I think""" start="00:18:25.560" video="qanda-rust" id="subtitle"]]
+[[!template text="""that would be an interesting approach to look at as well.""" start="00:18:27.800" video="qanda-rust" id="subtitle"]]
+[[!template text="""Oh, Ramin. Yeah, that's right. We were talking about that,""" start="00:18:33.700" video="qanda-rust" id="subtitle"]]
+[[!template text="""about bootstrapping Scheme.""" start="00:18:35.840" video="qanda-rust" id="subtitle"]]
+[[!template text="""And at this point, we have broken away from, uh, from this""" start="00:18:41.540" video="qanda-rust" id="subtitle"]]
+[[!template text="""talk, but we're continuing to record and this will all be""" start="00:18:45.520" video="qanda-rust" id="subtitle"]]
+[[!template text="""published. I'd say, go ahead and keep going as long as you'd""" start="00:18:47.400" video="qanda-rust" id="subtitle"]]
+[[!template text="""like in here. And, um, thanks once again for the awesome""" start="00:18:50.440" video="qanda-rust" id="subtitle"]]
+[[!template text="""discussion. Thank you so much. So I'll just pay attention to""" start="00:18:54.960" video="qanda-rust" id="subtitle"]]
+[[!template text="""the ether pad and the chat and see.""" start="00:18:58.640" video="qanda-rust" id="subtitle"]]
+[[!template text="""That sounds good. I'll keep an eye on IRC. And if there are""" start="00:19:02.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""more questions here, I'll bounce people toward the ether""" start="00:19:05.920" video="qanda-rust" id="subtitle"]]
+[[!template text="""pad or this, uh, chat room. All right, thank you.""" start="00:19:08.560" video="qanda-rust" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [troy@troyhinckley.com](mailto:troy@troyhinckley.com?subject=Comment%20for%20EmacsConf%202023%20rust%3A%20An%20experimental%20Emacs%20core%20in%20Rust)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/rust-before.md b/2024/info/rust-before.md
index 3e4b4505..fcd31ab7 100644
--- a/2024/info/rust-before.md
+++ b/2024/info/rust-before.md
@@ -1,18 +1,66 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 21-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="rust">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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 stroke-width="3" x="137" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 20-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-rust.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="2024-12-07T15:40:00Z" end="2024-12-07T16:00:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~10:40 AM - 11:00 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~9:40 AM - 10:00 AM CST (US/Central)<br />Saturday, Dec 7 2024, ~8:40 AM - 9:00 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~7:40 AM - 8:00 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~3:40 PM - 4:00 PM UTC <br />Saturday, Dec 7 2024, ~4:40 PM - 5:00 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~5:40 PM - 6:00 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~9:10 PM - 9:30 PM IST (Asia/Kolkata)<br />Saturday, Dec 7 2024, ~11:40 PM - 12:00 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~12:40 AM - 1:00 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/dev/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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?
+01:55.865 How does this compare to other projects?
+03:01.315 Multi-threading
+03:32.441 Multi-threading elisp
+03:47.648 No-GIL method
+04:32.638 Actors
+04:51.252 Multi-threading elisp (functions)
+05:34.680 Caveats
+05:57.090 Multi-threading elisp (data)
+06:38.249 Copy values to other threads on demands
+06:57.884 Multi-threading elisp (buffers)
+08:11.903 Would this actually be useful?
+08:46.919 Precise garbage collection
+09:16.537 How Emacs used to deal with roots
+10:38.713 Conservative stack scanning
+11:00.157 Movable objects
+12:38.829 How Rust makes precise GC easy
+14:13.227 Other Rust niceties: proc macro
+15:14.560 sum types
+16:01.041 Regex
+16:16.052 Parsers
+16:27.210 Other changes: GUI first, terminal second
+16:58.919 Off-screen cursor
+17:16.305 Image flow
+17:24.440 Testing
+18:36.345 Status
+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://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 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?
+02:11.913 Q: so you're re-implementing elisp in rust? have you considered using a more modern lisp, such as scheme? [11:03]
+04:01.400 Q: Do you have specific features from the Rust compiler that are missing (or are nightly-only) that you would take advantage of?
+05:26.880 Q: Can remacs be reused?
+07:23.600 Q: What are you thoughts on the GUI layer. Any plans on how to reimplement it?
+08:21.240 Q: If money could fix the problem, how much would it cost to ship this with feature parity before 2026?
+09:28.350 GObject implementation
+09:56.600 Q: elisp is implemented in c, so if you're not implementing elisp in rust, are you using/keeping the c implementation of elisp?
+10:42.680 Clarifying rewriting Elisp in Rust
+12:57.908 Q: Will your Rust implementation also be able to run Emacs bytecode? Or are you implementing it at the Lisp level?
+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="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/rust-nav.md b/2024/info/rust-nav.md
index e431ddea..2c50d60c 100644
--- a/2024/info/rust-nav.md
+++ b/2024/info/rust-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/org-update">The Future of Org</a>
-Next by time: <a href="/2024/talks/flp">The Free Life Planner: Empowering lives with Emacs-based AI</a>
-Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2024/watch/dev">Watch</a></strong>
+Previous by track: <a href="/2024/talks/gypsum">Gypsum: my clone of Emacs and ELisp written in Scheme</a>
+Next by track: <a href="/2024/talks/p-search">p-search: a local search engine in Emacs</a>
+Track: <span class="sched-track Development">Development</span>
</div>
diff --git a/2024/info/sat-close-before.md b/2024/info/sat-close-before.md
index ae628d14..0f5a770f 100644
--- a/2024/info/sat-close-before.md
+++ b/2024/info/sat-close-before.md
@@ -1,18 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sat 2024-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="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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect stroke-width="3" x="658" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 10-min talk; Q&A: Etherpad <https://pad.emacsconf.org/2024-sat-close>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Format: 6-min talk ; Q&A: Etherpad
Status: Ready to stream
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T22:00:00Z" end="2024-12-07T22:10:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~5:00 PM - 5:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~4:00 PM - 4:10 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~3:00 PM - 3:10 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~2:00 PM - 2:10 PM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~10:00 PM - 10:10 PM UTC <br />Saturday, Dec 7 2024, ~11:00 PM - 11:10 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~12:00 AM - 12:10 AM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~3:30 AM - 3:40 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~6:00 AM - 6:10 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~7:00 AM - 7:10 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></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-close-nav.md b/2024/info/sat-close-nav.md
index 610d0590..15dd6cd2 100644
--- a/2024/info/sat-close-nav.md
+++ b/2024/info/sat-close-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/emacs30">Emacs 30 Highlights</a>
-Next by time: <a href="/2024/talks/sun-open">Sunday opening remarks</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/sat-open">Saturday opening remarks</a>
+Next by track: <a href="/2024/talks/sun-open">Sunday opening remarks</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/sat-open-after.md b/2024/info/sat-open-after.md
index ab84db89..0144c8a0 100644
--- a/2024/info/sat-open-after.md
+++ b/2024/info/sat-open-after.md
@@ -1,7 +1,132 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sat-open%3A%20Saturday%20opening%20remarks)
+<div class="transcript transcript-mainVideo"><a name="sat-open-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+[[!template text="""Welcome to EmacsConf 2024, where we have fun""" start="00:00:00.007" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""exploring how much we can do with a text editor.""" start="00:00:03.485" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""It's hard to give a general overview""" start="00:00:06.126" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""of all the cool talks today and tomorrow,""" start="00:00:08.162" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can flip through the talks""" start="00:00:10.040" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and see what sparks your interests.""" start="00:00:11.238" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Don't feel limited to one track or another.""" start="00:00:12.903" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:15.335" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:18.493" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and I'll give you a quick overview as well.""" start="00:00:21.291" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:23.689" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""using free and open source software.""" start="00:00:26.887" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Using a streaming media player like mpv""" start="00:00:29.365" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:31.443" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""but there are also web-based players""" start="00:00:34.641" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""just in case that's all you've got.""" start="00:00:36.360" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The schedule shows the General track on top""" start="00:00:37.918" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and the Development track on the bottom,""" start="00:00:39.916" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can see what else is going on.""" start="00:00:41.534" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""As you're watching the talks,""" start="00:00:43.632" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""you can refer to the schedule in another window.""" start="00:00:45.169" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Hover over the boxes to see the times and titles,""" start="00:00:47.489" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and click on the boxes in the schedule""" start="00:00:50.407" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""to jump to the talk's page for more details.""" start="00:00:52.045" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can also get the schedule as an iCalendar file""" start="00:00:54.644" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or as an Org file in different time zones.""" start="00:00:57.822" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Many talks will be followed by""" start="00:00:59.966" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""live Q&A web conferences with the speaker,""" start="00:01:01.439" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:01:04.077" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""These are indicated with a solid border on the schedule""" start="00:01:06.584" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:01:09.334" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can join the web conference room""" start="00:01:12.483" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""by clicking on the BBB link""" start="00:01:14.411" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on the schedule page or the talk's webpage.""" start="00:01:15.990" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:18.748" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""To improve performance, please keep your webcam off""" start="00:01:21.847" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:24.825" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you don't like Javascript,""" start="00:01:27.044" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""you can still ask questions via IRC""" start="00:01:28.262" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and the hosts can read them out for you.""" start="00:01:30.260" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We're probably going to automatically switch""" start="00:01:32.435" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""between talks and Q&A sessions,""" start="00:01:34.193" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so the transitions on the stream might be a little sudden.""" start="00:01:36.191" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""People in the BigBlueButton room""" start="00:01:38.869" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""can continue the conversation""" start="00:01:40.388" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""even after the talk moves off-stream.""" start="00:01:42.026" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and you can also reach out to the speakers""" start="00:01:44.464" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""using the contact information on the talk page.""" start="00:01:46.182" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:01:48.725" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""depending on what the speakers prefer.""" start="00:01:52.223" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""This is indicated in the schedule with a dashed border""" start="00:01:54.181" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and on the schedule page as well.""" start="00:01:56.739" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""As an experiment,""" start="00:01:58.265" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the Q&A for the mcclim talk this afternoon""" start="00:01:59.604" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""will also be in LambdaMOO.""" start="00:02:02.003" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you'd like to try it out,""" start="00:02:03.882" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""see the mcclim talk page for instructions""" start="00:02:05.041" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can join the discussion there.""" start="00:02:07.040" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The schedule pages and track pages have quick shortcuts""" start="00:02:08.760" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so that you can find out more about talks, open the Etherpads,""" start="00:02:11.558" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and join the Q&A sessions.""" start="00:02:14.676" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The watch page has more tips""" start="00:02:16.403" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on how to make the most of Q&A.""" start="00:02:18.193" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you can, please add notes and ask questions""" start="00:02:19.732" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""in the Etherpad for the talk. That makes it easier""" start="00:02:22.610" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for everyone to share their notes,""" start="00:02:25.088" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:26.726" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:29.604" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We have one pad for each talk,""" start="00:02:31.842" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can follow the links to get to the next one""" start="00:02:33.720" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or go back to the schedule and get the link from there.""" start="00:02:36.198" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you have general feedback about""" start="00:02:39.116" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the conference itself, please put it in""" start="00:02:40.634" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""pad.emacsconf.org/2024 , which is linked on each pad.""" start="00:02:42.792" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can also use this as a general community message board""" start="00:02:47.390" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for things like Help Wanted.""" start="00:02:49.548" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:02:51.787" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""to be part of lots of conversations.""" start="00:02:54.865" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:02:56.983" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""through your web browser.""" start="00:03:01.181" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The tabs on the left can help you""" start="00:03:02.713" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""switch between the different channels.""" start="00:03:04.658" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There's #emacsconf-gen for the General track""" start="00:03:06.776" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and #emacsconf-dev for the Development track.""" start="00:03:09.454" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:03:12.172" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:16.090" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:21.249" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Of course, you can join any of these channels""" start="00:03:25.206" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""with your favourite IRC client""" start="00:03:27.284" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""by connecting to irc.libera.chat""" start="00:03:29.183" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""port 6697 using TLS.""" start="00:03:32.081" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Once again, we're going to be streaming with open captions""" start="00:03:35.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:03:38.598" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""captioning volunteers. The captioned talks are indicated""" start="00:03:41.356" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on the schedule, and with any luck, we'll be posting""" start="00:03:44.794" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""transcripts on talk pages shortly after the talks start.""" start="00:03:47.232" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need additional accommodations,""" start="00:03:50.710" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""please let us know in #emacsconf-org""" start="00:03:52.308" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and we'll see if we can make things happen.""" start="00:03:54.567" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:03:57.065" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If it doesn't look like we've noticed yet,""" start="00:04:00.943" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:04:02.701" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""where we will be quietly panicking.""" start="00:04:06.100" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""In all of these conversations, please keep in mind""" start="00:04:08.659" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""our guidelines for conduct. You can find them on the wiki.""" start="00:04:11.217" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""They basically boil down to: please be nice.""" start="00:04:13.535" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:04:16.154" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""should be available from the talk pages""" start="00:04:18.431" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""shortly after they start playing,""" start="00:04:20.349" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and we'll post the recordings of live talks""" start="00:04:21.907" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and Q&A sessions within the next month or so.""" start="00:04:24.305" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you'd like to get an update, you can subscribe to""" start="00:04:27.063" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the emacsconf-discuss mailing list.""" start="00:04:29.301" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""All right, let's get going.""" start="00:04:31.979" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Leo is hosting the general track,""" start="00:04:33.057" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and Corwin is hosting the development track.""" start="00:04:34.975" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The other volunteers and I will run around mostly backstage,""" start="00:04:36.773" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:04:39.851" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""That's also where we get to thank""" start="00:04:41.889" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""all the people and organizations""" start="00:04:43.327" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""who make EmacsConf possible.""" start="00:04:45.125" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Thanks for coming to EmacsConf 2024.""" start="00:04:46.323" video="mainVideo-sat-open" 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%20sat-open%3A%20Saturday%20opening%20remarks)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/sat-open-before.md b/2024/info/sat-open-before.md
index 39f924ed..e0edf012 100644
--- a/2024/info/sat-open-before.md
+++ b/2024/info/sat-open-before.md
@@ -1,18 +1,25 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sat 2024-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="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="/2024/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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 10-min talk; Q&A: Etherpad <https://pad.emacsconf.org/2024-sat-open>
-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="2024-12-07T14:00:00Z" end="2024-12-07T14:10:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~9:00 AM - 9:10 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~8:00 AM - 8:10 AM CST (US/Central)<br />Saturday, Dec 7 2024, ~7:00 AM - 7:10 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~6:00 AM - 6:10 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~2:00 PM - 2:10 PM UTC <br />Saturday, Dec 7 2024, ~3:00 PM - 3:10 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~4:00 PM - 4:10 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~7:30 PM - 7:40 PM IST (Asia/Kolkata)<br />Saturday, Dec 7 2024, ~10:00 PM - 10:10 PM +08 (Asia/Singapore)<br />Saturday, Dec 7 2024, ~11:00 PM - 11:10 PM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Format: 5-min talk ; Q&A: Etherpad
+Status: TO_FOLLOW_UP
+
+<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
+02:30.002 Etherpad
+03:02.057 Internet Relay Chat
+03:46.230 Open captions
+04:07.335 Status
+04:18.929 Conduct
+04:26.424 Recordings
+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://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/sat-open-nav.md b/2024/info/sat-open-nav.md
index c81b6b80..5dfd57ad 100644
--- a/2024/info/sat-open-nav.md
+++ b/2024/info/sat-open-nav.md
@@ -1,6 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Next by time: <a href="/2024/talks/papers">Writing academic papers in Org-Roam</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/maxima">Emacs, eev, and Maxima - now!</a>
+Next by track: <a href="/2024/talks/sat-close">Saturday closing remarks</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/secrets-after.md b/2024/info/secrets-after.md
index bc6f7668..6f9dda89 100644
--- a/2024/info/secrets-after.md
+++ b/2024/info/secrets-after.md
@@ -1,7 +1,254 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [pitas.axioms0c@icloud.com](mailto:pitas.axioms0c@icloud.com?subject=Comment%20for%20EmacsConf%202023%20secrets%3A%20Committing%20secrets%20with%20git%20using%20sops-mode)
+<div class="transcript transcript-mainVideo"><a name="secrets-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-secrets" id="subtitle"]]</div>[[!template text="""Yeah, my talk is committing""" start="00:00:00.000" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""secrets with Git via SOPS mode. So what is SOPS? SOPS""" start="00:00:01.350" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""came originally from Mozilla, and their acronym was Secret""" start="00:00:10.190" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Operations, so S-O-P-S. It's a utility that allows you to""" start="00:00:15.070" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""encrypt pretty much any file you want and then have the""" start="00:00:19.670" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""ability to commit it or just share it with somebody that has""" start="00:00:24.270" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""the ability to decrypt it. I've mostly used it with AWS KMS,""" start="00:00:27.870" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""but there's a number of encryptions, ways you can encrypt""" start="00:00:32.710" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""it. Um, so yeah, that's what SOPS mode is. Most of the""" start="00:00:36.830" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""time I've used it is with application or deployment""" start="00:00:41.910" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""secrets--decrypt them on the fly during a""" start="00:00:45.710" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""pipeline run and then use them. We've also""" start="00:00:48.270" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""been using it for kind of a self-service for engineers""" start="00:00:52.110" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""to be able to say, if there's an API token that they""" start="00:00:56.550" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""need either in the container or that gets put""" start="00:00:59.630" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""somewhere else, that's another way to use SOPS.""" start="00:01:03.430" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Just sharing secrets. The tooling, there's""" start="00:01:09.110" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""quite a bit of tooling for Terraform.""" start="00:01:13.950" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""You can just decrypt it and then use it""" start="00:01:16.815" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""however you want. Ansible, it's another""" start="00:01:19.091" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""place, and then Kubernetes...""" start="00:01:21.310" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""There'll be links at the very end.""" start="00:01:23.649" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""There's actually a Nix SOPS too.""" start="00:01:26.125" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I think there's a link in the end.""" start="00:01:28.983" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""So yeah, I'll just show a quick demo.""" start="00:01:30.238" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I'll actually show it in Emacs too,""" start="00:01:32.831" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""but this is the idea.""" start="00:01:35.287" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I'm just going to create a file""" start="00:01:36.984" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""and then I'm going to encrypt it with age.""" start="00:01:39.451" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Then we should see the encrypted file""" start="00:01:42.052" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""be output here. The idea is you can decrypt it""" start="00:01:46.875" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""there. So my talk was... the reason how my""" start="00:01:53.190" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""talk came about was there was no mode like this yet.""" start="00:01:59.350" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""So I didn't want to have to...""" start="00:02:04.430" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""What you can do is you can pass""" start="00:02:08.830" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""in the editor variable, set your Emacs,""" start="00:02:10.270" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""then call the command, but that opens""" start="00:02:13.030" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""a whole new window. I wanted to live in my""" start="00:02:16.442" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""current Emacs. So this is that""" start="00:02:20.590" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""same encrypted file that we just created.""" start="00:02:22.995" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I'm going to quickly do C-c C-d.""" start="00:02:25.556" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""So now we're in the SOPS decrypted mode of the""" start="00:02:28.567" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""file. I can save this, or make changes and save it.""" start="00:02:32.310" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""And then it resaves it.""" start="00:02:38.058" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I'll just show you that decrypting it""" start="00:02:39.964" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""shows what we changed.""" start="00:02:42.919" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I think that's most of my talk.""" start="00:02:44.630" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""There's future stuff that I would like to do""" start="00:02:52.832" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""with this. There's no way to create SOPS files""" start="00:02:55.883" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""from scratch. And then just putting more""" start="00:03:00.448" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""documentation around the other ways you can""" start="00:03:03.192" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""set up your editor to decrypt. But yeah,""" start="00:03:06.070" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""here's all the links. I haven't uploaded""" start="00:03:14.030" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""this yet, but yeah, that is my talk.""" start="00:03:19.110" video="mainVideo-secrets" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q&A technical issues""" start="00:03:23.310" video="mainVideo-secrets" id="subtitle"]]</div>[[!template text="""[Leo] Okay. Thank you, Jonathan.""" start="00:03:23.310" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Let me just make sure. So everything you've mentioned""" start="00:03:27.771" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""about putting stuff available to everyone,""" start="00:03:32.693" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""we'll make sure that everything""" start="00:03:34.888" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""ends up on the pad and on the website,""" start="00:03:36.470" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""so don't worry. Let me see if we can get up""" start="00:03:38.514" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""the pad for you.""" start="00:03:40.851" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Do you have any preference with regards""" start="00:03:41.754" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""to the questions? Do you want to read them yourself""" start="00:03:43.285" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""or do you want one of us to read them for you?""" start="00:03:45.468" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""[Jonathan]: I'm okay with talking first,""" start="00:03:50.122" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""saying it out loud if there are some.""" start="00:03:53.390" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""[Leo]: Sure. Let me just find you the pads.""" start="00:03:57.462" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Where is it? There you go.""" start="00:04:00.750" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Do you have access to the pad on your end?""" start="00:04:02.758" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Yep.""" start="00:04:05.410" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Okay. Well, if you, since you're already showing""" start="00:04:06.154" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""your screen, if you can maybe switch the window to the one""" start="00:04:09.550" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""that is hosting the pad""" start="00:04:12.390" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""and feel free to start answering questions.""" start="00:04:13.436" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Yep.""" start="00:04:15.815" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""It didn't look like we have any yet, but...""" start="00:04:16.263" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Well, there's still coming, don't worry.""" start="00:04:20.110" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""We're just waiting for people to catch up.""" start="00:04:21.943" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I probably need to make it bigger.""" start="00:04:29.150" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Is it big enough or do I need to make it bigger?""" start="00:04:31.534" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Right now, it's just a black screen on my end, so...""" start="00:04:34.461" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Oh, wow. Weird. I can see it on mine, weirdly.""" start="00:04:40.248" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Maybe it's just me. Let me check here.""" start="00:04:45.270" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""No, it seems to be just a""" start="00:04:47.537" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""black square, even on the stream.""" start="00:04:48.990" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Try it again. That change at all? No, it's still black.""" start="00:04:50.070" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Can you maybe start switching window""" start="00:05:00.928" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""and coming back to the one?""" start="00:05:02.744" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Otherwise, I'll just stream it on my end.""" start="00:05:04.070" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Yeah. All right, I'll do it. I'll take presenter in just a""" start="00:05:08.870" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""second. Yeah, sorry about that. Thank you.""" start="00:05:13.630" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""If I can take presenter, and I will share the screen.""" start="00:05:22.230" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Sorry, I'm just trying to find a chat. There we go.""" start="00:05:27.070" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Normally, I'm not supposed to be on the dev track, which is""" start="00:05:36.750" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""why I'm confusing all my windows. Give me just a second.""" start="00:05:39.510" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Shell, casual. So we are on the dev track, and it is this""" start="00:05:42.310" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""one.""" start="00:05:53.710" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""There we go. No, that's not a guide, damn it. Secrets.""" start="00:05:54.190" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""And...""" start="00:06:08.230" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""There we go, finally.""" start="00:06:10.110" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Ah. Probably just for the delay, do some jazz hands in the""" start="00:06:15.510" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""background as we did in the start.""" start="00:06:19.110" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""It feels like Yordle[??] Castle this year,""" start="00:06:20.890" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""where nothing works properly.""" start="00:06:23.601" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""That's right.""" start="00:06:25.463" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""All right. There we go. It's loading up. Obviously.""" start="00:06:26.270" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""There we go.""" start="00:06:39.150" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""All right. You should be able to see my screen now. Yep. All""" start="00:06:44.190" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""right. So, well, we've gone so far. Oh, it did stop. Damn it.""" start="00:06:49.190" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Sorry, now it's BBB not behaving properly. That's right.""" start="00:06:53.790" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Okay, let me just join, leave and join again. Okay. I just did""" start="00:07:02.990" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""exactly that for what it's worth.""" start="00:07:10.310" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Nothing. All right.""" start="00:07:11.910" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""All right, I seem to be back. Let me show. And there we go.""" start="00:07:26.190" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""All right, everything is working. I'm not touching""" start="00:07:29.030" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""anything. So. Cool.""" start="00:07:36.910" video="mainVideo-secrets" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Can you describe some potential interactive uses for this within Emacs?""" start="00:07:39.188" video="mainVideo-secrets" id="subtitle"]]</div>[[!template text="""Yeah, I'll just start with the top. Can""" start="00:07:39.188" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""you describe some potential interactive uses for this with""" start="00:07:43.630" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""an Emacs? Um, I'm, I'm not actually sure what this means.""" start="00:07:47.350" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Could we, could you add some more context maybe? Or, um,""" start="00:07:52.790" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I think we'll maybe come back to that one. I'm not sure what,""" start="00:08:01.030" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""uh, potential interactive uses mean, but.""" start="00:08:03.550" video="mainVideo-secrets" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is this saved in the repo or file as \"run sops here\" or is the encrypted blob in the git repo?""" start="00:08:08.532" video="mainVideo-secrets" id="subtitle"]]</div>[[!template text="""Yep. Uh, is this""" start="00:08:08.532" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""saved in the repo or file as run SOPs here? Oh, encrypted.""" start="00:08:10.430" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""They're saved as just text files so that you can do""" start="00:08:18.750" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""SOPs and encrypt like a binary. I think in the end,""" start="00:08:24.830" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""no matter what, they become just a text file,""" start="00:08:28.104" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""and then it does the encoding and decoding on the fly""" start="00:08:30.820" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""when you encrypt or decrypt. So no matter""" start="00:08:34.521" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""what it's going to be, I think it might just be""" start="00:08:36.754" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""a JSON in the end. Uh, so yeah.""" start="00:08:41.985" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I'll try to, well, I can type out that answer, but all""" start="00:08:44.990" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""right.""" start="00:08:56.310" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Don't worry about typing it out.""" start="00:08:56.856" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""We are gathering the""" start="00:08:59.430" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""recordings at the end, you know, even answers that are not""" start="00:09:00.990" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""provided, we'll type them out eventually.""" start="00:09:04.070" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""So don't stress too much about the actual answers being written.""" start="00:09:05.783" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Okay. All right. So I'll go to the third one.""" start="00:09:09.030" video="mainVideo-secrets" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How do you decide whether to use SOPS or other solutions such as pass-cli?""" start="00:09:12.067" video="mainVideo-secrets" id="subtitle"]]</div>[[!template text="""How do you decide""" start="00:09:12.067" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""whether to use SOPS or other solutions such as pass-cli?""" start="00:09:13.190" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""The biggest use case that I've been using it recently is,""" start="00:09:18.950" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Bitbucket has a way to... In a repository,""" start="00:09:24.470" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""you can store non-secrets and secrets. So""" start="00:09:29.110" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""we're trying to move the secrets into the repository""" start="00:09:35.830" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""and then allow the engineers to have""" start="00:09:39.550" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""access to that.""" start="00:09:43.110" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Bitbucket variables is a black box. Since the devs can""" start="00:09:48.790" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""access it, it's manual work for everybody""" start="00:09:52.390" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""that has to deal with it. Since we're moving""" start="00:09:56.842" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""SOPS-encrypted files into the repo,""" start="00:10:00.870" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""now there's that trackability""" start="00:10:04.340" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""from who made the change and what it changed from,""" start="00:10:06.831" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""what did it go to, and just things like that.""" start="00:10:10.943" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""You can use it anytime you'd want to commit them.""" start="00:10:16.590" video="mainVideo-secrets" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: One limitation with guix (similar package manager to nix) is there is no great way of storing secrets in the store, would SOPS be useful for this?""" start="00:10:23.630" video="mainVideo-secrets" id="subtitle"]]</div>[[!template text="""One limitation with GUIX is there's no great way to store""" start="00:10:23.630" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""secrets in the store. Yeah, I think, sorry... Let me. One""" start="00:10:32.030" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""limitation of GUIX is there's no way to store secrets in the""" start="00:10:36.870" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""store. Would SOPS be useful for this?""" start="00:10:40.190" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I think so, but I don't know how""" start="00:10:42.109" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""that package manager works, if it's just like""" start="00:10:44.830" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""some sort of &quot;you decrypt and then you run the package""" start="00:10:48.870" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""manager,&quot; then yeah, that's a lot of our workflows.""" start="00:10:52.990" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""If we're doing a deployment and the container""" start="00:10:56.110" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""needs it, we'll decrypt, put that in""" start="00:10:58.990" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""whatever place, or source it if it's an""" start="00:11:01.630" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""environment file for the container, and then""" start="00:11:03.830" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""pass it in. I think it'd be a great choice there.""" start="00:11:06.630" video="mainVideo-secrets" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Wacky question: what happens in sops-mode if you encrypt the already encrypted file as if it was plaintext?""" start="00:11:11.983" video="mainVideo-secrets" id="subtitle"]]</div>[[!template text="""A wacky question. What happens in sops mode if you""" start="00:11:11.983" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""encrypt an already encrypted file as if it was plain text?""" start="00:11:17.070" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""You know, I might have actually accidentally did that""" start="00:11:21.710" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""today. I didn't actually see the resulting file. But that's""" start="00:11:24.950" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""a great question.""" start="00:11:29.710" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Well, it's technically still binary, isn't it, at the end?""" start="00:11:31.710" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""You've got binary stuff that is being encrypted""" start="00:11:38.190" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""again. It's just double encryption.""" start="00:11:40.390" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I'm pretty sure it works.""" start="00:11:42.950" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Yeah, probably. I'm going to go back up to the""" start="00:11:44.843" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""top one.""" start="00:11:48.870" video="mainVideo-secrets" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: can you describe some potential interactive uses for this within Emacs""" start="00:11:49.439" video="mainVideo-secrets" id="subtitle"]]</div>[[!template text="""Can you describe some potential interactive uses""" start="00:11:49.439" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""for this within Emacs? Is there some other activity that""" start="00:11:52.470" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""would enable or it would be enabled with SOPS decryption""" start="00:11:57.350" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""first, like an IT configuration task.""" start="00:12:01.910" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""So in the README right now,""" start="00:12:12.530" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""there is a block and it's called SOPS setup""" start="00:12:18.510" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""environment. I think it's a hook. Don't quote me.""" start="00:12:22.630" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I haven't touched it in a while.""" start="00:12:27.688" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I think that hook runs prior to""" start="00:12:29.597" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""doing any sort of decryption or encryption.""" start="00:12:32.052" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""So there's an example in the README for ways""" start="00:12:35.350" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""that you can set up your SOPS mode for AWS.""" start="00:12:40.655" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""You can set the profile. It was actually""" start="00:12:44.670" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""a pretty fun thing to add because with that bit of code,""" start="00:12:51.137" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I can pretty much go to any one of our repos""" start="00:12:58.830" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""and decrypt and encrypt on the fly and""" start="00:13:01.200" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""not have to do much fanfare of like,""" start="00:13:04.086" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""well, what account or what profile""" start="00:13:06.750" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""do I need to switch to? I haven't looked at""" start="00:13:09.270" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""GCP yet or Azure, and that's kind of one of""" start="00:13:12.325" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""my future things. I need to maybe look into those""" start="00:13:15.310" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""to see what they look like""" start="00:13:19.080" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""and give example configs to help users.""" start="00:13:21.056" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Hopefully that answered your question.""" start="00:13:23.910" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I think so.""" start="00:13:28.994" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Continuing the theme of this, both of you being cursed,""" start="00:13:30.950" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""my X11 decided to crash.""" start="00:13:34.850" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Nothing is going well with this one.""" start="00:13:36.948" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Have you answered all the questions? I think so.""" start="00:13:40.202" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Well, do you have anything else to add, perhaps?""" start="00:13:44.510" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Maybe something that wasn't enough""" start="00:13:46.439" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""to fit in your live presentation?""" start="00:13:48.328" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""No, I'm excited to see the other talks and I hope everybody""" start="00:13:50.110" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""has fun too.""" start="00:13:56.670" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Yeah, if you have any other questions, just email me.""" start="00:13:57.812" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""That's all.""" start="00:14:03.304" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I got nothing.""" start="00:14:05.211" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Okay, cool.""" start="00:14:07.595" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""[Leo]: Well, thank you so much, Jonathan, for your""" start="00:14:08.223" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""presentation. It was, sorry for all the technical""" start="00:14:10.470" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""problems, we tried our best,""" start="00:14:12.790" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""but I think we still managed to have""" start="00:14:14.163" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""a live presentation, and we managed to have some""" start="00:14:15.533" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""questions from the crowd. So, as far as I'm concerned,""" start="00:14:17.310" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I think we did a good job.""" start="00:14:20.138" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""[Jonathan]: Yeah, you stomped it in this whole dev track,""" start="00:14:21.838" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I just have to say. It's been a privilege to jump in""" start="00:14:24.895" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""with it here and there and to just listen to the great""" start="00:14:28.350" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""conversations.""" start="00:14:31.070" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""[Leo]: I think next up we have Emacs and McCLIM,""" start="00:14:33.181" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""which is going to be a similar format to this talk.""" start="00:14:38.950" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""We'll probably jump right into that in just about two minutes.""" start="00:14:41.905" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""We'll give you another countdown here. One second.""" start="00:14:44.710" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""Well, we arranged that and meanwhile,""" start="00:14:47.822" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""I just want to take my own""" start="00:14:49.917" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""little humble opportunity to thank you Jonathan, and I""" start="00:14:51.350" video="mainVideo-secrets" id="subtitle"]]
+[[!template text="""guess everybody else.""" start="00:14:55.310" video="mainVideo-secrets" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [pitas.axioms0c@icloud.com](mailto:pitas.axioms0c@icloud.com?subject=Comment%20for%20EmacsConf%202023%20secrets%3A%20Committing%20secrets%20with%20git%20using%20sops-mode)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/secrets-before.md b/2024/info/secrets-before.md
index cc0be7fe..7fdb81a2 100644
--- a/2024/info/secrets-before.md
+++ b/2024/info/secrets-before.md
@@ -1,18 +1,22 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sat 2024-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="secrets">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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 stroke-width="3" x="404" y="75" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 10-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-secrets.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="2024-12-07T18:55:00Z" end="2024-12-07T19:05:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~1:55 PM - 2:05 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~12:55 PM - 1:05 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~11:55 AM - 12:05 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~10:55 AM - 11:05 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~6:55 PM - 7:05 PM UTC <br />Saturday, Dec 7 2024, ~7:55 PM - 8:05 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~8:55 PM - 9:05 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~12:25 AM - 12:35 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~2:55 AM - 3:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~3:55 AM - 4:05 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/dev/">Find out how to watch and participate</a></strong></div>
+Format: 15-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
+
+<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?
+08:08.532 Q: Is this saved in the repo or file as \"run sops here\" or is the encrypted blob in the git repo?
+09:12.067 Q: How do you decide whether to use SOPS or other solutions such as pass-cli?
+10:23.630 Q: One limitation with guix (similar package manager to nix) is there is no great way of storing secrets in the store, would SOPS be useful for this?
+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://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/secrets-nav.md b/2024/info/secrets-nav.md
index 16438397..9a12c594 100644
--- a/2024/info/secrets-nav.md
+++ b/2024/info/secrets-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/water">Watering my (digital) plant with Emacs timers</a>
-Next by time: <a href="/2024/talks/shell">Emacs as a shell</a>
-Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2024/watch/dev">Watch</a></strong>
+Previous by track: <a href="/2024/talks/guile">Beguiling Emacs: Guile-Emacs relaunched!</a>
+Next by track: <a href="/2024/talks/mcclim">Elisp and McCLIM</a>
+Track: <span class="sched-track Development">Development</span>
</div>
diff --git a/2024/info/sharing-after.md b/2024/info/sharing-after.md
index 14bcae3a..b697bd46 100644
--- a/2024/info/sharing-after.md
+++ b/2024/info/sharing-after.md
@@ -1,6 +1,570 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
+<div class="transcript transcript-mainVideo"><a name="sharing-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Hey, I'm Gopar""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and today I'm going to talk about""" start="00:00:01.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""being an Emacs influencer""" start="00:00:03.245" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and try to convince you to be one too.""" start="00:00:04.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Hopefully that goes well.""" start="00:00:07.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If not, we'll see at the end of the talk.""" start="00:00:08.500" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Knowledge grows when it is shared""" start="00:00:12.466" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""But first, I want to share something,""" start="00:00:12.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and that is: that knowledge grows when it is shared.""" start="00:00:14.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""This is usually how I end my videos.""" start="00:00:17.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Some of you may be familiar with this.""" start="00:00:19.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I say this quote because I believe there is truth to it.""" start="00:00:21.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The more you share something, the more you reinforce it,""" start="00:00:25.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and the more the knowledge grows, not just for you,""" start="00:00:27.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but for everybody else around it with who you share it with.""" start="00:00:30.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""With that being said,""" start="00:00:33.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""there's only one question I want to ask you.""" start="00:00:34.400" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""When's the last time you shared something?""" start="00:00:36.333" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""That is: what is the last time you shared something?""" start="00:00:36.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Now, the sharing of knowledge""" start="00:00:39.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""doesn't just have to be about Emacs.""" start="00:00:41.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It can just be about other things that you learn in life.""" start="00:00:43.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""There's plenty of things""" start="00:00:45.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that I share with people that I've learned in life,""" start="00:00:47.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and I hope that they learn from what I'm saying as well.""" start="00:00:50.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Learn from the mistakes in others""" start="00:00:53.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""type of deal, things like that.""" start="00:00:54.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But anyway, since this is EmacsConf,""" start="00:00:56.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""we're gonna keep it to Emacs-related,""" start="00:00:58.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""so we're going to find ways""" start="00:01:01.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""on how to share all that Emacs knowledge""" start="00:01:02.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that is locked up inside you guys' brain.""" start="00:01:04.733" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Sharing Emacs""" start="00:01:07.200" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""So sharing Emacs, how can we do that?""" start="00:01:07.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Well, there's a few ways.""" start="00:01:09.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We can do meetups and conferences, aka EmacsConf,""" start="00:01:10.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""like we're doing now. So hopefully one of you guys""" start="00:01:13.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""might be incentivized to share the knowledge""" start="00:01:16.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you have in the next upcoming year,""" start="00:01:18.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or the future ones, or be a repeated presenter.""" start="00:01:20.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The list goes on and on.""" start="00:01:23.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Blog posts. So, one of the easier entries to [??]""" start="00:01:25.961" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because it is writing""" start="00:01:30.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and you don't have to do video,""" start="00:01:31.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""not like the other formats that I'm about to present.""" start="00:01:32.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Tweeting is also an easier format as well""" start="00:01:34.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because it's even smaller than a blog post, more condensed,""" start="00:01:37.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and you can use hashtags. When I was learning,""" start="00:01:40.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""when I was reading the Org Mode manual,""" start="00:01:43.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I would use the hashtag #OrgTip on on Twitter.""" start="00:01:46.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Even if you search right now,""" start="00:01:49.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I believe you'll find some of my tweets.""" start="00:01:52.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But yeah, that's one way""" start="00:01:53.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you can go about it: simple tweets""" start="00:01:55.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you find, little things, little nuggets of gold""" start="00:01:57.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as I would say. Of course, there's podcasts,""" start="00:02:00.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which I'm pretty sure""" start="00:02:02.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the Emacs community would love to have,""" start="00:02:03.856" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""so if anybody wants to pick up a podcast""" start="00:02:06.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""go right ahead. Twitch live streaming,""" start="00:02:08.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which is... Twitch is a platform""" start="00:02:12.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""in which you can do live streaming""" start="00:02:13.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for those who are not familiar.""" start="00:02:15.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And people, I've seen people use the Emacs tag in there""" start="00:02:16.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and, you know, just pop up, say hello,""" start="00:02:19.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""ask questions, things like that.""" start="00:02:21.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You can be working on the configuration""" start="00:02:23.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or just reading Emacs source code,""" start="00:02:24.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you know, fun stuff like that.""" start="00:02:26.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Videos, which is what I do,""" start="00:02:28.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which I will touch on in a second.""" start="00:02:29.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""There's probably more formats""" start="00:02:31.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that I'm not thinking at the moment""" start="00:02:33.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and that you guys can probably fill in the gaps.""" start="00:02:35.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But yeah, these are just some of the ways""" start="00:02:36.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that we can share Emacs. So how do we get started?""" start="00:02:38.666" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""My background""" start="00:02:41.566" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Well, before we get started,""" start="00:02:41.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I want to talk about my credentials, right?""" start="00:02:42.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I mean, who is this guy""" start="00:02:44.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you're just listening in this little square""" start="00:02:45.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""talking about creating videos?""" start="00:02:47.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Well, I run a channel called goparism on YouTube.""" start="00:02:49.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It has around 2700 subscribers at the moment.""" start="00:02:52.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I kind of know a little bit of the flow.""" start="00:02:55.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I'm not an expert, but I've done enough videos""" start="00:02:57.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that I kind of understand the flow of all of""" start="00:03:00.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""at least the simple way of doing it, which I want to share.""" start="00:03:03.333" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why you should make Emacs videos (or other formats)""" start="00:03:06.766" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""So right now you're probably thinking,""" start="00:03:06.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""OK, I get that you want to sell us""" start="00:03:08.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""on the whole video making formats""" start="00:03:11.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or you know sharing just Emacs in general,""" start="00:03:12.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but I'm a beginner, I'm an intermediate, I'm advanced,""" start="00:03:15.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I don't know if I can provide input.""" start="00:03:19.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Each of those, I want to tackle each of those,""" start="00:03:21.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and say that yeah, each of you have input.""" start="00:03:23.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You know, for a beginner it might be say,""" start="00:03:26.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""oh, an intermediate and an advanced person""" start="00:03:28.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""already has information.""" start="00:03:29.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Intermediate might say, oh, I'm not at that level yet.""" start="00:03:30.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""An advanced person might say, oh, I have nothing to say.""" start="00:03:32.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You know, I don't... What I know,""" start="00:03:35.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""everybody else knows.""" start="00:03:38.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So I want to, you know, dispel all that and just tell you that,""" start="00:03:39.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""hey, it doesn't matter.""" start="00:03:43.200" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Beginners""" start="00:03:44.100" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""So for beginners, you guys are in a beautiful place,""" start="00:03:44.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which is that you have a clean slate.""" start="00:03:48.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So the way I imagine is that every Emacs user""" start="00:03:51.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is presented[??] upon themselves,""" start="00:03:55.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you know, kind of like this world.""" start="00:03:58.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And in this world, you can either build a road""" start="00:04:00.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that goes to the mountains, the city, or to the beach.""" start="00:04:02.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Some of us have decided which way we want to go.""" start="00:04:06.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Some of us might be building""" start="00:04:08.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the road to the city, to the beach, for example.""" start="00:04:09.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If someone starts a road to the city,""" start="00:04:13.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""they are probably stuck in their ways, right?""" start="00:04:16.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And then what leads them to the goal to the city,""" start="00:04:19.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""they're not going to make a detour towards the mountain""" start="00:04:21.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or towards the beach to get to the city.""" start="00:04:24.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""They just want the straightest path.""" start="00:04:26.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And when you are used to doing things a certain way,""" start="00:04:27.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you're going to have a ton of vision.""" start="00:04:32.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So as a beginner, you don't have any of that""" start="00:04:33.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because you're just starting brand new.""" start="00:04:35.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Everything is, you know, a world of possibilities.""" start="00:04:36.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So I would say that this is a very big advantage.""" start="00:04:40.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The second one is that people enjoy the journey, right?""" start="00:04:43.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""People want to see someone grow from this spot""" start="00:04:46.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to the next level, etc, etc.""" start="00:04:49.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""This is one of the reasons why we watch movies,""" start="00:04:51.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""TV shows, anime, right?""" start="00:04:53.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Because there's a character that needs a problem""" start="00:04:54.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and they're working their way up to solve that problem.""" start="00:04:57.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If we just get to see the ending""" start="00:04:59.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""of where they solve the problem,""" start="00:05:01.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""we don't really feel anything""" start="00:05:03.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because we weren't part of that journey.""" start="00:05:04.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I would say that starting from scratch""" start="00:05:05.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is a pretty good place to be.""" start="00:05:08.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Of course, if you're going""" start="00:05:10.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to be writing or making videos""" start="00:05:12.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or anything related to Emacs, you kind of have to force...""" start="00:05:14.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If you want to teach people, you kind of have to learn it.""" start="00:05:16.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You're kind of forced to learn,""" start="00:05:19.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which is always encouraged.""" start="00:05:20.800" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Intermediate""" start="00:05:22.966" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""For intermediates now, you might be saying,""" start="00:05:22.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""hey, I'm a little past intermediate.""" start="00:05:25.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I'm sorry, past beginner,""" start="00:05:28.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but I don't feel confident enough to share.""" start="00:05:30.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Well, let's say that you're wrong. Once you're intermediate,""" start="00:05:32.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you're probably fiddling with your Emacs config,""" start="00:05:34.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""maybe doing something with Org Mode,""" start="00:05:37.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""like a lot of people are doing it,""" start="00:05:39.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and you can document, talk about the things that you do,""" start="00:05:40.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and also those functions that you write in Elisp""" start="00:05:43.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to just improve quality of life, things like that.""" start="00:05:46.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""There's a whole list of things that you can do.""" start="00:05:49.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""These are just two things out of a plethora.""" start="00:05:51.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""of items that you can talk about.""" start="00:05:54.266" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Advanced""" start="00:05:56.133" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""For my advanced folks, you guys are in a position""" start="00:05:56.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""where you guys know more about the Emacs internals.""" start="00:05:59.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You might have read the source code.""" start="00:06:02.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You might know a Emacs manual section pretty well""" start="00:06:05.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you can talk about.""" start="00:06:08.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Usually when you're at the advanced""" start="00:06:09.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or intermediate level,""" start="00:06:11.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you start, or at least some people start writing packages.""" start="00:06:12.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You can talk about the best practices""" start="00:06:15.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for creating packages, the troubles that you face, you know,""" start="00:06:17.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the things that you learn, things like that.""" start="00:06:20.166" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Impostor syndrome""" start="00:06:22.866" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Now that I've given a little bit of examples""" start="00:06:22.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for each of these tiers, there's probably still""" start="00:06:25.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""something going on in each of you guys' mind,""" start="00:06:27.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which is something all of us get to face,""" start="00:06:30.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and that is impostor syndrome. Now, with impostor syndrome,""" start="00:06:32.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the sad reality is that we all have it at some point,""" start="00:06:37.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""we're going to, you know,""" start="00:06:40.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""at the beginner, intermediate, or even advanced stage,""" start="00:06:41.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it doesn't matter,""" start="00:06:43.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""there's always that little voice of imposter syndrome saying,""" start="00:06:43.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""hey, &quot;You're probably not good enough&quot; or not...""" start="00:06:46.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but questioning if you're good enough""" start="00:06:49.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or if you deserve to be at this level and things like that.""" start="00:06:50.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I believe it's very common with software engineers.""" start="00:06:53.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The other sad thing is that it will never go away""" start="00:06:56.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But the way I see it with impostor syndrome""" start="00:06:59.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is that we embrace it.""" start="00:07:02.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If we are getting an impostor syndrome,""" start="00:07:03.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it's because we're pushing ourself to a next level""" start="00:07:04.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that we haven't been able to to overcome or to progress in.""" start="00:07:07.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If you're pushing yourself, you will get impostor syndrome.""" start="00:07:12.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Like, hey, am I good enough to lead this project?""" start="00:07:14.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""To finish this? To optimize this part""" start="00:07:16.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or whatever? I feel it's a good way.""" start="00:07:19.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Impostor syndrome, yeah, it feels horrible,""" start="00:07:21.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but I believe that if you have it,""" start="00:07:24.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it's because you're doing something right.""" start="00:07:26.066" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Process for recording""" start="00:07:28.466" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Okay, now that we've gotten""" start="00:07:28.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that out of the way, what's the process for recording?""" start="00:07:29.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Well, it's actually a lot simpler than you think.""" start="00:07:32.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""There's three steps, and one of them""" start="00:07:34.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you might not even have to do,""" start="00:07:36.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""depending on how you want to go about it.""" start="00:07:37.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The first one is that you have""" start="00:07:39.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to record your voice and screen,""" start="00:07:40.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because if you do want to make video,""" start="00:07:42.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""people have to see what you're doing""" start="00:07:45.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and they have to hear what you're talking,""" start="00:07:46.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""otherwise it's going to be not as engaging.""" start="00:07:48.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Of course, you can make the face optional""" start="00:07:50.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""when recording videos.""" start="00:07:52.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If you watch some of my videos, sometimes""" start="00:07:54.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I show my face, sometimes I don't.""" start="00:07:56.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It just really depends on the mood of what I'm doing""" start="00:07:57.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""when I'm recording the video. But yeah, completely up to you.""" start="00:08:02.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""After recording, you can edit if desired.""" start="00:08:05.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I remember when I first started making the videos,""" start="00:08:08.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I was not editing them at all.""" start="00:08:10.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I was just one shot and upload.""" start="00:08:13.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That can either be good or bad""" start="00:08:15.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""depending on how you view it,""" start="00:08:16.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but it is what it is. Nowadays I do some light editing,""" start="00:08:19.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""mainly just to remove the silences""" start="00:08:22.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or when I'm going through debugging something.""" start="00:08:26.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Third one is to upload it,""" start="00:08:29.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which might be the easiest section,""" start="00:08:32.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""depending on your goals.""" start="00:08:34.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""At minimum, you would put title, description,""" start="00:08:35.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and a little bit more.""" start="00:08:38.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You'll get why I see it can be as easy""" start="00:08:39.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or as complicated as you want,""" start="00:08:42.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which I'll go over later at the end.""" start="00:08:44.266" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Details: recording""" start="00:08:46.400" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Let's go over details for recording.""" start="00:08:46.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""For recording, thankfully, all OSes,""" start="00:08:50.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or at least the major OSes, have free recording software,""" start="00:08:53.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or you can go a little fancy and get paid [software],""" start="00:08:56.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which usually, you know, depending on your viewpoint,""" start="00:08:59.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""might make things easier or not.""" start="00:09:01.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Personally, I use, I'm on Mac,""" start="00:09:03.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""so I use the built-in screen recording,""" start="00:09:05.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which, if you do Command-Shift-5,""" start="00:09:07.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it will pop up a little dialog, and if you did it just now,""" start="00:09:08.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you can press the Escape key""" start="00:09:13.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to get rid of it, and life goes on.""" start="00:09:14.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Also for all major 3 OSes, OBS""" start="00:09:16.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is a pretty popular choice not just for streaming,""" start="00:09:20.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but for recording as well.""" start="00:09:22.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That's something you might want to look at.""" start="00:09:23.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If you do decide to record videos.""" start="00:09:25.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""All up to you. These are just things""" start="00:09:29.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that I've come along or encountered along the way.""" start="00:09:32.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""When it comes to recording,""" start="00:09:35.333" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Tips: Recording""" start="00:09:36.700" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""I do have some tips that might help you out.""" start="00:09:36.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""At least, if I could go back in time,""" start="00:09:38.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""this is what I would tell myself: that""" start="00:09:40.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""audio quality matter matters.""" start="00:09:43.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If possible, get an external mic.""" start="00:09:44.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That is not always feasible,""" start="00:09:46.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because extra mic costs money,""" start="00:09:48.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and when you're starting out with YouTube,""" start="00:09:50.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you are not going to make a penny.""" start="00:09:51.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""YouTube has very high restrictions""" start="00:09:54.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or bars that you need to pass""" start="00:09:57.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""before you start getting any revenue. For example,""" start="00:10:01.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""my channel, I still haven't met those bars,""" start="00:10:03.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""so i'm still not generating any revenue.""" start="00:10:06.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Anything that I buy is just out of pocket.""" start="00:10:08.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Since I work from home, I already had a mic""" start="00:10:11.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and things like that set up.""" start="00:10:13.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I just use that for recording videos.""" start="00:10:15.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But if you have... You can use""" start="00:10:17.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the built-in mic in your laptop if you have one.""" start="00:10:20.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I would strongly suggest if you do that,""" start="00:10:23.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""try to minimize the noise. Go into a quiet room""" start="00:10:25.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and make sure there's no washing machine""" start="00:10:28.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or anything going off right now,""" start="00:10:30.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because people do not... They can handle,""" start="00:10:32.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you know, not the greatest quality of video.""" start="00:10:35.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But when it comes to audio, picky""" start="00:10:36.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""people are a lot more pickier when it comes to that.""" start="00:10:38.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Next is don't start with recording the face.""" start="00:10:40.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Voice and screen are just fine.""" start="00:10:43.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Personally, I feel when I started recording my face,""" start="00:10:44.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it made it harder in a sense,""" start="00:10:49.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because now I was just not only concentrating""" start="00:10:51.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""on what I was showing, how it was sounding,""" start="00:10:53.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but how I look, if I was making any faces like that.""" start="00:10:55.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's just one less thing to have on your brain""" start="00:10:58.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""when you're recording.""" start="00:11:01.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Another thing is that when I started recording,""" start="00:11:02.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I was very passionate or excited about doing this.""" start="00:11:05.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""What I would do is--I took that to the advantage--""" start="00:11:08.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is that I just recorded a lot of videos""" start="00:11:10.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""in one go or in sessions.""" start="00:11:13.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""As soon as I recorded, start the next one,""" start="00:11:16.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""next one, et cetera. I strongly believe that helped""" start="00:11:18.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because later down the road,""" start="00:11:20.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""once I got busy with work or life or whatever,""" start="00:11:22.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I didn't really have to worry about making time.""" start="00:11:24.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I already had a batch ready to go""" start="00:11:26.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that I can just slowly pull out and edit and upload.""" start="00:11:28.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That's something helpful whenever you know work is slow""" start="00:11:31.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or your vacations or things like that, you want to record,""" start="00:11:35.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""just go for it.""" start="00:11:37.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Another one is when you are editing, you can use pauses""" start="00:11:39.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""so that it's easier to edit""" start="00:11:43.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because what happens to... At least this""" start="00:11:45.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is what happened to me""" start="00:11:48.160" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""when I was beginning,""" start="00:11:48.881" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I would say, oh I can mumble fumble,""" start="00:11:49.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you know, do a lot of verbal fillers,""" start="00:11:53.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and I can just edit it,""" start="00:11:54.501" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but if you don't do any pauses""" start="00:11:55.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it's hard to fix the mistakes,""" start="00:11:57.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the things that you don't want people seeing""" start="00:12:01.561" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because then it doesn't blend well""" start="00:12:03.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""if you do editing. If you do any editing,""" start="00:12:05.840" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you know what I'm talking about,""" start="00:12:08.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because then there's chops of audio""" start="00:12:09.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""from the previous clip.""" start="00:12:12.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Trying to edit... There's ways to mitigate that,""" start="00:12:13.841" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but my editing skills are very minimal.""" start="00:12:17.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's just what I need to know to get things done.""" start="00:12:19.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Just using pauses helps out a lot.""" start="00:12:21.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Another thing is that""" start="00:12:25.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""some people want to record in like super-high quality,""" start="00:12:26.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you know, get the highest quality possible for the video.""" start="00:12:30.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I would say instead of focusing on the video recording,""" start="00:12:32.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""focus on the audio, like I mentioned,""" start="00:12:34.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because at the end of the day,""" start="00:12:36.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""we're in Emacs and we're only sharing text.""" start="00:12:37.820" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You know, there's only so much definition""" start="00:12:41.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you can show on text.""" start="00:12:43.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If anything, just increase the font. Simple as that.""" start="00:12:44.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""My personal favorite,""" start="00:12:48.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or at least the one that I still encounter even now,""" start="00:12:50.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is that when I'm recording, my voice still feels dry.""" start="00:12:53.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Right when I'm about to record,""" start="00:12:56.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""all of a sudden, I get dry. I need to drink water.""" start="00:12:59.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It feels uncomfortable. I get nervous""" start="00:13:01.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because it's something new. I'm staring at myself.""" start="00:13:03.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's like, oh man, all the... I mentioned just extra things""" start="00:13:06.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that I need to worry about.""" start="00:13:08.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But all of this goes less with practice.""" start="00:13:10.120" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The more you do it, the more comfortable you are.""" start="00:13:13.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's just like everything else.""" start="00:13:15.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""When you start learning guitar,""" start="00:13:17.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""your fingers are very hard. When you start learning piano,""" start="00:13:18.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the independence of fingers don't want to work.""" start="00:13:21.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""When you're learning drums,""" start="00:13:24.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""each limb needs to be independent.""" start="00:13:25.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's very hard. You have to start very slow.""" start="00:13:27.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Everything in life, you know, practice""" start="00:13:29.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and it will get better. All right now .""" start="00:13:31.066" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Details: Editing""" start="00:13:33.440" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Editing, well, like I mentioned,""" start="00:13:33.440" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""this is not always going to be necessary,""" start="00:13:34.853" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""depending on your style.""" start="00:13:36.940" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""There's some Youtube Emacs creators""" start="00:13:37.895" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that simply record everything in one go.""" start="00:13:41.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""They might get up, get a coffee or something,""" start="00:13:43.960" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and they'll just leave that in the clip,""" start="00:13:46.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which is totally fine.""" start="00:13:48.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""No shame. It's the way they they want to do the video.""" start="00:13:49.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Sometimes they just don't have any time""" start="00:13:51.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to edit the videos themselves""" start="00:13:54.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or pay someone else to do it.""" start="00:13:56.926" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""What's the best next thing? just leave it as is,""" start="00:13:57.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""upload, and that's fine. That completely works.""" start="00:14:00.467" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I will say that if you do end up editing""" start="00:14:04.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or deciding to edit, and you want software""" start="00:14:07.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I would say check out DaVinci Resolve.""" start="00:14:09.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's free. It's available on the three major OSes.""" start="00:14:11.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Honestly, DaVinci Resolve by itself""" start="00:14:14.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""has a plethora of features.""" start="00:14:19.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I personally, I only use like 5% max of the features.""" start="00:14:20.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's professional,""" start="00:14:27.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it's like professional studio all the way, things like that.""" start="00:14:29.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But yeah, I would say DaVinci Resolve""" start="00:14:33.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is a pretty solid choice.""" start="00:14:35.500" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Tips: Editing""" start="00:14:38.320" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Okay, what about the tips for editing?""" start="00:14:38.320" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Well, most of them are pretty straightforward.""" start="00:14:40.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Just learn enough to get going, like in all things.""" start="00:14:42.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Like if you have a band practice""" start="00:14:46.040" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and you're rehearsing a song,""" start="00:14:48.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you just need to know the chords,""" start="00:14:50.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you don't need to know improvise,""" start="00:14:52.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""just enough to get you through this gig""" start="00:14:53.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you're playing. That's pretty much it.""" start="00:14:55.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Of course, learn the keyboard shortcuts.""" start="00:14:57.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We all come from Emacs, so we all know how valuable,""" start="00:14:59.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""how much we treasure shortcuts to avoid the mouse.""" start="00:15:02.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""unfortunately since you're editing,""" start="00:15:05.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you will still have to use the mouse,""" start="00:15:06.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but the more keyboard shortcuts you use,""" start="00:15:08.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the less the mouse is used. So there's that.""" start="00:15:10.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""One thing is that--I didn't know you can actually do this""" start="00:15:13.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""until I started editing--""" start="00:15:17.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is that you can play the speed of the video in 2x.""" start="00:15:18.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""For me this is great because""" start="00:15:22.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""since I'm mainly just listening for pauses in my video,""" start="00:15:24.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I just wait until there's silence.""" start="00:15:28.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Oh, that's the part I need to trim,""" start="00:15:29.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or that's the part I need to remove. Simple as that.""" start="00:15:31.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Also batch edit, the same thing""" start="00:15:35.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as I said about recording videos, just do it in batch.""" start="00:15:37.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You can also just batch edit as well.""" start="00:15:41.533" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Details: Uploading""" start="00:15:44.000" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Uploading, the final step. YouTube,""" start="00:15:44.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""if you do end up using YouTube""" start="00:15:48.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which is the most popular choice for uploading videos,""" start="00:15:49.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is that the uploading process""" start="00:15:52.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is pretty straightforward.""" start="00:15:55.120" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I imagine this is the same for every other platform""" start="00:15:56.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you choose. It's pretty straightforward,""" start="00:15:58.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but it can be a little complicated""" start="00:16:01.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""depending on what you want to do.""" start="00:16:04.120" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Tips: Uploading""" start="00:16:06.820" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""What are my tips for uploading?""" start="00:16:06.820" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Well, first of all, at minimum,""" start="00:16:09.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you need to have a descriptive title""" start="00:16:10.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and a description of what you talk about in the video,""" start="00:16:13.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""just to help out with SEO and things like that""" start="00:16:16.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""when people are searching for Emacs on YouTube.""" start="00:16:20.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Also, if possible, use a thumbnail.""" start="00:16:24.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""There's a whole community about Emacs creators""" start="00:16:25.480" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""discussing best practices to get the highest engagement,""" start="00:16:29.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""how to get people watching your videos, things like that,""" start="00:16:32.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and one of the things""" start="00:16:34.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is they highly recommend a thumbnail.""" start="00:16:35.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If you mainly watch, or if you watch any Emacs content,""" start="00:16:39.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""a lot of us do not use thumbnails,""" start="00:16:42.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and that's perfectly fine.""" start="00:16:45.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I think the Emacs community is pretty used""" start="00:16:46.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to just watching videos with just a thumbnail,""" start="00:16:48.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it's just a screenshot of the video,""" start="00:16:51.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and we just go there for the content, right?""" start="00:16:52.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We're not really going there for anything else,""" start="00:16:55.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for the knowledge that the person is spreading.""" start="00:16:57.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I say that it can be as simple or as complex,""" start="00:17:01.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because if your goal is to potentially""" start="00:17:04.466" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""earn revenue down the line,""" start="00:17:07.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you will want to spend some time configuring""" start="00:17:08.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""some of the settings for uploading, like the tags,""" start="00:17:11.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I forget what they're called, but they're""" start="00:17:17.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""a little embedded so that people can watch""" start="00:17:18.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""other videos and things like that.""" start="00:17:20.876" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So there's a plethora of options, an abundance of options.""" start="00:17:22.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Honestly, there's too many,""" start="00:17:25.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but it all depends if you potentially want""" start="00:17:27.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to make some type of income in the future""" start="00:17:31.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""with Emacs, making videos on Emacs.""" start="00:17:33.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And yeah, that's just something""" start="00:17:35.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you will have to discover""" start="00:17:37.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and read and learn more about what the Emacs community,""" start="00:17:39.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Emacs creator community suggest,""" start="00:17:42.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and best practices and things like that.""" start="00:17:45.134" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But if anybody ever wants to talk about it,""" start="00:17:47.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""feel free to reach out to me.""" start="00:17:48.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I would love to talk about things""" start="00:17:50.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""about YouTube and all this,""" start="00:17:54.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because I find it interesting. Potentially, hopefully,""" start="00:17:55.741" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""one day, I'll be able to make some revenue.""" start="00:17:58.441" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Hopefully, maybe some of you guys""" start="00:18:01.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""might knock it out of the park""" start="00:18:03.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""with what I'm going to talk about next.""" start="00:18:04.300" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Your secret sauce""" start="00:18:06.166" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""That is your secret sauce. This is your ultimate weapon""" start="00:18:06.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as to get viewers, to get subscribers, you know,""" start="00:18:10.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to get anybody that wants""" start="00:18:13.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to watch your... to reach a higher audience.""" start="00:18:14.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That can be your humor. You might be naturally funny.""" start="00:18:17.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You can make comments.""" start="00:18:20.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You have a natural skill on the way you talk,""" start="00:18:21.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""on the way you articulate things,""" start="00:18:24.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""so you might be able to get people drawn to that,""" start="00:18:26.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or you might be someone who just does animations""" start="00:18:29.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for your videos, which does highly well as well.""" start="00:18:32.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or you can do a mix of all these.""" start="00:18:35.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You can just insert your superpower""" start="00:18:38.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""whatever you want. You can go ahead""" start="00:18:40.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and use that to your advantage""" start="00:18:42.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to grow user base, a viewer base.""" start="00:18:45.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Hopefully, if all things align,""" start="00:18:47.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you'll be able to get paid""" start="00:18:50.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to also create Emacs videos soon, spread the knowledge,""" start="00:18:52.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which would be pretty cool--become an Emacs influencer,""" start="00:18:56.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which is the goal, right? Okay.""" start="00:18:58.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I believe I painted this in a pretty good light,""" start="00:19:00.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""at least personal opinion.""" start="00:19:03.800" video="mainVideo-sharing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Cons of YouTube""" start="00:19:04.933" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""But like everything, every good also has a bad.""" start="00:19:04.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Nothing is always perfect.""" start="00:19:07.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That's also the same for Youtube.""" start="00:19:09.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""What are the bads of Youtube?""" start="00:19:11.666" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Well, it's not going to be an overnight success.""" start="00:19:14.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That is very very rare. You're not going to create a video""" start="00:19:18.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and then all of a sudden get like a hundred thousand views.""" start="00:19:21.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I believe by from what I've seen in the community""" start="00:19:24.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""if a video gets over 10k""" start="00:19:27.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that it means that it did really well in the Emacs community.""" start="00:19:29.066" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I think on average is under 3k for a video within...""" start="00:19:33.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""This is within the time span of""" start="00:19:38.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I'd say like two weeks or so or a month, around there.""" start="00:19:40.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So it varies. All these metrics you'll learn""" start="00:19:43.366" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""if you really actually want to be able""" start="00:19:46.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to create something in the Emacs...""" start="00:19:48.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But like I said, it does take work and it does take time.""" start="00:19:50.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Another thing is that negative feedback people are very quick""" start="00:19:53.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as we all have been accustomed to that.""" start="00:19:56.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""People are do not shy from being very negative.""" start="00:20:00.566" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It is so easy to just say negative and mean things online""" start="00:20:04.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because there's no repercussions.""" start="00:20:07.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I don't understand why people do that, but it is what it is.""" start="00:20:09.933" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But most of these comments are from the younger population.""" start="00:20:12.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You know, just ignore them.""" start="00:20:17.533" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Most of the time, they're just ignorant.""" start="00:20:20.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""They don't know what they're saying.""" start="00:20:22.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It will help you get them, you know, grow some thick skin.""" start="00:20:24.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""If you already have thick skin, then you don't.""" start="00:20:27.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""This is not going to be a problem.""" start="00:20:30.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But most of the negative comments that I've receive our""" start="00:20:31.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or childish, I would say,""" start="00:20:35.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that it's not really based on anything that has substance.""" start="00:20:38.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Yeah, just ignore it. It's fine.""" start="00:20:42.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's not going to affect your day.""" start="00:20:44.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""&quot;Don't let it affect your day&quot;""" start="00:20:46.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is the most important thing.""" start="00:20:47.133" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Third, like I was mentioning, revenue is very hard""" start="00:20:48.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to get monetized on by YouTube standards.""" start="00:20:51.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That will definitely take some time and dedication.""" start="00:20:54.733" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But if you really want it, you will work for it.""" start="00:20:58.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Hopefully all of us,""" start="00:21:01.333" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the people that are constantly creating content""" start="00:21:03.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""via these platforms are able to get compensated""" start="00:21:05.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""in some way or another,""" start="00:21:09.266" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because we do share it because we love it,""" start="00:21:10.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but also it would be nice to get some compensation.""" start="00:21:13.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I'm not speaking for everybody. I'm speaking personally""" start="00:21:15.866" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because time is a valuable asset.""" start="00:21:17.966" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You can choose what you want to spend it""" start="00:21:22.166" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and right now I'm having fun making videos.""" start="00:21:23.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That's what I'm deciding to spend it.""" start="00:21:25.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But yeah now, with all this that I've said,""" start="00:21:29.766" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""there's only one question that I want to ask all of you,""" start="00:21:31.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and that is: what are you going to share?""" start="00:21:36.066" video="mainVideo-sharing" id="subtitle"]]
+
+</div>
+
+Captioner: anush
+
Questions or comments? Please e-mail [gopardaniel@gmail.com](mailto:gopardaniel@gmail.com?subject=Comment%20for%20EmacsConf%202023%20sharing%3A%20So%20you%20want%20to%20be%20an%20Emacs-fluencer%3F)
diff --git a/2024/info/sharing-before.md b/2024/info/sharing-before.md
index 9c4e45a3..e3154751 100644
--- a/2024/info/sharing-before.md
+++ b/2024/info/sharing-before.md
@@ -1,18 +1,33 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="sharing">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect stroke-width="3" x="555" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 20-min talk; Q&A: Etherpad <https://pad.emacsconf.org/2024-sharing>
-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="2024-12-08T20:45:00Z" end="2024-12-08T21:05:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~3:45 PM - 4:05 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~2:45 PM - 3:05 PM CST (US/Central)<br />Sunday, Dec 8 2024, ~1:45 PM - 2:05 PM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~12:45 PM - 1:05 PM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~8:45 PM - 9:05 PM UTC <br />Sunday, Dec 8 2024, ~9:45 PM - 10:05 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~10:45 PM - 11:05 PM EET (Europe/Athens)<br />Monday, Dec 9 2024, ~2:15 AM - 2:35 AM IST (Asia/Kolkata)<br />Monday, Dec 9 2024, ~4:45 AM - 5:05 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~5:45 AM - 6:05 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Format: 22-min talk ; Q&A: Etherpad
+Status: TO_FOLLOW_UP
+
+<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?
+01:07.200 Sharing Emacs
+02:41.566 My background
+03:06.766 Why you should make Emacs videos (or other formats)
+03:44.100 Beginners
+05:22.966 Intermediate
+05:56.133 Advanced
+06:22.866 Impostor syndrome
+07:28.466 Process for recording
+08:46.400 Details: recording
+09:36.700 Tips: Recording
+13:33.440 Details: Editing
+14:38.320 Tips: Editing
+15:44.000 Details: Uploading
+16:06.820 Tips: Uploading
+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://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/sharing-nav.md b/2024/info/sharing-nav.md
index 4a76f404..b952133f 100644
--- a/2024/info/sharing-nav.md
+++ b/2024/info/sharing-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/students">An example of a cohesive student workflow in Emacs</a>
-Next by time: <a href="/2024/talks/transducers">Transducers: finally, ergonomic data processing for Emacs!</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/students">An example of a cohesive student workflow in Emacs</a>
+Next by track: <a href="/2024/talks/transducers">Transducers: finally, ergonomic data processing for Emacs!</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/shell-after.md b/2024/info/shell-after.md
index 4f9b3cff..024d2488 100644
--- a/2024/info/shell-after.md
+++ b/2024/info/shell-after.md
@@ -1,6 +1,398 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
+<div class="transcript transcript-mainVideo"><a name="shell-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:02.940" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""Welcome to Emacs as a Shell, a talk by Christopher Howard for""" start="00:00:02.940" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Emacs Conference 2024.""" start="00:00:08.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""In this talk, I would like to explore, or advocate for, a""" start="00:00:13.800" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""particular perspective. I want to encourage people to""" start="00:00:18.400" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""think of Emacs not as simply an editor or a development""" start="00:00:21.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""environment, but rather as a shell, or at least something""" start="00:00:26.480" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""that allows us to do most of the things that we might""" start="00:00:31.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""otherwise want to do from a shell.""" start="00:00:33.920" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What do I mean by shell?""" start="00:00:37.881" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""What do I mean by shell? By""" start="00:00:37.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""shell, I mean basically an interface that allows us to""" start="00:00:40.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""interact with the rest of our system by entering commands.""" start="00:00:45.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""That definition is, perhaps, a little too broad, and so I""" start="00:00:50.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""will try to narrow it down with a list of features that,""" start="00:00:55.040" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""historically, we have come to expect from a shell. The Bash""" start="00:00:58.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""shell is one very portable and well-known shell, and for""" start="00:01:03.280" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""many of us it is maybe the prototypical example. But in the""" start="00:01:07.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""past there have been many other shells, and there are other""" start="00:01:13.600" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""shells available today. If we are willing to be flexible in""" start="00:01:16.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""our thinking, we can think of Emacs as being a shell, or at""" start="00:01:21.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""least providing most of the functionality that we expect""" start="00:01:25.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""from a shell.""" start="00:01:28.880" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What I do not mean""" start="00:01:38.560" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""Before further expanding on this idea, I must emphasize""" start="00:01:38.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""what I do not mean. First of all, I am not talking about""" start="00:01:42.760" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""running Bash, or some other external shell, from within""" start="00:01:47.160" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Emacs, although this is certainly possible. I am arguing,""" start="00:01:51.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""rather, for using Emacs as a shell, instead of other shells.""" start="00:01:56.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Second, I do not mean running a terminal emulator from""" start="00:02:02.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""within Emacs. Emacs has a built-in terminal emulator, but""" start="00:02:06.240" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""this is not what I mean. A terminal emulator is essentially a""" start="00:02:11.400" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""program designed to control the cursor and text appearance""" start="00:02:15.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""in response to various control codes in order to mimic a""" start="00:02:20.040" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""terminal display device. There are certainly legitimate""" start="00:02:24.000" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""reasons to do this. Nevertheless, in general, it does not""" start="00:02:28.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""make much sense to run a terminal emulator within Emacs,""" start="00:02:32.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""because Emacs has its own commands for controlling the""" start="00:02:36.520" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""cursor and text appearance. Also, due to the way Emacs was""" start="00:02:39.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""designed historically, Emacs itself believes that it is""" start="00:02:45.040" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""running on a terminal. So you end up with layers upon layers""" start="00:02:48.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""of terminal emulation. Anyhow, at the end of the day, Emacs""" start="00:02:53.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""will not perform as well as a dedicated terminal emulator""" start="00:02:58.200" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""program. I also think that, as we try to force ANSI terminal""" start="00:03:01.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""emulation into our Emacs workflow, this ultimately will be""" start="00:03:08.080" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""a hindrance to us in taking advantage of the natural and""" start="00:03:12.360" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""pleasant interfaces that are already available to us""" start="00:03:15.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""within Emacs. In brief, if your goal is simply to figure out""" start="00:03:19.320" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""how to be able to do all your normal Bash command line""" start="00:03:25.000" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""wizardry from within an Emacs window instead of a GNOME""" start="00:03:28.500" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""console window, you are headed down a different set of train""" start="00:03:32.360" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""tracks than I am. Also, something which I fear may confuse""" start="00:03:36.480" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""the issue for some viewers is the fact that Emacs ships with""" start="00:03:43.200" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""its own unique built-in shell, called the Emacs shell, or""" start="00:03:47.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Eshell.""" start="00:03:52.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Eshell aims to be a legitimate shell, and provides a very""" start="00:03:59.080" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""similar experience to other shells like Bash, while being""" start="00:04:02.960" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""well integrated into the Emacs interface, and without""" start="00:04:07.600" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""giving up the power of the Emacs Lisp engine. Eshell will be""" start="00:04:11.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""mentioned multiple times in this talk. The entire talk""" start="00:04:15.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""could, in fact, be about Eshell, except that I want the talk""" start="00:04:19.140" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""to cover all aspects of Emacs shell-like functionality""" start="00:04:24.180" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""through its other tools, such as interactive commands and""" start="00:04:28.320" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""special modes. So, hopefully we can keep distinct in our""" start="00:04:32.080" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""mind the ideas of Emacs as a shell versus the Emacs shell,""" start="00:04:37.080" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""though the latter is an important part of the former.""" start="00:04:43.880" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What is a shell?""" start="00:04:50.160" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""Let's get back to the fundamental idea of what is a shell. In""" start="00:04:50.160" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""the broadest definition, a shell is an interface which""" start="00:04:55.400" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""allows you to interact with your operating system through""" start="00:04:59.160" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""commands. However, from a historical perspective, there""" start="00:05:02.280" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""are a few basic capabilities which we expect to be part of""" start="00:05:06.841" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""every shell.""" start="00:05:10.700" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""First of all, the shell provides a means of launching""" start="00:05:17.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""external programs. Some internal or built-in commands""" start="00:05:21.421" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""might also be made available. Second, the shell provides a""" start="00:05:26.441" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""means of managing environment variables. In the past,""" start="00:05:31.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""environment variables often played a critical role as a""" start="00:05:36.821" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""means of passing in options, file names, device names, and""" start="00:05:40.581" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""suchlike to external programs. This is not quite as common""" start="00:05:45.361" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""today, but the environment still plays a critical role in""" start="00:05:50.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""managing things such as the path to executables and""" start="00:05:54.081" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""libraries, as well as various other user, desktop, and""" start="00:05:57.620" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""system settings. The shell modifies the environment and""" start="00:06:03.081" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""passes it on to external programs.""" start="00:06:08.281" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Historically, job control was expected to be either a""" start="00:06:13.540" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""function of the shell, or easily accessible from it.""" start="00:06:17.581" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Usually today, our personal computing is not""" start="00:06:21.561" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""batch-oriented. But typically, shells can run multiple""" start="00:06:24.020" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""processes simultaneously, as well as provide means to""" start="00:06:29.281" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""suspend and terminate processes, which are useful""" start="00:06:34.600" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""features. Shells should be able to redirect and pipeline""" start="00:06:38.781" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""process input and output. This allows the user to connect""" start="00:06:44.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""process input and output with files, devices, or other""" start="00:06:49.101" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""processes. Finally, shells are expected to have some""" start="00:06:53.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""limited scripting capability, such as the""" start="00:06:58.814" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""POSIX-compliant set of program statements and""" start="00:07:02.381" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""conditionals that Bash provides.""" start="00:07:06.614" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""As command-line wizards, there are a number of tasks we""" start="00:07:11.100" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""expect to be able to do quickly and easily from our shell,""" start="00:07:15.114" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""even though these tasks are not the domain of the shell""" start="00:07:18.660" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""itself. A common task is file management and navigation. We""" start="00:07:21.647" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""quickly navigate and manipulate the file system with""" start="00:07:27.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""standard utilities that do things like change the current""" start="00:07:31.114" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""working directory, rename files, move files, and delete""" start="00:07:34.814" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""files. We usually expect to have access to some additional""" start="00:07:39.381" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""process management utilities. These allow us to do things""" start="00:07:44.147" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""such as find out the status of all processes running on the""" start="00:07:48.381" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""system, and send signals to processes. Finally, we expect""" start="00:07:51.781" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""to have access to some basic networking utilities. For""" start="00:07:57.981" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""example, we should be able to run commands that set up""" start="00:08:02.114" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""network interfaces, ping computers, and download files.""" start="00:08:05.414" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""With a little reflection, we can see that Emacs can provide""" start="00:08:09.514" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""all or nearly all of the functionality we have described so""" start="00:08:16.081" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""far. And the functionality can be called conveniently""" start="00:08:20.147" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""through one of several methods.""" start="00:08:24.047" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Either a normal interactive call, like M-x something, or a""" start="00:08:33.520" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""call to an elisp function,""" start="00:08:43.847" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""or through Eshell commands, or through some special buffer""" start="00:08:53.620" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""mode, such as the directory editor, which provides its own""" start="00:09:01.181" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""interface to some functionality.""" start="00:09:06.947" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""It may be going too far to say that Emacs is a full replacement""" start="00:09:09.414" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""for shells like Bash. Nevertheless, we can see that Emacs""" start="00:09:17.414" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""can do most of the things that we might otherwise do with our""" start="00:09:21.714" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""shell.""" start="00:09:25.681" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Launching external processes""" start="00:09:26.912" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""Let us give some examples. First, can Emacs launch""" start="00:09:26.912" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""external commands? Of course. Now, there are something""" start="00:09:32.514" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""like a half-dozen different ways to do that within Emacs, and""" start="00:09:36.681" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""some are more convenient than others. From any Elisp""" start="00:09:40.447" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""program, we can call functions like make-process and""" start="00:09:46.714" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""call-process to launch external processes.""" start="00:09:50.781" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""These, however, generally are not convenient for quick,""" start="00:10:12.460" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""one-off commands. Another option would be to run Eshell,""" start="00:10:16.847" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""which would allow us to call the external program from a""" start="00:10:22.381" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""familiar command line prompt.""" start="00:10:26.581" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""If we do not actually want to drop into Eshell just to run one""" start="00:10:34.160" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""command, we also have the interactive command,""" start="00:10:38.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""eshell-command,""" start="00:10:42.214" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""which would allow us to call the external program from a""" start="00:10:52.420" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""familiar command line prompt.""" start="00:10:56.747" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""If we do not actually want to drop an""" start="00:11:09.940" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Eshell just to run one command, as I just mentioned, we also""" start="00:11:12.081" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""have the interactive command eshell-command, which allows""" start="00:11:15.700" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""us to enter in a one-off command and run that immediately.""" start="00:11:19.800" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""And finally, there is also an interactive command called""" start="00:11:25.420" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""simply shell-command.""" start="00:11:28.800" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Shell command is like Eshell command, but instead passes""" start="00:11:34.600" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""the command off to our system shell, for example, bash.""" start="00:11:39.100" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""This is cheating, of course, but it might be useful or convenient""" start="00:11:43.940" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""in some scenarios.""" start="00:11:48.600" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Environment variables""" start="00:11:57.300" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""Regarding environment variables, Emacs can read and""" start="00:11:57.300" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""manipulate the environment variables, which in turn get""" start="00:12:01.900" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""passed on to processes which it launches. The""" start="00:12:05.400" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""general-purpose interactive commands for this are""" start="00:12:09.660" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""getenv and setenv. These commands""" start="00:12:12.900" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""deal with the one environment that is available throughout""" start="00:12:18.500" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""all parts of your running Emacs session. In other words,""" start="00:12:21.800" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""these functions deal with a global environment, which is""" start="00:12:25.700" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""the same wherever you are running getenv or""" start="00:12:29.000" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""setenv.""" start="00:12:32.100" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""An important exception is that every instance of Eshell""" start="00:13:00.340" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""maintains a distinct environment that will not be affected""" start="00:13:04.260" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""by setenv calls run in other buffers. Also, Eshell""" start="00:13:07.600" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""has some additional syntax for dealing with its""" start="00:13:13.981" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""environment, including the set and export syntax.""" start="00:13:16.447" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Regarding job control and process management, Emacs does""" start="00:13:38.647" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""not provide job control in the way that Bash users are used""" start="00:13:47.114" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""to. We can, however, launch asynchronous processes, and do""" start="00:13:50.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""various things to them. From Eshell, or an eshell-command""" start="00:13:57.081" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""call, we can append the ampersand symbol to the command, and""" start="00:14:01.581" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""this will cause the process to run asynchronously in a""" start="00:14:07.181" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""dedicated buffer.""" start="00:14:11.014" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Now, if the command is launched from Eshell, it will not""" start="00:14:20.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""actually run in a separate buffer, but the output will go to""" start="00:14:25.281" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""the Eshell buffer.""" start="00:14:31.181" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Processes""" start="00:14:54.400" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""We can run the interactive command list-processes to see""" start="00:14:54.400" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""all the processes running for our current Emacs session.""" start="00:14:59.581" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""In Eshell, we can run the command &quot;jobs&quot; to get the same list.""" start="00:15:11.747" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""This will show the process name, process buffer name,""" start="00:15:17.647" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""process ID, and some other information. We can select the""" start="00:15:22.814" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""process buffer in the process list to bring up that process""" start="00:15:28.614" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""buffer.""" start="00:15:32.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""We can also use the interactive command signal-process to""" start="00:15:42.414" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""send any signal to a process, including &quot;stop&quot; to suspend the""" start="00:15:47.047" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""process, &quot;continue&quot; to resume the process, and &quot;interrupt&quot; or""" start="00:15:52.981" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""kill to terminate the process.""" start="00:15:58.381" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Redirecting and pipelining input and output""" start="00:17:00.180" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""Regarding redirecting and pipelining input and output,""" start="00:17:00.180" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Eshell does support redirection similar to Bash, so you can""" start="00:17:04.814" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""overwrite and append to files and some other objects. Input""" start="00:17:11.614" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""redirection is not yet implemented, but it is on the Eshell""" start="00:17:17.047" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""to-do list. Eshell also has pipes. The default pipe, which""" start="00:17:22.381" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""uses the familiar vertical bar symbol, pipes the data""" start="00:17:29.214" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""between the commands using an intermediate Emacs buffer.""" start="00:17:33.221" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""This, while usually quite practical, is less efficient""" start="00:17:36.981" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""than the system pipe. Therefore, Eshell also makes""" start="00:17:41.201" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""available a star-modified version, which uses the system""" start="00:17:46.320" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""pipe through a call to your system shell.""" start="00:17:50.147" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""So we can do things like""" start="00:17:56.881" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""direct output to a file.""" start="00:18:02.340" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""We're unfortunately not able to do input redirection, but""" start="00:18:15.100" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""we can use pipes.""" start="00:18:20.241" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Elisp can manipulate and tie together processes in various""" start="00:18:41.760" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""ways, such as process filters and pipe processes, but I""" start="00:18:45.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""won't attempt to cover that. I feel like you should mention""" start="00:18:51.000" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""again that we have two kinds of pipes here available. So this""" start="00:18:56.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""pipe, the standard one, will pipe the data through Emacs""" start="00:19:02.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""buffers. That's very practical in most cases, but it is less""" start="00:19:09.240" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""efficient than piping through the system pipe. So Eshell""" start="00:19:16.760" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""makes available another symbol for that, star, vertical""" start="00:19:22.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""bar, that allows you to explicitly use the system pipe.""" start="00:19:28.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Regarding scripting: Of course, using Emacs makes""" start="00:19:38.340" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""available all the power of the Elisp API and third-party""" start="00:19:43.600" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""packages, so we have that out of the gate. Eshell also has""" start="00:19:47.960" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""control flow statements, like an &quot;if&quot; construct and a &quot;for&quot;""" start="00:19:54.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""construct. See the Eshell info manual, section 3.7, for""" start="00:19:59.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""more details.""" start="00:20:06.520" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Scripts""" start="00:20:09.440" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""And if you wish to write a script entirely in Eshell syntax,""" start="00:20:09.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""and store it in a separate file, this is possible with recent""" start="00:20:13.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""versions of Emacs.""" start="00:20:18.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Here's an example of a brief script that I wrote.""" start="00:20:31.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Unfortunately, an eshell mode for proper syntax""" start="00:20:37.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""highlighting is not yet available, but hopefully that will""" start="00:20:42.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""be forthcoming. Note that Eshell syntax allows elisp""" start="00:20:46.280" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""forms to be interspersed with regular command form for""" start="00:20:51.280" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""additional scripting power. We will discuss this a little""" start="00:20:55.080" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""more later.""" start="00:20:58.760" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""File system management""" start="00:21:11.780" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""Regarding file system management. In Emacs, many of the""" start="00:21:11.780" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""common file system operations are available as""" start="00:21:16.760" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""interactive commands. For example, M-x cd, to change your""" start="00:21:20.240" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""buffer's current working directory, and other M-x commands""" start="00:21:26.760" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""such as make-directory""" start="00:21:32.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""chmod,""" start="00:21:40.780" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""and delete-file. Of course, you can also drop into Eshell,""" start="00:21:43.260" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""or use M-x eshell-command to run the usual external commands""" start="00:21:53.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""for file system manipulation. Also, a file manager is built""" start="00:22:00.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""into Emacs, which can be run by calling M-x dired.""" start="00:22:07.040" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""The directory editor is powerful, but it is a bit strange to""" start="00:22:19.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""folks expecting something like Midnight Commander or the""" start="00:22:24.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""GNOME file manager. It gives us a number of helpful features""" start="00:22:28.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""like the ability to mark files, and to run elisp functions on""" start="00:22:35.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""them, and some other interesting ways to manipulate and""" start="00:22:44.700" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""rename the files. However, third-party Emacs extensions""" start="00:22:48.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""such as Midnight Commander Mode and Sunrise Commander are""" start="00:22:54.080" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""available to provide a Midnight Commander experience, for those who""" start="00:22:58.480" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""prefer that sort of file management.""" start="00:23:03.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Emacs also has the nifty TRAMP functionality built in,""" start="00:23:10.320" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""which allows you, most of the time, to easily edit files on""" start="00:23:14.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""other computers, as well as manipulate the file system.""" start="00:23:19.160" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""This transparently works through SSH and some other""" start="00:23:23.180" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""protocols that you can specify.""" start="00:23:27.840" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Networking""" start="00:23:43.560" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""Regarding networking features, I don't have a lot of""" start="00:23:43.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""interesting things to say about this at the present, so I'll""" start="00:23:48.160" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""skip through this quickly. But if you do a little research,""" start="00:23:51.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""you will see that Emacs has a lot of functionality relating""" start="00:23:54.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""to making network connections, interacting with the web,""" start="00:23:58.800" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""and such like, both built-in and in available packages, as""" start="00:24:02.780" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""well as modes for doing things like Web browsing and Gemini""" start="00:24:07.860" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""browsing. And of course, you can run the usual standard""" start="00:24:14.400" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""networking commands for your system through Eshell.""" start="00:24:20.600" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""A brief tour of Eshell""" start="00:24:30.120" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""So having put forward the main arguments for this talk, I""" start="00:24:30.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""would like to take some time now to give a brief tour of a few of""" start="00:24:33.760" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""the features of Eshell, the Emacs shell. It bears""" start="00:24:38.200" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""emphasizing that Eshell is not a drop-in replacement for""" start="00:24:43.800" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Bash, or even a Bash clone, though I believe the developers""" start="00:24:47.000" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""are trying to make much of the syntax very similar. Also,""" start="00:24:51.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Eshell is not a terminal emulator, and it will not display""" start="00:24:56.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""correctly applications which use advanced ANSI control""" start="00:25:00.480" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""codes. However, Eshell can be configured to be aware of such""" start="00:25:04.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""applications, and to run them automatically within the""" start="00:25:10.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Emacs terminal emulator when launched. See section 5.1 of""" start="00:25:13.301" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""the Eshell manual titled Visual Commands.""" start="00:25:19.941" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Though Eshell is not Bash, it has multiple features,""" start="00:25:32.540" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""pertaining mainly to its by-design Emacs integration,""" start="00:25:36.760" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""which may make it more appealing to use than Bash or another""" start="00:25:40.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""shell.""" start="00:25:44.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""For one, Eshell allows entering commands on the command""" start="00:25:48.160" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""line that are space and new line separated, without""" start="00:25:52.040" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""parentheses. Of course, all the other shells do this. But""" start="00:25:55.961" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""within Eshell, it is possible to enter internal Emacs""" start="00:26:01.281" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""functions, as well as external commands.""" start="00:26:06.281" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""This allows us to do things like this.""" start="00:26:13.240" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""As far as I understand, it is possible to enter any Emacs""" start="00:26:45.740" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""function on the Eshell command line. However, some special""" start="00:26:49.760" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""syntax may be required if you are trying to pass in something""" start="00:26:53.960" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""that is not a string or a number.""" start="00:26:58.400" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""As you might have noticed in the last example, Eshell makes""" start="00:27:04.380" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""it possible to use an Emacs buffer as a sink for output. It""" start="00:27:07.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""also allows using a buffer as a source of input, though this""" start="00:27:12.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""is slightly more complicated, since the buffer must be""" start="00:27:18.040" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""converted to a string first. I have distilled this down into""" start="00:27:21.840" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""my own function, named with the &quot;at&quot; symbol.""" start="00:27:27.200" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""And I will provide the brief snippet of code for this later.""" start="00:27:36.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""So to give an example, here's our messages buffer.""" start="00:27:54.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""And from Eshell, we can do something like this.""" start="00:28:02.500" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Let's say here we wanted to grab our messages buffer to see""" start="00:28:29.780" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""everything that we had been loading during the startup""" start="00:28:34.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""process.""" start="00:28:38.080" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""So you can see how that could be very handy in a number of""" start="00:28:48.060" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""scenarios.""" start="00:28:51.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""I wanted to briefly mention that we have a helpful function""" start="00:28:55.060" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""here called eshell-insert-buffer-name,""" start="00:29:00.240" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""which allows us to insert a buffer name into the current""" start="00:29:11.120" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""buffer at point using completion,""" start="00:29:15.360" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""which can save you a lot of typing.""" start="00:29:24.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Another nice feature of Eshell""" start="00:29:32.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""is that it allows integrating ELisp into the command line""" start="00:29:37.220" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""call. Let's give another example. Say we wanted to echo the""" start="00:29:41.200" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""date to an event file or an event log.""" start="00:29:48.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""I should probably take a moment to explain this asterisk""" start="00:29:56.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""that I'm occasionally using. So since Emacs, or excuse me,""" start="00:30:01.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""since Eshell can use internal or external Emacs, excuse me,""" start="00:30:07.000" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""internal Emacs commands or external commands, it may""" start="00:30:11.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""sometimes be necessary to clarify which one you want to use,""" start="00:30:17.000" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""since the names may overlap. Since my Eshell is configured""" start="00:30:22.380" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""by default to prefer the internal Emacs functions, then""" start="00:30:27.080" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""sometimes I have to use the asterisk to specify that I want""" start="00:30:32.320" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""the external version.""" start="00:30:37.800" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Here I can insert a bit of Elisp,""" start="00:30:42.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""and then redirect the output to the event log.""" start="00:31:03.180" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Last, I want to mention that there are some optional Eshell""" start="00:31:18.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""modules in Emacs, not turned on by default, which provide""" start="00:31:22.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""additional nifty features.""" start="00:31:27.160" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""On my system, I have most of the optional modules turned on.""" start="00:31:40.540" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""An interesting module is eshell-smart, which does various""" start="00:31:58.320" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""things with cursor positioning and scrolling, so as to make""" start="00:32:03.200" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""editing commands and reviewing output easier.""" start="00:32:07.320" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Let's say I was to change directory to my boot directory""" start="00:32:18.340" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""and use a command which involves lots of output.""" start="00:32:30.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""You'll notice right away that the cursor positioning is set""" start="00:32:39.900" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""such that I'm immediately able to view the top of the output.""" start="00:32:44.360" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Also, I'm able to use the space bar to page through the""" start="00:32:48.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""output.""" start="00:32:52.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""So this is an opinionated feature, which assumes that""" start="00:32:56.080" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""you're likely going to want to review the output""" start="00:33:01.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""immediately, or that you often will. Of course, you can""" start="00:33:05.400" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""always jump to the end.""" start="00:33:10.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Also, after a command is entered, the cursor is immediately""" start="00:33:19.980" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""repositioned to make it easy to edit the command.""" start="00:33:23.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""And also, if I don't want to edit the command, and I do not want""" start="00:33:53.020" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""to review the output, I can simply start typing another""" start="00:33:56.520" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""command.""" start="00:33:59.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""So that covers the brief tour of Eshell features.""" start="00:34:11.260" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""And that basically ends my talk.""" start="00:34:17.760" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Login shell""" start="00:34:21.128" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""However, a handful of""" start="00:34:21.128" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""viewers might be wondering, is it possible to set Emacs to be""" start="00:34:22.381" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""my login shell to completely replace bash in your login""" start="00:34:28.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""experience? The answer is yes, but in practice there are""" start="00:34:37.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""various difficulties involved which might make it not""" start="00:34:43.720" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""worth the trouble.""" start="00:34:47.400" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Before doing this, you'll have to answer a few initial""" start="00:35:00.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""questions. Do you want to make a new Emacs instance every""" start="00:35:03.480" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""time you log in, or do you want it to connect to an Emacs""" start="00:35:09.520" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""server? Which is popular among Emacs users, to reuse the""" start="00:35:13.760" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""session, or to connect to the existing session. Also, do you""" start="00:35:20.600" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""want a different result, whether in graphical or a terminal""" start="00:35:26.600" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""environment? And are you okay with your initialization""" start="00:35:30.640" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""file being run every time you log in, including every new tab""" start="00:35:34.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""you open in a terminal emulator? If we assume that you are""" start="00:35:39.560" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""using a system with /etc/passwd user management, you get""" start="00:35:44.521" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""one field to specify the name of the shell program that you""" start="00:35:50.340" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""want to use, and no arguments are allowed. So maybe you can""" start="00:35:54.000" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""see how this might be challenging, depending on your""" start="00:35:58.480" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""answers to the previous questions. You can work around""" start="00:36:02.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""these issues in various ways, like modifying the""" start="00:36:06.880" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""authentication system, or by specifying a script for your""" start="00:36:10.480" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""login shell. But if your normal workflow is to simply log in""" start="00:36:15.440" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""and start Emacs and run that Emacs session until your next""" start="00:36:21.800" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""reboot, then it probably isn't worth the bother.""" start="00:36:25.680" video="mainVideo-shell" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Resources""" start="00:36:36.980" video="mainVideo-shell" id="subtitle"]]</div>[[!template text="""So thank you for listening to my talk, Emacs as a Shell, by""" start="00:36:36.980" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Christopher Howard for Emacs Conference 2024.""" start="00:36:42.000" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""At the bottom of this page, you can see a link to the""" start="00:36:46.860" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""repository containing the brief amount of code that was""" start="00:36:51.520" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""featured here in this video, as well as a link to my personal""" start="00:36:56.920" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Gemini gemlog, as well as to a Web portal version of that.""" start="00:37:03.680" video="mainVideo-shell" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:37:10.280" video="mainVideo-shell" id="subtitle"]]
+
+</div>
+
+Captioner: mark
+
Questions or comments? Please e-mail [christopher@librehacker.com](mailto:christopher@librehacker.com?subject=Comment%20for%20EmacsConf%202023%20shell%3A%20Emacs%20as%20a%20shell)
diff --git a/2024/info/shell-before.md b/2024/info/shell-before.md
index ad10ddae..6003d0e5 100644
--- a/2024/info/shell-before.md
+++ b/2024/info/shell-before.md
@@ -1,18 +1,28 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sat 2024-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="shell">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect stroke-width="3" x="404" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 38-min talk; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Ready to stream
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T18:55:00Z" end="2024-12-07T19:35:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~1:55 PM - 2:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~12:55 PM - 1:35 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~11:55 AM - 12:35 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~10:55 AM - 11:35 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~6:55 PM - 7:35 PM UTC <br />Saturday, Dec 7 2024, ~7:55 PM - 8:35 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~8:55 PM - 9:35 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~12:25 AM - 1:05 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~2:55 AM - 3:35 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~3:55 AM - 4:35 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Format: 38-min talk ; Q&A: IRC
+Status: TO_FOLLOW_UP
+
+<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
+04:50.160 What is a shell?
+09:26.912 Launching external processes
+11:57.300 Environment variables
+14:54.400 Processes
+17:00.180 Redirecting and pipelining input and output
+20:09.440 Scripts
+21:11.780 File system management
+23:43.560 Networking
+24:30.120 A brief tour of Eshell
+34:21.128 Login shell
+36:36.980 Resources
+"""]]<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/shell-nav.md b/2024/info/shell-nav.md
index f096c02c..1372a6cd 100644
--- a/2024/info/shell-nav.md
+++ b/2024/info/shell-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/secrets">Committing secrets with git using sops-mode</a>
-Next by time: <a href="/2024/talks/mcclim">Elisp and McCLIM</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/water">Watering my (digital) plant with Emacs timers</a>
+Next by track: <a href="/2024/talks/casual">Re-imagining the Emacs user experience with Casual Suite</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/students-after.md b/2024/info/students-after.md
index 5fbfb120..e1d4b45d 100644
--- a/2024/info/students-after.md
+++ b/2024/info/students-after.md
@@ -1,7 +1,455 @@
<!-- 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%20students%3A%20An%20example%20of%20a%20cohesive%20student%20workflow%20in%20Emacs)
+<div class="transcript transcript-mainVideo"><a name="students-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hello, my name is Daniel Pinkston. I'm in my last year of high""" start="00:00:00.000" video="mainVideo-students" id="subtitle"]]
+[[!template text="""school, about to go to university. About two and a half years""" start="00:00:04.640" video="mainVideo-students" id="subtitle"]]
+[[!template text="""ago, I discovered Emacs. My life has now been separated into""" start="00:00:07.520" video="mainVideo-students" id="subtitle"]]
+[[!template text="""two chapters: before and after Emacs. How could this tool be""" start="00:00:10.760" video="mainVideo-students" id="subtitle"]]
+[[!template text="""so impactful? Well, you'll just have to see. I made this talk""" start="00:00:14.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""for people who ask questions like this, but don't know where""" start="00:00:18.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""to start. When I started using Emacs for school, it took me a""" start="00:00:20.680" video="mainVideo-students" id="subtitle"]]
+[[!template text="""long time to find what I liked. There wasn't many examples of""" start="00:00:24.560" video="mainVideo-students" id="subtitle"]]
+[[!template text="""a full process for an organization. This talk was made to""" start="00:00:27.960" video="mainVideo-students" id="subtitle"]]
+[[!template text="""guide students like me, those who wanted more from their""" start="00:00:31.120" video="mainVideo-students" id="subtitle"]]
+[[!template text="""software workflow that they can learn and adapt from. My""" start="00:00:34.360" video="mainVideo-students" id="subtitle"]]
+[[!template text="""main idea was essentially explained by Zaiste in his""" start="00:00:37.600" video="mainVideo-students" id="subtitle"]]
+[[!template text="""EmacsConf presentation in 2019. He said something to the""" start="00:00:39.960" video="mainVideo-students" id="subtitle"]]
+[[!template text="""effect of, one of the great parts about Doom Emacs as a""" start="00:00:43.680" video="mainVideo-students" id="subtitle"]]
+[[!template text="""starting point is that it shows beginners how different""" start="00:00:46.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""packages mesh with each other. He says that people often""" start="00:00:48.600" video="mainVideo-students" id="subtitle"]]
+[[!template text="""have trouble seeing how to develop workflows using the""" start="00:00:51.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""thousands of packages Emacs has. In this talk, I introduce""" start="00:00:53.640" video="mainVideo-students" id="subtitle"]]
+[[!template text="""some Emacs tools and how they work together to improve a""" start="00:00:57.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""student's academic workflow. Let us commence. If you are""" start="00:00:59.520" video="mainVideo-students" id="subtitle"]]
+[[!template text="""watching this talk and have never heard of Emacs, it's a""" start="00:01:04.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""customizable text editor. When you become more""" start="00:01:07.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""experienced, it becomes your entire operating system. You""" start="00:01:10.480" video="mainVideo-students" id="subtitle"]]
+[[!template text="""just live inside of Emacs. It's also free as in free pencils""" start="00:01:13.560" video="mainVideo-students" id="subtitle"]]
+[[!template text="""and open source, which means that you don't have to pay to""" start="00:01:17.120" video="mainVideo-students" id="subtitle"]]
+[[!template text="""download Emacs and its source code. Emacs doesn't charge""" start="00:01:19.920" video="mainVideo-students" id="subtitle"]]
+[[!template text="""you a monthly subscription, nor does it steal all of your""" start="00:01:23.600" video="mainVideo-students" id="subtitle"]]
+[[!template text="""information. Yeah, I know, it's pretty crazy. In this talk,""" start="00:01:25.880" video="mainVideo-students" id="subtitle"]]
+[[!template text="""I introduce some Emacs tools and how they work together to""" start="00:01:31.120" video="mainVideo-students" id="subtitle"]]
+[[!template text="""improve a student's academic workflow. Earlier I read this""" start="00:01:33.560" video="mainVideo-students" id="subtitle"]]
+[[!template text="""post on this website that said, I can only imagine the great""" start="00:01:36.880" video="mainVideo-students" id="subtitle"]]
+[[!template text="""things you'd be able to learn and retain in your brain thanks""" start="00:01:40.880" video="mainVideo-students" id="subtitle"]]
+[[!template text="""to the great Emacs ecosystem. You've made the best choice,""" start="00:01:43.720" video="mainVideo-students" id="subtitle"]]
+[[!template text="""with far-going implications. I promise you not once, not""" start="00:01:47.760" video="mainVideo-students" id="subtitle"]]
+[[!template text="""even subtly, have I ever regretted having invested in""" start="00:01:51.440" video="mainVideo-students" id="subtitle"]]
+[[!template text="""learning Emacs. It's the best gift anyone can present to""" start="00:01:54.040" video="mainVideo-students" id="subtitle"]]
+[[!template text="""themself. You will forever feel indebted to your younger""" start="00:01:57.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""self for this gift. I guarantee that. I think that this is a""" start="00:02:00.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""real testament to the true power of Emacs. There's simply no""" start="00:02:03.840" video="mainVideo-students" id="subtitle"]]
+[[!template text="""other software like it. It's a complete and fitting""" start="00:02:07.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""solution for those who are willing to master it. Hopefully""" start="00:02:09.840" video="mainVideo-students" id="subtitle"]]
+[[!template text="""by now you're invested in learning Emacs. But before we jump""" start="00:02:12.760" video="mainVideo-students" id="subtitle"]]
+[[!template text="""into the technicalities of everything, we should outline""" start="00:02:16.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""the main things that you need it to do as a student. The best""" start="00:02:18.920" video="mainVideo-students" id="subtitle"]]
+[[!template text="""students have their system figured out so that it can do""" start="00:02:22.040" video="mainVideo-students" id="subtitle"]]
+[[!template text="""these things quickly and efficiently. They should have no""" start="00:02:24.280" video="mainVideo-students" id="subtitle"]]
+[[!template text="""problem quickly organizing what they need to do along with""" start="00:02:27.240" video="mainVideo-students" id="subtitle"]]
+[[!template text="""capturing information from their classes. But you may be""" start="00:02:29.840" video="mainVideo-students" id="subtitle"]]
+[[!template text="""wondering, how does Emacs do all that? Well, it does it with""" start="00:02:33.000" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Org Mode. It was built to be an outliner for note-taking and""" start="00:02:36.960" video="mainVideo-students" id="subtitle"]]
+[[!template text="""list management, exactly what a student needs. One of the""" start="00:02:41.680" video="mainVideo-students" id="subtitle"]]
+[[!template text="""key features is that it's plain text, which means that you""" start="00:02:45.240" video="mainVideo-students" id="subtitle"]]
+[[!template text="""can migrate it between computers, and it's not a""" start="00:02:47.960" video="mainVideo-students" id="subtitle"]]
+[[!template text="""proprietary format. For those of you who have heard of""" start="00:02:50.080" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Markdown, Org is similar in that it's a markup language.""" start="00:02:52.920" video="mainVideo-students" id="subtitle"]]
+[[!template text="""However, it's a bit older, and it goes way beyond Markdown's""" start="00:02:55.800" video="mainVideo-students" id="subtitle"]]
+[[!template text="""simple text formatting, with its scheduling, task""" start="00:02:59.080" video="mainVideo-students" id="subtitle"]]
+[[!template text="""management, and organization features, all captured""" start="00:03:01.480" video="mainVideo-students" id="subtitle"]]
+[[!template text="""within plain text simplicity. This slide shows off one of my""" start="00:03:04.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""notes from a heavily customized Emacs window. Yours""" start="00:03:07.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""probably won't look like this from the start, but you can""" start="00:03:10.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""personalize its appearance with custom themes.""" start="00:03:12.440" video="mainVideo-students" id="subtitle"]]
+[[!template text="""It's finally time to get into the technicalities. What you""" start="00:03:17.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""need to do with your notes in Org Mode is create, search, and""" start="00:03:20.000" video="mainVideo-students" id="subtitle"]]
+[[!template text="""possibly publish them. I prefer Denote for creating my""" start="00:03:22.640" video="mainVideo-students" id="subtitle"]]
+[[!template text="""notes, but there are many Emacs packages for that. Denote is""" start="00:03:25.560" video="mainVideo-students" id="subtitle"]]
+[[!template text="""just lightweight and gets the job done. I used to use Org""" start="00:03:29.320" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Roam, but I didn't need or use all of its features. I also use""" start="00:03:32.280" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Anki, a free and open source flashcard program, but of""" start="00:03:35.800" video="mainVideo-students" id="subtitle"]]
+[[!template text="""course, I make all my flashcards in Org Mode. For searching,""" start="00:03:38.360" video="mainVideo-students" id="subtitle"]]
+[[!template text="""I often use find and grep, which are both standard""" start="00:03:41.320" video="mainVideo-students" id="subtitle"]]
+[[!template text="""utilities on Linux. Other operating systems probably have""" start="00:03:43.560" video="mainVideo-students" id="subtitle"]]
+[[!template text="""a tool to replicate this functionality. The final item is""" start="00:03:46.800" video="mainVideo-students" id="subtitle"]]
+[[!template text="""exporting. There are many scenarios in which I want to""" start="00:03:50.520" video="mainVideo-students" id="subtitle"]]
+[[!template text="""publish my notes to share them with teachers or peers. One of""" start="00:03:52.960" video="mainVideo-students" id="subtitle"]]
+[[!template text="""my favorite features of Org Mode is the exportability of the""" start="00:03:56.240" video="mainVideo-students" id="subtitle"]]
+[[!template text="""notes you make. This presentation was actually made in Org""" start="00:03:58.480" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Mode, and so are all of my lab reports and essays for school. I""" start="00:04:01.720" video="mainVideo-students" id="subtitle"]]
+[[!template text="""also write my webpage articles in Org Mode, which a program""" start="00:04:04.560" video="mainVideo-students" id="subtitle"]]
+[[!template text="""called Hugo converts into static HTML. So far, you haven't""" start="00:04:10.040" video="mainVideo-students" id="subtitle"]]
+[[!template text="""actually seen what it's like to use these tools. Here's a""" start="00:04:15.360" video="mainVideo-students" id="subtitle"]]
+[[!template text="""quick demo of how I track what I need to do. First, I always""" start="00:04:18.040" video="mainVideo-students" id="subtitle"]]
+[[!template text="""open up my todo.org file in my denote directory. For school""" start="00:04:21.280" video="mainVideo-students" id="subtitle"]]
+[[!template text="""assignments, I have a heading under Inbox where I have""" start="00:04:24.800" video="mainVideo-students" id="subtitle"]]
+[[!template text="""entries for each class I'm enrolled in. Each class's""" start="00:04:26.840" video="mainVideo-students" id="subtitle"]]
+[[!template text="""heading has a tag on it, which the assignment inherits as a""" start="00:04:29.920" video="mainVideo-students" id="subtitle"]]
+[[!template text="""subheading. Here's an example assignment. I have a test in""" start="00:04:32.840" video="mainVideo-students" id="subtitle"]]
+[[!template text="""physics next next Wednesday and the deadline to finish""" start="00:04:37.000" video="mainVideo-students" id="subtitle"]]
+[[!template text="""studying for it is the day that I'm taking it. When I plan my""" start="00:04:39.600" video="mainVideo-students" id="subtitle"]]
+[[!template text="""studying, I run the keybind for org-schedule to schedule the""" start="00:04:42.360" video="mainVideo-students" id="subtitle"]]
+[[!template text="""day on which I will study it. I can also mark it as the highest""" start="00:04:45.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""priority, making it the most important thing to do. I can""" start="00:04:48.840" video="mainVideo-students" id="subtitle"]]
+[[!template text="""also open up my agenda to see my tasks. I've cleaned it up as to""" start="00:04:52.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""not reveal any of my nefarious plans. This agenda is""" start="00:04:56.440" video="mainVideo-students" id="subtitle"]]
+[[!template text="""customized, but there are many tutorials on how to do this.""" start="00:04:59.680" video="mainVideo-students" id="subtitle"]]
+[[!template text="""My agenda has been the most transforming part of my student""" start="00:05:03.240" video="mainVideo-students" id="subtitle"]]
+[[!template text="""experience, and I've gotten a lot better at managing what I""" start="00:05:05.600" video="mainVideo-students" id="subtitle"]]
+[[!template text="""need to do. Next, I'll show you what I like to do to take notes.""" start="00:05:08.240" video="mainVideo-students" id="subtitle"]]
+[[!template text="""The main entry point for a new note is always starting with""" start="00:05:13.120" video="mainVideo-students" id="subtitle"]]
+[[!template text="""M-x denote. You fill out a couple of customizable prompts""" start="00:05:16.000" video="mainVideo-students" id="subtitle"]]
+[[!template text="""that will ask for values of the note. I'll start by making a""" start="00:05:19.680" video="mainVideo-students" id="subtitle"]]
+[[!template text="""new note, which we'll call test note. Then we'll give it a key""" start="00:05:23.120" video="mainVideo-students" id="subtitle"]]
+[[!template text="""for what category it's under. For this, I usually put the""" start="00:05:26.360" video="mainVideo-students" id="subtitle"]]
+[[!template text="""subject of the class that I'm doing this note for, be it""" start="00:05:29.360" video="mainVideo-students" id="subtitle"]]
+[[!template text="""programming, English, history, or science. Try to keep""" start="00:05:32.320" video="mainVideo-students" id="subtitle"]]
+[[!template text="""them short. And then Shazam, we have ourselves a brand new""" start="00:05:35.560" video="mainVideo-students" id="subtitle"]]
+[[!template text="""note which we can start typing away in. The cool thing about""" start="00:05:39.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""the note is you don't have to manually name your note files.""" start="00:05:42.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""It uses a standard convention using the time, the title, and""" start="00:05:45.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""the keywords of the note to make it unique. You can even make a""" start="00:05:49.480" video="mainVideo-students" id="subtitle"]]
+[[!template text="""meta note, a note about notes, to show a list of notes under a""" start="00:05:53.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""certain keyword. The final step in creation is flashcards.""" start="00:05:56.600" video="mainVideo-students" id="subtitle"]]
+[[!template text="""There is a great package called Anki Editor that makes Emacs""" start="00:06:01.320" video="mainVideo-students" id="subtitle"]]
+[[!template text="""able to push cards into Anki. There isn't much to""" start="00:06:04.640" video="mainVideo-students" id="subtitle"]]
+[[!template text="""overcomplicate here, it's just content on front and back,""" start="00:06:08.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""sometimes with images and complete the phrase. You can also""" start="00:06:11.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""set up LaTeX math formatting, but I don't really use it that""" start="00:06:14.600" video="mainVideo-students" id="subtitle"]]
+[[!template text="""much. If you're living in Emacs all the time, you may want""" start="00:06:17.320" video="mainVideo-students" id="subtitle"]]
+[[!template text="""some creature comforts. These are some of my favorite. Org""" start="00:06:20.600" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Download is a package that allows you to paste images from""" start="00:06:24.560" video="mainVideo-students" id="subtitle"]]
+[[!template text="""your clipboard into an org file.""" start="00:06:26.960" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Logos is a text narrowing tool that helps you restrict what""" start="00:06:28.240" video="mainVideo-students" id="subtitle"]]
+[[!template text="""text you can see and focus on what you're writing. It extends""" start="00:06:37.320" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Emacs default narrowing, also adding functionality for""" start="00:06:40.480" video="mainVideo-students" id="subtitle"]]
+[[!template text="""quickly switching to headings for a presentation look. It""" start="00:06:43.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""can remove your mode line and center your text for better""" start="00:06:45.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""focus. org-fragtog allows you to move between previews of""" start="00:06:48.240" video="mainVideo-students" id="subtitle"]]
+[[!template text="""your LaTeX formulas and the unrendered syntax.""" start="00:06:53.240" video="mainVideo-students" id="subtitle"]]
+[[!template text="""pdf-view-mode is a fully fledged PDF reader, complete with""" start="00:06:55.640" video="mainVideo-students" id="subtitle"]]
+[[!template text="""annotations and org syntax, highlighting, and clickable""" start="00:07:00.680" video="mainVideo-students" id="subtitle"]]
+[[!template text="""links.""" start="00:07:03.440" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Something you may want to consider is digital versus""" start="00:07:03.920" video="mainVideo-students" id="subtitle"]]
+[[!template text="""handwritten notes. There have been several talks in the""" start="00:07:09.720" video="mainVideo-students" id="subtitle"]]
+[[!template text="""past about how to integrate handwritten notes into Emacs,""" start="00:07:12.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""such as retyping them or scanning them in with an OCR tool. I""" start="00:07:14.800" video="mainVideo-students" id="subtitle"]]
+[[!template text="""don't think that type notes are the only way that you should""" start="00:07:20.240" video="mainVideo-students" id="subtitle"]]
+[[!template text="""take notes, but if you do try writing, at least get some nice""" start="00:07:21.960" video="mainVideo-students" id="subtitle"]]
+[[!template text="""stationery. I've seen people ask online to YouTubers and""" start="00:07:25.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Twitch streamers asking, what is your keyboard? What is""" start="00:07:29.080" video="mainVideo-students" id="subtitle"]]
+[[!template text="""your window manager? I understand that they're curious,""" start="00:07:32.480" video="mainVideo-students" id="subtitle"]]
+[[!template text="""but cosplaying as a productive person by using the same""" start="00:07:35.520" video="mainVideo-students" id="subtitle"]]
+[[!template text="""tools won't accomplish anything. Emacs will not make you a""" start="00:07:37.920" video="mainVideo-students" id="subtitle"]]
+[[!template text="""productive person. It can be a significant time investment""" start="00:07:41.160" video="mainVideo-students" id="subtitle"]]
+[[!template text="""because of how customizable it is. However, I believe it""" start="00:07:44.440" video="mainVideo-students" id="subtitle"]]
+[[!template text="""will make it easier for you to be productive, as it certainly""" start="00:07:47.880" video="mainVideo-students" id="subtitle"]]
+[[!template text="""has for me. This was just an example workflow to show""" start="00:07:50.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""prospective students how they can use Emacs for their""" start="00:07:53.520" video="mainVideo-students" id="subtitle"]]
+[[!template text="""needs.""" start="00:07:56.120" video="mainVideo-students" id="subtitle"]]
+[[!template text="""Even if you don't end up using Emacs in the end, you can still""" start="00:07:56.560" video="mainVideo-students" id="subtitle"]]
+[[!template text="""apply most of its ideas to other software. It just won't be as""" start="00:08:02.000" video="mainVideo-students" id="subtitle"]]
+[[!template text="""customizable and extensible as Emacs is. Thank you for""" start="00:08:04.720" video="mainVideo-students" id="subtitle"]]
+[[!template text="""listening to my talk. It's been a great pleasure to finally""" start="00:08:10.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""take part in this conference in some capacity, and I'm glad I""" start="00:08:12.520" video="mainVideo-students" id="subtitle"]]
+[[!template text="""was given a chance. To all the students who may try Emacs in""" start="00:08:15.360" video="mainVideo-students" id="subtitle"]]
+[[!template text="""the future, good luck because there might not be any going""" start="00:08:18.400" video="mainVideo-students" id="subtitle"]]
+[[!template text="""back. If you have any questions, feel free to shoot me an""" start="00:08:21.200" video="mainVideo-students" id="subtitle"]]
+[[!template text="""email. Thank you for your time.""" start="00:08:24.240" video="mainVideo-students" id="subtitle"]]
+
+</div><div class="transcript transcript-qanda"><a name="students-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""And I believe we are live. Hi, Daniel, how are you doing? I'm""" start="00:00:00.000" video="qanda-students" id="subtitle"]]
+[[!template text="""doing great. It's cold outside, but it's nice in here, yeah.""" start="00:00:11.120" video="qanda-students" id="subtitle"]]
+[[!template text="""I can assure you it's very cold in my own place as well. We do""" start="00:00:17.200" video="qanda-students" id="subtitle"]]
+[[!template text="""EmacsConf always in December and that's always when it's""" start="00:00:21.440" video="qanda-students" id="subtitle"]]
+[[!template text="""particularly cold where I live and I assume where you live as""" start="00:00:24.680" video="qanda-students" id="subtitle"]]
+[[!template text="""well. So, don't worry, we'll try to keep you warm with""" start="00:00:27.480" video="qanda-students" id="subtitle"]]
+[[!template text="""interesting questions. But first, thank you for taking the""" start="00:00:31.040" video="qanda-students" id="subtitle"]]
+[[!template text="""time out of your busy high school life to make a presentation""" start="00:00:35.040" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you have any thoughts about the process of recording something for a conference?""" start="00:00:38.360" video="qanda-students" id="subtitle"]]</div>[[!template text="""about Emacs. Do you have any thoughts about the process of""" start="00:00:38.360" video="qanda-students" id="subtitle"]]
+[[!template text="""recording something for a conference? Because I assume""" start="00:00:41.440" video="qanda-students" id="subtitle"]]
+[[!template text="""it's one of the first ones you're ever doing.""" start="00:00:44.400" video="qanda-students" id="subtitle"]]
+[[!template text="""I think it was not as difficult as I thought it would be. I just""" start="00:00:47.280" video="qanda-students" id="subtitle"]]
+[[!template text="""recorded in my basement and prepared some notes""" start="00:00:55.880" video="qanda-students" id="subtitle"]]
+[[!template text="""beforehand. I think it was definitely helpful to have Emacs""" start="00:01:04.480" video="qanda-students" id="subtitle"]]
+[[!template text="""as a tool for that, because I made my presentation with""" start="00:01:08.640" video="qanda-students" id="subtitle"]]
+[[!template text="""Beamer. Right. I mean, it's amazing to see so many of the""" start="00:01:11.960" video="qanda-students" id="subtitle"]]
+[[!template text="""tools because, you know, you've shown Emacs, but you've""" start="00:01:18.560" video="qanda-students" id="subtitle"]]
+[[!template text="""shown Beamer. You've shown tools that are about twice as old""" start="00:01:22.520" video="qanda-students" id="subtitle"]]
+[[!template text="""as you are yourself, which is amazing when you think about""" start="00:01:27.400" video="qanda-students" id="subtitle"]]
+[[!template text="""it. But I think many people in the audience can actually""" start="00:01:30.240" video="qanda-students" id="subtitle"]]
+[[!template text="""relate to your discovery of those tools because we were""" start="00:01:33.200" video="qanda-students" id="subtitle"]]
+[[!template text="""pretty much, I mean a lot of us were your age when we started""" start="00:01:36.480" video="qanda-students" id="subtitle"]]
+[[!template text="""playing with those tools so it's like there's a little bit of""" start="00:01:40.680" video="qanda-students" id="subtitle"]]
+[[!template text="""nostalgia that we feel looking at your presentation""" start="00:01:44.000" video="qanda-students" id="subtitle"]]
+[[!template text="""because we are, we can see the excitement behind everything""" start="00:01:45.760" video="qanda-students" id="subtitle"]]
+[[!template text="""you've touched and that's great for us because it brings us""" start="00:01:48.720" video="qanda-students" id="subtitle"]]
+[[!template text="""back maybe 10 or 20 years in the past and for others perhaps 30""" start="00:01:51.920" video="qanda-students" id="subtitle"]]
+[[!template text="""or 40 years so that's kind of amazing.""" start="00:01:55.920" video="qanda-students" id="subtitle"]]
+[[!template text="""How about we start taking some questions? So, just for""" start="00:02:01.080" video="qanda-students" id="subtitle"]]
+[[!template text="""timekeeping, we have until 20 of the current hours, which is""" start="00:02:05.040" video="qanda-students" id="subtitle"]]
+[[!template text="""8 minutes and 30 seconds to cover as many questions as""" start="00:02:09.200" video="qanda-students" id="subtitle"]]
+[[!template text="""possible. Now, if we might take the first one. So, Corwin,""" start="00:02:12.080" video="qanda-students" id="subtitle"]]
+[[!template text="""can you scroll down to the questions? Yes. I'll be reading""" start="00:02:16.600" video="qanda-students" id="subtitle"]]
+[[!template text="""you the questions just to make it a little easier for you,""" start="00:02:20.360" video="qanda-students" id="subtitle"]]
+[[!template text="""Daniel, to answer them.""" start="00:02:22.320" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I use org-roam for notes and find it very useful - have you considered it?""" start="00:02:23.792" video="qanda-students" id="subtitle"]]</div>[[!template text="""I use Org-roam for notes and find it""" start="00:02:23.792" video="qanda-students" id="subtitle"]]
+[[!template text="""very useful. Have you considered it? Uh, yeah, that's""" start="00:02:26.000" video="qanda-students" id="subtitle"]]
+[[!template text="""actually where I started out for taking notes. Um, that,""" start="00:02:30.640" video="qanda-students" id="subtitle"]]
+[[!template text="""that I moved to Denote because I didn't use all of its""" start="00:02:35.520" video="qanda-students" id="subtitle"]]
+[[!template text="""features, um, for, Org Roam, I meant.""" start="00:02:38.720" video="qanda-students" id="subtitle"]]
+[[!template text="""Uh, I also didn't, didn't really like the dependency on an""" start="00:02:44.320" video="qanda-students" id="subtitle"]]
+[[!template text="""external database. Uh, it just like took a while for, um,""" start="00:02:47.000" video="qanda-students" id="subtitle"]]
+[[!template text="""stuff to index if I moved it between like, uh, using sync""" start="00:02:51.920" video="qanda-students" id="subtitle"]]
+[[!template text="""thing. laptop and my desktop. Yeah. Yeah, it's definitely""" start="00:02:56.880" video="qanda-students" id="subtitle"]]
+[[!template text="""something, I mean, I co-maintain Org Roam, so I'm fully aware""" start="00:03:03.680" video="qanda-students" id="subtitle"]]
+[[!template text="""of this problem with it. And yeah, SyncThing is not great to""" start="00:03:08.120" video="qanda-students" id="subtitle"]]
+[[!template text="""sync a database, a SQLite database that we use. And, I mean,""" start="00:03:12.160" video="qanda-students" id="subtitle"]]
+[[!template text="""whichever solution you use, whatever works for you is good.""" start="00:03:16.640" video="qanda-students" id="subtitle"]]
+[[!template text="""Orgrim was kind of thought in terms of scalability for""" start="00:03:19.400" video="qanda-students" id="subtitle"]]
+[[!template text="""people who had, you know, thousands of notes with thousands""" start="00:03:21.920" video="qanda-students" id="subtitle"]]
+[[!template text="""of links inside of them. so perhaps it's not adapted to your""" start="00:03:26.200" video="qanda-students" id="subtitle"]]
+[[!template text="""note-taking style right now, but perhaps it's something to""" start="00:03:28.920" video="qanda-students" id="subtitle"]]
+[[!template text="""keep in mind, you know, it's many tools and you use them when""" start="00:03:31.040" video="qanda-students" id="subtitle"]]
+[[!template text="""you need to. Colin, if we can switch the questions, I'm""" start="00:03:34.600" video="qanda-students" id="subtitle"]]
+[[!template text="""switching to the second one.""" start="00:03:39.600" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you use the Getting Things Done methodology as part of your Org workflow?""" start="00:03:40.880" video="qanda-students" id="subtitle"]]</div>[[!template text="""Do you use the Getting Things""" start="00:03:40.880" video="qanda-students" id="subtitle"]]
+[[!template text="""Done methodology as part of your Org workflow? So there's an""" start="00:03:42.160" video="qanda-students" id="subtitle"]]
+[[!template text="""interesting thing about that. I started with Org first and""" start="00:03:46.640" video="qanda-students" id="subtitle"]]
+[[!template text="""then I heard about Getting Things Done, so I didn't exactly""" start="00:03:50.040" video="qanda-students" id="subtitle"]]
+[[!template text="""design my workflow with that in mind, but I sort of""" start="00:03:54.960" video="qanda-students" id="subtitle"]]
+[[!template text="""reinvented it, I would say, not really, but I do a lot of""" start="00:04:01.680" video="qanda-students" id="subtitle"]]
+[[!template text="""the similar things, but I don't have the different TODO""" start="00:04:06.440" video="qanda-students" id="subtitle"]]
+[[!template text="""states like...""" start="00:04:09.440" video="qanda-students" id="subtitle"]]
+[[!template text="""I don't know an example because I didn't really look into it""" start="00:04:11.320" video="qanda-students" id="subtitle"]]
+[[!template text="""that much, but it would be like NEXT isn't the next thing""" start="00:04:17.280" video="qanda-students" id="subtitle"]]
+[[!template text="""you're going to do. But I don't think I...""" start="00:04:22.720" video="qanda-students" id="subtitle"]]
+[[!template text="""where I just write what I need to do and then schedule it and""" start="00:04:28.880" video="qanda-students" id="subtitle"]]
+[[!template text="""then look at my agenda for the next thing. Yeah, I mean, part""" start="00:04:35.240" video="qanda-students" id="subtitle"]]
+[[!template text="""of the beauty of using Emacs, Org Mode or using a methodology""" start="00:04:41.000" video="qanda-students" id="subtitle"]]
+[[!template text="""like Getting Things Done is that I think you need to find room""" start="00:04:45.960" video="qanda-students" id="subtitle"]]
+[[!template text="""in the method or the tool for you to organically do what you""" start="00:04:49.720" video="qanda-students" id="subtitle"]]
+[[!template text="""want. And it's okay to not do everything in a Getting Things""" start="00:04:53.520" video="qanda-students" id="subtitle"]]
+[[!template text="""Done methodology. I know a lot of people take issue""" start="00:04:57.280" video="qanda-students" id="subtitle"]]
+[[!template text="""with the tickler file, where you're supposed to put stuff to""" start="00:05:00.600" video="qanda-students" id="subtitle"]]
+[[!template text="""review in the future. For instance, if you don't want""" start="00:05:04.720" video="qanda-students" id="subtitle"]]
+[[!template text="""to work on this particular topic right now in your life, you""" start="00:05:07.320" video="qanda-students" id="subtitle"]]
+[[!template text="""decide, oh, I'd like to revisit this topic maybe in six""" start="00:05:10.440" video="qanda-students" id="subtitle"]]
+[[!template text="""months. And then you have this tickler file, which has""" start="00:05:14.680" video="qanda-students" id="subtitle"]]
+[[!template text="""entries and folders for each month of the year. And when six""" start="00:05:17.400" video="qanda-students" id="subtitle"]]
+[[!template text="""months comes and you find yourself at the beginning of the""" start="00:05:21.800" video="qanda-students" id="subtitle"]]
+[[!template text="""next month, you open the file and you see, oh there's the task""" start="00:05:24.040" video="qanda-students" id="subtitle"]]
+[[!template text="""I left off for later. A lot of people don't like to do it this""" start="00:05:27.320" video="qanda-students" id="subtitle"]]
+[[!template text="""way, some people really like it, but part of the beauty of""" start="00:05:30.320" video="qanda-students" id="subtitle"]]
+[[!template text="""having tools which are very modular like Emacs and Org Mode""" start="00:05:34.280" video="qanda-students" id="subtitle"]]
+[[!template text="""allows you to have, well, you just adjust the method for""" start="00:05:38.120" video="qanda-students" id="subtitle"]]
+[[!template text="""something that works. And there's something to be garnered""" start="00:05:41.480" video="qanda-students" id="subtitle"]]
+[[!template text="""as well for applying these lessons to how you organize your""" start="00:05:44.440" video="qanda-students" id="subtitle"]]
+[[!template text="""life, not merely in front of a computer, but also how you""" start="00:05:48.760" video="qanda-students" id="subtitle"]]
+[[!template text="""manage your tasks elsewhere at school, iSchool or""" start="00:05:51.560" video="qanda-students" id="subtitle"]]
+[[!template text="""elsewhere.""" start="00:05:54.520" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: org-fc and org-drill are emacs org mode centric flash card solutions, have you looked into them?""" start="00:05:58.520" video="qanda-students" id="subtitle"]]</div>[[!template text="""All right, moving to the next question. Org-fc and org-drill""" start="00:05:58.520" video="qanda-students" id="subtitle"]]
+[[!template text="""are Emacs Org Mode-centric flashcard solutions. Have you""" start="00:06:02.800" video="qanda-students" id="subtitle"]]
+[[!template text="""looked into them? I think I looked into Org-Drill, but I""" start="00:06:06.320" video="qanda-students" id="subtitle"]]
+[[!template text="""wanted to use Anki because of... I wanted to use it on my""" start="00:06:11.600" video="qanda-students" id="subtitle"]]
+[[!template text="""phone, but then I realized I had to pay for the app, and then I""" start="00:06:17.360" video="qanda-students" id="subtitle"]]
+[[!template text="""didn't want to use it on my phone anymore.""" start="00:06:21.440" video="qanda-students" id="subtitle"]]
+[[!template text="""but it's just something that I used before without work mode""" start="00:06:24.120" video="qanda-students" id="subtitle"]]
+[[!template text="""for a little bit. And then I liked it,""" start="00:06:31.800" video="qanda-students" id="subtitle"]]
+[[!template text="""but yeah, it works pretty well with Org mode. So I didn't""" start="00:06:35.240" video="qanda-students" id="subtitle"]]
+[[!template text="""find a reason to switch to one of those because like I might be""" start="00:06:42.920" video="qanda-students" id="subtitle"]]
+[[!template text="""not at a computer one day and have to learn something. Yeah,""" start="00:06:47.800" video="qanda-students" id="subtitle"]]
+[[!template text="""that's something that you call premature optimization.""" start="00:06:53.560" video="qanda-students" id="subtitle"]]
+[[!template text="""And if you continue as a software engineer at university,""" start="00:06:56.400" video="qanda-students" id="subtitle"]]
+[[!template text="""you'll get to hear plenty of this. But yes, Anki is also a tool""" start="00:06:59.480" video="qanda-students" id="subtitle"]]
+[[!template text="""that I've used a whole lot in my learning journeys, be it""" start="00:07:02.680" video="qanda-students" id="subtitle"]]
+[[!template text="""about languages, be it about literature, be it about""" start="00:07:06.400" video="qanda-students" id="subtitle"]]
+[[!template text="""whatever really, and it's a very good tool and I recommend""" start="00:07:09.720" video="qanda-students" id="subtitle"]]
+[[!template text="""people to look into it, especially since they've released a""" start="00:07:15.520" video="qanda-students" id="subtitle"]]
+[[!template text="""new algorithm to manage learning a little differently than""" start="00:07:17.800" video="qanda-students" id="subtitle"]]
+[[!template text="""the old one. If you're familiar with SuperMemo, I really""" start="00:07:20.840" video="qanda-students" id="subtitle"]]
+[[!template text="""invite you to look into the advancement""" start="00:07:23.720" video="qanda-students" id="subtitle"]]
+[[!template text="""in Anki in recent years.""" start="00:07:25.993" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What do other students think about your approach - and what are they doing instead (if anything)? And your teachers - what do they think?""" start="00:07:27.506" video="qanda-students" id="subtitle"]]</div>[[!template text="""Moving to another question, what do other students""" start="00:07:27.506" video="qanda-students" id="subtitle"]]
+[[!template text="""think about your approach and what are they doing instead,""" start="00:07:31.400" video="qanda-students" id="subtitle"]]
+[[!template text="""if anything? And your teachers, what do they think? So for""" start="00:07:33.920" video="qanda-students" id="subtitle"]]
+[[!template text="""other students they usually are just confused about what's""" start="00:07:39.360" video="qanda-students" id="subtitle"]]
+[[!template text="""going on when I show my computer because they know that I use""" start="00:07:43.200" video="qanda-students" id="subtitle"]]
+[[!template text="""Linux but they don't know what it is so they're just assuming""" start="00:07:51.880" video="qanda-students" id="subtitle"]]
+[[!template text="""everything on my computer is I'm either hacking or like""" start="00:07:56.760" video="qanda-students" id="subtitle"]]
+[[!template text="""doing some Linux thing and""" start="00:08:03.840" video="qanda-students" id="subtitle"]]
+[[!template text="""I don't really bother to explain it to them so that's kind""" start="00:08:06.000" video="qanda-students" id="subtitle"]]
+[[!template text="""But for I love it. See my see my prior videos. That's that's""" start="00:08:09.920" video="qanda-students" id="subtitle"]]
+[[!template text="""wonderful. Pardon me. Pardon me for breaking in, Daniel.""" start="00:08:17.080" video="qanda-students" id="subtitle"]]
+[[!template text="""But I just since I have, I want to say wonderful""" start="00:08:19.560" video="qanda-students" id="subtitle"]]
+[[!template text="""presentation. I love your spirit, your tone and great""" start="00:08:22.240" video="qanda-students" id="subtitle"]]
+[[!template text="""thought there.""" start="00:08:28.560" video="qanda-students" id="subtitle"]]
+[[!template text="""For my teachers, I think...""" start="00:08:29.320" video="qanda-students" id="subtitle"]]
+[[!template text="""because if I write an essay or something, I usually paste it""" start="00:08:31.400" video="qanda-students" id="subtitle"]]
+[[!template text="""in Google Docs. But recently, I got more confident, which is""" start="00:08:38.800" video="qanda-students" id="subtitle"]]
+[[!template text="""export to LaTeX, and I did that for my physics labs. My""" start="00:08:46.880" video="qanda-students" id="subtitle"]]
+[[!template text="""teacher was pretty satisfied with the results for the math""" start="00:08:53.880" video="qanda-students" id="subtitle"]]
+[[!template text="""formatting. So I think they don't really have a problem with""" start="00:08:56.440" video="qanda-students" id="subtitle"]]
+[[!template text="""it, where it's actually more convenient, maybe.""" start="00:09:03.120" video="qanda-students" id="subtitle"]]
+[[!template text="""That's really great to hear and if you continue at""" start="00:09:06.960" video="qanda-students" id="subtitle"]]
+[[!template text="""university, which I'm almost sure that you will, your""" start="00:09:13.040" video="qanda-students" id="subtitle"]]
+[[!template text="""professors, you'll be pretty much using the same tools as""" start="00:09:16.520" video="qanda-students" id="subtitle"]]
+[[!template text="""they are, so you'll find yourself in a like-minded crowd of""" start="00:09:19.280" video="qanda-students" id="subtitle"]]
+[[!template text="""people once you get to university. We are a little short on""" start="00:09:23.360" video="qanda-students" id="subtitle"]]
+[[!template text="""time because we need to move to the next talk in about one""" start="00:09:28.520" video="qanda-students" id="subtitle"]]
+[[!template text="""minute. There are still some questions and Daniel, I would""" start="00:09:30.720" video="qanda-students" id="subtitle"]]
+[[!template text="""invite you to stay and maybe answer them in a room so that we""" start="00:09:36.000" video="qanda-students" id="subtitle"]]
+[[!template text="""can gather as many of your answers as possible. But before we""" start="00:09:40.400" video="qanda-students" id="subtitle"]]
+[[!template text="""leave, I just want to give you the opportunity, if you have""" start="00:09:43.400" video="qanda-students" id="subtitle"]]
+[[!template text="""any last words, to share them with the crowd.""" start="00:09:45.240" video="qanda-students" id="subtitle"]]
+[[!template text="""Well, for the students who may be watching this, I hope that""" start="00:09:46.920" video="qanda-students" id="subtitle"]]
+[[!template text="""you give Emacs a try. And good luck if you decide to use""" start="00:09:53.480" video="qanda-students" id="subtitle"]]
+[[!template text="""something else because it's probably won't be as great.""" start="00:09:57.320" video="qanda-students" id="subtitle"]]
+[[!template text="""It's very good to be so young and to already be convinced that""" start="00:10:01.520" video="qanda-students" id="subtitle"]]
+[[!template text="""Emacs is the best thing. For some of us, it took us many""" start="00:10:07.400" video="qanda-students" id="subtitle"]]
+[[!template text="""decades to reach this conclusion, and I'm so happy""" start="00:10:09.880" video="qanda-students" id="subtitle"]]
+[[!template text="""to see young people. I used to be a teacher,""" start="00:10:12.840" video="qanda-students" id="subtitle"]]
+[[!template text="""by the way, so I used to teach people your age,""" start="00:10:15.096" video="qanda-students" id="subtitle"]]
+[[!template text="""but I'm so happy to see people your age""" start="00:10:17.017" video="qanda-students" id="subtitle"]]
+[[!template text="""interested in Emacs because it makes me hopeful that in the""" start="00:10:19.800" video="qanda-students" id="subtitle"]]
+[[!template text="""future we'll have people carrying the flame and standing on""" start="00:10:23.360" video="qanda-students" id="subtitle"]]
+[[!template text="""the shoulders of current people. So thank you so much,""" start="00:10:26.800" video="qanda-students" id="subtitle"]]
+[[!template text="""Daniel. We'll be seeing you soon. We wish you good luck with""" start="00:10:30.040" video="qanda-students" id="subtitle"]]
+[[!template text="""your studies. And for EmacsConf, we'll be moving to the next""" start="00:10:32.917" video="qanda-students" id="subtitle"]]
+[[!template text="""talk in five seconds. See you soon. And I want to reassure""" start="00:10:36.000" video="qanda-students" id="subtitle"]]
+[[!template text="""you, we'll post all the Q&A info when we do post this video.""" start="00:10:39.625" video="qanda-students" id="subtitle"]]
+[[!template text="""Yes. So Daniel, as I said,""" start="00:10:44.333" video="qanda-students" id="subtitle"]]
+[[!template text="""if you want to stick around a little more with""" start="00:10:47.840" video="qanda-students" id="subtitle"]]
+[[!template text="""Corwin to answer the questions, that's all fine.""" start="00:10:49.240" video="qanda-students" id="subtitle"]]
+[[!template text="""I'll be moving to the next room to get ready for the next""" start="00:10:51.840" video="qanda-students" id="subtitle"]]
+[[!template text="""talks. So thank you, Daniel. And I'll see you later.""" start="00:10:53.600" video="qanda-students" id="subtitle"]]
+[[!template text="""All right, the cops are gone. Wait, no, I'm just kidding. No,""" start="00:10:59.160" video="qanda-students" id="subtitle"]]
+[[!template text="""but if you'd like to walk through a few more of these""" start="00:11:06.200" video="qanda-students" id="subtitle"]]
+[[!template text="""questions, I'd be happy to record that. You're not""" start="00:11:10.043" video="qanda-students" id="subtitle"]]
+[[!template text="""obligated to do that. You could also, the pad's there. You""" start="00:11:12.000" video="qanda-students" id="subtitle"]]
+[[!template text="""could just type out your answers or whatever you prefer to""" start="00:11:14.560" video="qanda-students" id="subtitle"]]
+[[!template text="""do. I guess I can answer them still. Cool.""" start="00:11:17.000" video="qanda-students" id="subtitle"]]
+[[!template text="""So we're here.""" start="00:11:24.560" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What was your biggest source of frustration/friction/confusion when getting started with Emacs?""" start="00:11:25.360" video="qanda-students" id="subtitle"]]</div>[[!template text="""What was your biggest source of frustration, friction,""" start="00:11:25.360" video="qanda-students" id="subtitle"]]
+[[!template text="""confusion when getting started?""" start="00:11:27.760" video="qanda-students" id="subtitle"]]
+[[!template text="""I honestly don't really remember. It""" start="00:11:32.320" video="qanda-students" id="subtitle"]]
+[[!template text="""somehow just clicked one day and I figured it out.""" start="00:11:38.240" video="qanda-students" id="subtitle"]]
+[[!template text="""All right, it takes us pretty naturally to the next one.""" start="00:11:45.280" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How did you come across Emacs? What got you into it?""" start="00:11:48.124" video="qanda-students" id="subtitle"]]</div>[[!template text="""How did you come across Emacs? What got you into it? I could ask""" start="00:11:48.124" video="qanda-students" id="subtitle"]]
+[[!template text="""this question quite""" start="00:11:54.080" video="qanda-students" id="subtitle"]]
+[[!template text="""similar to how I stumbled into Linux, where I was... I heard""" start="00:11:58.320" video="qanda-students" id="subtitle"]]
+[[!template text="""of it before, but I saw screenshots of it""" start="00:12:05.480" video="qanda-students" id="subtitle"]]
+[[!template text="""or something on Reddit, and I was like, oh,""" start="00:12:09.520" video="qanda-students" id="subtitle"]]
+[[!template text="""that looks pretty cool, maybe I'll look into that.""" start="00:12:11.248" video="qanda-students" id="subtitle"]]
+[[!template text="""And then on YouTube, I would see videos""" start="00:12:14.649" video="qanda-students" id="subtitle"]]
+[[!template text="""about Doom Emacs, and then the Doomcasts video,""" start="00:12:16.600" video="qanda-students" id="subtitle"]]
+[[!template text="""I think that's what really got me into it.""" start="00:12:21.200" video="qanda-students" id="subtitle"]]
+[[!template text="""Okay, I did my best to capture that. So what's the situation""" start="00:12:37.240" video="qanda-students" id="subtitle"]]
+[[!template text="""with respect to the mobile use, if that's applicable? And""" start="00:12:42.280" video="qanda-students" id="subtitle"]]
+[[!template text="""Orgzly is,""" start="00:12:46.440" video="qanda-students" id="subtitle"]]
+[[!template text="""sorry, was it not Doomcast? Is it System Crafters?""" start="00:12:47.640" video="qanda-students" id="subtitle"]]
+[[!template text="""Sorry if I botched the note. Oh yeah, System Crafters was""" start="00:12:52.360" video="qanda-students" id="subtitle"]]
+[[!template text="""also one of the things I used for getting into Emacs from""" start="00:12:58.200" video="qanda-students" id="subtitle"]]
+[[!template text="""scratch. I'm sorry if my dog is barking.""" start="00:13:01.680" video="qanda-students" id="subtitle"]]
+[[!template text="""the, I'm not sure how to pronounce his name, but Protesilaos,""" start="00:13:08.080" video="qanda-students" id="subtitle"]]
+[[!template text="""I think that's how you say it. I always say Prot just to get me""" start="00:13:16.800" video="qanda-students" id="subtitle"]]
+[[!template text="""out of that problem for what it's worth. I'm not sure that I""" start="00:13:20.400" video="qanda-students" id="subtitle"]]
+[[!template text="""can say it properly either. Yeah, his videos were really""" start="00:13:23.040" video="qanda-students" id="subtitle"]]
+[[!template text="""great for getting started with each, each individual""" start="00:13:26.720" video="qanda-students" id="subtitle"]]
+[[!template text="""component of""" start="00:13:30.480" video="qanda-students" id="subtitle"]]
+[[!template text="""something like there's entire videos just""" start="00:13:31.292" video="qanda-students" id="subtitle"]]
+[[!template text="""about completion and about a tool called Embark. And like, I""" start="00:13:34.125" video="qanda-students" id="subtitle"]]
+[[!template text="""would just watch those videos""" start="00:13:40.250" video="qanda-students" id="subtitle"]]
+[[!template text="""while I was doing the dishes or something.""" start="00:13:41.319" video="qanda-students" id="subtitle"]]
+[[!template text="""and I would learn a lot from that.""" start="00:13:43.000" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What the situation with respect to "mobile" use (if ever that's applicable)? (yes, Orgzly...using that?)""" start="00:13:53.680" video="qanda-students" id="subtitle"]]</div>[[!template text="""Awesome. I love it. What about the mobile...""" start="00:13:53.680" video="qanda-students" id="subtitle"]]
+[[!template text="""sorry, did I get that question out there already? Oh, no.""" start="00:13:59.121" video="qanda-students" id="subtitle"]]
+[[!template text="""I don't use Emacs or any Org Mode things on my""" start="00:14:04.961" video="qanda-students" id="subtitle"]]
+[[!template text="""phone. I have an iPhone, unfortunately.""" start="00:14:07.918" video="qanda-students" id="subtitle"]]
+[[!template text="""But for org files, I couldn't really get it to sync over""" start="00:14:19.964" video="qanda-students" id="subtitle"]]
+[[!template text="""without using a paid app.""" start="00:14:24.121" video="qanda-students" id="subtitle"]]
+[[!template text="""And I didn't really look into it""" start="00:14:26.801" video="qanda-students" id="subtitle"]]
+[[!template text="""that much because I have a computer with me""" start="00:14:28.041" video="qanda-students" id="subtitle"]]
+[[!template text="""almost all the time.""" start="00:14:30.141" video="qanda-students" id="subtitle"]]
+[[!template text="""Usually I carry around a notebook. And if I really need to""" start="00:14:36.001" video="qanda-students" id="subtitle"]]
+[[!template text="""know something or remember it for later,""" start="00:14:39.521" video="qanda-students" id="subtitle"]]
+[[!template text="""I just write it down.""" start="00:14:41.941" video="qanda-students" id="subtitle"]]
+[[!template text="""I've seen people get started with e-ink tablets, and they""" start="00:14:52.661" video="qanda-students" id="subtitle"]]
+[[!template text="""sync it with SyncThing because it's Android, but I don't use""" start="00:15:01.760" video="qanda-students" id="subtitle"]]
+[[!template text="""that, so I can't really attest to how good it is.""" start="00:15:07.960" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Has using emacs led to expanded interest in programming/computer science?""" start="00:15:21.920" video="qanda-students" id="subtitle"]]</div>[[!template text="""So has using Emacs led you to an expanded interest in""" start="00:15:21.920" video="qanda-students" id="subtitle"]]
+[[!template text="""programming and computer science? Sorry if""" start="00:15:25.560" video="qanda-students" id="subtitle"]]
+[[!template text="""I could have got that out of the presentation.""" start="00:15:28.520" video="qanda-students" id="subtitle"]]
+[[!template text="""I think Emacs is what got me""" start="00:15:31.782" video="qanda-students" id="subtitle"]]
+[[!template text="""started with Lisp specifically.""" start="00:15:34.000" video="qanda-students" id="subtitle"]]
+[[!template text="""Otherwise, I probably would have not really looked into it""" start="00:15:37.900" video="qanda-students" id="subtitle"]]
+[[!template text="""that much, other than like maybe dabbling in Scheme""" start="00:15:40.381" video="qanda-students" id="subtitle"]]
+[[!template text="""from the Structures and Interpretations of Computer""" start="00:15:44.921" video="qanda-students" id="subtitle"]]
+[[!template text="""Programs book. But I probably wouldn't have seen that if I""" start="00:15:50.181" video="qanda-students" id="subtitle"]]
+[[!template text="""hadn't discovered Emacs either so.""" start="00:15:53.681" video="qanda-students" id="subtitle"]]
+[[!template text="""I was already into programming""" start="00:16:06.121" video="qanda-students" id="subtitle"]]
+[[!template text="""before Emacs, and I had used VS Code for a little bit and then""" start="00:16:08.793" video="qanda-students" id="subtitle"]]
+[[!template text="""Vim. But I think I've done most of my programming""" start="00:16:14.959" video="qanda-students" id="subtitle"]]
+[[!template text="""inside of Emacs, in terms of lines of code written,""" start="00:16:22.918" video="qanda-students" id="subtitle"]]
+[[!template text="""projects made...""" start="00:16:26.668" video="qanda-students" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How does interaction with others work in technical terms?""" start="00:16:40.672" video="qanda-students" id="subtitle"]]</div>[[!template text="""So maybe we'd jump from there, right, to, you mentioned""" start="00:16:40.672" video="qanda-students" id="subtitle"]]
+[[!template text="""exporting notes, essays, and so on, handing them on to other""" start="00:16:44.520" video="qanda-students" id="subtitle"]]
+[[!template text="""people. How does interaction with others work in technical""" start="00:16:48.360" video="qanda-students" id="subtitle"]]
+[[!template text="""terms? We mostly find workflows centered around like""" start="00:16:53.320" video="qanda-students" id="subtitle"]]
+[[!template text="""Microsoft products, and that makes sense to me. I have a day""" start="00:16:57.760" video="qanda-students" id="subtitle"]]
+[[!template text="""job where I have to work with a bunch of Microsoft products,""" start="00:17:00.480" video="qanda-students" id="subtitle"]]
+[[!template text="""and I know the workflows for that. So how do you manage your""" start="00:17:03.720" video="qanda-students" id="subtitle"]]
+[[!template text="""kind of Emacs-y you know, workflows, um, you know, in terms of""" start="00:17:08.400" video="qanda-students" id="subtitle"]]
+[[!template text="""sharing with people. Yeah. So for sharing with like my""" start="00:17:14.520" video="qanda-students" id="subtitle"]]
+[[!template text="""teachers or something, I would, we use like Google at our""" start="00:17:19.120" video="qanda-students" id="subtitle"]]
+[[!template text="""school. So for, I'm very fortunate that I don't have to deal""" start="00:17:22.720" video="qanda-students" id="subtitle"]]
+[[!template text="""with Microsoft other than with a very niche situations in""" start="00:17:25.760" video="qanda-students" id="subtitle"]]
+[[!template text="""which I can just use LibreOffice and then convert to Doc X or""" start="00:17:29.640" video="qanda-students" id="subtitle"]]
+[[!template text="""something. I heard that chef. That's, that's how all my""" start="00:17:32.600" video="qanda-students" id="subtitle"]]
+[[!template text="""vendors, uh, my vendors all roll their eyes when they were,""" start="00:17:35.720" video="qanda-students" id="subtitle"]]
+[[!template text="""oh, you're a Microsoft shop. Yep. Heard.""" start="00:17:39.680" video="qanda-students" id="subtitle"]]
+[[!template text="""Then they're all Google shops too, in education.""" start="00:17:42.886" video="qanda-students" id="subtitle"]]
+[[!template text="""Great point. For Google, I just... If my teachers wanted""" start="00:17:45.948" video="qanda-students" id="subtitle"]]
+[[!template text="""a Google Doc or something,""" start="00:17:51.959" video="qanda-students" id="subtitle"]]
+[[!template text="""I usually just copy paste""" start="00:17:53.126" video="qanda-students" id="subtitle"]]
+[[!template text="""whatever I wrote in Emacs""" start="00:17:54.300" video="qanda-students" id="subtitle"]]
+[[!template text="""and then still keep it, anyway, as a side thing""" start="00:17:55.680" video="qanda-students" id="subtitle"]]
+[[!template text="""because I don't really trust the cloud""" start="00:17:59.334" video="qanda-students" id="subtitle"]]
+[[!template text="""that much in terms of using""" start="00:18:00.668" video="qanda-students" id="subtitle"]]
+[[!template text="""it for later if I wanted to look at it. But for that, I don't""" start="00:18:02.876" video="qanda-students" id="subtitle"]]
+[[!template text="""really have too much problems. Hopefully, I will find a way""" start="00:18:10.668" video="qanda-students" id="subtitle"]]
+[[!template text="""to figure it out when I get into university.""" start="00:18:14.340" video="qanda-students" id="subtitle"]]
+[[!template text="""Awesome. Okay, well, I know we did it once already, but since""" start="00:18:21.440" video="qanda-students" id="subtitle"]]
+[[!template text="""this will be the end of the video, let me just open the floor""" start="00:18:26.680" video="qanda-students" id="subtitle"]]
+[[!template text="""one more time for parting thoughts.""" start="00:18:30.480" video="qanda-students" id="subtitle"]]
+[[!template text="""I'm not sure that I have any. I mean, you said it pretty well,""" start="00:18:33.440" video="qanda-students" id="subtitle"]]
+[[!template text="""right? I hope my peers see this. I hope they realize other""" start="00:18:41.720" video="qanda-students" id="subtitle"]]
+[[!template text="""tools are kind of inferior from a gets things done""" start="00:18:46.640" video="qanda-students" id="subtitle"]]
+[[!template text="""standpoint. Saw your talk. Heard that message in this Q&A.""" start="00:18:49.880" video="qanda-students" id="subtitle"]]
+[[!template text="""I think you did a great job. You don't have to say more, but""" start="00:18:54.640" video="qanda-students" id="subtitle"]]
+[[!template text="""just offering you the chance. Thank you.""" start="00:18:58.160" video="qanda-students" id="subtitle"]]
+[[!template text="""Well, thank you, Daniel,""" start="00:19:02.836" video="qanda-students" id="subtitle"]]
+[[!template text="""and thanks to everybody watching this video""" start="00:19:03.917" video="qanda-students" id="subtitle"]]
+[[!template text="""during the conference or after it,""" start="00:19:07.440" video="qanda-students" id="subtitle"]]
+[[!template text="""and appreciate and look forward""" start="00:19:09.839" video="qanda-students" id="subtitle"]]
+[[!template text="""to your talks in the future, Daniel. Thank you.""" start="00:19:12.160" video="qanda-students" 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%20students%3A%20An%20example%20of%20a%20cohesive%20student%20workflow%20in%20Emacs)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/students-before.md b/2024/info/students-before.md
index 6009303b..9358f56c 100644
--- a/2024/info/students-before.md
+++ b/2024/info/students-before.md
@@ -1,18 +1,30 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 9-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
+
+
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="students">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect stroke-width="3" x="528" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 10-min talk; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf>
-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="2024-12-08T20:25:00Z" end="2024-12-08T20:35:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~3:25 PM - 3:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~2:25 PM - 2:35 PM CST (US/Central)<br />Sunday, Dec 8 2024, ~1:25 PM - 1:35 PM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~12:25 PM - 12:35 PM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~8:25 PM - 8:35 PM UTC <br />Sunday, Dec 8 2024, ~9:25 PM - 9:35 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~10:25 PM - 10:35 PM EET (Europe/Athens)<br />Monday, Dec 9 2024, ~1:55 AM - 2:05 AM IST (Asia/Kolkata)<br />Monday, Dec 9 2024, ~4:25 AM - 4:35 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~5:25 AM - 5:35 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+<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 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?
+05:58.520 Q: org-fc and org-drill are emacs org mode centric flash card solutions, have you looked into them?
+07:27.506 Q: What do other students think about your approach - and what are they doing instead (if anything)? And your teachers - what do they think?
+11:25.360 Q: What was your biggest source of frustration/friction/confusion when getting started with Emacs?
+11:48.124 Q: How did you come across Emacs? What got you into it?
+13:53.680 Q: What the situation with respect to "mobile" use (if ever that's applicable)? (yes, Orgzly...using that?)
+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="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/students-nav.md b/2024/info/students-nav.md
index 08f863c5..4f44a25d 100644
--- a/2024/info/students-nav.md
+++ b/2024/info/students-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/literate">Literate programming for the 21st Century</a>
-Next by time: <a href="/2024/talks/sharing">So you want to be an Emacs-fluencer?</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/literate">Literate programming for the 21st Century</a>
+Next by track: <a href="/2024/talks/sharing">So you want to be an Emacs-fluencer?</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/sun-close-after.md b/2024/info/sun-close-after.md
index aebbe6f8..42f4560a 100644
--- a/2024/info/sun-close-after.md
+++ b/2024/info/sun-close-after.md
@@ -1,7 +1,49 @@
<!-- 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)
+<div class="transcript transcript-mainVideo"><a name="sun-close-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+[[!template text="""Hi again everyone, this is Leo, and I'm very sorry that I""" start="00:00:00.007" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""couldn't stick around to the very end of EmacsConf 2024.""" start="00:00:03.046" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""This is a recording, and hopefully this is playing as my""" start="00:00:06.285" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""co-organizers are closing EmacsConf 2024. There's just""" start="00:00:09.844" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""one last thing that I wanted to invite people to do, because""" start="00:00:13.963" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""for me, it was an honor to host the general track of EmacsConf""" start="00:00:17.762" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""this year again. It's my fifth time. But if you are""" start="00:00:20.881" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""interested in hosting, like me, or maybe transcribing""" start="00:00:24.120" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""pre-recordings, you know, captioning them, we do have""" start="00:00:28.639" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""plenty of roles open for people who want to contribute to""" start="00:00:32.398" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""EmacsConf. We do have a page on the website which is""" start="00:00:35.037" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""https://emacsconf.org/volunteer .""" start="00:00:37.716" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""You will find all the information about the roles that""" start="00:00:40.795" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""you can take. Just listing them very quickly.""" start="00:00:43.154" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""We've got captioners, as I mentioned.""" start="00:00:45.461" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""We've got hosts. We have""" start="00:00:47.153" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Internet Relay Chat monitors, so IRC people to""" start="00:00:49.231" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""make sure that everyone is being nice""" start="00:00:52.230" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""in the chat and perhaps pasting""" start="00:00:53.801" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""questions from IRC to the pad. Speaking of the pad, we have""" start="00:00:55.669" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""pad scribes to make sure that all the questions and answers""" start="00:00:58.748" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""are documented in the pad. That makes our job much easier for""" start="00:01:02.387" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""the publishing process. When it comes to the publishing""" start="00:01:05.106" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""process, we've got everything that has to do with the""" start="00:01:07.665" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""pre-recordings, so people to process the audio of""" start="00:01:09.664" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""pre-recordings, re-encoding. We do have a lot of scripts""" start="00:01:13.623" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""that Sacha and myself have been writing to make our job much""" start="00:01:18.102" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""easier, but we are always in need of a pair of eyes to improve""" start="00:01:20.661" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""the process. Lastly, if you happen to have experience in""" start="00:01:24.460" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""infrastructure and video, we do need sysadmins to maintain""" start="00:01:28.139" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""the platform that we use for streaming, because again,""" start="00:01:31.818" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""everything we do is depending on remote machines, both for""" start="00:01:34.217" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""the streaming, the re-encoding, the transcription. If""" start="00:01:37.456" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""you have any interest in helping us with this, please send us""" start="00:01:42.335" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""an email. And all the information is on the website. All that""" start="00:01:45.014" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""remains for me is to say thank you so much for coming to""" start="00:01:48.773" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""EmacsConf, thanks to all the speakers for the wonderful""" start="00:01:52.172" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""talks, and I will most likely see you next year.""" start="00:01:54.651" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Have fun, everyone!""" start="00:01:57.793" video="mainVideo-sun-close" 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%20sun-close%3A%20Sunday%20closing%20remarks)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/sun-close-before.md b/2024/info/sun-close-before.md
index f369cbef..9fb22d5d 100644
--- a/2024/info/sun-close-before.md
+++ b/2024/info/sun-close-before.md
@@ -1,18 +1,18 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 2-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
+
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect stroke-width="3" x="658" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 10-min talk; Q&A: Etherpad <https://pad.emacsconf.org/2024-sun-close>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Ready to stream
-<div>Times in different time zones:</div><div class="times" start="2024-12-08T22:00:00Z" end="2024-12-08T22:10:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~5:00 PM - 5:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~4:00 PM - 4:10 PM CST (US/Central)<br />Sunday, Dec 8 2024, ~3:00 PM - 3:10 PM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~2:00 PM - 2:10 PM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~10:00 PM - 10:10 PM UTC <br />Sunday, Dec 8 2024, ~11:00 PM - 11:10 PM CET (Europe/Paris)<br />Monday, Dec 9 2024, ~12:00 AM - 12:10 AM EET (Europe/Athens)<br />Monday, Dec 9 2024, ~3:30 AM - 3:40 AM IST (Asia/Kolkata)<br />Monday, Dec 9 2024, ~6:00 AM - 6:10 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~7:00 AM - 7:10 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+<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 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-close-nav.md b/2024/info/sun-close-nav.md
index d1239233..c68ce741 100644
--- a/2024/info/sun-close-nav.md
+++ b/2024/info/sun-close-nav.md
@@ -1,6 +1,6 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/transducers">Transducers: finally, ergonomic data processing for Emacs!</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/open-mic">Open mic/pad for quick updates etc.</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/sun-open-after.md b/2024/info/sun-open-after.md
index 35dc6a0a..f11c7849 100644
--- a/2024/info/sun-open-after.md
+++ b/2024/info/sun-open-after.md
@@ -1,7 +1,130 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sun-open%3A%20Sunday%20opening%20remarks)
+<div class="transcript transcript-mainVideo"><a name="sun-open-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+[[!template text="""Welcome to the second day of EmacsConf 2024.""" start="00:00:00.007" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Today we have one track of talks,""" start="00:00:03.446" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so you don't have to worry about""" start="00:00:05.165" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""missing out on anything.""" start="00:00:06.484" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:07.923" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:11.202" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and I'll give you a quick overview as well.""" start="00:00:14.001" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can watch the stream at live.emacsconf.org""" start="00:00:15.800" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""using free and open source software.""" start="00:00:18.679" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Using a streaming media player like mpv""" start="00:00:20.918" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:23.317" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""but there are also web-based players""" start="00:00:26.196" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""just in case that's all you've got.""" start="00:00:28.035" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""As you're watching the talks,""" start="00:00:29.274" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""you can refer to the schedule in another window.""" start="00:00:30.673" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Hover over the boxes to see the times and titles,""" start="00:00:32.952" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and click on the boxes in the schedule""" start="00:00:35.751" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""to jump to the talk's page for more details.""" start="00:00:37.390" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can also get the schedule as an iCalendar file""" start="00:00:39.949" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""or as an Org file in different time zones.""" start="00:00:42.148" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Many talks will be followed by""" start="00:00:44.227" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""live Q&A web conferences with the speaker,""" start="00:00:45.706" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:00:47.625" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""These are indicated with a solid border on the schedule""" start="00:00:50.544" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:00:52.903" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can join the web conference room""" start="00:00:55.502" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""by clicking on the BBB link""" start="00:00:57.581" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""on the schedule page or the talk's webpage.""" start="00:00:59.260" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:01.659" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""To improve performance, please keep your webcam off""" start="00:01:04.938" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:07.337" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you don't like Javascript,""" start="00:01:09.736" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""you can still ask questions via IRC""" start="00:01:11.215" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and the hosts can read them out for you.""" start="00:01:13.374" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We're probably going to automatically switch""" start="00:01:15.013" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""between talks and Q&A sessions,""" start="00:01:16.732" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so the transitions on the stream might be a little sudden.""" start="00:01:18.931" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""People in the BigBlueButton room""" start="00:01:21.530" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""can continue the conversation""" start="00:01:23.409" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""even after the talk moves off-stream,""" start="00:01:25.048" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and you can also reach out to the speakers""" start="00:01:27.647" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""using the contact information on the talk page.""" start="00:01:29.566" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:01:32.565" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""depending on what the speakers prefer.""" start="00:01:35.244" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""This is indicated in the schedule with a dashed border""" start="00:01:37.283" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and on the schedule page as well.""" start="00:01:39.762" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Please ask your questions in the recommended places""" start="00:01:41.201" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so that the speakers can easily see them.""" start="00:01:43.680" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Again, if you ask your questions in IRC,""" start="00:01:45.719" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""we'll try to copy them to the right places.""" start="00:01:47.477" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We're going to start Sunday morning""" start="00:01:49.637" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""with more IRC/Etherpad Q&A""" start="00:01:50.996" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""to try to get around""" start="00:01:53.155" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""some of the bandwidth issues""" start="00:01:54.074" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""that we noticed last year.""" start="00:01:55.393" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The schedule pages and track pages have quick shortcuts""" start="00:01:56.432" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so that you can find out more about talks, open the Etherpads,""" start="00:01:59.111" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and join the Q&A sessions.""" start="00:02:02.190" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The watch page has more tips""" start="00:02:03.917" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""on how to make the most of Q&A.""" start="00:02:05.708" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you can, please add notes and ask questions""" start="00:02:07.667" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""in the Etherpad for the talk. That makes it easier""" start="00:02:10.266" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""for everyone to share their notes,""" start="00:02:12.425" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:13.864" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:16.543" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We have one pad for each talk,""" start="00:02:19.142" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so you can follow the links to get to the next one""" start="00:02:20.541" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""or go back to the schedule and get the link from there.""" start="00:02:22.580" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you have general feedback about""" start="00:02:25.179" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""the conference itself, please put it in""" start="00:02:26.818" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""pad.emacsconf.org/2024 , which is linked on each pad.""" start="00:02:29.057" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can also use this as a general community message board""" start="00:02:34.136" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""for things like Help Wanted.""" start="00:02:37.135" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Or you can put it in IRC""" start="00:02:38.894" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and we'll find it there too.""" start="00:02:40.173" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:02:41.532" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""to be part of lots of conversations.""" start="00:02:44.211" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:02:46.330" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""through your web browser.""" start="00:02:49.769" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The tabs on the left can help you""" start="00:02:51.213" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""switch between the different channels.""" start="00:02:53.047" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Most discussions will be in""" start="00:02:54.726" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""\#emacsconf-gen for the General track.""" start="00:02:56.285" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:02:58.564" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:03.003" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:07.242" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Of course, you can join any of these channels""" start="00:03:10.241" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""with your favourite IRC client.""" start="00:03:12.520" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can connect to irc.libera.chat""" start="00:03:14.719" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""port 6697 with TLS.""" start="00:03:17.198" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Once again, we're going to be streaming with open captions""" start="00:03:19.837" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:03:23.076" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""captioning volunteers. The captioned talks are indicated""" start="00:03:25.835" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""on the schedule, and with any luck, we'll be posting""" start="00:03:28.874" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""transcripts on talk pages shortly after the talks start.""" start="00:03:31.593" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you need additional accommodations,""" start="00:03:34.952" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""please let us know in #emacsconf-org""" start="00:03:36.711" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and we'll see if we can make things happen.""" start="00:03:38.910" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:03:40.429" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If it doesn't look like we've noticed yet,""" start="00:03:44.628" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:03:46.507" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""where we will be quietly panicking.""" start="00:03:49.746" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""In all of these conversations, please keep in mind""" start="00:03:51.425" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""our guidelines for conduct. You can find them on the wiki,""" start="00:03:54.504" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""They basically boil down to: please be nice.""" start="00:03:57.383" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:03:59.662" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""should be available from the talk pages""" start="00:04:02.901" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""shortly after they start playing,""" start="00:04:04.180" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and we'll post the recordings of live talks""" start="00:04:05.699" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and Q&A sessions within the next month or so.""" start="00:04:08.018" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you'd like to get an update, you can subscribe to""" start="00:04:10.177" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""the emacsconf-discuss mailing list.""" start="00:04:13.176" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""All right, let's get going.""" start="00:04:15.135" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Leo Vivier is hosting the general track again today.""" start="00:04:16.654" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The other volunteers and I will run around mostly backstage,""" start="00:04:19.573" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:04:23.132" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""That's also where we get to thank""" start="00:04:25.211" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""all the people and organizations""" start="00:04:28.690" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""who make EmacsConf even possible.""" start="00:04:30.649" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Thanks for coming to EmacsConf 2024.""" start="00:04:32.928" video="mainVideo-sun-open" 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%20sun-open%3A%20Sunday%20opening%20remarks)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/sun-open-before.md b/2024/info/sun-open-before.md
index e8d19441..ed155b5e 100644
--- a/2024/info/sun-open-before.md
+++ b/2024/info/sun-open-before.md
@@ -1,18 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="/2024/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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="597" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 10-min talk; Q&A: Etherpad <https://pad.emacsconf.org/2024-sun-open>
-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="2024-12-08T14:00:00Z" end="2024-12-08T14:10:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~9:00 AM - 9:10 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~8:00 AM - 8:10 AM CST (US/Central)<br />Sunday, Dec 8 2024, ~7:00 AM - 7:10 AM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~6:00 AM - 6:10 AM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~2:00 PM - 2:10 PM UTC <br />Sunday, Dec 8 2024, ~3:00 PM - 3:10 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~4:00 PM - 4:10 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~7:30 PM - 7:40 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~10:00 PM - 10:10 PM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~11:00 PM - 11:10 PM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Format: 5-min talk ; Q&A: Etherpad
+Status: All done
+<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/sun-open-nav.md b/2024/info/sun-open-nav.md
index e58ab52f..70314d44 100644
--- a/2024/info/sun-open-nav.md
+++ b/2024/info/sun-open-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/sat-close">Saturday closing remarks</a>
-Next by time: <a href="/2024/talks/links">Unlocking linked data: replacing specialized apps with an Org-based semantic wiki</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/sat-close">Saturday closing remarks</a>
+Next by track: <a href="/2024/talks/open-mic">Open mic/pad for quick updates etc.</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/theme-after.md b/2024/info/theme-after.md
index 93a9ea39..83f1515f 100644
--- a/2024/info/theme-after.md
+++ b/2024/info/theme-after.md
@@ -1,7 +1,358 @@
<!-- 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%20theme%3A%20My%20journey%20of%20finding%20and%20creating%20the%20%E2%80%9Cperfect%E2%80%9D%20Emacs%20theme)
+<div class="transcript transcript-mainVideo"><a name="theme-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:02.140" video="mainVideo-theme" id="subtitle"]]</div>[[!template text="""Hi my name is MetroWind.""" start="00:00:02.140" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""In this talk I will take you through my journey into Emacs themes.""" start="00:00:05.440" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I am a long-time Emacs user. I started using""" start="00:00:12.970" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Emacs since version 21.""" start="00:00:15.760" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""The goal of this talk is to inspire more people into making themes.""" start="00:00:19.090" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Maybe you are already making themes.""" start="00:00:24.070" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""In that case I hope you could find some tips and tricks""" start="00:00:26.350" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""you know in this one""" start="00:00:30.550" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I will basically go through all the themes""" start="00:00:33.670" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""that I created.""" start="00:00:36.130" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""But I think the most important thing""" start="00:00:37.960" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""here is to understand why some of""" start="00:00:40.000" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""the some of the colors are picked,""" start="00:00:42.910" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""and the motivations behind them.""" start="00:00:44.860" video="mainVideo-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Deviant""" start="00:00:48.820" video="mainVideo-theme" id="subtitle"]]</div>[[!template text="""So the first theme I created is""" start="00:00:48.820" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""called Deviant. It looks like this.""" start="00:00:50.800" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""The inspiration for this one is a""" start="00:00:55.810" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""website called DeviantArt. Basically I just""" start="00:00:57.730" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""use their color palette, you know, from their design.""" start="00:01:00.850" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""It was a like a community for indie artists.""" start="00:01:04.810" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I was really into that, you know,""" start="00:01:10.750" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""back in the day so that’s that.""" start="00:01:12.820" video="mainVideo-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""FlucUI""" start="00:01:15.640" video="mainVideo-theme" id="subtitle"]]</div>[[!template text="""Otherwise, nothing special. The next theme""" start="00:01:15.640" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I created was called FlucUI""" start="00:01:19.120" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""It’s in MELPA.""" start="00:01:24.820" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""And let me just show you.""" start="00:01:26.530" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So yeah that's how it looks like.""" start="00:01:35.260" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So... but where where did the colors""" start="00:01:42.280" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""come from, right? To understand that,""" start="00:01:45.250" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I'll need to take you back in time, you know, to where iOS 7""" start="00:01:50.290" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""was released by Apple. That was a""" start="00:01:55.330" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""big deal, because that popularized the idea""" start="00:01:58.000" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""of flat UI color designs; sorry, flat UI""" start="00:02:01.930" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""designs. And after that, everybody followed suit,""" start="00:02:05.290" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""and changed their design, you know""" start="00:02:10.360" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""of all of their websites and applications to use some sort of flat UI design concepts.""" start="00:02:14.440" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""And about the same time, there came a website called flatuicolors.com.""" start="00:02:23.470" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""It hosted one color palette,""" start="00:02:28.720" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""and that was really good!""" start="00:02:32.110" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So I picked that as the basis of my theme.""" start="00:02:35.110" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""And initially I named it FlatUI,""" start="00:02:40.900" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""But that name was taken in MELPA""" start="00:02:43.959" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So i just rename it to something random, FlucUI.""" start="00:02:46.717" video="mainVideo-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Lab""" start="00:02:51.910" video="mainVideo-theme" id="subtitle"]]</div>[[!template text="""The next one is called lab.""" start="00:02:51.910" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""To understand why I needed to create the theme,""" start="00:02:57.310" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""it's because I thought some of the colors in FlucUI""" start="00:03:03.850" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""was standing out too much, like the green here.""" start="00:03:10.780" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""This one.""" start="00:03:18.010" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I thought this was too bright.""" start="00:03:20.170" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Just a little bit.""" start="00:03:22.780" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So I thought I needed way to pick""" start="00:03:27.100" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""some colors that are about the same""" start="00:03:30.100" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""lightness essentially. So how would I do that?""" start="00:03:32.890" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""The answer is to go into a color space called LAB.""" start="00:03:35.350" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Now normally you'd do color work in RGB,""" start="00:03:42.880" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""which is red, green, and blue.""" start="00:03:46.420" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""It doesn't tell you a lot about lightness.""" start="00:03:49.660" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""If you do a pure blue,""" start="00:03:53.830" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""it actually looks a lot darker than a""" start="00:03:56.440" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""pure red or pure green. So that""" start="00:03:58.600" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""that doesn't work. But in LAB,""" start="00:04:01.631" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""thing are different, because one of the channel""" start="00:04:04.990" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""is L which is lightness. The other""" start="00:04:07.360" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""two channels are a and b, which are just""" start="00:04:10.810" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""for colors. This is great because""" start="00:04:13.750" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I could just fix L meaning""" start="00:04:17.140" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I fixed the lightness, and then I can""" start="00:04:19.630" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""vary a and b however I want.""" start="00:04:21.790" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""The color will stay roughly in the same""" start="00:04:25.300" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""lightness, which is exactly what I wanted.""" start="00:04:27.850" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So for that I created a""" start="00:04:31.780" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Mac app, where I could just""" start="00:04:34.210" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""fix lightness like I said, and then""" start="00:04:38.230" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I could click on this colorful thing,""" start="00:04:40.330" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""to pick a color. The app will""" start="00:04:42.670" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""pick another five according to some pattern.""" start="00:04:45.010" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""And then I could just like hard-code""" start="00:04:48.430" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""these colors in Emacs.""" start="00:04:50.140" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Let me show you.""" start="00:04:52.930" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""apply theme... lab...""" start="00:04:56.230" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Yeah not very different from FlucUI colors,""" start="00:04:59.590" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""which was intentional.""" start="00:05:02.140" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""The idea here again is""" start="00:05:05.350" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""all the colors will be in about""" start="00:05:08.380" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""the same lightness, which I guess it was.""" start="00:05:10.660" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So yeah... So this one was""" start="00:05:14.230" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""a success. I use it for a""" start="00:05:18.280" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""really long time. And then I got bored...""" start="00:05:20.830" video="mainVideo-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""NotInk: grayscale""" start="00:05:25.090" video="mainVideo-theme" id="subtitle"]]</div>[[!template text="""So I needed something interesting.""" start="00:05:25.090" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""The idea at the time was then to create a theme""" start="00:05:28.150" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""that doesn't have any colors essentially.""" start="00:05:33.460" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""A grayscale theme. So I called""" start="00:05:36.310" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""it NotInk. It is also in Melpa""" start="00:05:41.740" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""It looks like this.""" start="00:05:46.060" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Yeah like I said, everything is grey.""" start="00:05:49.210" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""There's no color. But to my""" start="00:05:51.310" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""surprise, this is actually very useable.""" start="00:05:53.530" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I didn't have any problem in readability;""" start="00:05:56.500" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I didn't have any problem distinguishing, you know,""" start="00:05:59.500" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""different elements in the code. So a""" start="00:06:02.170" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""big surprise. And also a big success actually.""" start="00:06:05.857" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""And then I got bored.""" start="00:06:10.720" video="mainVideo-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Random theme""" start="00:06:13.930" video="mainVideo-theme" id="subtitle"]]</div>[[!template text="""I just decided to install a whole bunch""" start="00:06:13.930" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""of themes from MELPA,""" start="00:06:16.360" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""and every time I start Emacs I""" start="00:06:18.310" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""just pick a random theme.""" start="00:06:20.650" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""There are some caveats to that,""" start="00:06:23.200" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""which I don't want to get into.""" start="00:06:25.660" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""But let me just show you.""" start="00:06:28.660" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""apply-random-theme, so it picked one for""" start="00:06:31.210" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""me. And then it picked another... another...""" start="00:06:33.130" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So yeah.""" start="00:06:37.060" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""It's an interesting setup. I'm still using""" start="00:06:39.490" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""this setup today. Actually a good one""" start="00:06:42.340" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Walls of text...""" start="00:06:46.150" video="mainVideo-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Monte Carlo""" start="00:06:50.020" video="mainVideo-theme" id="subtitle"]]</div>[[!template text="""Now the final theme I want to look into,""" start="00:06:50.020" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""which is the latest, is called Monte Carlo.""" start="00:06:53.380" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""...which you know, idea here is to""" start="00:06:56.650" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""bring the idea of picking a random""" start="00:06:59.110" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""theme to the next level.""" start="00:07:01.990" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So this is just one theme that generates""" start="00:07:05.620" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""a random color palette for me everytime.""" start="00:07:08.470" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Not in MELPA, because I'm not ...""" start="00:07:12.880" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I'm not completely satisfied with it.""" start="00:07:15.419" video="mainVideo-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How to pick a random color palette""" start="00:07:19.780" video="mainVideo-theme" id="subtitle"]]</div>[[!template text="""But anyway... How do I... How do I pick""" start="00:07:19.780" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""a random color palette right?""" start="00:07:22.540" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""The answer is again to look at a different color space.""" start="00:07:25.030" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""This time it's called HLC, which is hue,""" start="00:07:29.680" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""lightness, and chroma. So hue is just""" start="00:07:32.950" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""colors, red, green, blue, or yellow, whatever.""" start="00:07:36.670" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Lightness is lightness. Chroma is saturation,""" start="00:07:40.810" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""essentially. This is great because I could""" start="00:07:45.160" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""fix both lightness and saturation, and only""" start="00:07:48.160" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""vary in hue to pick my colors.""" start="00:07:52.150" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Now the problem is""" start="00:07:57.580" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""once I have the color palette in""" start="00:08:01.660" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""HLC, how would I convert it to""" start="00:08:03.250" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""sRGB, because Emacs only knows""" start="00:08:06.105" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""about colors in sRGB.""" start="00:08:09.250" video="mainVideo-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""XYZ""" start="00:08:12.070" video="mainVideo-theme" id="subtitle"]]</div>[[!template text="""The answer here is to go through""" start="00:08:12.070" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""another color space called XYZ.""" start="00:08:14.230" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""This is an extremely important color space,""" start="00:08:17.950" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""because basically all other color spaces are""" start="00:08:21.670" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""defined on top of XYZ.""" start="00:08:25.870" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So you would have like transformations""" start="00:08:28.930" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""from XYZ to all other""" start="00:08:31.180" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""color spaces. Now if you invert this""" start="00:08:34.480" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""these transformations, you could go from,""" start="00:08:37.750" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""for example, HLC back into XYZ""" start="00:08:41.440" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""and then go to another color""" start="00:08:43.900" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""space of your choosing, right.""" start="00:08:46.960" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So this is how to convert colors""" start="00:08:49.750" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""between color spaces. In this case,""" start="00:08:51.430" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I have to convert colors from HLC""" start="00:08:55.270" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""to LAB, and from LAB to XYZ,""" start="00:08:57.850" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""and from XYZ to sRGB.""" start="00:08:59.920" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So this time the conversions are""" start="00:09:02.530" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""all done in Emacs Lisp, and I""" start="00:09:05.710" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""have the code in here in this URL.""" start="00:09:08.200" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""You could take a look, or you""" start="00:09:13.270" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""could actually just use maybe some package""" start="00:09:14.830" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""to convert colors.""" start="00:09:18.310" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Anyway let me show you how""" start="00:09:20.470" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""this works. So in this case I""" start="00:09:23.740" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""could apply theme, Monte Carlo.""" start="00:09:26.590" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So this is now a random theme.""" start="00:09:30.670" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Actually, well, a theme with random colors,""" start="00:09:33.790" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""because I could apply the same theme,""" start="00:09:37.150" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""and it will look different.""" start="00:09:40.960" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Every time.""" start="00:09:45.250" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I could also look at the colors it picked.""" start="00:09:48.640" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""as a list of colors.""" start="00:09:53.750" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I could also look at this like""" start="00:09:57.740" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""fancy chart of colors. This is""" start="00:10:00.260" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""too small. So let me show you this.""" start="00:10:04.370" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So basically the same thing.""" start="00:10:06.920" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""This is actually a cross-section in HLC space,""" start="00:10:10.400" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""and the colors it picked are these like""" start="00:10:16.310" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""white circles.""" start="00:10:18.650" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So that's that.""" start="00:10:20.660" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""But like I said, I'm not""" start="00:10:24.740" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""fully satisfied, because most of time the""" start="00:10:26.150" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""colors are pretty boring from it.""" start="00:10:30.170" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""I could think of some""" start="00:10:33.770" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""ways to improve this. For example I""" start="00:10:36.320" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""could choose different patterns for the color""" start="00:10:38.570" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""samples. but I don't know of any""" start="00:10:43.490" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""good patterns. So I need to try""" start="00:10:47.900" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""things out. And then another way is""" start="00:10:49.880" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""probably to use different color spaces like the HSL, or HSV.""" start="00:10:52.130" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Again I need to try this out.""" start="00:10:59.960" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So yeah there are room for improvements.""" start="00:11:02.240" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""If you... If you have and idea,""" start="00:11:05.120" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""you know, let me know, and we""" start="00:11:07.520" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""can try it out.""" start="00:11:09.860" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""So that's the end of my talk.""" start="00:11:11.960" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Hopefully you have some new ideas.""" start="00:11:13.880" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Thanks for listening in, and yeah.""" start="00:11:17.450" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Go create more themes because we can't have enough.""" start="00:11:20.240" video="mainVideo-theme" id="subtitle"]]
+[[!template text="""Thanks!""" start="00:11:22.400" video="mainVideo-theme" id="subtitle"]]
+
+</div><div class="transcript transcript-qanda"><a name="theme-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""So just to be clear, right now we are currently streaming. So""" start="00:00:00.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""if you want to answer with your voice, you can as well. Oh, I'm""" start="00:00:09.280" video="qanda-theme" id="subtitle"]]
+[[!template text="""sorry. Okay. Yeah. So I've got a question. I think there was a""" start="00:00:12.680" video="qanda-theme" id="subtitle"]]
+[[!template text="""little bit of a misunderstanding with whether we were doing""" start="00:00:18.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""a Q&A on BBB or if we were doing it on Etherpad. So it's really""" start="00:00:20.280" video="qanda-theme" id="subtitle"]]
+[[!template text="""up to you. Right now we've set up everything. So if you want to""" start="00:00:25.080" video="qanda-theme" id="subtitle"]]
+[[!template text="""start answering questions with your voice, we might as""" start="00:00:28.480" video="qanda-theme" id="subtitle"]]
+[[!template text="""well. So OK, so I can just do it live.""" start="00:00:32.120" video="qanda-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: When you choose colors based on the same lightness, does it not hurt readability since the eye sees lightness most?""" start="00:00:33.865" video="qanda-theme" id="subtitle"]]</div>[[!template text="""So one question is, so I""" start="00:00:33.865" video="qanda-theme" id="subtitle"]]
+[[!template text="""assume this is a question on the lab space, where all the""" start="00:00:38.240" video="qanda-theme" id="subtitle"]]
+[[!template text="""colors are the same lightness. Does it hurt readability? So""" start="00:00:41.840" video="qanda-theme" id="subtitle"]]
+[[!template text="""far, I find it to be OK. For the lab theme, I picked the colors""" start="00:00:46.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""manually. So like I could just fix a angle essentially so""" start="00:00:53.680" video="qanda-theme" id="subtitle"]]
+[[!template text="""that no colors are similar, so I have good readability. But""" start="00:01:01.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""for a random theme in Monte Carlo, it's hard because like""" start="00:01:11.760" video="qanda-theme" id="subtitle"]]
+[[!template text="""it's just random. But yeah, that's a really good point. And""" start="00:01:18.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""also that's one of the motivations I did the nothing, you""" start="00:01:24.640" video="qanda-theme" id="subtitle"]]
+[[!template text="""know, the great scale theme to explore just using""" start="00:01:28.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""lightness. Yeah.""" start="00:01:34.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""So looking at other questions.""" start="00:01:39.760" video="qanda-theme" id="subtitle"]]
+[[!template text="""Okay, great. Do you want to take the next question. So, okay.""" start="00:01:48.200" video="qanda-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: For monte-carlo, are all the "random" colors picked using a colorwheel/hue rotation?""" start="00:01:52.280" video="qanda-theme" id="subtitle"]]</div>[[!template text="""Okay, let's go to the third first. Let's finish. Yes, for""" start="00:01:52.280" video="qanda-theme" id="subtitle"]]
+[[!template text="""Monte Carlo are all the random colors that using a color""" start="00:01:56.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""wheel here. Yes. Well, so basically, what this theme does is""" start="00:02:00.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""it. It picks a saturation and lightness for me first. These""" start="00:02:06.480" video="qanda-theme" id="subtitle"]]
+[[!template text="""are also random, but they are picked with some kind of range.""" start="00:02:14.160" video="qanda-theme" id="subtitle"]]
+[[!template text="""And that's a parameter that I can play with, you know, the""" start="00:02:19.760" video="qanda-theme" id="subtitle"]]
+[[!template text="""range of lightness and separation.""" start="00:02:26.560" video="qanda-theme" id="subtitle"]]
+[[!template text="""Once those are fixed, the colors are picked by angles in the""" start="00:02:28.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""color wheel, or heel rotation, as you would put it. So yes,""" start="00:02:33.480" video="qanda-theme" id="subtitle"]]
+[[!template text="""that's roughly the process.""" start="00:02:38.400" video="qanda-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: One area I see emacs able to do themes that is "underused?" is changing the font""" start="00:02:43.720" video="qanda-theme" id="subtitle"]]</div>[[!template text="""OK, great. I think the second question is still in the""" start="00:02:43.720" video="qanda-theme" id="subtitle"]]
+[[!template text="""process. Oh, well, maybe you could start fielding it. I""" start="00:02:47.240" video="qanda-theme" id="subtitle"]]
+[[!template text="""think you've got already something to work on. I see one area""" start="00:02:51.680" video="qanda-theme" id="subtitle"]]
+[[!template text="""I see Emacs able to do. under use is changing the font, font""" start="00:02:55.320" video="qanda-theme" id="subtitle"]]
+[[!template text="""size, font type, model space based on various faces. Yeah,""" start="00:03:01.200" video="qanda-theme" id="subtitle"]]
+[[!template text="""so to paraphrase the question, one thing that Emacs is""" start="00:03:09.760" video="qanda-theme" id="subtitle"]]
+[[!template text="""definitely not doing a whole lot of right now is changing the""" start="00:03:13.440" video="qanda-theme" id="subtitle"]]
+[[!template text="""font that is being used, be it the font size, the font family.""" start="00:03:17.400" video="qanda-theme" id="subtitle"]]
+[[!template text="""Sometimes you see themes, especially old mode themes,""" start="00:03:21.080" video="qanda-theme" id="subtitle"]]
+[[!template text="""fontify differently the headers of the documents versus""" start="00:03:25.040" video="qanda-theme" id="subtitle"]]
+[[!template text="""the content, and usually you do have a little bit of a""" start="00:03:29.200" video="qanda-theme" id="subtitle"]]
+[[!template text="""contrast that is being introduced. But is it something that""" start="00:03:31.880" video="qanda-theme" id="subtitle"]]
+[[!template text="""you find value in, this type of contrast based on font? And to""" start="00:03:34.720" video="qanda-theme" id="subtitle"]]
+[[!template text="""me, it's my personal preference to just use one font. I don't""" start="00:03:38.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""even change the font size a lot in org mode. It's just""" start="00:03:45.160" video="qanda-theme" id="subtitle"]]
+[[!template text="""personal preference.""" start="00:03:51.480" video="qanda-theme" id="subtitle"]]
+[[!template text="""I've seen scenes where once I applied, I opened the org doc""" start="00:03:55.320" video="qanda-theme" id="subtitle"]]
+[[!template text="""and suddenly all the titles are like Serif or some fancy""" start="00:03:59.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""fonts. That works. And to me, again, it's a personal""" start="00:04:04.640" video="qanda-theme" id="subtitle"]]
+[[!template text="""preference that I don't really like that, but I know a lot of""" start="00:04:12.760" video="qanda-theme" id="subtitle"]]
+[[!template text="""people like that. So it's up to you, I guess. Yeah, I mean,""" start="00:04:16.920" video="qanda-theme" id="subtitle"]]
+[[!template text="""this, as we've seen in your talk and as well as the previous""" start="00:04:21.800" video="qanda-theme" id="subtitle"]]
+[[!template text="""one we had this morning, you know, themes are very personal""" start="00:04:25.840" video="qanda-theme" id="subtitle"]]
+[[!template text="""and at the end, whatever you need to, you know, some people""" start="00:04:29.280" video="qanda-theme" id="subtitle"]]
+[[!template text="""are going to need more contrast than others, some people are""" start="00:04:33.080" video="qanda-theme" id="subtitle"]]
+[[!template text="""going to need a little more variety in the fonts that they""" start="00:04:35.800" video="qanda-theme" id="subtitle"]]
+[[!template text="""use. Ultimately, it's up to you really what you want to use.""" start="00:04:38.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""The end point, the angle that one should be aiming for is to""" start="00:04:41.360" video="qanda-theme" id="subtitle"]]
+[[!template text="""feel comfortable in what they're editing. And whether this""" start="00:04:45.200" video="qanda-theme" id="subtitle"]]
+[[!template text="""comfort translates into a very barebone color theme like""" start="00:04:49.040" video="qanda-theme" id="subtitle"]]
+[[!template text="""the one we saw this morning with very slight colors but still""" start="00:04:52.800" video="qanda-theme" id="subtitle"]]
+[[!template text="""which has a lot of personality or perhaps something closer""" start="00:04:56.320" video="qanda-theme" id="subtitle"]]
+[[!template text="""to yours which tends to use equal luminance or lightness for""" start="00:04:59.080" video="qanda-theme" id="subtitle"]]
+[[!template text="""the different entries. Well, everyone needs to tune in and""" start="00:05:04.280" video="qanda-theme" id="subtitle"]]
+[[!template text="""find whatever works best for them, I think. Yep. And also, I""" start="00:05:07.880" video="qanda-theme" id="subtitle"]]
+[[!template text="""want to note, I actually have a personal rule. It's also in""" start="00:05:13.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""all my themes. It's that comments have to be italic. I just""" start="00:05:18.480" video="qanda-theme" id="subtitle"]]
+[[!template text="""like the look of italic comments. So, I actually... So, if""" start="00:05:24.480" video="qanda-theme" id="subtitle"]]
+[[!template text="""you... In one of the section in the video, I mentioned I have""" start="00:05:32.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""hooks. Maybe I didn't mention, but I have hooks when using""" start="00:05:37.800" video="qanda-theme" id="subtitle"]]
+[[!template text="""the picking the random theme setup. One of the purpose of""" start="00:05:41.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""that hook is I can add italic to all the themes on the comment""" start="00:05:47.360" video="qanda-theme" id="subtitle"]]
+[[!template text="""face. Which I don't think it works actually right now, but""" start="00:05:52.360" video="qanda-theme" id="subtitle"]]
+[[!template text="""that's the intention. Yeah, but I think it answers the""" start="00:05:59.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""question we started on originally. Because changing the""" start="00:06:02.680" video="qanda-theme" id="subtitle"]]
+[[!template text="""font, I mean, using the italic variant of the font, it's""" start="00:06:05.880" video="qanda-theme" id="subtitle"]]
+[[!template text="""literally a different font. And so, being able to have this""" start="00:06:11.560" video="qanda-theme" id="subtitle"]]
+[[!template text="""type of contrast is actually important for you. So, it's""" start="00:06:14.120" video="qanda-theme" id="subtitle"]]
+[[!template text="""nice that you managed to find this particular bit of""" start="00:06:17.480" video="qanda-theme" id="subtitle"]]
+[[!template text="""knowledge through experimentation. And also I want to add""" start="00:06:20.840" video="qanda-theme" id="subtitle"]]
+[[!template text="""that if you pick a monospace font like I do, usually there's""" start="00:06:25.520" video="qanda-theme" id="subtitle"]]
+[[!template text="""not a lot of... Creativity? No, that's not the word. It's a""" start="00:06:30.720" video="qanda-theme" id="subtitle"]]
+[[!template text="""lot of personality in the regular font part. But people do""" start="00:06:37.440" video="qanda-theme" id="subtitle"]]
+[[!template text="""put a lot of different things in the italic. So yeah, if you""" start="00:06:45.640" video="qanda-theme" id="subtitle"]]
+[[!template text="""can find a way to utilize the italic face, you could see some""" start="00:06:51.800" video="qanda-theme" id="subtitle"]]
+[[!template text="""interesting results. Yeah, definitely. Again, I think""" start="00:06:56.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""it's important to consider all the things you can play with""" start="00:07:01.240" video="qanda-theme" id="subtitle"]]
+[[!template text="""in terms of contrast. Because at the end of the day, you know,""" start="00:07:03.720" video="qanda-theme" id="subtitle"]]
+[[!template text="""some people are going to be more receptive to a change of font""" start="00:07:06.520" video="qanda-theme" id="subtitle"]]
+[[!template text="""than change of color. You know, just considering the amount""" start="00:07:08.840" video="qanda-theme" id="subtitle"]]
+[[!template text="""of people who are colorblind and who are using software like""" start="00:07:11.640" video="qanda-theme" id="subtitle"]]
+[[!template text="""this. You know, sometimes your vision optimizes for""" start="00:07:14.440" video="qanda-theme" id="subtitle"]]
+[[!template text="""particular kind of changes and some people are going to be""" start="00:07:19.280" video="qanda-theme" id="subtitle"]]
+[[!template text="""more sensitive to a slanted eye than they would be to an eye""" start="00:07:22.040" video="qanda-theme" id="subtitle"]]
+[[!template text="""that is red or an eye that is blue. So, But it's not for""" start="00:07:26.280" video="qanda-theme" id="subtitle"]]
+[[!template text="""everyone.""" start="00:07:31.480" video="qanda-theme" id="subtitle"]]
+[[!template text="""So I'm looking at the time and we have about eight minutes""" start="00:07:32.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""until we go into the next talk.""" start="00:07:37.520" video="qanda-theme" id="subtitle"]]
+[[!template text="""To be frank, I don't think I've got any more questions on my""" start="00:07:38.840" video="qanda-theme" id="subtitle"]]
+[[!template text="""end. I'm not sure if we've got any people on BBB who has joined""" start="00:07:44.520" video="qanda-theme" id="subtitle"]]
+[[!template text="""us and would like to ask a question. Let me check on IRC""" start="00:07:46.880" video="qanda-theme" id="subtitle"]]
+[[!template text="""quickly if we've got any questions coming our way. I don't""" start="00:07:49.120" video="qanda-theme" id="subtitle"]]
+[[!template text="""see any. Do you see any on your end?""" start="00:07:53.800" video="qanda-theme" id="subtitle"]]
+[[!template text="""Not really. Well, then I suggest we just leave it at that and""" start="00:07:57.200" video="qanda-theme" id="subtitle"]]
+[[!template text="""enjoy a little break before the next chat. So, thank you so""" start="00:08:06.480" video="qanda-theme" id="subtitle"]]
+[[!template text="""much Metrowind for coming to EmacsConf and talking about""" start="00:08:08.680" video="qanda-theme" id="subtitle"]]
+[[!template text="""colors because, as you saw, many people are interested""" start="00:08:11.560" video="qanda-theme" id="subtitle"]]
+[[!template text="""about them, so much that another person decided to have a""" start="00:08:14.400" video="qanda-theme" id="subtitle"]]
+[[!template text="""chat about theme. We didn't plan for this, but it's nice to""" start="00:08:17.200" video="qanda-theme" id="subtitle"]]
+[[!template text="""see. And, well, perhaps you could collaborate in the future""" start="00:08:20.640" video="qanda-theme" id="subtitle"]]
+[[!template text="""and both find the mutual confidence that you need to push""" start="00:08:23.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""your stuff to Melpa. Because I did hear that you weren't""" start="00:08:26.920" video="qanda-theme" id="subtitle"]]
+[[!template text="""feeling too confident about your random color theme""" start="00:08:29.800" video="qanda-theme" id="subtitle"]]
+[[!template text="""package. But, you know, you've done the first step, which is""" start="00:08:33.120" video="qanda-theme" id="subtitle"]]
+[[!template text="""talking about it and sharing it with all of us. And perhaps""" start="00:08:37.440" video="qanda-theme" id="subtitle"]]
+[[!template text="""the next step is to actually clean up the code to your""" start="00:08:40.560" video="qanda-theme" id="subtitle"]]
+[[!template text="""satisfaction and publish it eventually. Oh, I can see""" start="00:08:42.760" video="qanda-theme" id="subtitle"]]
+[[!template text="""another question. Should we go to that? Sure.""" start="00:08:47.960" video="qanda-theme" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you ever kept any of the random themes that were thrown up?""" start="00:08:53.461" video="qanda-theme" id="subtitle"]]</div>[[!template text="""Have you ever""" start="00:08:53.461" video="qanda-theme" id="subtitle"]]
+[[!template text="""kept any of the random themes that were thrown up? So I assume""" start="00:08:54.080" video="qanda-theme" id="subtitle"]]
+[[!template text="""this is for the Monte Carlo setup. The answer is no. The""" start="00:08:59.720" video="qanda-theme" id="subtitle"]]
+[[!template text="""reason is, like I mentioned, I'm using the randomly picking""" start="00:09:05.120" video="qanda-theme" id="subtitle"]]
+[[!template text="""a theme setup right now. And Monte Carlo is one of them. Now,""" start="00:09:10.000" video="qanda-theme" id="subtitle"]]
+[[!template text="""when Emacs picks Monte Carlo by chance, I wouldn't know""" start="00:09:15.080" video="qanda-theme" id="subtitle"]]
+[[!template text="""about it. So I wouldn't know this is my random theme. That's""" start="00:09:18.640" video="qanda-theme" id="subtitle"]]
+[[!template text="""the reason I never kept any, like, good color schemes""" start="00:09:23.240" video="qanda-theme" id="subtitle"]]
+[[!template text="""generated. So, no. Right, okay. Well, considering we don't""" start="00:09:28.840" video="qanda-theme" id="subtitle"]]
+[[!template text="""have any further questions, what I suggest now is that we'll""" start="00:09:34.960" video="qanda-theme" id="subtitle"]]
+[[!template text="""leave it at that. So, again, Metrowind, thank you so much.""" start="00:09:37.360" video="qanda-theme" id="subtitle"]]
+[[!template text="""Thank you. And hopefully we'll hear more of your themes in""" start="00:09:40.240" video="qanda-theme" id="subtitle"]]
+[[!template text="""the future. Cool. Thanks. All right. Bye bye. Bye bye.""" start="00:09:43.080" video="qanda-theme" 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%20theme%3A%20My%20journey%20of%20finding%20and%20creating%20the%20%E2%80%9Cperfect%E2%80%9D%20Emacs%20theme)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/theme-before.md b/2024/info/theme-before.md
index 806ae5d4..8a945375 100644
--- a/2024/info/theme-before.md
+++ b/2024/info/theme-before.md
@@ -1,18 +1,35 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 12-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sat 2024-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="theme">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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 stroke-width="3" x="329" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 10-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-theme.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="2024-12-07T18:00:00Z" end="2024-12-07T18:10:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~1:00 PM - 1:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~12:00 PM - 12:10 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~11:00 AM - 11:10 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~10:00 AM - 10:10 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~6:00 PM - 6:10 PM UTC <br />Saturday, Dec 7 2024, ~7:00 PM - 7:10 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~8:00 PM - 8:10 PM EET (Europe/Athens)<br />Saturday, Dec 7 2024, ~11:30 PM - 11:40 PM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~2:00 AM - 2:10 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~3:00 AM - 3:10 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+02:51.910 Lab
+05:25.090 NotInk: grayscale
+06:13.930 Random theme
+06:50.020 Monte Carlo
+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://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 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="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/theme-nav.md b/2024/info/theme-nav.md
index bf59a90b..872673cb 100644
--- a/2024/info/theme-nav.md
+++ b/2024/info/theme-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/julia">Exploring shared philosophies in Julia and Emacs</a>
-Next by time: <a href="/2024/talks/guile">Beguiling Emacs: Guile-Emacs relaunched!</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/color">Colour your Emacs with ease</a>
+Next by track: <a href="/2024/talks/water">Watering my (digital) plant with Emacs timers</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/transducers-after.md b/2024/info/transducers-after.md
index cfd894ee..3995e5c1 100644
--- a/2024/info/transducers-after.md
+++ b/2024/info/transducers-after.md
@@ -1,7 +1,749 @@
<!-- 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%20transducers%3A%20Transducers%3A%20finally%2C%20ergonomic%20data%20processing%20for%20Emacs%21)
+<div class="transcript transcript-mainVideo"><a name="transducers-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""Hi everyone, this is EmacsConf 2024. I'm Colin, and today""" start="00:00:00.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""I'll be talking about transducers.""" start="00:00:10.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""After introducing them, I'll share a bit of history about""" start="00:00:17.320" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""transducers and the problems that they solve, some basics""" start="00:00:21.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""about how we can use them, how they work, like how they're""" start="00:00:25.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""implemented, some demonstrations of how we can actually""" start="00:00:28.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""use them in the wild, and then some other discussions about""" start="00:00:32.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""issues that they have.""" start="00:00:36.960" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What are transducers?""" start="00:00:41.520" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""Okay, let's get right in. What are transducers?""" start="00:00:41.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Transducers are a way to do streaming iteration with a""" start="00:00:46.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""modern API.""" start="00:00:49.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Who are transducers for, and thereby, who is""" start="00:00:55.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""this talk for? Well, it's for people who want to do streamed""" start="00:01:00.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""data processing in Emacs. It's for people who perhaps""" start="00:01:05.600" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""aren't satisfied with the existing APIs, for example, the""" start="00:01:10.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""seq API, or some other common libraries that provide""" start="00:01:14.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""similar functionality. Maybe you're not a fan of the loop""" start="00:01:19.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""macro. Some people find it difficult to understand. Or""" start="00:01:23.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""maybe you've done a bunch of Clojure before, and you'd like""" start="00:01:29.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""more aspects of Clojure in your Emacs Lisp. Or maybe you're""" start="00:01:32.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""just interested in transducers in general, because the""" start="00:01:36.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""pattern has now been ported to multiple different Lisps.""" start="00:01:40.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""So I'm Colin. I'm fosskers on everything online, and I do""" start="00:01:48.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""mainly back-end programming work and a lot of open source""" start="00:01:55.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""software. I wrote Haskell for a long time, both as a hobbyist""" start="00:01:58.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""and professionally. Since the COVID years, I've been""" start="00:02:05.160" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""writing Rust, both open source and professionally. But now""" start="00:02:09.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""I find that in my spare time, I'm mostly writing Common Lisp.""" start="00:02:13.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Some things I learned from my years of Haskell was that a lot""" start="00:02:19.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""of programming is just altering the shape of data. You know,""" start="00:02:22.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""sometimes we work through our algorithm line by line. We're""" start="00:02:27.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""trying to just tell the computer exactly what to do. But if we""" start="00:02:31.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""step back, a lot of the time we're just getting in data of some""" start="00:02:36.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""shape, changing it, and then passing it along. A lot of""" start="00:02:39.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""these patterns are common, identified""" start="00:02:44.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""decades ago. For instance, we have some collection, and we""" start="00:02:49.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""want to transform every element of that collection and then""" start="00:02:53.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""pass it on. Or maybe we're trying to filter out bad elements""" start="00:02:57.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""in that collection. Or maybe we're looking for a specific""" start="00:03:01.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""element in that collection. Yes, you could write all that""" start="00:03:04.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""with for loops, but these kind of common patterns were""" start="00:03:07.760" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""identified and given names decades ago. So why not use them?""" start="00:03:11.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""They say that there are two major problems in computer""" start="00:03:18.560" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""science, one being cache validation and the other being""" start="00:03:21.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""naming things.""" start="00:03:25.760" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Common issues""" start="00:03:27.590" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""I've identified five other problems that""" start="00:03:27.590" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""come up when we're trying to deal with collections of data,""" start="00:03:29.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""or big streams of data. One is that if we were trying to""" start="00:03:33.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""load a file all into memory all at once and process the whole""" start="00:03:40.600" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""thing, sometimes we can have memory problems. You've""" start="00:03:45.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""probably seen out-of-memory errors or such things.""" start="00:03:48.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""A second issue that comes up is that if we were looking at a""" start="00:03:55.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""giant for loop, in particular a nested for loop or such""" start="00:03:58.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""things, it can be hard to tell just by looking at the code what""" start="00:04:01.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""it's trying to do, what it intends. If we don't go character""" start="00:04:06.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""by character or line by line, it can be hard to understand it.""" start="00:04:11.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Furthermore, and this is particularly an issue with Emacs""" start="00:04:16.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Lisp, is that if one call, for instance, to seq-map, then""" start="00:04:20.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""piped into seq-filter, for instance, will have an""" start="00:04:26.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""intermediate allocation, the map will take the source""" start="00:04:29.320" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""container, allocate a new one, and then the filter will""" start="00:04:33.600" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""operate over the second one. This is wasteful.""" start="00:04:37.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Furthermore, it can often be difficult to abort a stream.""" start="00:04:40.320" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""For instance, if we were filtering through our collection,""" start="00:04:48.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""but we knew we only wanted to go halfway, for instance, for""" start="00:04:53.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""some reason, we have no way to stop it halfway through. We""" start="00:04:57.320" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""just have to process the whole thing, even if we know we don't""" start="00:05:01.760" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""need to. Another issue is that for languages that have""" start="00:05:05.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""traits, or in Haskell they're called type classes, if you""" start="00:05:11.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""are defining what it means to map over something, you often""" start="00:05:18.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""have to redefine that for every kind of container or thing""" start="00:05:22.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that you're iterating over. Wouldn't it be nice if we could""" start="00:05:27.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""define things like map just once and then reuse them""" start="00:05:31.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""everywhere? Now, transducers solve all five of these,""" start="00:05:34.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""without the addition of new language features, and with""" start="00:05:39.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""little more than plain old function composition.""" start="00:05:44.040" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Transducers""" start="00:05:47.280" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""If this is your first time hearing of transducers, yeah,""" start="00:05:47.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""no problem. They were originally invented in Clojure by""" start="00:05:53.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Rich Hickey, and this is a quote from him. He thinks""" start="00:05:57.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""transducers are a fundamental primitive that decouple""" start="00:06:01.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""critical logic from list or sequence processing, and if he""" start="00:06:05.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""had to do Clojure all over, he'd put them at the bottom, at the""" start="00:06:10.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""very bottom of all the fundamental primitives. Now, that's""" start="00:06:14.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Rich speaking quite highly of them. And I think he has a point""" start="00:06:19.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""here.""" start="00:06:24.600" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""They were invented originally in Clojure. In more""" start="00:06:25.160" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""recent years, they were brought over to Scheme""" start="00:06:32.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""via SRFI 171. That's where I found them""" start="00:06:34.773" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""when I was learning the Guile language.""" start="00:06:38.775" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""In the process of submitting a patch, I realized""" start="00:06:41.522" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that there were other things to be improved. So I ported the""" start="00:06:43.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""pattern to Common Lisp, then Fennel, and then more""" start="00:06:48.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""recently, Emacs Lisp. The Common Lisp and Emacs Lisp APIs""" start="00:06:51.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""are identical. And the Fennel one is not identical, but""" start="00:06:56.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""fairly similar. Overall, everywhere you find""" start="00:07:01.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""transducers, they should basically be fairly uniform.""" start="00:07:05.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""When I originally made the Common Lisp variant first, I""" start="00:07:10.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""sampled the APIs from a number of different languages and""" start="00:07:15.760" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""came up with what I believed to be a representative sample of""" start="00:07:18.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""what most people would want out of such a library. I gave""" start="00:07:23.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""functions their common modern names. For instance, map""" start="00:07:27.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""is map and filter is filter and so on.""" start="00:07:32.440" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Using transducers""" start="00:07:35.280" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""What does the usage of transducers look like? Well,""" start="00:07:35.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""these examples will all be the Emacs Lisp variant, but the""" start="00:07:42.600" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Common Lisp will look basically exactly the same, minus""" start="00:07:48.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""this little t- prefix.""" start="00:07:52.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Running transducers requires three things. It requires a""" start="00:07:54.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""source. This could be an obvious thing like a list or a""" start="00:08:00.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""vector, but it could be other things like a file, or in Emacs""" start="00:08:06.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""list in particular, a buffer.""" start="00:08:11.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""A reducer is a function. It's something like""" start="00:08:16.349" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""the + operator or the * operator,""" start="00:08:20.113" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""or certain constructors of various containers.""" start="00:08:22.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""It takes values and collates them into some final version.""" start="00:08:26.786" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Now, finally, we have what we're calling here""" start="00:08:32.126" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""a transducer chain. This could be one transducer function""" start="00:08:33.947" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""or it could be multiple composed together. These are the""" start="00:08:37.568" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""functions that actually take data and transform them""" start="00:08:43.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""somehow. For instance, this. We have a list of three""" start="00:08:47.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""elements. We want to reduce it into a vector. How we are""" start="00:08:55.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""going to transform the elements along the way: we are doing""" start="00:09:04.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""plus one to each of them. If this syntax is new to you, just""" start="00:09:07.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""know that this #' just means that this thing that""" start="00:09:13.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""comes after it is the name of the function. In Common Lisp and""" start="00:09:18.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Emacs Lisp, this is necessary, but for Clojure and Scheme,""" start="00:09:22.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""it is not. So we can see here that just this example is not much""" start="00:09:26.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""different than any other normal map call you might see made,""" start="00:09:32.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""but if nothing else, it's a handy way to convert a list to a""" start="00:09:36.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""vector or anything else. There are many, many reducers""" start="00:09:40.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""available and many different forms that we can""" start="00:09:45.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""collate the final value into.""" start="00:09:48.240" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""A more involved example with comp""" start="00:09:52.625" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""Let's see a more involved example.""" start="00:09:52.625" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Okay, now we've got some more meat here.""" start="00:09:55.087" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Here we can see usage of the comp function""" start="00:09:58.050" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""and a custom source, ints.""" start="00:10:01.773" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Ints is an infinite generator of integer values. That's not""" start="00:10:05.256" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""like a list or a file. It will generate infinitely.""" start="00:10:11.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Comp is letting us compose multiple transducer functions""" start="00:10:14.784" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""together. Notice that this is the opposite order of what""" start="00:10:19.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we'd usually be used to from a function like comp. The order""" start="00:10:23.760" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""here is top to bottom, basically, so that the map goes first,""" start="00:10:28.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""then the filter, and then the take. So effectively is what""" start="00:10:32.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we're doing is taking all the integers that exist,""" start="00:10:37.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""positive, adding one to them, filtering out only the even""" start="00:10:40.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""ones, but then just taking 10. Cons here is a function that""" start="00:10:45.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""just produces the ending result as a list. So what happens""" start="00:10:50.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""here specifically is how we are avoiding intermediate""" start="00:10:57.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""allocations. First, the number 0 will come through.""" start="00:11:00.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""It will be pulled out of this source internally by transduce.""" start="00:11:04.239" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""It will make its way into the map. The map will add it. Then it""" start="00:11:07.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""will immediately go into this filter step. So it's not like""" start="00:11:10.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""all the maps occur, and then all the filters occur. We do""" start="00:11:15.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""everything for each element. So the 0 comes in, now it's 1.""" start="00:11:19.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""The filter would occur. Well, it's going to fail that""" start="00:11:24.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""because it's not even, so it will just bail there. Now we'll""" start="00:11:27.560" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""go to the next one. Now 1 will come, it will become 2, then""" start="00:11:31.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""it will be saved by this evenp call, and then the take will""" start="00:11:35.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""capture it, because we only want 10 values here. You can""" start="00:11:39.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""see 2, 4, 6, 8, and so on is the result that we""" start="00:11:42.600" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""expect. So let's play around a little bit.""" start="00:11:45.240" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""In Emacs""" start="00:11:49.333" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""Let's jump into Emacs and see what we can do.""" start="00:11:49.333" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Alright, you should see my Emacs screen here.""" start="00:11:53.337" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""These are the actual notes for the actual""" start="00:11:58.501" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""presentation done in Org Mode. I'll boost that up in size for""" start="00:12:04.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""a little bit. That should be more than big enough for you.""" start="00:12:08.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Just by changing the reducer, we can change the result.""" start="00:12:12.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Okay, now it's a vector. Well, what else can we do to it? Well,""" start="00:12:17.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""let's just add up the results. Maybe we just want to count the""" start="00:12:21.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""results. Oh, indeed, there were 10. What if we want to find""" start="00:12:25.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""the average of the results? What if we want to find the median""" start="00:12:30.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""of the results? And so on. Here's some more interesting""" start="00:12:36.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""things that we could do. We could add different steps. So""" start="00:12:40.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""here we have all the integers. Let's add, hmm, okay, we'll""" start="00:12:45.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""keep that. We're going to add t-enumerate. What enumerate does""" start="00:12:51.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""is for each item that comes through, it is""" start="00:12:57.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""going to add a sort of index to it and make it a pair. In this""" start="00:13:00.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""case, it's going to be equal to what came in here. Well, we can""" start="00:13:06.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""change it. If we start this at 1, now it will be different.""" start="00:13:08.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""1 will be paired with 0, and then 2 would be paired""" start="00:13:12.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""with 1, and so on. We'll accept that the even call will change""" start="00:13:15.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that a little bit. Why we're doing this is because we want""" start="00:13:19.560" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""to form a hash table. Let's move that down to 3, maybe""" start="00:13:24.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we'll get a better result. What do we see? Okay, here now the""" start="00:13:27.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""result is a hash table. What are its values? Well, 0 seems""" start="00:13:31.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""to have... The key of 0 seems to be paired with 2, the key of""" start="00:13:37.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""1 seems to be paired with 4,""" start="00:13:40.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""and 2 seems to be paired with 6.""" start="00:13:42.910" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Maybe let's jazz that up even a little bit more.""" start="00:13:47.412" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""We're going to start from a string""" start="00:13:51.294" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""and we'll call it hello.""" start="00:13:52.974" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""That's not going to work anymore""" start="00:13:57.944" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""and neither is that, but what we could do is""" start="00:13:59.565" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we could say t-map #'string.""" start="00:14:02.586" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""I believe we'll do that.""" start="00:14:05.499" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Let's see if that works. It did. So that's""" start="00:14:08.628" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""going to convert a character into a string.""" start="00:14:08.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Let's just go two""" start="00:14:13.590" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""just to make it a little easier. Now you can see that we've""" start="00:14:14.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""constructed a hash table here. The key of 0 is mapped to the""" start="00:14:18.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""string of h and 1 is mapped to e. Now, I really like having""" start="00:14:21.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""this reducer in particular.""" start="00:14:27.080" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Hash tables""" start="00:14:29.469" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""Know that hash tables are""" start="00:14:29.469" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""also legal sources. I find that both in Emacs Lisp and in""" start="00:14:30.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Common Lisp, dealing with hash tables--like creating them""" start="00:14:34.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""and altering them--can be a bit of a pain. Having them""" start="00:14:37.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""immediately available like this with transducers is very""" start="00:14:41.600" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""handy, I find. We can work with something that wasn't a hash""" start="00:14:45.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""table. We can construct it in a way that makes it amenable to""" start="00:14:49.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that, and then reduce it down into a hash table, and here you""" start="00:14:53.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""go. Very handy.""" start="00:14:56.200" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Clarity""" start="00:14:58.040" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""One last point is that you can see very clearly what""" start="00:14:58.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""this is attempting to do, as opposed to, say, a for loop. It's""" start="00:15:06.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""very clear what that step is doing, and then you can see what""" start="00:15:10.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that is doing, and you know that the result is going to be two.""" start="00:15:12.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Each line is kind of its own declarative step, and it should""" start="00:15:15.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""be clear, just by staring at this, basically what you're""" start="00:15:18.560" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""going to get out. This is one main difference from other""" start="00:15:22.160" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""languages that have things--say, for instance, Rust's""" start="00:15:25.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""iterator API--is the difference between the transducers""" start="00:15:29.600" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""and the reducers. If we go up here, for example, the""" start="00:15:35.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""difference between the transducers and the reducers and""" start="00:15:41.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""the sources is not explicitly laid out, whereas with""" start="00:15:44.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""transducers, it is. You have to be aware of how these things""" start="00:15:48.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""are different. I think that that helps clarity.""" start="00:15:53.120" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How do transducers work?""" start="00:15:55.800" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""Moving on. How do transducers work? Well,""" start="00:15:55.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we want to go see the README.""" start="00:16:02.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""So, what we're going to do is""" start="00:16:09.858" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we're going to go to here.""" start="00:16:11.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""You should still be able to see this.""" start="00:16:19.103" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""This is the CL example, actually.""" start="00:16:21.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Let's go to transducers.el.""" start="00:16:28.584" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Their APIs and READMEs are the same,""" start="00:16:32.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""but just for the sake of it, we will go see""" start="00:16:37.745" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""how this looks on the Emacs side,""" start="00:16:39.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""just so that nothing is a surprise.""" start="00:16:45.727" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""But recall that the APIs are essentially the same""" start="00:16:48.047" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""between the two. If you go to this section, writing your""" start="00:16:50.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""own primitives, you can read about how transducers are""" start="00:16:53.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""actually formed, whether or not you want to write them""" start="00:16:56.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""yourself or not. We can see here t-map. We accept the""" start="00:17:01.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""function that you want to operate with. Then you've got""" start="00:17:06.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""this extra little lambda here that's coming in, and it's""" start="00:17:10.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""receiving a thing that is named reducer. Now, while here""" start="00:17:13.320" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we're calling it reducer, it's actually the chain of all the""" start="00:17:17.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""composed functions together. It's all those main""" start="00:17:20.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""transducer steps. Finally, it's the reducer all""" start="00:17:25.160" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""composed together with normal function composition.""" start="00:17:28.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""That will matter very soon. Now here's the actual meat.""" start="00:17:31.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""We can see the accumulative result that's coming in with the""" start="00:17:35.878" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""current element. Now we need to operate on this.""" start="00:17:40.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Were it normally mapped, we would see us""" start="00:17:45.740" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""applying the F to the input.""" start="00:17:47.841" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""But here, you can see us applying the F to the input and then""" start="00:17:49.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""continuing on. So us calling the rest of the composed chain""" start="00:17:53.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""here is the effect of, in the previous slide, moving to the""" start="00:17:58.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""next step. We could ignore this line for now.""" start="00:18:03.160" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""If you're curious, please read the README in detail.""" start="00:18:07.157" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Now, what about reducers?""" start="00:18:13.820" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""What do those look like? Well, let's just scroll""" start="00:18:15.580" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""down here. Recall that a reducer is a function that's""" start="00:18:18.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""consuming a stream, right? Zoom that up for you a little bit.""" start="00:18:22.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Now, in the case of count, recall that this is how it's""" start="00:18:26.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""working, how we saw a moment ago. So clearly this list of five""" start="00:18:33.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""elements only has five things in it. Well, a reducer by""" start="00:18:37.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""structure is a function of two, one, or zero arguments. So we""" start="00:18:42.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""can see here in the case of two, this is the normal iterative""" start="00:18:47.600" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""case. We don't care about the input for count, we just care""" start="00:18:50.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""about the current accumulated count that we're doing, and""" start="00:18:54.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we add one to it, and that's it. This then goes back to""" start="00:18:58.560" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""the loop and the whole process starts again with the next""" start="00:19:02.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""element. In this kind of done case, this is used internal to""" start="00:19:06.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that sort of the supervising function transduce. It's just""" start="00:19:10.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""confirming the final result. Sometimes some""" start="00:19:16.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""post-processing is necessary here, but in the case of""" start="00:19:19.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""count, as it is so simple, that is not necessary. And now""" start="00:19:21.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""here's the base case. This is also used within that""" start="00:19:26.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""supervising transduce function at the very top. Well, if""" start="00:19:29.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""you're counting, you have to start from somewhere, right?""" start="00:19:34.320" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""In this case, well, what you're starting with is zero.""" start="00:19:36.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""In the case of cons, you'd be starting with an empty list.""" start="00:19:37.350" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""In the case of vector, you'd be starting""" start="00:19:40.252" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""with an empty vector and so on.""" start="00:19:44.435" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Once again, if you are more curious, please take a look at""" start="00:19:54.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""the README.""" start="00:19:56.800" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Transducers in the wild - CSV""" start="00:20:00.520" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""Okay, transducers in the wild. Well, let's go take a look at""" start="00:20:00.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""processing some CSV data.""" start="00:20:06.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""We're going to open up a new Emacs Lisp bracket here. So I have""" start="00:20:07.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""a file. And in this file, let's just go look at C-x b right""" start="00:20:21.320" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""there, you will see that we've got some bank transaction""" start="00:20:28.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""information. It's got these transactions from a whole""" start="00:20:34.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""bunch of different people into different accounts,""" start="00:20:37.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""whether it's money coming in, money going out, and then a""" start="00:20:40.200" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""basic description. How's your Latin? But for this little""" start="00:20:43.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""test, what we want to do is we want to find Bob's final bank""" start="00:20:47.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""balance. Let's get on to it. First of all, let's""" start="00:20:53.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""just confirm, let's do some basic stuff.""" start="00:20:59.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""with-current-buffer, find-file-noselect.""" start="00:21:04.445" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""What's the name of that file?""" start="00:21:10.845" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""This is pre-organized, so you""" start="00:21:15.543" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""will just see it right here.""" start="00:21:17.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""t-transduce and t-comp. We don't know what we're going to comp""" start="00:21:20.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""yet. Actually, I'll just pass to show you. And then we will""" start="00:21:27.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""see, let's just do a little t-count just to confirm. What's""" start="00:21:33.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""our source? Well, our source is a buffer, t-buffer-read.""" start="00:21:37.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""And note that because we're using with-current-buffer,""" start="00:21:45.113" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""if we go like this, if we go current-buffer, this will just work. So""" start="00:21:50.154" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""now let's... Well, that was odd. I should have done it like""" start="00:21:55.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that. There we go. So now we should make that a little smaller""" start="00:21:59.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""so you can see what it is. Now if we hit RET, we should get the""" start="00:22:02.160" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""right result. Okay, so there are 50,001 lines in this file,""" start="00:22:04.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""but the one extra one is the name of the headers, right?""" start="00:22:09.560" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""We want to process this file in more detail. So how can we do""" start="00:22:13.517" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that? Well, let's start by just automatically""" start="00:22:18.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""interpreting the results as CSV. If we do that, okay, well""" start="00:22:22.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""now we only have 50,000 entries as we expected, right?""" start="00:22:28.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Because it's going to pull out the header line. If we now say""" start="00:22:31.560" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we want to just filter out, you know, We only want Bob, right?""" start="00:22:36.760" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""So if... gethash, it was in the row of name. Each line here is""" start="00:22:42.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""made into, at least by default, is made into a hash map. So if""" start="00:22:53.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we go like this, we should see that. Okay, so 12,000 of these""" start="00:22:57.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""lines or thereabout belong to Bob.""" start="00:23:02.760" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Let's just move that over a little bit. Actually, I suppose we don't even""" start="00:23:05.640" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""need that anymore. I'll just keep that full size for you.""" start="00:23:13.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Okay, so all right, there's about 12,000 results for Bob of""" start="00:23:17.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""the 50,000. What's next? Well, we want to confirm,""" start="00:23:24.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we want to pull out everything,""" start="00:23:32.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""all of the in and the out entries.""" start="00:23:40.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Thank you. So, string to number, because we know that""" start="00:23:43.080" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""everything came in as strings. Unfortunately, the from-csv""" start="00:23:56.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""doesn't try to be smart at all, it's just pulling everything""" start="00:24:01.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""in as string values. If you want actual things to be""" start="00:24:03.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""numbers or whatever, that is up to you to do the parsing""" start="00:24:09.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""yourself. Okay, so we have those two values now. We know""" start="00:24:13.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that we saw from the data just a moment ago that you're only""" start="00:24:20.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""going to have a value in one column or the other. It's either""" start="00:24:23.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""going to be 0 in the empty one, or you're going to have some""" start="00:24:27.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""number in the other. So we know that we can just naively add""" start="00:24:29.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""them. If it was in, it would always be positive. So we'll just""" start="00:24:32.160" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""add that. But in the negative case, we want to just make it""" start="00:24:35.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""negative really briefly before we add them all together.""" start="00:24:41.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""let's now just prove to ourselves that we are sane here. What""" start="00:24:45.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""we're going to do is we're going to quickly go say take""" start="00:24:50.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""5 just to convince ourselves, and we'll go cons, and let's""" start="00:24:52.480" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""see if we get kind of results that make sense. Okay, these""" start="00:24:57.040" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""sort of make sense. It looks like you know Bob's got some big""" start="00:24:59.840" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""expenses here. If we take say 15, does it look any better?""" start="00:25:02.800" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Okay, looks like he had a payday. All right, good job Bob.""" start="00:25:07.680" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Let's get back in there. Now we only really care about""" start="00:25:10.320" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""adding the final result, right? So there we go. Add that all""" start="00:25:15.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""together and we'll see what we get in a moment. Okay, wow,""" start="00:25:20.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Bob's rich. Okay, so it looks like in his 12,000""" start="00:25:24.560" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""transaction, Bob has an overall net worth of $8.5 million.""" start="00:25:27.520" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Looking pretty good.""" start="00:25:32.280" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""So here's an example of how you can, particularly in Emacs""" start="00:25:34.440" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Lisp, how you can very easily just get a file, consider it the""" start="00:25:39.000" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""current buffer, and then just do whatever you want to it.""" start="00:25:42.960" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Note that there is sort of first-class support for both CSV""" start="00:25:45.880" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""and JSON, and then you have, and both of those bring in their""" start="00:25:50.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""values as hash maps, and then you're just free to do whatever""" start="00:25:54.360" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""you want and process them, potentially both writing them""" start="00:25:57.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""back out as CSV or JSON once again.""" start="00:26:00.440" video="mainVideo-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Issues and next steps""" start="00:26:03.240" video="mainVideo-transducers" id="subtitle"]]</div>[[!template text="""Some issues with transducers that can come up is""" start="00:26:03.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that one, a zip operator is missing, but I'm working on it.""" start="00:26:10.720" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""Two is that performance, particularly in Emacs Lisp, isn't""" start="00:26:14.920" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that great. It could be due to the sort of nested lambda calls""" start="00:26:19.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that have to occur internally, but the common Lisp""" start="00:26:24.120" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""implementation is quite good. and there's yet no support""" start="00:26:27.760" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""for parallelism. You can imagine that a lot of those steps""" start="00:26:32.240" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""you could potentially perform in parallel depending on the""" start="00:26:35.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""platform, but research has not yet gotten that far. Okay,""" start="00:26:38.560" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""that's all. Thank you very much. If you have any questions,""" start="00:26:44.400" video="mainVideo-transducers" id="subtitle"]]
+[[!template text="""please contact me.""" start="00:26:47.640" video="mainVideo-transducers" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+<div class="transcript transcript-qanda"><a name="transducers-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!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. 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"]]
+[[!template text="""me a little bit. All right. Sorry. I may have lost the plot a""" start="00:00:55.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""little bit. I think I did. However, find the 1st question.""" start="00:00:58.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I got pretty distracted by conversation backstage. Yeah,""" start="00:01:04.920" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: When I tried comparing transducers.el to cl-lib and dash (benchmark-compiled), I got the following results""" start="00:01:09.920" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""no problem. So the first question here, someone's asking,""" start="00:01:09.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""when they first tried comparing transducers.el, the cl-lib""" start="00:01:15.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""and Dash bookmark compiled, and they give some detailed""" start="00:01:22.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""results we're sharing on the stream. Um, they expected""" start="00:01:27.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""transducers to be slower than CL loop, but faster than CL lib""" start="00:01:32.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""or dash. However, this isn't the case, any idea why. And so""" start="00:01:36.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I'll, I'll come back into their data to show there's they're""" start="00:01:41.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""showing, um, you know, there's not a lot of detail on the, on""" start="00:01:43.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the, on the use case here. We could certainly click through""" start="00:01:48.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""it, do it.""" start="00:01:52.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Oh, I should've waited to zoom until I find my spot here.""" start="00:02:02.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""There we are.""" start="00:02:07.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""All right, so there's our example.""" start="00:02:13.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Looks like we are doing a simple map and a sum.""" start="00:02:18.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Mm-hmm. Yeah, that's right. Yeah, question about""" start="00:02:23.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""performance. So a case like this, a simple, I just want to rip""" start="00:02:29.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""through a collection of numbers and sum them all. That's a""" start="00:02:36.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""case where basically loop is always going to win because""" start="00:02:40.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""loop is optimized. This is true in both Emacs Lisp and in""" start="00:02:44.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Common Lisp. For a case like this where you're not really""" start="00:02:51.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""doing two nested of chained calls, like you don't have many""" start="00:02:56.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""sort of what I was compositional steps. If you're just""" start="00:03:02.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""ripping through a collection of numbers, loop is always""" start="00:03:05.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""going to win. Transducers kind of shines when you have to do""" start="00:03:10.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""things that loop can't in terms of expressing yourself. So""" start="00:03:15.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there are lots of different transducers that you can chain""" start="00:03:19.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""together. And in that case, you're kind of prioritizing""" start="00:03:22.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""developer time and developer happiness because you're""" start="00:03:27.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""able to yourself more clearly, whereas sometimes those""" start="00:03:33.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""kind of algorithms can get very hairy if you're just using""" start="00:03:36.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""loop. Now that sounds like I'm moving the goalposts, and""" start="00:03:40.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there's really no excuse for these things not being as""" start="00:03:45.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""performant as possible. In this specific case, my guess is""" start="00:03:48.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that the transducers is slower because it has to do a whole""" start="00:03:54.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""bunch of like inner function calls in order to actually do""" start="00:03:57.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the adding and the collecting. So there's a lot of stuff that""" start="00:04:03.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""just the raw loop doesn't have to do, which transducers""" start="00:04:09.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""does. And so in this case, that's why it would be slower.""" start="00:04:12.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""All right, makes sense.""" start="00:04:20.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Um... I cannot comment against Dash. And also a reminder""" start="00:04:29.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that transducers both in CL and in Emacs Lisp here doesn't""" start="00:04:36.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""attempt to do any, you know, fun, you know, inner rewriting""" start="00:04:40.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""or, you know, what's called an Haskell fusion. Like if you""" start="00:04:44.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""have two different map steps, like in a row, it's not gonna""" start="00:04:48.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""see that and somehow fuse them internally. It's a fairly, in""" start="00:04:51.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that sense, the implementation is just as is.""" start="00:04:55.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""to make it you know as raw fast as possible. The idea being""" start="00:04:59.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that ergonomics is more important up front. Yeah, that's""" start="00:05:04.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""kind of a whole fascinating sub-panel, right? My theme this""" start="00:05:12.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""conference has been, oh, all these different things we""" start="00:05:17.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""should try to get sub-panels going for and use that. Maybe""" start="00:05:19.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""fill in the dev track or even have a third track or whatever.""" start="00:05:24.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I'm not that concerned about the logistics of squeezing""" start="00:05:29.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""into the schedule so much. But anyway, interesting, I mean,""" start="00:05:31.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""to say.""" start="00:05:38.520" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you know of any theoretical texts on transducers?""" start="00:05:40.840" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""Did we already speak to theoretical texts? No, right? No,""" start="00:05:40.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""let's continue. Okay, so another question from the group.""" start="00:05:47.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Do you know of any theoretical texts on transducers? My""" start="00:05:53.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""readme, particularly of the Common Lisp implementation,""" start="00:05:58.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""is the theoretical text on transducers. Rich Hickey has""" start="00:06:01.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""some YouTube videos which also come close. I mean, he""" start="00:06:06.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""invented the things. But in terms of having a full""" start="00:06:10.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""explanation of everything, it's my readme and it's also""" start="00:06:14.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the...""" start="00:06:21.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""The info manual of Guile Scheme, their documentation on""" start="00:06:23.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Surfy 171 is what I used to learn transducers and to""" start="00:06:28.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""re-implement them in other LISPs. So if you just want like a""" start="00:06:34.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""document explaining them, MyReadMe is actually the""" start="00:06:38.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""clearest that I've found. Awesome. Okay, next question.""" start="00:06:41.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""And I'm sorry, you gave a name, you referred to somebody's""" start="00:06:46.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""videos. Rich Hickey, the inventor of Clojure. Rich Hickey,""" start="00:06:50.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""thank you. Hope I got the spelling right, and maybe somebody""" start="00:06:55.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""can catch that and fix it. If not, I'll reach on. Thank you.""" start="00:07:00.400" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Did you think about [compiler features, macros] viz your cl, fennel, elisp, porting of your transducers?""" start="00:07:04.720" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""Reach on to the next question. Waters (Lazy Series in""" start="00:07:04.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Lisp, late 70s) said this should have been done as an""" start="00:07:08.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""additional compiler feature in compilers, but if not, must""" start="00:07:12.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""be a macro package. Do you think about that vis your CL,""" start="00:07:16.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Fennel, Elisp, porting of transducers? I think that""" start="00:07:21.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there's definitely""" start="00:07:27.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""some Galaxy Brain Lisp author out there is probably smart""" start="00:07:28.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""enough to turn a bunch of this stuff into macros. I believe""" start="00:07:36.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that's how the common Lisp library series works. It sees""" start="00:07:40.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that you were calling map or whatever, and it actually knows""" start="00:07:47.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that that's a special macro key. in order to be fast. I did not""" start="00:07:52.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""do that. The implementation as I have it is very simple and""" start="00:07:56.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""simplicity shouldn't be underestimated.""" start="00:08:01.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I love it. What a nice succinct answer. Even I can manage to""" start="00:08:05.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""type that out as I scroll us to the next question.""" start="00:08:13.560" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Does t-buffer-read provide a lazy stream that's linewise, or charwise, or do something else entirely?""" start="00:08:16.579" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""So, does t-buffer-read provide a lazy stream""" start="00:08:16.579" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that's line-wise or character-wise or do something else""" start="00:08:24.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""entirely?""" start="00:08:28.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Okay, there are two functions. I showed""" start="00:08:29.019" video="qanda-transducers" id="subtitle"]]
+[[!template text="""t-buffer-read. There's also one called t-file-read,""" start="00:08:31.588" video="qanda-transducers" id="subtitle"]]
+[[!template text="""which does that. You actually have the buffer open,""" start="00:08:35.074" video="qanda-transducers" id="subtitle"]]
+[[!template text="""it's much more clever.""" start="00:08:38.683" video="qanda-transducers" id="subtitle"]]
+[[!template text="""t-buffer-read, I believe, is simpler. As long as you have an""" start="00:08:40.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Emacs list, what is called the current buffer active. I'm""" start="00:08:46.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""fairly sure you're able to just call next-line on it. I don't""" start="00:08:52.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""believe that I'm doing anything fancy there, looking for""" start="00:08:56.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""line ends. I believe I'm just grabbing the next line and then""" start="00:08:59.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""processing that line-wise. Very good.""" start="00:09:04.000" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Can the Elisp library be combined with the stream.el API or seq in general?""" start="00:09:09.424" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""Can the Elisp library be combined with the stream.el API""" start="00:09:09.424" video="qanda-transducers" id="subtitle"]]
+[[!template text="""or seq in general? I would say that these libraries""" start="00:09:17.304" video="qanda-transducers" id="subtitle"]]
+[[!template text="""are completely orthogonal. You saw that everything""" start="00:09:22.831" video="qanda-transducers" id="subtitle"]]
+[[!template text="""was prefixed by t-.""" start="00:09:27.597" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Basically, transducer is its own zone. However, one thing""" start="00:09:29.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that I do in the common lisp, which is theoretically""" start="00:09:36.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""possible for the Emacs Lisp as well, is kind of like little""" start="00:09:40.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""shim libraries. So I provide, at least for Common Lisp, for a""" start="00:09:44.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""number of, you know, popular sort of third-party""" start="00:09:48.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""collection types, I provide an ability to use them as""" start="00:09:51.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""sources. Maybe that's what you mean. Like""" start="00:09:55.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the built-in containers for Emacs Lisp are already""" start="00:09:59.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""supported. So, you know, a vector hash table and so on.""" start="00:10:04.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""make sense so i think what i heard there is yeah go ahead""" start="00:10:06.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""please sorry in terms of mixing like you know like for""" start="00:10:13.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""instance you know like seq-map used in transducers""" start="00:10:17.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""we'll put it that way""" start="00:10:22.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""i was just gonna say i think it um it it sounds like you're""" start="00:10:28.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""saying Yeah, probably they are actually. We don't know yet""" start="00:10:31.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""about any places where they don't play nicely together. So""" start="00:10:37.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""quite possibly so. We can use sequence and transducers""" start="00:10:41.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""together, for example. As a source potentially, yeah. It's""" start="00:10:45.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""very easy because that just uses defgeneric. As long as you""" start="00:10:49.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""have a new, like if you have a new collection type, as long as""" start="00:10:54.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""you implement a def method for it somewhere, it'll just""" start="00:10:57.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""magically work with this library. That's the magic of...""" start="00:11:01.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Yeah, as an Emacs user enjoying, you know, sort of the""" start="00:11:12.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""renaissance of new features it's had, or sorry, Emacs ERC""" start="00:11:18.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""user for chat. I've seen a lot of awesome stuff get done in the""" start="00:11:21.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""last couple of years with generic set. JP never was working""" start="00:11:27.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""on that. And like, that's just making me my eyes pop and go,""" start="00:11:32.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""wow, that does make a whole lot of things simpler, doesn't""" start="00:11:36.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""it? I think we're a lot of us running into generics and how""" start="00:11:39.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that solves problems in Emacs.""" start="00:11:44.280" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How does one debug a t-comp expression? Can you single step and see intermediate results of the different statements you declare?""" start="00:11:47.543" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""How does one debug a t-comp""" start="00:11:47.543" video="qanda-transducers" id="subtitle"]]
+[[!template text="""expression? Can you talk in terms of single step,""" start="00:11:50.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""step-by-step, intermediate results of the different""" start="00:11:55.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""statements you declare? Yes. So in Common Lisp, this is""" start="00:11:58.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""and sly stickers and things like that. In Emacs Lisp, it's a""" start="00:12:08.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""little bit, shall we say, more difficult. For step""" start="00:12:12.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""debugging,""" start="00:12:19.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""so what comp does is comp internally, it should be a macro,""" start="00:12:20.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""but currently it's not, although there's work to improve""" start="00:12:25.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that. It's doing an internal reduce and it's turning into""" start="00:12:28.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""one giant kind of composed lambda inside. So I don't know if""" start="00:12:33.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""step debugging would work there. However, we do have one""" start="00:12:37.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function called log, which lets you inspect intermediate""" start="00:12:43.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""results. So you could technically use that to inject""" start="00:12:47.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""yourself somewhere into the transduction chain and, you""" start="00:12:50.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""know, halt or, you know, inspect the current value, et""" start="00:12:54.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""cetera. So you get a bunch of questions lined up. I think""" start="00:12:57.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""we're coming up, uh, within our last five minutes, uh,""" start="00:13:01.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""before some declared, uh, reset time that we have""" start="00:13:04.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""internally to just roll our closing credits, so to speak.""" start="00:13:07.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Um, not that I would want to cut the question and answer""" start="00:13:11.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""short, but I might have to step away personally. But, um, as""" start="00:13:14.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""we discussed before, you can just kind of run the QA, however""" start="00:13:18.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""you want here. Um, or, or take questions offline if you'd""" start="00:13:21.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""like to answer them off the pad. And I just want to say one more""" start="00:13:24.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""time. Kitt said it managed later. Thanks again for your talk""" start="00:13:28.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""for dedicating the time to this live QA. And I think we can see""" start="00:13:30.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""by the many questions that are here. So I'll try to kind of""" start="00:13:35.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""flip us through as many of them as I can with our last couple of""" start="00:13:40.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""minutes, if that sounds good. Alternately, this might be a""" start="00:13:42.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""good time if you have kind of wrap it up, final thoughts, as""" start="00:13:48.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Leo Sopanda saying. By all means, have at. Sure, thanks a""" start="00:13:52.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""lot. I'd say that if you are still curious, check out the""" start="00:13:58.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""read-me's because those have a lot of information,""" start="00:14:01.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""including a full description of the API and everything""" start="00:14:05.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that's available.""" start="00:14:09.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Otherwise, just give them a shot. Using these things is the""" start="00:14:10.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""best way to learn them, of course. I use them everywhere,""" start="00:14:16.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""basically, all across my Emacs list and all across my common""" start="00:14:21.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""list now. They get a lot of mileage. All right. You're""" start="00:14:24.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""speaking our language now. As Emacs users, all our ears poke""" start="00:14:29.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""up when you say, I'm getting a lot of mileage. I'm using it""" start="00:14:33.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""across everything. Every Emacs user has a story that""" start="00:14:36.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""harmonizes with that, I think.""" start="00:14:39.880" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:14:42.495" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""So our next question, is""" start="00:14:42.495" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there a path for transducers to enable Elisp processing or""" start="00:14:44.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""otherwise overly large data sets as if just normal Emacs""" start="00:14:48.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""buffers, i.e. just pulling one thing at a time. So""" start="00:14:54.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""essentially stream like under the hood, but buffer like an""" start="00:14:56.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""interface. I think that makes sense to me. with none of the""" start="00:15:00.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""usual performance issues, like as if, you know, the history""" start="00:15:03.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""with long files is what that brings to mind, I guess. Yes, so""" start="00:15:07.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""as you saw before, the withBufferRead sort of stream""" start="00:15:11.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function does have to have the actual buffer in memory, and""" start="00:15:15.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""then you can go really fast. But there's another one with""" start="00:15:19.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""file read. Now, again, I haven't tried to optimize that yet.""" start="00:15:22.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""But in theory, it is able to read right from the underlying""" start="00:15:26.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""file without having to open it as a buffer first.""" start="00:15:30.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Awesome. Ari, the performance issues mentioned, and that""" start="00:15:32.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""popped up recently in the list and forums, to what extent""" start="00:15:39.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""does tail call optimization and other mechanisms like""" start="00:15:43.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""inlining, garbage collection friendliness, and so on,""" start="00:15:46.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""could these alleviate issues, enable their use at little to""" start="00:15:50.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""no extra costs? I feel like we're leading the witness here,""" start="00:15:55.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""but I'm sure you see where we're going. Yeah, no problem. So""" start="00:15:58.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""in terms of tail optimization, that's already happening""" start="00:16:01.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""because the internal loop mechanism is using CL labels. And""" start="00:16:03.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""in Emacs Lisp, CL labels is just a macro that is like""" start="00:16:09.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""extremely tail recursive. So that's very, very fast. It's""" start="00:16:12.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""not tail recursive, but it's using like goto. So it's""" start="00:16:16.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""extremely, extremely fast, like the raw looping of it. So,""" start="00:16:19.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""okay, well then where does the slowness come from? It's""" start="00:16:22.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""probably coming from those lambdas and it's probably""" start="00:16:24.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""coming from, uh, like extra consing, extra allocation""" start="00:16:26.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""somewhere, which is, um, sort of what you were, what you're""" start="00:16:32.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""referring to with the GC friendliness. So perhaps there's""" start="00:16:36.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""some, um, um, yeah, some, like some fusion that I can do to""" start="00:16:38.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""speed it up. Yeah, that just sounds fascinating endlessly.""" start="00:16:45.200" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there an option to read a csv/json and produce an alist or plist instead of a hash table for an entry?""" start="00:16:51.200" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""Are there options to like read from a CSV, JSON, produce an""" start="00:16:51.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""alist or plist instead of hash table? Absolutely.""" start="00:16:55.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Yes, I need to double check that, but we can read both CSV and""" start="00:17:01.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""JSON, and you should be able to just turn on the plist option.""" start="00:17:06.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I will double check, but there's fairly free conversion""" start="00:17:10.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""between those three types because hash table is not always""" start="00:17:14.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""what you want. And actually, I suspect that slowness that we""" start="00:17:18.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""saw in the demo before was because it was allocating hash""" start="00:17:22.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""tables for every, like, all of the 50,000 lines. And had it""" start="00:17:24.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""been a plist, it would have been faster. Interesting, so""" start="00:17:29.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""maybe there's opportunities even if you end up with hash""" start="00:17:32.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""lists, but then they're shared strategically and you pay""" start="00:17:35.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the cost of a little extra layer in there that buckets them""" start="00:17:38.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""together the way that we might group files by the first four""" start="00:17:42.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""characters in the file name once we've got a million files.""" start="00:17:46.440" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is the common lisp version ready for 'production' use? Is it complete enough and the API stable enough?""" start="00:17:50.520" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""Anyway, is the Common Lisp version ready for production""" start="00:17:50.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""use? Do you want to comment on API stability? I use it all the""" start="00:17:54.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""time. I'm writing a game in Common Lisp right now, and I'm""" start="00:17:59.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""using transducers everywhere in there, and it doesn't even""" start="00:18:04.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""make a dent in the frame rate, and I'm using them""" start="00:18:08.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""extensively. Okay, well, I'll just read from chat. Thanks""" start="00:18:11.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""so much for the answers.""" start="00:18:15.360" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:18:17.477" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""Do we need a pre-written or t-minus""" start="00:18:17.477" video="qanda-transducers" id="subtitle"]]
+[[!template text="""version for every already existing reducing function,""" start="00:18:20.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""plus, as an example? Or is there a function that constructs,""" start="00:18:24.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""in my, I'm going to add the word, auto-visualifies them""" start="00:18:30.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""already, auto-defines or something, or just generically""" start="00:18:33.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""wraps function calls some way? already defined. This is""" start="00:18:37.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""basically fold. Some built-in functions like plus already""" start="00:18:42.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function like reducers. It's a coincidence that they do""" start="00:18:49.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that. But there's an example in the README. Max is one that""" start="00:18:52.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""does not act like that. For instance, maybe I could screen""" start="00:18:56.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""share later, but if you just type in plus one, If you call plus""" start="00:19:00.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""one in Emacs or Common Lisp, you get back one. It actually""" start="00:19:06.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""only needs one argument. If you only type plus, it actually""" start="00:19:10.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""gives you zero. Plus and multiple satisfy the API of""" start="00:19:15.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""reducers. But if you have one that doesn't, like the max""" start="00:19:20.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function, and similarly, just type in plus as a function""" start="00:19:24.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""call, just plus with nothing else, and you'll see. No, as a""" start="00:19:28.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function. zero will come out. This basically means it""" start="00:19:32.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""satisfies the reducer API. But a function like max does not.""" start="00:19:37.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""If you just type in max and then one, it won't work. Pardon me,""" start="00:19:43.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""it did. But if you type in max with nothing else, it wouldn't""" start="00:19:48.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""work.""" start="00:19:54.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Hence, we have to wrap it in something like fold. I would say""" start="00:19:55.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""go look at the fold function. Right, which that I won't do.""" start="00:19:58.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I'm not that well enough prepped. Darn it. Leo would have""" start="00:20:01.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""been here, but oh, well, you got me. Yeah, no problem. But""" start="00:20:04.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""fold is sort of the ultimate reducer function. Great. So is""" start="00:20:08.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there, where was I? Here we go. We're way past this, right? So""" start="00:20:16.880" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is the compelling argument for transducers is that it's a better abstraction?""" start="00:20:26.320" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""is the compiling argument for transducers that it's a""" start="00:20:26.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""better abstraction? It seems like there are concerns,""" start="00:20:34.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""objections, while problematically valid focused on""" start="00:20:38.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""implementation. Can this abstraction allow for advances""" start="00:20:42.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""in implementation? Yes, what I've basically done is mostly""" start="00:20:45.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""followed the pattern of usage that exists in Clojure and in""" start="00:20:50.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Scheme's SERP 171. In theory, the service level API is the""" start="00:20:56.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""same no matter where you're using this, and that's the idea.""" start="00:21:01.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""If you learn them in one list, you should be able to use them""" start="00:21:05.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""everywhere. Then what it's actually doing under the hood is""" start="00:21:08.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""free for us to change around. My implementations are mostly""" start="00:21:12.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""based on the scheme with a few alterations here and there.""" start="00:21:18.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""And in the Common Lisp case, like adding some Common Lisp""" start="00:21:23.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""isms""" start="00:21:27.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""to improve usage like UX a little bit. But overall, we are""" start="00:21:27.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""free to do whatever we want internally to speed up""" start="00:21:34.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""performance. I just haven't done that work. Awesome.""" start="00:21:38.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Awesome. So here's where I have to, where we're getting the""" start="00:21:42.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""hook. We've just been pulled off the stream. The viewers""" start="00:21:47.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""just saw the crawl by as it sent us over to the other pad where I""" start="00:21:50.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""get to jump on and get involved with that now. But I can't""" start="00:21:54.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""thank you enough, Colin. Would you like me to stop the""" start="00:21:57.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""recording here? Any other comments you'd like to make? Uh,""" start="00:22:00.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""yeah, sure. Like, I mean, I'll stick around for any more live""" start="00:22:03.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""questions. I'm looking at both IRC and, and, um, uh, big blue""" start="00:22:06.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""button here. So if people have more questions, I'll hang""" start="00:22:10.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""around for a bit. I'm going to leave the channel open. I see""" start="00:22:13.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""you do have a few people in here, so I'm just going to go ahead""" start="00:22:15.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""and leave the recording. We can always trim it. Um, trim it""" start="00:22:17.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""up. If you, uh, let us know, Hey, the last 10 minutes weren't""" start="00:22:20.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""anything, you know, or whatever. No, no pressure, no""" start="00:22:24.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""worries, no mistakes. Thank you. Really appreciate you.""" start="00:22:27.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Yep. Thanks a lot.""" start="00:22:29.840" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:22:31.960" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""OK, does anyone else have some questions? I see Mohsen in the""" start="00:22:31.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""BigBlueButton chat is asking how I made the video. So the""" start="00:22:48.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""presentation itself was done with RevealJS from Org Mode.""" start="00:22:52.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""So as you saw, I had a raw Org Mode buffer, which was""" start="00:22:59.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""which was the presentation itself, which I then just""" start="00:23:03.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""exported with a few certain settings, a few""" start="00:23:09.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""customizations. And then for screen recording, I used OBS,""" start="00:23:11.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""which worked flawlessly on Arch Linux. I used Sway,""" start="00:23:15.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Wayland, and all of that. So all of that just worked, which""" start="00:23:19.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""was very impressive. Where do the HTML host the""" start="00:23:23.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""presentation? I don't have that presentation hosted""" start="00:23:28.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""anywhere.""" start="00:23:51.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I'll look at the.""" start="00:23:52.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I don't see that.""" start="00:23:59.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Here it is. So we've got the file here as well.""" start="00:24:00.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Looks like that's it for questions, basically.""" start="00:24:08.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Yep, and it looks like everyone's moved on for now. Let's""" start="00:24:11.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""see. I mean, it would be so this is answering lounge 81 on IRC.""" start="00:24:14.920" video="qanda-transducers" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""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?""" start="00:24:20.160" video="qanda-transducers" id="subtitle"]]</div>[[!template text="""Yeah, like, if we really wanted to go that hardcore, maybe""" start="00:24:20.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there's some like C level stuff that we could""" start="00:24:24.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""you know, significant demand for such a thing. You know, so""" start="00:24:29.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""far there hasn't been such demand, but maybe there will be in""" start="00:24:36.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the future. Yeah, perhaps there's some custom stuff we""" start="00:24:39.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""could do.""" start="00:24:42.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""And otherwise, magic one.""" start="00:24:43.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Well, it looks like some people are quite happy with this.""" start="00:24:48.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""All right. That's about what I've seen. So why don't we end it""" start="00:25:00.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""here? I think I can control the recording from my end. If I""" start="00:25:14.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""pause it, will that work? All right. Thank you, everyone.""" start="00:25:19.840" video="qanda-transducers" 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%20transducers%3A%20Transducers%3A%20finally%2C%20ergonomic%20data%20processing%20for%20Emacs%21)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/transducers-before.md b/2024/info/transducers-before.md
index 8208063d..bd531257 100644
--- a/2024/info/transducers-before.md
+++ b/2024/info/transducers-before.md
@@ -1,18 +1,47 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 27-min talk ; Q&A: BigBlueButton conference room
+Status: TO_CAPTION_QA
-The following image shows where the talk is in the schedule for Sun 2024-12-08. 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="transducers">
-<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="/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.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="/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="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)">links</text></g></a><a href="/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="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="/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="82" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(107,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="123" y="15" opacity="0.5" width="13" 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)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="150" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(175,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="199" y="15" opacity="0.5" width="20" 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)">hyperbole</text></g></a><a href="/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="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)">hywiki</text></g></a><a href="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="377" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="411" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(463,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="480" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(505,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</title><rect x="528" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(539,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="555" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(580,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect stroke-width="3" x="597" y="15" opacity="0.8" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(636,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-[[!toc ]]
-Format: 27-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-transducers.html>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Waiting for a caption volunteer
-<div>Times in different time zones:</div><div class="times" start="2024-12-08T21:15:00Z" end="2024-12-08T21:45:00Z"><div class="conf-time">Sunday, Dec 8 2024, ~4:15 PM - 4:45 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 8 2024, ~3:15 PM - 3:45 PM CST (US/Central)<br />Sunday, Dec 8 2024, ~2:15 PM - 2:45 PM MST (US/Mountain)<br />Sunday, Dec 8 2024, ~1:15 PM - 1:45 PM PST (US/Pacific)<br />Sunday, Dec 8 2024, ~9:15 PM - 9:45 PM UTC <br />Sunday, Dec 8 2024, ~10:15 PM - 10:45 PM CET (Europe/Paris)<br />Sunday, Dec 8 2024, ~11:15 PM - 11:45 PM EET (Europe/Athens)<br />Monday, Dec 9 2024, ~2:45 AM - 3:15 AM IST (Asia/Kolkata)<br />Monday, Dec 9 2024, ~5:15 AM - 5:45 AM +08 (Asia/Singapore)<br />Monday, Dec 9 2024, ~6:15 AM - 6:45 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+# Talk
+
+<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
+05:47.280 Transducers
+07:35.280 Using transducers
+09:52.625 A more involved example with comp
+11:49.333 In Emacs
+14:29.469 Hash tables
+14:58.040 Clarity
+15:55.800 How do transducers work?
+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://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 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?
+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?
+16:51.200 Q: Is there an option to read a csv/json and produce an alist or plist instead of a hash table for an entry?
+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="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/transducers-nav.md b/2024/info/transducers-nav.md
index 39473ece..5febe571 100644
--- a/2024/info/transducers-nav.md
+++ b/2024/info/transducers-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/sharing">So you want to be an Emacs-fluencer?</a>
-Next by time: <a href="/2024/talks/sun-close">Sunday closing remarks</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/sharing">So you want to be an Emacs-fluencer?</a>
+Next by track: <a href="/2024/talks/gypsum">Gypsum: my clone of Emacs and ELisp written in Scheme</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/water-after.md b/2024/info/water-after.md
index fca52a2e..33912287 100644
--- a/2024/info/water-after.md
+++ b/2024/info/water-after.md
@@ -1,7 +1,233 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-Questions or comments? Please e-mail [christopher@librehacker.com](mailto:christopher@librehacker.com?subject=Comment%20for%20EmacsConf%202023%20water%3A%20Watering%20my%20%28digital%29%20plant%20with%20Emacs%20timers)
+<div class="transcript transcript-mainVideo"><a name="water-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:02.679" video="mainVideo-water" id="subtitle"]]</div>[[!template text="""Welcome to Watering My Digital Plant with Emacs Timers,""" start="00:00:02.679" video="mainVideo-water" id="subtitle"]]
+[[!template text="""a talk by Christopher Howard for Emacs Conference 2024.""" start="00:00:07.503" video="mainVideo-water" id="subtitle"]]
+[[!template text="""The goal of this talk is to give""" start="00:00:11.385" video="mainVideo-water" id="subtitle"]]
+[[!template text="""a brief introduction to Emacs timers""" start="00:00:17.010" video="mainVideo-water" id="subtitle"]]
+[[!template text="""using the illustration of how I created""" start="00:00:20.892" video="mainVideo-water" id="subtitle"]]
+[[!template text="""a bot for the Astrobotany service.""" start="00:00:23.394" video="mainVideo-water" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What is Astrobotany?""" start="00:00:28.823" video="mainVideo-water" id="subtitle"]]</div>[[!template text="""What is Astrobotany?""" start="00:00:28.823" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Let me jump to the home page.""" start="00:00:30.924" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Astrobotany is a botany game or a simulation""" start="00:00:38.649" video="mainVideo-water" id="subtitle"]]
+[[!template text="""that is played using the Gemini protocol""" start="00:00:42.611" video="mainVideo-water" id="subtitle"]]
+[[!template text="""and gemtext documents.""" start="00:00:45.893" video="mainVideo-water" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What is Gemini?""" start="00:00:48.914" video="mainVideo-water" id="subtitle"]]</div>[[!template text="""What is Gemini?""" start="00:00:48.914" video="mainVideo-water" id="subtitle"]]
+[[!template text="""The Gemini protocol is a small web protocol,""" start="00:00:50.700" video="mainVideo-water" id="subtitle"]]
+[[!template text="""similar to the HyperText Transfer Protocol,""" start="00:00:54.263" video="mainVideo-water" id="subtitle"]]
+[[!template text="""but with differing goals of simplicity,""" start="00:00:58.047" video="mainVideo-water" id="subtitle"]]
+[[!template text="""non-extensibility, and protecting privacy.""" start="00:01:00.789" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Gemtext is a simple hyperlinking document format,""" start="00:01:05.453" video="mainVideo-water" id="subtitle"]]
+[[!template text="""the analog of the HyperText Markup Language, or HTML.""" start="00:01:09.557" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Much more could be said""" start="00:01:16.095" video="mainVideo-water" id="subtitle"]]
+[[!template text="""about the design and goals""" start="00:01:17.135" video="mainVideo-water" id="subtitle"]]
+[[!template text="""of the Gemini project,""" start="00:01:18.576" video="mainVideo-water" id="subtitle"]]
+[[!template text="""but that is not the focus of this talk.""" start="00:01:20.236" video="mainVideo-water" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How do you play Astrobotany?""" start="00:01:25.337" video="mainVideo-water" id="subtitle"]]</div>[[!template text="""And how do you play Astrobotany?""" start="00:01:25.337" video="mainVideo-water" id="subtitle"]]
+[[!template text="""First, you need to get a Gemini client""" start="00:01:28.418" video="mainVideo-water" id="subtitle"]]
+[[!template text="""or what you might call a browser.""" start="00:01:31.138" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Many clients are available,""" start="00:01:34.079" video="mainVideo-water" id="subtitle"]]
+[[!template text="""but I am using Elpher, a Gemini client for Emacs.""" start="00:01:36.259" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Once you have your client running,""" start="00:01:41.340" video="mainVideo-water" id="subtitle"]]
+[[!template text="""navigate to the home page for Astrobotany,""" start="00:01:43.801" video="mainVideo-water" id="subtitle"]]
+[[!template text="""which is shown in this window.""" start="00:01:46.782" video="mainVideo-water" id="subtitle"]]
+[[!template text="""You'll see the URL for the home page""" start="00:01:50.783" video="mainVideo-water" id="subtitle"]]
+[[!template text="""displayed at the top of the window.""" start="00:01:53.103" video="mainVideo-water" id="subtitle"]]
+[[!template text="""On your first visit to Astrobotany,""" start="00:01:57.865" video="mainVideo-water" id="subtitle"]]
+[[!template text="""you will need to create a client certificate,""" start="00:02:00.406" video="mainVideo-water" id="subtitle"]]
+[[!template text="""which will be used instead of a password.""" start="00:02:03.426" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Your Gemini client will help you""" start="00:02:06.067" video="mainVideo-water" id="subtitle"]]
+[[!template text="""to create the certificate.""" start="00:02:07.588" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Then you will go to the Visit Your Plant page""" start="00:02:12.102" video="mainVideo-water" id="subtitle"]]
+[[!template text="""in order to view your plant,""" start="00:02:22.472" video="mainVideo-water" id="subtitle"]]
+[[!template text="""to water it, and to collect things from it,""" start="00:02:28.297" video="mainVideo-water" id="subtitle"]]
+[[!template text="""including money. So here you see""" start="00:02:33.141" video="mainVideo-water" id="subtitle"]]
+[[!template text="""the plant that I'm currently growing""" start="00:02:37.968" video="mainVideo-water" id="subtitle"]]
+[[!template text="""in glorious ASCII graphics.""" start="00:02:40.229" video="mainVideo-water" id="subtitle"]]
+[[!template text="""There's also a color version available from this page.""" start="00:02:43.070" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Back at the home page,""" start="00:02:56.895" video="mainVideo-water" id="subtitle"]]
+[[!template text="""you can do other things""" start="00:02:59.536" video="mainVideo-water" id="subtitle"]]
+[[!template text="""like go to the item shop,""" start="00:03:02.537" video="mainVideo-water" id="subtitle"]]
+[[!template text="""to buy items like badges, fertilizer,""" start="00:03:07.165" video="mainVideo-water" id="subtitle"]]
+[[!template text="""or post on the message board.""" start="00:03:11.607" video="mainVideo-water" id="subtitle"]]
+[[!template text="""In Astrobotany, gardener bots are fully legal.""" start="00:03:15.849" video="mainVideo-water" id="subtitle"]]
+[[!template text="""And to do an action on your plant,""" start="00:03:20.852" video="mainVideo-water" id="subtitle"]]
+[[!template text="""like watering the plant,""" start="00:03:23.693" video="mainVideo-water" id="subtitle"]]
+[[!template text="""all your bot needs to do is""" start="00:03:25.454" video="mainVideo-water" id="subtitle"]]
+[[!template text="""to access the appropriate Gemini URL or page""" start="00:03:27.035" video="mainVideo-water" id="subtitle"]]
+[[!template text="""while presenting the appropriate certificate""" start="00:03:31.537" video="mainVideo-water" id="subtitle"]]
+[[!template text="""for your plant.""" start="00:03:34.419" video="mainVideo-water" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Timers""" start="00:03:37.000" video="mainVideo-water" id="subtitle"]]</div>[[!template text="""And this brings us to Emacs timers.""" start="00:03:37.000" video="mainVideo-water" id="subtitle"]]
+[[!template text="""So the main function of interest to us""" start="00:03:42.904" video="mainVideo-water" id="subtitle"]]
+[[!template text="""is the run-at-time function.""" start="00:03:46.626" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Here is the help documentation,""" start="00:04:00.714" video="mainVideo-water" id="subtitle"]]
+[[!template text="""which is available in any recent Emacs installation.""" start="00:04:03.395" video="mainVideo-water" id="subtitle"]]
+[[!template text="""As you see, the purpose of the function""" start="00:04:10.157" video="mainVideo-water" id="subtitle"]]
+[[!template text="""is to perform an action at a specific time""" start="00:04:13.498" video="mainVideo-water" id="subtitle"]]
+[[!template text="""to repeat it after a specific number of seconds.""" start="00:04:20.920" video="mainVideo-water" id="subtitle"]]
+[[!template text="""And so basically, all you have to do is""" start="00:04:29.770" video="mainVideo-water" id="subtitle"]]
+[[!template text="""pass in a function to run-at-time,""" start="00:04:32.673" video="mainVideo-water" id="subtitle"]]
+[[!template text="""telling Emacs how soon you want to run the function,""" start="00:04:36.436" video="mainVideo-water" id="subtitle"]]
+[[!template text="""and then how often you want to run the""" start="00:04:39.999" video="mainVideo-water" id="subtitle"]]
+[[!template text="""function after that.""" start="00:04:41.581" video="mainVideo-water" id="subtitle"]]
+[[!template text="""The function has a variety of options for""" start="00:04:44.403" video="mainVideo-water" id="subtitle"]]
+[[!template text="""specifying the time parameter,""" start="00:04:46.645" video="mainVideo-water" id="subtitle"]]
+[[!template text="""that is, how soon you want the function to run.""" start="00:04:49.347" video="mainVideo-water" id="subtitle"]]
+[[!template text="""For our application, in which we'll be""" start="00:04:55.307" video="mainVideo-water" id="subtitle"]]
+[[!template text="""running our functions""" start="00:04:57.508" video="mainVideo-water" id="subtitle"]]
+[[!template text="""once or twice a day at specific times,""" start="00:04:58.649" video="mainVideo-water" id="subtitle"]]
+[[!template text="""it is most useful to""" start="00:05:03.152" video="mainVideo-water" id="subtitle"]]
+[[!template text="""specify the number of seconds until the event.""" start="00:05:04.553" video="mainVideo-water" id="subtitle"]]
+[[!template text="""This does, however, require""" start="00:05:08.515" video="mainVideo-water" id="subtitle"]]
+[[!template text="""calculating the number of seconds""" start="00:05:10.436" video="mainVideo-water" id="subtitle"]]
+[[!template text="""until a specific time of day. I will""" start="00:05:12.097" video="mainVideo-water" id="subtitle"]]
+[[!template text="""provide code for this shortly.""" start="00:05:15.419" video="mainVideo-water" id="subtitle"]]
+[[!template text="""The run-at-time function does allow you to""" start="00:05:18.860" video="mainVideo-water" id="subtitle"]]
+[[!template text="""specify the time parameter as a string,""" start="00:05:20.864" video="mainVideo-water" id="subtitle"]]
+[[!template text="""representing the hours and minutes.""" start="00:05:24.029" video="mainVideo-water" id="subtitle"]]
+[[!template text="""For example, 05:40.""" start="00:05:26.413" video="mainVideo-water" id="subtitle"]]
+[[!template text="""However, there is an oddity in the""" start="00:05:32.150" video="mainVideo-water" id="subtitle"]]
+[[!template text="""design of run-at-time,""" start="00:05:34.091" video="mainVideo-water" id="subtitle"]]
+[[!template text="""such that if the specified time of day has""" start="00:05:36.372" video="mainVideo-water" id="subtitle"]]
+[[!template text="""already passed,""" start="00:05:41.455" video="mainVideo-water" id="subtitle"]]
+[[!template text="""then the timer will run immediately,""" start="00:05:43.196" video="mainVideo-water" id="subtitle"]]
+[[!template text="""rather than in the future,""" start="00:05:45.578" video="mainVideo-water" id="subtitle"]]
+[[!template text="""as you might expect.""" start="00:05:46.958" video="mainVideo-water" id="subtitle"]]
+[[!template text="""This can be problematic, for example,""" start="00:05:49.280" video="mainVideo-water" id="subtitle"]]
+[[!template text="""if run-at-time is being called from your init file,""" start="00:05:51.661" video="mainVideo-water" id="subtitle"]]
+[[!template text="""since the timer will run immediately""" start="00:05:55.583" video="mainVideo-water" id="subtitle"]]
+[[!template text="""every time you restart Emacs for any reason.""" start="00:05:58.245" video="mainVideo-water" id="subtitle"]]
+[[!template text="""I noticed recently that run-at-time""" start="00:06:02.526" video="mainVideo-water" id="subtitle"]]
+[[!template text="""also allows you to pass in a value""" start="00:06:04.791" video="mainVideo-water" id="subtitle"]]
+[[!template text="""from encode-time, which maybe does what we want,""" start="00:06:07.317" video="mainVideo-water" id="subtitle"]]
+[[!template text="""but I never bothered with testing that.""" start="00:06:18.378" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Actually, I have a vague memory of""" start="00:06:21.340" video="mainVideo-water" id="subtitle"]]
+[[!template text="""once looking into it and it didn't seem to do what I""" start="00:06:23.181" video="mainVideo-water" id="subtitle"]]
+[[!template text="""wanted, but honestly I can't clearly remember,""" start="00:06:25.783" video="mainVideo-water" id="subtitle"]]
+[[!template text="""so you may want to look into that yourself.""" start="00:06:29.946" video="mainVideo-water" id="subtitle"]]
+[[!template text="""What I ended up using was just""" start="00:06:32.728" video="mainVideo-water" id="subtitle"]]
+[[!template text="""passing in a number of seconds.""" start="00:06:34.309" video="mainVideo-water" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The code""" start="00:06:37.792" video="mainVideo-water" id="subtitle"]]</div>[[!template text="""So now we'll move over to the code.""" start="00:06:37.792" video="mainVideo-water" id="subtitle"]]
+[[!template text="""So I'll skip down here first""" start="00:06:46.764" video="mainVideo-water" id="subtitle"]]
+[[!template text="""to the code that I wrote for calculating the number of""" start="00:06:49.966" video="mainVideo-water" id="subtitle"]]
+[[!template text="""seconds.""" start="00:06:52.527" video="mainVideo-water" id="subtitle"]]
+[[!template text="""It's a function that calculates the number of seconds""" start="00:06:54.408" video="mainVideo-water" id="subtitle"]]
+[[!template text="""until a particular time of day in the future.""" start="00:06:58.050" video="mainVideo-water" id="subtitle"]]
+[[!template text="""You can see that you pass in the hour as a number from""" start="00:07:04.214" video="mainVideo-water" id="subtitle"]]
+[[!template text="""0 to 23 and the minutes as a number from 0 to 59. And""" start="00:07:09.278" video="mainVideo-water" id="subtitle"]]
+[[!template text="""here's the code, which will also be available later.""" start="00:07:20.078" video="mainVideo-water" id="subtitle"]]
+[[!template text="""I wrote another function, secs-until-weekly,""" start="00:07:25.700" video="mainVideo-water" id="subtitle"]]
+[[!template text="""which we do not need for this talk,""" start="00:07:29.522" video="mainVideo-water" id="subtitle"]]
+[[!template text="""but which is useful if you're running""" start="00:07:32.604" video="mainVideo-water" id="subtitle"]]
+[[!template text="""events which need to happen once per week.""" start="00:07:34.745" video="mainVideo-water" id="subtitle"]]
+[[!template text="""This function also requires a target hour""" start="00:07:39.264" video="mainVideo-water" id="subtitle"]]
+[[!template text="""and a target minute, but also requires passing in a""" start="00:07:44.085" video="mainVideo-water" id="subtitle"]]
+[[!template text="""target day. And while we're on the subject of timers""" start="00:07:48.966" video="mainVideo-water" id="subtitle"]]
+[[!template text="""specifically, I should mention that""" start="00:08:00.568" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Emacs has a very useful function called list-timers.""" start="00:08:02.648" video="mainVideo-water" id="subtitle"]]
+[[!template text="""So if I call the interactive function list-timers,""" start="00:08:07.577" video="mainVideo-water" id="subtitle"]]
+[[!template text="""it will give me a list of all the timers""" start="00:08:11.560" video="mainVideo-water" id="subtitle"]]
+[[!template text="""currently running.""" start="00:08:14.842" video="mainVideo-water" id="subtitle"]]
+[[!template text="""This page shows not only which timers exist,""" start="00:08:16.723" video="mainVideo-water" id="subtitle"]]
+[[!template text="""but also how long it will be until they run again,""" start="00:08:20.186" video="mainVideo-water" id="subtitle"]]
+[[!template text="""along with the periodic repeat value that you""" start="00:08:23.848" video="mainVideo-water" id="subtitle"]]
+[[!template text="""specified.""" start="00:08:26.770" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Furthermore, any timer can be canceled by moving point""" start="00:08:29.992" video="mainVideo-water" id="subtitle"]]
+[[!template text="""over the timer and running timer-list-cancel,""" start="00:08:33.514" video="mainVideo-water" id="subtitle"]]
+[[!template text="""which on my system is bound to the letter c by default.""" start="00:08:38.696" video="mainVideo-water" id="subtitle"]]
+[[!template text="""This is very helpful while you are developing""" start="00:08:43.537" video="mainVideo-water" id="subtitle"]]
+[[!template text="""some timer function.""" start="00:08:45.497" video="mainVideo-water" id="subtitle"]]
+[[!template text="""So I could cancel the timer that I already have running""" start="00:08:48.438" video="mainVideo-water" id="subtitle"]]
+[[!template text="""for shaking the plant,""" start="00:08:53.779" video="mainVideo-water" id="subtitle"]]
+[[!template text="""as well as the one for watering the plant.""" start="00:08:57.420" video="mainVideo-water" id="subtitle"]]
+[[!template text="""and back to the code.""" start="00:09:02.842" video="mainVideo-water" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Managing the plant""" start="00:09:05.724" video="mainVideo-water" id="subtitle"]]</div>[[!template text="""So now we'll talk about the actual code for""" start="00:09:05.724" video="mainVideo-water" id="subtitle"]]
+[[!template text="""managing the plant.""" start="00:09:08.646" video="mainVideo-water" id="subtitle"]]
+[[!template text="""So you see I have a variable set up here""" start="00:09:14.210" video="mainVideo-water" id="subtitle"]]
+[[!template text="""that specifies where the certificate file,""" start="00:09:16.471" video="mainVideo-water" id="subtitle"]]
+[[!template text="""the public certificate file, as well as""" start="00:09:20.994" video="mainVideo-water" id="subtitle"]]
+[[!template text="""the secret key file is located.""" start="00:09:23.936" video="mainVideo-water" id="subtitle"]]
+[[!template text="""This is where it is in my system.""" start="00:09:27.918" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Of course, depending on your specific Gemini client,""" start="00:09:30.119" video="mainVideo-water" id="subtitle"]]
+[[!template text="""it may be in a different space and will likely have a""" start="00:09:33.481" video="mainVideo-water" id="subtitle"]]
+[[!template text="""different name.""" start="00:09:36.762" video="mainVideo-water" id="subtitle"]]
+[[!template text="""And here is the code for watering the plant,""" start="00:09:41.045" video="mainVideo-water" id="subtitle"]]
+[[!template text="""which I can call interactively.""" start="00:09:44.526" video="mainVideo-water" id="subtitle"]]
+[[!template text="""And the core of it here is that it uses the""" start="00:09:49.412" video="mainVideo-water" id="subtitle"]]
+[[!template text="""gmni utility, a command line utility to""" start="00:09:52.834" video="mainVideo-water" id="subtitle"]]
+[[!template text="""call a particular URL while also loading up""" start="00:10:00.998" video="mainVideo-water" id="subtitle"]]
+[[!template text="""or presenting the required certificate.""" start="00:10:07.702" video="mainVideo-water" id="subtitle"]]
+[[!template text="""So in this case, you can see it is the URL that is""" start="00:10:12.505" video="mainVideo-water" id="subtitle"]]
+[[!template text="""required for watering the plant.""" start="00:10:16.567" video="mainVideo-water" id="subtitle"]]
+[[!template text="""This idea is very simple and the gmni client""" start="00:10:19.827" video="mainVideo-water" id="subtitle"]]
+[[!template text="""or gmni command line program""" start="00:10:26.353" video="mainVideo-water" id="subtitle"]]
+[[!template text="""makes this very simple to do.""" start="00:10:30.758" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Here's another function for shaking the plant.""" start="00:10:34.554" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Again it is almost identical except that we""" start="00:10:37.696" video="mainVideo-water" id="subtitle"]]
+[[!template text="""use a different URL,""" start="00:10:40.958" video="mainVideo-water" id="subtitle"]]
+[[!template text="""one for shaking the plant instead of watering it.""" start="00:10:44.180" video="mainVideo-water" id="subtitle"]]
+[[!template text="""And again we want to shake the plant""" start="00:10:47.562" video="mainVideo-water" id="subtitle"]]
+[[!template text="""in order to get money to fall off of it.""" start="00:10:50.044" video="mainVideo-water" id="subtitle"]]
+[[!template text="""You need to water your plant at least once per day or""" start="00:10:55.847" video="mainVideo-water" id="subtitle"]]
+[[!template text="""it'll die.""" start="00:11:00.791" video="mainVideo-water" id="subtitle"]]
+[[!template text="""I usually water mine twice and just in case something""" start="00:11:02.930" video="mainVideo-water" id="subtitle"]]
+[[!template text="""happens where Emacs was turned off because of""" start="00:11:10.013" video="mainVideo-water" id="subtitle"]]
+[[!template text="""power outage or something like that""" start="00:11:13.414" video="mainVideo-water" id="subtitle"]]
+[[!template text="""that I'm more likely to get it watered,""" start="00:11:15.595" video="mainVideo-water" id="subtitle"]]
+[[!template text="""and I shake it once per day because there isn't""" start="00:11:19.036" video="mainVideo-water" id="subtitle"]]
+[[!template text="""any purpose to shaking it more than that.""" start="00:11:23.398" video="mainVideo-water" id="subtitle"]]
+[[!template text="""If you try to shake it more than that,""" start="00:11:25.619" video="mainVideo-water" id="subtitle"]]
+[[!template text="""then money no more money will fall off,""" start="00:11:27.420" video="mainVideo-water" id="subtitle"]]
+[[!template text="""or not much.""" start="00:11:30.321" video="mainVideo-water" id="subtitle"]]
+[[!template text="""So you see down here, I have the code that""" start="00:11:37.242" video="mainVideo-water" id="subtitle"]]
+[[!template text="""actually calls run-at-time.""" start="00:11:39.627" video="mainVideo-water" id="subtitle"]]
+[[!template text="""I left here commented my original forms of this""" start="00:11:42.560" video="mainVideo-water" id="subtitle"]]
+[[!template text="""which used the just specify directly the time of day.""" start="00:11:45.661" video="mainVideo-water" id="subtitle"]]
+[[!template text="""As I mentioned the problem with that""" start="00:11:50.644" video="mainVideo-water" id="subtitle"]]
+[[!template text="""was that it would...""" start="00:11:53.505" video="mainVideo-water" id="subtitle"]]
+[[!template text="""these functions would also get called""" start="00:11:54.786" video="mainVideo-water" id="subtitle"]]
+[[!template text="""whenever I restarted Emacs for any""" start="00:11:59.208" video="mainVideo-water" id="subtitle"]]
+[[!template text="""reason and that was kind of annoying.""" start="00:12:02.709" video="mainVideo-water" id="subtitle"]]
+[[!template text="""So instead we have here the functions down here""" start="00:12:05.011" video="mainVideo-water" id="subtitle"]]
+[[!template text="""which uses secs-until-daily""" start="00:12:07.452" video="mainVideo-water" id="subtitle"]]
+[[!template text="""to water the plant""" start="00:12:10.913" video="mainVideo-water" id="subtitle"]]
+[[!template text="""and then secs-until-daily to shake the plant.""" start="00:12:12.294" video="mainVideo-water" id="subtitle"]]
+[[!template text="""You see, I've specified the plant to get watered""" start="00:12:16.057" video="mainVideo-water" id="subtitle"]]
+[[!template text="""at 4 in the morning and then the function is run again""" start="00:12:21.181" video="mainVideo-water" id="subtitle"]]
+[[!template text="""after that, every 43,200 seconds, which translates to""" start="00:12:26.125" video="mainVideo-water" id="subtitle"]]
+[[!template text="""every 12 hours,""" start="00:12:31.389" video="mainVideo-water" id="subtitle"]]
+[[!template text="""and then I shake the plants, shake the plant""" start="00:12:33.711" video="mainVideo-water" id="subtitle"]]
+[[!template text="""every morning at 4.15 a.m. and once every [24] hours.""" start="00:12:38.760" video="mainVideo-water" id="subtitle"]]
+[[!template text="""With a little bit more""" start="00:12:45.742" video="mainVideo-water" id="subtitle"]]
+[[!template text="""sophistication, a little bit more work on the code,""" start="00:12:46.902" video="mainVideo-water" id="subtitle"]]
+[[!template text="""I could actually have multiple plants be watering and""" start="00:12:50.143" video="mainVideo-water" id="subtitle"]]
+[[!template text="""shaking multiple plants with multiple certificates,""" start="00:12:54.264" video="mainVideo-water" id="subtitle"]]
+[[!template text="""but I never got around to that.""" start="00:12:58.105" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Didn't seem worth the bother to me.""" start="00:13:00.946" video="mainVideo-water" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:13:09.560" video="mainVideo-water" id="subtitle"]]</div>[[!template text="""So thank you for watching my video,""" start="00:13:09.560" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Watering My Digital Plant with Emacs Timers.""" start="00:13:13.825" video="mainVideo-water" id="subtitle"]]
+[[!template text="""You'll see at the bottom of this page""" start="00:13:16.628" video="mainVideo-water" id="subtitle"]]
+[[!template text="""links to the code for this talk""" start="00:13:19.491" video="mainVideo-water" id="subtitle"]]
+[[!template text="""as well as other things that I mentioned""" start="00:13:22.354" video="mainVideo-water" id="subtitle"]]
+[[!template text="""like the source code for the""" start="00:13:24.677" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Elpher Gemini client,""" start="00:13:27.979" video="mainVideo-water" id="subtitle"]]
+[[!template text="""the URL for the Astrobotany capsule,""" start="00:13:30.801" video="mainVideo-water" id="subtitle"]]
+[[!template text="""as well as a link to more information about""" start="00:13:34.203" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Project Gemini and my own personal Gemini capsule""" start="00:13:36.925" video="mainVideo-water" id="subtitle"]]
+[[!template text="""that's being run off my own server at home.""" start="00:13:42.808" video="mainVideo-water" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:13:46.790" video="mainVideo-water" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [christopher@librehacker.com](mailto:christopher@librehacker.com?subject=Comment%20for%20EmacsConf%202023%20water%3A%20Watering%20my%20%28digital%29%20plant%20with%20Emacs%20timers)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/water-before.md b/2024/info/water-before.md
index ec005635..cf11c56d 100644
--- a/2024/info/water-before.md
+++ b/2024/info/water-before.md
@@ -1,18 +1,22 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sat 2024-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="water">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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 stroke-width="3" x="370" y="15" opacity="0.8" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 14-min talk; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf>
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Ready to stream
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T18:30:00Z" end="2024-12-07T18:45:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~1:30 PM - 1:45 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~12:30 PM - 12:45 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~11:30 AM - 11:45 AM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~10:30 AM - 10:45 AM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~6:30 PM - 6:45 PM UTC <br />Saturday, Dec 7 2024, ~7:30 PM - 7:45 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~8:30 PM - 8:45 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~12:00 AM - 12:15 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~2:30 AM - 2:45 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~3:30 AM - 3:45 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Format: 14-min talk ; Q&A: IRC
+Status: TO_FOLLOW_UP
+
+<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?
+01:25.337 How do you play Astrobotany?
+03:37.000 Timers
+06:37.792 The code
+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://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/water-nav.md b/2024/info/water-nav.md
index 26735c54..44bd696b 100644
--- a/2024/info/water-nav.md
+++ b/2024/info/water-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/guile">Beguiling Emacs: Guile-Emacs relaunched!</a>
-Next by time: <a href="/2024/talks/secrets">Committing secrets with git using sops-mode</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/theme">My journey of finding and creating the “perfect” Emacs theme</a>
+Next by track: <a href="/2024/talks/shell">Emacs as a shell</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/info/writing-after.md b/2024/info/writing-after.md
index 1bb28d1f..8d3d06d5 100644
--- a/2024/info/writing-after.md
+++ b/2024/info/writing-after.md
@@ -1,6 +1,242 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
+<div class="transcript transcript-mainVideo"><a name="writing-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""Hi, I'm Peter Prevos, and I'll be talking about Emacs""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Writing Studio. I'm a water engineer, a social scientist,""" start="00:00:02.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and I dabble in theatrical magic. For each of those""" start="00:00:06.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""endeavors, I do a lot of writing. I take notes, I write""" start="00:00:08.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""reports, articles, books, and websites. I use Emacs for all""" start="00:00:11.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""my research, my writing, and my publishing. Emacs Writing""" start="00:00:14.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Studio is an opinionated starter kit for authors who write""" start="00:00:18.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""for humans, not for programmers who write for computers.""" start="00:00:21.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""It consists of a configuration, some bespoke""" start="00:00:24.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""functions, but are not yet a package, a website, and a book.""" start="00:00:26.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""The book is completely written with EWS itself. The target""" start="00:00:31.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""audience are authors who are frustrated with using""" start="00:00:36.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""commercial software and hopping from application to""" start="00:00:39.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""application to achieve an objective. These are people""" start="00:00:41.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""without any Emacs experience or coding skills.""" start="00:00:45.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""The objective is to teach these people how to use Emacs,""" start="00:00:49.987" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""not how to configure Emacs to manage a complete writing project.""" start="00:00:53.308" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why?""" start="00:00:57.649" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""So why did I write a book about Emacs when the documentation is""" start="00:00:57.649" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""already so extensive? Most Emacs documentation focuses on""" start="00:01:00.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""configuration, burying potential new users with choices.""" start="00:01:04.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""It forces people to work on Emacs instead of with Emacs,""" start="00:01:08.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and it quickly can become a productivity sink. Emacs is the""" start="00:01:13.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""ultimate free software platform, but with this freedom""" start="00:01:18.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""also comes a price. Barry Schwartz wrote about the""" start="00:01:21.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""paradox of choice, which is about the dramatic explosion in""" start="00:01:25.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""choices in the modern world. Just think about the amount of""" start="00:01:29.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""effort it can take to decide what cereal to buy in a""" start="00:01:32.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""supermarket that you haven't been before. So many""" start="00:01:34.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""different choices. Paradoxically, that's become a""" start="00:01:37.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""problem instead of a solution. Emacs can perhaps suffer""" start="00:01:40.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""from the same issue. Another objective, using a COVID-19""" start="00:01:44.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""trope: EWS is about flattening the curve--that is, the""" start="00:01:49.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""learning curve--by making these choices""" start="00:01:54.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""for the new Emacs user and avoiding the paradox.""" start="00:01:56.728" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""EWS configuration""" start="00:02:02.452" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""What about this EWS configuration?""" start="00:02:02.452" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I decided to stay as close as humanly""" start="00:02:05.594" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""bearable to vanilla Emacs. I say that tongue-in-cheek,""" start="00:02:07.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""but also with some realism, centered around Org mode""" start="00:02:11.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and Denote for note tagging, and citar for accessing""" start="00:02:16.027" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""bibliographies, and other convenience packages such as""" start="00:02:18.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""vertico for minibuffer completion. There's a""" start="00:02:21.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""dictionary, a thesaurus, and some other packages that are of""" start="00:02:24.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""interest to authors. EWS uses the standard keyboard""" start="00:02:28.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""shortcuts. Writing is much more about thinking than about""" start="00:02:32.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""maximizing the amount of words per minute. Just think""" start="00:02:37.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""about that the most used function for authors is""" start="00:02:40.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""self-insert. There's no need to use fancy keyboard""" start="00:02:43.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""shortcut systems when you write prose.""" start="00:02:46.920" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How did I develop EWS?""" start="00:02:50.072" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""How did I go about developing Emacs? I declared Emacs bankruptcy,""" start="00:02:50.072" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""like we all have every now and then.""" start="00:02:54.535" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I decided to write this book with""" start="00:02:57.097" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""vanilla Emacs and only configure the system as was""" start="00:02:58.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""required. The first thing I did, I hooked visual-line-mode""" start="00:03:02.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""to text-mode and off I went. The configuration grew as the""" start="00:03:04.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""need arose. I was actually surprised with how far you can""" start="00:03:09.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""get with just using Vanilla Emacs. I also developed two""" start="00:03:13.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""packages to enhance how I can use Denote.""" start="00:03:17.760" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Overall workflow""" start="00:03:21.954" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""Well, let's get to a demo.""" start="00:03:21.954" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""EWS is based on a typical research and writing workflow.""" start="00:03:25.376" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""First step is you need to get some inspiration.""" start="00:03:30.158" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Usually we do that by reading, by watching, by""" start="00:03:32.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""listening. Then the next step is ideation. You develop your""" start="00:03:35.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""ideas, summarize ideas from other people, write down your""" start="00:03:39.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""own ideas. For that, you need a note-taking system. EWS""" start="00:03:42.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""also talks about managing bibliographies. The third step""" start="00:03:46.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""is production. This is the actual writing process where, in""" start="00:03:50.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""this case, the EWS book. Once that is finished, we""" start="00:03:53.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""convert this Org mode file into something that can be""" start="00:03:57.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""published. That might be an e-book in an EPUB format, or a""" start="00:04:00.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""PDF for the interior of a a paperback book or perhaps as an""" start="00:04:04.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""e-book as well. There's also configuration in Emacs to""" start="00:04:08.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""produce MS Word documents if you need to collaborate with""" start="00:04:12.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""other people. Let's jump in to Emacs and walk through this""" start="00:04:16.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""workflow, give you a very quick demonstration of what's in""" start="00:04:22.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""the box.""" start="00:04:25.400" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Inspiration""" start="00:04:29.320" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""So the first step in the EWS workflow is inspiration. We all""" start="00:04:29.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""stand on the shoulders of each other. Some giants; most of""" start="00:04:32.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""them are normal people. We get inspiration by reading,""" start="00:04:35.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""listening, and watching, and Emacs can help you access""" start="00:04:38.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""text, sound, and video. It depends on external software.""" start="00:04:40.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Emacs acts as a beautiful interface, and EWS helps you""" start="00:04:44.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""with the configuration. But we also need a tool to manage our""" start="00:04:47.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""electronic library, and BibTeX""" start="00:04:50.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and citar package by Bruce D'Arcus""" start="00:04:53.632" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""provides a perfect interface to manage this""" start="00:04:56.055" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""literature. If I open my bibliography here, you see that""" start="00:04:58.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I've got 1864 references in my BibTeX files. There's a""" start="00:05:02.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""whole bunch of stuff about, I guess, the weird things that I""" start="00:05:06.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""read. Let's look for Emacs, right, because that's a joint""" start="00:05:12.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""interest that we have. Let's open here this paper by""" start="00:05:14.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Marcus Birkenkrahe, who did some research using Emacs to teach""" start="00:05:18.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""data science. Data science is my day job, so that had my""" start="00:05:23.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""interest. We have here a Denote file, which I'll talk""" start="00:05:26.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""about in a second. There's a library file, which is a PDF, but""" start="00:05:29.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""it could be a whole collection of different files in""" start="00:05:33.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""different formats, even video or sound. We can create a new""" start="00:05:35.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Denote file, or there's a link to the document object""" start="00:05:39.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""identifier. Let's go to the PDF. Here we can now do our""" start="00:05:42.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""reading. We can get our inspiration by what Marcus has""" start="00:05:46.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""written here about teaching data science with literary""" start="00:05:50.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""programming tools.""" start="00:05:52.680" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Ideation""" start="00:05:54.761" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""Next step is ideation. Taking notes is""" start="00:05:54.761" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""the core of all creativity. When I read that paper, I might""" start="00:05:57.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""want to copy some ideas, I might get some of my own ideas, and I""" start="00:06:01.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""need to write that down. I basically write everything in a""" start="00:06:05.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""paper notebook, but then I transfer the things that are""" start="00:06:07.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""worth keeping to the Denote note-taking system. Now, there""" start="00:06:10.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""are many systems that exist out there that promise you""" start="00:06:14.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""note-taking heaven when you just follow a certain process.""" start="00:06:17.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""My advice: don't worry about Zettelkasten, PARA, or""" start="00:06:20.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""whatever is out there. Just write your notes and worry about""" start="00:06:24.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""structure and all that later. Even Niklas Luhmann, the""" start="00:06:28.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""inventor of Zettelkasten, called his system a septic tank""" start="00:06:31.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""of ideas. I call my collection of notes a primordial soup""" start="00:06:34.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""from which my books emerge. Now, Denote by Prot Stavrou is a""" start="00:06:38.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""flexible note-taking system that can implement any of the""" start="00:06:43.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""popular methods. I transferred thousands of files to""" start="00:06:45.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""this format, so all my information is at my fingertips. We""" start="00:06:49.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""can jump to the Denote directory. In my case, that's""" start="00:06:54.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""~/documents/notes. We see here the marvel that is Denote,""" start="00:06:59.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""which is its ingenious file naming convention that has a""" start="00:07:04.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""timestamp, a title, and some (what do we call them) tags or""" start="00:07:09.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""categories, whatever you please. This is a very quick way""" start="00:07:15.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""to find things. Then there is an ews-dired-narrow function.""" start="00:07:18.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""For example, I can find anything,""" start="00:07:28.764" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""_ews means anything that has the EWS tag, and""" start="00:07:30.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""there we go, it's narrowed down in my EWS notes.""" start="00:07:34.680" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""denote-explore""" start="00:07:39.113" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""Now, this is all very well, but I also decided to""" start="00:07:39.113" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""write a package called denote-explore,""" start="00:07:45.041" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""which helps us sort of explore these collections of notes.""" start="00:07:47.103" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""One of the fancy things we can do is""" start="00:07:54.072" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""do some visualization.""" start="00:07:55.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Let's go to the network function and create a community of""" start="00:07:56.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""notes. A community is a collection of notes that match a""" start="00:08:02.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""regular expression, _ews. All the notes here""" start="00:08:05.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""that are on this list, the ones with the EWS tag. In a second,""" start="00:08:10.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""my browser pops up. I shall move that to my other window in a""" start="00:08:15.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""second. There we go. denote-explore creates a SVG file and""" start="00:08:22.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""it creates an arrow between all the nodes that are linked.""" start="00:08:28.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""It puts a title up there when the node has more than two links""" start="00:08:33.214" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""going in or out. We can also click on the note to read it in""" start="00:08:36.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""the browser, if you choose. If you set up Firefox properly,""" start="00:08:39.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'm sure it can also go into Emacs. This is the note tagging""" start="00:08:43.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""that's available within EWS.""" start="00:08:49.640" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Writing with Org""" start="00:08:54.581" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""Now, we've taken all these notes. Now we need to""" start="00:08:54.581" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""start writing stuff. Org mode, for me,""" start="00:08:57.022" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""is the ideal tool. Org mode is what you see is what you""" start="00:09:00.519" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""mean. The text and the syntax instruct the computer on how to""" start="00:09:03.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""produce the final result. This means that one file can""" start="00:09:06.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""become many different formats, an e-book, a printed book,""" start="00:09:10.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""or a website. It doesn't matter. Now, a lot of people talk""" start="00:09:12.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""about what you see, what you get, and that we should have a""" start="00:09:16.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""what you see, what you get mode in Emacs. I think that's""" start="00:09:18.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""irrelevant, because showing the final result while you're""" start="00:09:21.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""writing is actually a distraction. Traditional writing,""" start="00:09:24.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""producing the content, and designing the layout and""" start="00:09:28.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""typesetting are separate processes done by different""" start="00:09:31.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""professionals. In Emacs Writing Studio, the writing is""" start="00:09:34.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""still done by a human. There are no provisions for large""" start="00:09:38.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""language models in EWS. But layout and typesetting is done""" start="00:09:40.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""by external software, be it CSS, LaTeX, or XML, all mediated""" start="00:09:45.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""by Org mode.""" start="00:09:49.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""EWS also has some other tools for case conversion,""" start="00:09:50.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""thesaurus, a dictionary that I haven't got time to show,""" start="00:09:57.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""but what I will show you is how the book functions,""" start="00:09:59.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and then how we create these publications.""" start="00:10:02.910" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The project file""" start="00:10:05.920" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""Okay. Let's go to my project file.""" start="00:10:05.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So these are the EWS chapters,""" start="00:10:11.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and each chapter is an Org mode file.""" start="00:10:17.059" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Let's go into the main document, which is set up with""" start="00:10:20.201" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""olivetti-mode just to make it easier to read. What we see""" start="00:10:25.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""here is all the fluff from Org mode. These are all the""" start="00:10:30.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""various bits of metadata that I used to create the final""" start="00:10:34.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""result. Then for each chapter, I have an inclusion.""" start="00:10:37.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""This references another file. I've got some properties.""" start="00:10:43.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""In this case, the forward is unnumbered. There's some notes.""" start="00:10:46.722" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""In this case, Prot actually wrote this for me. Then we""" start="00:10:49.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""can jump into that text. Then what we see at the bottom""" start="00:10:53.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""here is some inclusions for HTML. This is the EPUB version,""" start="00:10:59.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""but it's different in LaTeX. Again, the same file can""" start="00:11:02.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""serve different purposes.""" start="00:11:07.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So now let's, as the final part of this demonstration,""" start="00:11:09.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""actually create the book, because the book's freely""" start="00:11:14.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""available. You can download the source files from GitHub,""" start="00:11:17.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and you can roll your own. Let's open the dispatcher.""" start="00:11:23.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""We'll export the LaTeX and we want to open the file.""" start="00:11:29.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Now this takes a minute because there's a lot happening within""" start="00:11:33.469" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""all this code, so I'll shorten this video. I'll be silent now.""" start="00:11:37.350" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""There we are. This is the Emacs Writing Studio PDF version,""" start="00:11:42.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""which will eventually become the interior for the""" start="00:11:49.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""paperback version.""" start="00:11:53.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So the EWS book is available in all major e-book shops.""" start="00:11:55.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'm also working on a paperback, which I hope to finish when""" start="00:12:02.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Emacs 30 comes out. But the Org Mode files that I use to""" start="00:12:05.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""produce the book, they're available in the GitHub""" start="00:12:09.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""repository, so you can also roll your own, because the EWS""" start="00:12:11.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""configuration is the one that I use to produce the book.""" start="00:12:14.000" video="mainVideo-writing" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Conclusions""" start="00:12:18.720" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""Now, some conclusions from this journey is that the best way to""" start="00:12:18.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""learn is to teach. That was my personal objective. I""" start="00:12:22.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""learned a lot from systematically working out how to""" start="00:12:26.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""implement the EWS workflow. One of the surprising things""" start="00:12:28.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""that I learned is to have reliance on external software""" start="00:12:33.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""throughout the writing process. I spent a lot of time in""" start="00:12:35.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""the book about explaining these connections that Emacs is""" start="00:12:39.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""not just a text processor, it is also an interface with other""" start="00:12:42.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""software. Now, future developments, as I mentioned,""" start="00:12:46.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""there'll be a paperback version of the book when Emacs 30""" start="00:12:49.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""comes out, and I might reconfigure things a little bit. I'm""" start="00:12:52.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""only planning to update the configuration when packages""" start="00:12:55.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""break or with another major Emacs release, because I want to""" start="00:12:58.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""work with Emacs, not work on Emacs. A big thank you to""" start="00:13:04.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Prot Stavrou, who helped me with Denote packages, and he""" start="00:13:08.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""also wrote the forward to the book. There's also several""" start="00:13:11.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""test readers that I met through Mastodon that helped me out""" start="00:13:15.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""quite a bit. Of course, all the Emacs and package""" start="00:13:18.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""developers without which none of this would exist. Thank""" start="00:13:20.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""you all for your attention, and I look forward to your""" start="00:13:25.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""questions and suggestions.""" start="00:13:27.560" video="mainVideo-writing" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
Questions or comments? Please e-mail [peter@prevos.net](mailto:peter@prevos.net?subject=Comment%20for%20EmacsConf%202023%20writing%3A%20Emacs%20Writing%20Studio)
diff --git a/2024/info/writing-before.md b/2024/info/writing-before.md
index 39f768bb..62663ff7 100644
--- a/2024/info/writing-before.md
+++ b/2024/info/writing-before.md
@@ -1,18 +1,25 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
-
-The following image shows where the talk is in the schedule for Sat 2024-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="writing">
-<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="/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.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="/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="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="/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="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(79,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="/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="109" y="15" opacity="0.5" width="27" 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)">org-update</text></g></a><a href="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="164" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(189,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="205" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(216,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(340,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="/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="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(388,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(456,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="/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="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(498,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="/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="528" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(553,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect stroke-width="3" x="583" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(594,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(642,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(669,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/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="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="/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="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(162,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="/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="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(224,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="/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="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(340,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="/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="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(388,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="/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="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(415,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(526,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="/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="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(580,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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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">5 PM</text></g></svg>
-</div>
-
[[!toc ]]
-Format: 14-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
-Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
-Status: Processing uploaded video
-<div>Times in different time zones:</div><div class="times" start="2024-12-07T21:05:00Z" end="2024-12-07T21:15:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~4:05 PM - 4:15 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~3:05 PM - 3:15 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~2:05 PM - 2:15 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~1:05 PM - 1:15 PM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~9:05 PM - 9:15 PM UTC <br />Saturday, Dec 7 2024, ~10:05 PM - 10:15 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~11:05 PM - 11:15 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~2:35 AM - 2:45 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~5:05 AM - 5:15 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~6:05 AM - 6:15 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
+Format: 14-min talk ; Q&A: BigBlueButton conference room
+Status: TO_FOLLOW_UP
+
+<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
+02:50.072 How did I develop EWS?
+03:21.954 Overall workflow
+04:29.320 Inspiration
+05:54.761 Ideation
+07:39.113 denote-explore
+08:54.581 Writing with Org
+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://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/info/writing-nav.md b/2024/info/writing-nav.md
index e18ec45e..52d27a2f 100644
--- a/2024/info/writing-nav.md
+++ b/2024/info/writing-nav.md
@@ -1,7 +1,7 @@
<div class="talk-nav">
Back to the [[talks]]
-Previous by time: <a href="/2024/talks/repro">Reproducibly building Emacs: “Hey your checksum is the same as mine!”</a>
-Next by time: <a href="/2024/talks/emacs30">Emacs 30 Highlights</a>
-Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2024/watch/gen">Watch</a></strong>
+Previous by track: <a href="/2024/talks/hyperdrive">New in hyperdrive.el: quick install, peer graph, transclusion!</a>
+Next by track: <a href="/2024/talks/emacs30">Emacs 30 Highlights</a>
+Track: <span class="sched-track General">General</span>
</div>
diff --git a/2024/organizers-notebook.md b/2024/organizers-notebook.md
index c08352b4..82a4e95f 100644
--- a/2024/organizers-notebook.md
+++ b/2024/organizers-notebook.md
@@ -15,8 +15,24 @@ You might also like the [general organizers' notebook](/organizers-notebook) and
- [Phases](#phases)
- [Draft CFP](#cfp)
- [Draft schedule](#draft-schedule)
+ - [Prepare shift calendar, ask people to sign up](#shifts)
+ - [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)
+ - [BigBlueButton replacement (BBB)](#bbb)
- [Support code](#support-code)
@@ -219,9 +235,9 @@ emacsconf-discuss, reddit.com/r/emacs, Emacs News, emacs-tangents, Mastodon, X
<a id="draft-schedule"></a>
-## 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/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(217,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="https://emacsconf.org/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="235" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(248,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: 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:45 Emacs 30 Highlights</title><rect x="698" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(727,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> 4:50- 5:00 Saturday 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)">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:40 p-search: a local search engine in Emacs</title><rect x="219" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(248,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/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="141" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">language</text></g></a><a href="https://emacsconf.org/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="172" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(201,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="https://emacsconf.org/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:35 Fun things with GNU Hyperbole</title><rect x="227" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(240,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:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="431" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(444,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/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="470" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(530,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/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="549" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(578,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:25- 3:35 An example of a cohesive student workflow in Emacs</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)">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:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(664,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:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="682" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(727,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:
@@ -238,7 +254,7 @@ Notes:
- <span class="timestamp-wrapper"><span class="timestamp">[2024-10-21 Mon] </span></span> Extended [blee](https://emacsconf.org/2024/talks/blee "About Blee: enveloping our own autonomy directed digital ecosystem with Emacs")
- <span class="timestamp-wrapper"><span class="timestamp">[2024-10-17 Thu] </span></span> Added [org-update](https://emacsconf.org/2024/talks/org-update "The Future of Org") to Saturday morning, moving [org-teach](https://emacsconf.org/2024/talks/org-teach "org-teach: a minor mode for writing course materials in Emacs") to Sunday afternoon
- <span class="timestamp-wrapper"><span class="timestamp">[2024-10-15 Tue] </span></span> Swapped [students](https://emacsconf.org/2024/talks/students "An example of a cohesive student workflow in Emacs") and [literate](https://emacsconf.org/2024/talks/literate "Literate programming for the 21st Century") for availability reasons
- - <span class="timestamp-wrapper"><span class="timestamp">[2024-10-13 Sun] </span></span> Moved [hyperdrive](https://emacsconf.org/2024/talks/hyperdrive "New in hyperdrive.el: org-transclusion, easy installation, and more!") to the afternoon (swapping with [flp](https://emacsconf.org/2024/talks/flp "The Free Life Planner: Empowering lives with Emacs-based AI")) because of changed availability
+ - <span class="timestamp-wrapper"><span class="timestamp">[2024-10-13 Sun] </span></span> Moved [hyperdrive](https://emacsconf.org/2024/talks/hyperdrive "New in hyperdrive.el: quick install, peer graph, transclusion!") to the afternoon (swapping with [flp](https://emacsconf.org/2024/talks/flp "The Free Life Planner: Empowering lives with Emacs-based AI")) because of changed availability
- <span class="timestamp-wrapper"><span class="timestamp">[2024-10-12 Sat] </span></span> I fixed the time constraint for [students](https://emacsconf.org/2024/talks/students "An example of a cohesive student workflow in Emacs") (needs to be in the afternoon), so I moved [hyperbole](https://emacsconf.org/2024/talks/hyperbole "Fun things with GNU Hyperbole") to the morning.
- General approach:
- I&rsquo;ve mostly tried to alternate IRC/pad Q&A with live Q&A.
@@ -247,7 +263,7 @@ Notes:
- Gen track:
- [papers](https://emacsconf.org/2024/talks/papers "Writing academic papers in Org-Roam"), [project](https://emacsconf.org/2024/talks/project "Managing writing project metadata with org-mode"), [org-teach](https://emacsconf.org/2024/talks/org-teach "org-teach: a minor mode for writing course materials in Emacs"), [flp](https://emacsconf.org/2024/talks/flp "The Free Life Planner: Empowering lives with Emacs-based AI"), [color](https://emacsconf.org/2024/talks/color "Colour your Emacs with ease") should be pretty general
- [color](https://emacsconf.org/2024/talks/color "Colour your Emacs with ease") and [theme](https://emacsconf.org/2024/talks/theme "My journey of finding and creating the “perfect” Emacs theme") are both theme-related. [color](https://emacsconf.org/2024/talks/color "Colour your Emacs with ease") needs to be in the morning and [theme](https://emacsconf.org/2024/talks/theme "My journey of finding and creating the “perfect” Emacs theme") needs to be in the afternoon, so I put them on either side of the lunch break.
- - Other afternoon talks: [water](https://emacsconf.org/2024/talks/water "Watering my (digital) plant with Emacs timers") and [shell](https://emacsconf.org/2024/talks/shell "Emacs as a shell") are by the same speaker. [casual](https://emacsconf.org/2024/talks/casual "Re-imagining the Emacs user experience with Casual Suite"), [hyperdrive](https://emacsconf.org/2024/talks/hyperdrive "New in hyperdrive.el: org-transclusion, easy installation, and more!"), and [writing](https://emacsconf.org/2024/talks/writing "Emacs Writing Studio") will probably be good for a general audience. These speakers are only available in the afternoon, so this part of the schedule is a bit tight.
+ - Other afternoon talks: [water](https://emacsconf.org/2024/talks/water "Watering my (digital) plant with Emacs timers") and [shell](https://emacsconf.org/2024/talks/shell "Emacs as a shell") are by the same speaker. [casual](https://emacsconf.org/2024/talks/casual "Re-imagining the Emacs user experience with Casual Suite"), [hyperdrive](https://emacsconf.org/2024/talks/hyperdrive "New in hyperdrive.el: quick install, peer graph, transclusion!"), and [writing](https://emacsconf.org/2024/talks/writing "Emacs Writing Studio") will probably be good for a general audience. These speakers are only available in the afternoon, so this part of the schedule is a bit tight.
- I put [emacs30](https://emacsconf.org/2024/talks/emacs30 "Emacs 30 Highlights") at the end of Saturday to act sort of as a keynote. Closing remarks on Saturday are usually very light, so we could skip them.
- Dev track:
- [gypsum](https://emacsconf.org/2024/talks/gypsum "Gypsum: my clone of Emacs and ELisp written in Scheme"), [rust](https://emacsconf.org/2024/talks/rust "An experimental Emacs core in Rust"), [julia](https://emacsconf.org/2024/talks/julia "Exploring shared philosophies in Julia and Emacs"), [guile](https://emacsconf.org/2024/talks/guile "Beguiling Emacs: Guile-Emacs relaunched!"), and [mcclim](https://emacsconf.org/2024/talks/mcclim "Elisp and McCLIM") are about other projects
@@ -260,6 +276,967 @@ Notes:
- [learning](https://emacsconf.org/2024/talks/learning "Survival of the skillest: Thriving in the learning jungle"), [sharing](https://emacsconf.org/2024/talks/sharing "So you want to be an Emacs-fluencer?"), [literate](https://emacsconf.org/2024/talks/literate "Literate programming for the 21st Century") will probably be good for a general audience
+<a id="shifts"></a>
+
+## DONE Prepare shift calendar, ask people to sign up
+
+<a name="shifts"></a>
+
+AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition)
+
+Saturday Dec 7 2024
+
+<table id="org66cc345">
+
+
+<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">&#xa0;</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">&#xa0;</td>
+<td class="org-left">&#xa0;</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">&#xa0;</td>
+<td class="org-left">&#xa0;</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">&#xa0;</td>
+<td class="org-left">&#xa0;</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">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+</tbody>
+</table>
+
+Sunday Dec 8 2024
+
+<table id="org6a12bbd">
+
+
+<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">&#xa0;</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">corwin</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</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">corwin</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</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 "2024-12-07")
+ (list "sun" sun "2024-12-08"))))))
+
+
+<a id="intros"></a>
+
+## Record intros and opening remarks
+
+
+### WAITING Redo pkal pronunciation :emacsconf:record:
+
+> kǎlud͡ʑert͡ʃit͡ɕ - zaeph&rsquo;s guess is kah-loo-dyer-tshitch
+
+ Next, we have "Emacs 30 Highlights" by Philip Kaludercic.
+ You can ask questions in the web conference
+ by joining from the talk page,
+ or you can ask questions through Etherpad or IRC.
+
+
+### 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. =)
+
+ Next, we have "The future of Org",
+ by Ihor Radchenko and Bastien Guerry.
+ They will answer questions via web conference.
+ You can join using the URL from the talk page
+ or ask questions through Etherpad or IRC.
+
+
+### TODO Rerecord Eev intro with MAC-SYM-A pronunciation :record:emacsconf:
+
+> My name in the intro is perfect, but Maxima comes from Macsyma, and it is
+> pronounced mac - sym (<- as in &ldquo;symbolic&rdquo;) a&#x2026;
+
+ Next, we have "Emacs, eev, and Maxima - now!",
+ by Eduardo Ochs.
+ You can ask questions via Etherpad or IRC.
+
+
+### 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>
+
+cuhn-us
+
+ Next, we have "Writing academic papers in Org-Roam",
+ by Vincent Conus.
+ He will answer questions via web conference.
+ You can join using the URL from the talk page
+ or ask questions through Etherpad or IRC.
+
+
+### 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/)
+
+New in hyperdrive.el: quick install, peer graph, transclusion!
+
+ Next, we have "New in hyperdrive.el: quick install,
+ peer graph, transclusion!" by Joseph Turner.
+ You can ask questions in the web conference
+ by joining from the talk page,
+ or you can ask questions through Etherpad or IRC.
+
+
+### 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:
+
+- [X] IRC
+- [ ] Streaming assets
+- [ ] Publishing to the wiki
+- [ ] Web conference
+- [ ] OBS
+- [ ] Publishing to the media server
+- [ ] Etherpad
+- [ ] Streaming
+- [ ] Toobnix
+- [ ] YouTube
+- [X] Mumble: Can join from my phone, can speak on stream
+
+
+<a id="check-emacsconf-infrastructure-bigbluebutton"></a>
+
+## TODO BigBlueButton
+
+- Plan: spin up Linode temporarily: [BigBlueButton replacement](#bbb)
+
+
+### Notes
+
+
+#### install, sizes
+
+<span class="timestamp-wrapper"><span class="timestamp">[2024-11-19 Tue]</span></span>
+
+Prerequisites:
+
+- BBB requires 4 CPU cores before it will install. bbb-conf.sh is fairly straightforward, so I guess we could spin down and then spin up again.
+ Image: Ubuntu 22.04
+
+Steps:
+
+1. Run the BBB installer: `./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g`
+2. `sudo apt install bbb-playback-video` and then follow the instructions at [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>
+
+I think it needs 4 CPU cores for regular running, too.
+
+Sizing to shared 8GB 4 core for testing
+
+ linode-cli linodes resize 67329098 --type g6-standard-4 --allow_auto_disk_resize false
+
+takes about 2 minutes
+
+Sizing to shared nanode, dormant
+
+ linode-cli linodes resize 67329098 --type g6-nanode-1 --allow_auto_disk_resize true
+
+ echo "notify-send 'Resizing BBB...'; linode-cli linodes resize 67329098 --type g6-nanode-1 --allow_auto_disk_resize true" | at 'now + 1 hour'
+
+Resize disk
+linode-cli linodes disks-list 67329098
+linode-cli linodes disk-resize 67329098 131474261 &#x2013;size 24000
+
+/var/bigbluebutton is where recordings will go
+
+<https://techdocs.akamai.com/linode-api/reference/post-resize-disk>
+
+<https://www.linode.com/community/questions/21942/how-can-i-schedule-resizing-a-linode>
+
+
+#### backing up
+
+<span class="timestamp-wrapper"><span class="timestamp">[2024-11-20 Wed] </span></span> ssh root@66.175.208.243 &rsquo;tar zcvf - /var/bigbluebutton /etc/bigbluebutton /root/greenlight-v3 /usr/local/bigbluebutton /usr/share/bbb-web&rsquo; > bbb-backup.tar.gz
+
+
+#### DONE Set up bbb with new domain name
+
+If changing IP:
+
+bbb-conf &#x2013;setip bbb-new.example.com
+service nginx stop
+certbot certonly
+service nginx start
+edit /etc/hosts, add domain name
+
+Certificate is saved at: /etc/letsencrypt/live/bbb.emacsverse.org/fullchain.pem
+Key is saved at: /etc/letsencrypt/live/bbb.emacsverse.org/privkey.pem
+
+edit *etc/nginx/sites-available/bigbluebutton to add server\_name
+/etc/letsencrypt/live*
+
+grep in /etc for the old domain
+
+<https://github.com/bigbluebutton/greenlight/issues/1794>
+
+- change greenlight/.env
+
+ curl failed to verify the legitimacy of the server and therefore could not
+
+establish a secure connection to it. To learn more about this situation and
+how to fix it, please visit the web page mentioned above.
+.curl: (60) SSL: no alternative certificate subject name matches target host name &rsquo;bbb.emacsverse.org&rsquo;
+More details here: <https://curl.se/docs/sslcerts.html>
+
+haproxy is already listening on 443
+
+Fine, let&rsquo;s just reinstall it, harumph.
+
+Create the users:
+
+user\_id = User.find\_by\_email(&ldquo;sacha@sachachua.com&rdquo;).id
+
+&#x2026; ugh, what&rsquo;s going on, why is free only reporting a little memory? ah, we&rsquo;re still resizing, that&rsquo;s why
+
+
+### STARTED Set up moderator access codes for all the meeting rooms, and make it so people can start the meeting
+
+- Let&rsquo;s try
+ - [ ] Rails
+ - [ ] Spookfox
+ - [ ] Manual
+
+ <https://github.com/bigbluebutton/greenlight/blob/a5da808fc33f03613aa3a4089fd418403c539b2f/spec/models/room_spec.rb#L128>
+ RoomMeetingOption.
+
+room.get\_setting
+
+yeah, that&rsquo;s not good, rails console keeps quitting!
+docker-compose down
+docker-compose up
+
+1:M 28 Nov 2024 17:16:23.441 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see <https://github.com/jemalloc/jemalloc/issues/1328>. To fix this issue add &rsquo;vm.overcommit\_memory = 1&rsquo; to /etc/sysctl.conf and then reboot or run the command &rsquo;sysctl vm.overcommit\_memory=1&rsquo; for this to take effect.
+
+docker-compose down
+docker-compose up -d
+
+makes it more reliable, it seems
+
+room = Room.find\_by\_id(&rsquo;8b3f36b1-7aee-459d-b963-bddcfe03e1db&rsquo;)
+
+o = MeetingOption.find\_by\_name(&rsquo;glAnyoneCanStart&rsquo;)
+o.default\_value = &rsquo;true&rsquo;
+o.save!
+
+o = MeetingOption.find\_by\_name(&rsquo;glModeratorAccessCode&rsquo;)
+
+&ldquo;<https://bbb.emacsverse.org/rooms/p4o-29n-esd-ow5/join>&rdquo;
+
+ (dolist (talk (seq-filter (lambda (o)
+ (and (plist-get o :bbb-room)
+ (not (plist-get o :bbb-mod-code))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
+ (spookfox-js-injection-eval-in-active-tab
+ (format "window.location.href = \"%s\""
+ (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
+ t)
+ (sleep-for 3)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('input#glAnyoneCanStart').checked = true")
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('input#muteOnStart').checked = true")
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelectorAll('.border-end button')[2].click()" t)
+ (let ((code (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('.access-code-input input').value" t)))
+ (message "Setting %s to %s" (plist-get talk :slug) code)
+ (emacsconf-set-property-from-slug
+ talk "BBB_MOD_CODE"
+ code)
+ (sit-for 2)))
+
+ (dolist (talk (seq-filter (lambda (o)
+ (plist-get o :bbb-room))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
+ (spookfox-js-injection-eval-in-active-tab
+ (format "window.location.href = \"%s\""
+ (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
+ t)
+ (sleep-for 3)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
+ (sleep-for 3))
+
+
+### DONE Figure out what&rsquo;s going on with BBB!
+
+
+### DONE Create meeting rooms for each speaker
+
+Now that I&rsquo;m more familiar with BigBlueButton and
+Greenlight, I don&rsquo;t have to [use Spookfox to
+automate creating BigBlueButton rooms in Mozilla
+Firefox](https://sachachua.com/blog/2023/10/using-emacs-and-spookfox-to-automate-creating-bigbluebutton-rooms-in-mozilla-firefox/). I can just create them through the Rails
+console.
+
+docker exec -it greenlight-v3 bundle exec rails c
+
+user\_id = User.find\_by\_email(&ldquo;sacha@sachachua.com&rdquo;).id
+
+docker exec -it greenlight-v3 bundle exec rails console
+
+ (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)))
+ "")
+
+Print out the room IDs with
+
+ Room.all.each { |x| puts x.friendly_id + " " + x.name }; nil
+
+<https://github.com/bigbluebutton/greenlight/issues/1925>
+
+
+### DONE Check BBB audio from my phone
+
+
+### DONE Create accounts for corwin
+
+
+### CANCELLED Customize BBB to process at night
+
+<https://docs.bigbluebutton.org/3.0/administration/customize/>
+Change processing time
+
+On a 2.2.x BigBlueButton server, the server will process recordings as meetings finish. You can restrict the recording processing interval to specific hours by creating the file /etc/systemd/system/bbb-record-core.timer.d/override.conf with the contents
+
+[Timer]
+OnActiveSec=
+OnUnitInactiveSec=
+OnCalendar=21,22,23,00,01,02,03:\*:00
+Persistent=false
+
+and do systemctl daemon-reload. This file overrides the timing of when systemd runs bbb-record-core.target. In the above example, recordings will start processing between 21:00 and 03:59.
+
+- [Set up rooms and assign as properties](file:///home/sacha/sync/orgzly/Inbox.md)
+
+
+### 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
+
+
+### DONE Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 7 and 8
+
+
+<a id="check-emacsconf-infrastructure-irc-announcements"></a>
+
+## IRC announcements
+
+
+### DONE Confirm manual IRC announcements
+
+
+### TODO Confirm automated IRC announcements from res
+
+
+<a id="check-emacsconf-infrastructure-media"></a>
+
+## Media
+
+
+### TODO 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>
+
+## TODO Publishing resources to the wiki
+
+ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;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
+
+
+### TODO Generate test videos for everything
+
+
+### TODO Document how to get that set up again
+
+
+<a id="check-emacsconf-infrastructure-etherpad"></a>
+
+## Etherpad
+
+
+### TODO 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
+
+
+### DONE Generate all the test assets
+
+
+### TODO Test connecting to VNC and streaming via OBS
+
+
+<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="decisions"></a>
# Decisions
@@ -267,7 +1244,7 @@ Notes:
<a id="bbb"></a>
-## BigBlueButton replacement
+## BigBlueButton replacement (BBB)
The server running bbb.emacsverse.org has been decommissioned, since the nonprofit that shared it with us is defunct.
@@ -277,21 +1254,76 @@ The server running bbb.emacsverse.org has been decommissioned, since the nonprof
- also includes some notes on hosting
- Nice thing about running our own server: we can make one room per speaker, pre-assign their URLs, and let people stay as long as they want in recorded Q&A sessions
+Recommendation:
+
+We spin up a shared CPU 4GB under bandali&rsquo;s Linode
+account (for bandwidth pooling and easier
+reimbursement), do the setup/testing, scale down
+as small as possible over the next few weeks,
+scale up to dedicated CPU 16GB a day or two before
+the conference, and keep it at that level until
+the recordings are all done. I have access to that
+Linode account, so I can set it up. If bandali can
+configure emacsverse.org to be handled by Linode,
+I can manage the DNS changes, or he can change
+bbb.emacsverse.org to the IP address of the new
+node.
+
Some options:
-- Go back to using meet.jit.si
+- Linode with 16GB RAM and 8 cores
+ - Advantages: can experiment with both Galene and BBB, manage things ourselves, have filesystem access
+ - Disadvantages: needs someone to do it
+ - Base pricing
+ - Shared CPU 4GB 80GB storage: hourly USD 0.04, monthly USD 24
+ - Dedicated CPU 16GB: hourly USD 0.22, daily 5.28, weekly 36.96, monthly USD 144 - meets minimum requirements and can probably support 200 simultaneous ([FAQ](https://docs.bigbluebutton.org/support/faq/))
+ - Shared CPU 8GB 160GB storage: hourly USD 0.07
+ - Shared CPU 16GB 320GB storage: hourly USD 0.14
+ - Last year
+ - Block storage: $1/10GB/month
+ - 125M/hour - [FAQ](https://docs.bigbluebutton.org/support/faq/#what-is-the-disk-space-usage-for-storing-one-hour-of-recordings)
+ - In 2023, we had 31 hours of trimmed recordings (main + answers),
+ - (\* 31 0.125) 3.875, oh, maybe we can get away with 10GB storage and add another chunk of 10GB midway if we need it, or extend the dedicated
+ - Actually, block storage probably not needed if we&rsquo;re going to keep the big instance up until the recordings are done
+ - Ideas
+ - **We&rsquo;re here &#x2013; Option B: Run a slightly larger shared CPU instance from now until shortly before the conference, then scale up** in case BBB does not work for installation/testing with less memory; block storage probably not needed
+ - (\* 0.07 24 7 3) USD 35.28 for 8GB, total (+ 35.28 36.96) USD 72.24
+ - (\* 0.14 24 7 3) USD 70.56 for 16GB, total (+ 70.56 36.96) USD 107.52
+ - **Option A: Run a small instance continuously, scale up for the conference, pull the recordings off, spin the instance down** - est total USD 60+tax
+ - There are three weeks between now and the conference (\* 0.04 24 7 3) USD 20
+ - Last year, recordings were available within three days after the conference
+ - Let&rsquo;s plan for a week at high capacity. (\* 0.22 24 7) USD 36.96
+ - and a month of 10GB, possibly up to 30GB. USD 3
+ - That&rsquo;s probably small enough that it doesn&rsquo;t make as much sense to try to fully spin down for a week in between now and the conference (\* 0.04 24 7) - which would save USD 6.72 but require figuring out backing up, etc.
+
+- Ask FSF if we can borrow their BBB or Galene, maybe limit it to cycling among 6 or 7 rooms
+ - Waiting for feedback; Corwin has asked them
+- Pay for BigBlueButton hosting; can we find one that&rsquo;s compatible with our commitment to freedom?
+ - <https://bigbluebutton.host/plans/#economyplans> - Economy 120 (USD 130/month) or Economy 80 (USD 85/month), custom URL
+ - <https://www.bigbluemeeting.com/#pricing> - 100 concurrent users: USD 125/month, custom URL
+ - <https://www.mynaparrot.com/affordable-bigbluebutton-hosting>
+ - 100 concurrent users: USD 79/month
+ - 200 concurrent users and custom URL: USD 15 setup fee + USD 149/month
+ - <https://www.webhostingzone.org/solutions/bigbluebutton-hosting.html> - 150 concurrent, USD 75/month
+ - <https://bbbplugin.com/en/pricing/bigbluebutton-for-api/> - 250 concurrent, USD 49 setup + USD 108.80/month
+ - <https://biggerbluebutton.com/plans>
+ - 150 concurrent users, 10 concurrent meetings, USD 40/month
+ - custom domain, 600 concurrent users, USD 149/month
+ - Compare with Linode pricing
+- Try to squeeze it onto res.emacsconf.org
+ - Tricky to run on a shared server; it likes to use a lot of ports and strongly recommends running it on its own server
+- Go back to using meet.jit.si?
- Free:
- Need to check speed, reliability
- Can send RTMP from the meeting itself
+ - <span class="timestamp-wrapper"><span class="timestamp">[2024-11-13 Wed] </span></span> I attended Ihor&rsquo;s
+ OrgMeetup, which he hosted on meet.jit.si. I
+ think he had bandwidth issues at some point
+ and we lost his audio. I remember we ran
+ into that problem before, too, when we used
+ Jitsi for one of the Emacsconfs. Free Jitsi
+ hosting might not be the right fit for us.
- Paid: USD 99/month + $0.01/min for recordings + $0.01 min (optional) for RTMP streaming
-- Try to squeeze it onto res.emacsconf.org
- - Tricky to run on a shared server; it likes to use a lot of ports and strongly recommends running it on its own server
-- Linode with 16GB RAM and 8 cores
- - Dedicated CPU 16GB is $.216/hour at Linode
- - Premium CPU is $.26/hour
- - Plus block storage, $1/10GB/month charged hourly (recommended 500, so $+18/month)
-- Ask FSF if we can borrow theirs, maybe limit it to cycling among 6 or 7 rooms
-- Pay for BigBlueButton hosting; can we find one that&rsquo;s compatible with our commitment to freedom?
- Galene?
- <span class="timestamp-wrapper"><span class="timestamp">[2024-10-31 Thu] </span></span> I checked out Galene in the last Emacs Berlin meeting. It&rsquo;s promising, but I think the user interface might still need a bit of work. Simple deployment (run one Go binary, I think), but muting/unmuting doesn&rsquo;t trigger enabling the microphone, and the chat was buggy to get to on my mobile device. Supposed to have support for raising hands.
diff --git a/2024/organizers-notebook/index.org b/2024/organizers-notebook/index.org
index a5fd8d3f..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,12 +152,15 @@ 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
-** DONE Draft schedule
-CLOSED: [2024-11-02 Sat 11:38]
+** TODO Draft schedule
:PROPERTIES:
:CUSTOM_ID: draft-schedule
:END:
@@ -179,6 +188,7 @@ CLOSED: [2024-11-02 Sat 11:38]
(emacsconf-schedule-validation-functions
'(emacsconf-schedule-validate-time-constraints
;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered
+ emacsconf-schedule-validate-no-cancelled-talks
emacsconf-schedule-validate-all-talks-present
emacsconf-schedule-validate-no-duplicates)))
(setq emacsconf-schedule-plan
@@ -187,7 +197,6 @@ CLOSED: [2024-11-02 Sat 11:38]
papers ; <= 10:00
project ; any
org-update ; <= 13:00 EST Sat or >= 15:00 Sat or <= 14:00 Sun, Sat preferred
- flp ; any, Sat pref
color ; <= 12:00 sat pref
(lunch :start "12:00")
theme ; >= 12:30
@@ -207,24 +216,22 @@ CLOSED: [2024-11-02 Sat 11:38]
guile ; >= 12:00
secrets ; >= 13:00
(mcclim :time 60) ; >= 14:00
- repro ; any
+ maxima
("GEN Sunday, Dec 8" :start "2024-12-08 09:00" :set-track "General")
sun-open
links ; <= 10:30
regex ; <= 12:00 sun or >= 12:00 sat
learning ; <= 13:00
- language ; <= 12:00
- (org-teach :buffer 15) ; any
+ (blee :buffer 15) ; any
(hyperbole :buffer 15)
(lunch :start "12:00")
- (hywiki :buffer 15) ; >= 10:00
- (pgmacs :buffer 15) ; <= 15:00
- (blee :buffer 10) ; any
- (literate :buffer 15) ; >= 13:00
- students ; >= 14:00 Sun
+ (hywiki :buffer 20) ; >= 10:00
+ (pgmacs :buffer 20) ; <= 15:00
+ (literate :buffer 20) ; >= 13:00
+ (students :start "15:00") ; >= 14:00 Sun
sharing ; >= 13:00
- (transducers) ; >= 16:00 sun
- (sun-close :start "17:00")
+ (transducers :start "16:00") ; >= 16:00 sun
+ (sun-close)
))
(setq emacsconf-schedule-draft (emacsconf-schedule-prepare (emacsconf-schedule-inflate-sexp emacsconf-schedule-plan)))
(prog1 (string-join (emacsconf-schedule-validate emacsconf-schedule-draft) "\n")
@@ -241,6 +248,9 @@ CLOSED: [2024-11-02 Sat 11:38]
#+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:
@@ -374,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]]
@@ -381,7 +393,463 @@ Notes:
Coloring by availability:
- light blue: constraint is <= a time
- peach: constraint is >= a time
+
+** DONE Prepare shift calendar, ask people to sign up
+CLOSED: [2024-11-26 Tue 10:06] SCHEDULED: <2023-11-01 Wed>
+:PROPERTIES:
+:CUSTOM_ID: shifts
+:END:
+
+#+BEGIN_EXPORT md
+<a name="shifts"></a>
+#+END_EXPORT
+
+AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition)
+
+Saturday Dec 7 2024
+
+#+NAME: saturday-shifts
+| | Start | End | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord |
+|--------+-------+-------+--------+----------+---------+-----+-----+--------|
+| Gen AM | 09:00 | 12:00 | zaeph | sachac | sachac | | | sachac |
+| Gen PM | 13:00 | 17:00 | zaeph | sachac | sachac | | | sachac |
+| Dev AM | 10:00 | 12:00 | corwin | sachac | sachac | | | sachac |
+| Dev PM | 13:00 | 17:00 | corwin | sachac | sachac | | | sachac |
+
+Sunday Dec 8 2024
+
+#+NAME: sunday-shifts
+| | Start | End | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord |
+|--------+-------+-------+-------+----------+---------+-----+-----+--------|
+| Gen AM | 09:00 | 12:00 | zaeph | sachac | corwin | | | sachac |
+| Gen PM | 13:00 | 17:00 | zaeph | sachac | corwin | | | sachac |
+
+Backups:
+- dev host/streamer:
+- gen host/streamer:
+- checkin, IRC, pad:
+
+Interested in a shift? Please e-mail [[mailto:emacsconf-org-private@gnu.org]] and we'll help you figure out what you need to learn.
+
+#+begin_src emacs-lisp :var sat=saturday-shifts :var sun=sunday-shifts :rownames no :colnames no :results verbatim replace
+`(setq emacsconf-shifts
+ (list
+ ,@(apply #'append
+ (mapcar
+ (lambda (day)
+ (let ((headers
+ (mapcar
+ (lambda (field)
+ (intern
+ (concat
+ ":"
+ (downcase
+ (if (string-match org-link-bracket-re field)
+ (match-string 2 field)
+ field)))))
+ (seq-drop (car (cadr day)) 3))))
+ (mapcar
+ (lambda (row)
+ (apply #'append
+ (list 'list :id
+ (when (string-match "^\\([^ ]+\\) \\(AM\\|PM\\)" (car row))
+ (format "%s-%s-%s"
+ (car day)
+ (downcase (match-string 2 (car row)))
+ (downcase (match-string 1 (car row)))))
+ :track
+ (if (string-match "^Gen" (car row)) "General" "Development")
+ :start
+ (format "%sT%s:00%s"
+ (elt day 2)
+ (elt row 1)
+ emacsconf-timezone-offset)
+ :end
+ (format "%sT%s:00%s"
+ (elt day 2)
+ (elt row 2)
+ emacsconf-timezone-offset))
+ (seq-map-indexed
+ (lambda (value index)
+ (unless (string= value "")
+ (list (elt headers index) value)))
+ (seq-drop row 3))))
+ (cdr (cadr day)))
+ ))
+ (list
+ (list "sat" sat "2024-12-07")
+ (list "sun" sun "2024-12-08"))))))
+
+#+end_src
+
+#+RESULTS:
+:results:
+(setq emacsconf-shifts (list (list :id "sat-am-gen" :track "General" :start "2024-12-07T09:00:00-0500" :end "2024-12-07T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2024-12-07T13:00:00-0500" :end "2024-12-07T17:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2024-12-07T10:00:00-0500" :end "2024-12-07T12:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2024-12-07T13:00:00-0500" :end "2024-12-07T17:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2024-12-08T09:00:00-0500" :end "2024-12-08T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2024-12-08T13:00:00-0500" :end "2024-12-08T17:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :coord "sachac")))
+:end:
+
+
+** Record intros and opening remarks
+:PROPERTIES:
+:CUSTOM_ID: intros
+:END:
+
+*** WAITING Redo pkal pronunciation :emacsconf:record:
+SCHEDULED: <2024-12-03 Tue>
+:PROPERTIES:
+:CREATED: [2024-12-02 Mon 16:48]
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-redo-pkal-pronunciation
+:END:
+
+#+begin_quote
+kǎlud͡ʑert͡ʃit͡ɕ - zaeph's guess is kah-loo-dyer-tshitch
+#+end_quote
+
+#+begin_example
+Next, we have "Emacs 30 Highlights" by Philip Kaludercic.
+You can ask questions in the web conference
+by joining from the talk page,
+or you can ask questions through Etherpad or IRC.
+#+end_example
+
+*** WAITING Rerecord intro for Ihor Radchenko and Bastien Guerry
+:PROPERTIES:
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-intro-for-ihor-radchenko-and-bastien-guerry
+:END:
+
+
+zaeph's tips: Ihor said his name in this presentation: https://youtu.be/YA1RJxH4xfQ?t=1
+You’re rolling your Rs for both “Ihor” and “Guerry”, but I think both
+are supposed to be smooth. For Bastien’s family name, it’s
+"ghey-ree". https://paste.xinu.at/A9DFSN/
+
+zaeph will probably pronounce this so much better than I can. =)
+
+#+begin_example
+Next, we have "The future of Org",
+by Ihor Radchenko and Bastien Guerry.
+They will answer questions via web conference.
+You can join using the URL from the talk page
+or ask questions through Etherpad or IRC.
+#+end_example
+
+*** TODO Rerecord Eev intro with MAC-SYM-A pronunciation :record:emacsconf:
+:PROPERTIES:
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-eev-intro-with-mac-sym-a-pronunciation
+:END:
+
+#+begin_quote
+My name in the intro is perfect, but Maxima comes from Macsyma, and it is
+pronounced mac - sym (<- as in "symbolic") a...
+#+end_quote
+
+#+begin_example
+Next, we have "Emacs, eev, and Maxima - now!",
+by Eduardo Ochs.
+You can ask questions via Etherpad or IRC.
+#+end_example
+
+*** WAITING Rerecord Vincent Conus using psitransfer version :record:emacsconf:
+SCHEDULED: <2024-12-03 Tue>
+:PROPERTIES:
+:CREATED: [2024-12-02 Mon 19:48]
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-vincent-conus-using-psitransfer-version
+:END:
+
+[[file:~/proj/emacsconf/2024/cache/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--name.ogg]]
+
+cuhn-us
+
+#+begin_example
+Next, we have "Writing academic papers in Org-Roam",
+by Vincent Conus.
+He will answer questions via web conference.
+You can join using the URL from the talk page
+or ask questions through Etherpad or IRC.
+#+end_example
+
+
+*** WAITING Rerecord Joseph Turner with new title :emacsconf:record:
+:PROPERTIES:
+:CREATED: [2024-12-02 Mon 13:51]
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-joseph-turner-with-new-title
+:END:
+
+[[https://sachachua.com/blog/2024/12/2024-12-02-emacs-news/][2024-12-02 Emacs news]]
+
+New in hyperdrive.el: quick install, peer graph, transclusion!
+
+#+begin_example
+Next, we have "New in hyperdrive.el: quick install,
+peer graph, transclusion!" by Joseph Turner.
+You can ask questions in the web conference
+by joining from the talk page,
+or you can ask questions through Etherpad or IRC.
+#+end_example
+*** STARTED Record sat-open remarks :emacsconf:record:
+:PROPERTIES:
+:Effort: 0:30
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-record-sat-open-remarks
+:END:
+:LOGBOOK:
+CLOCK: [2024-12-03 Tue 13:38]--[2024-12-04 Wed 08:48] => 19:10
+:END:
+
+Welcome to EmacsConf 2024, where we have fun
+exploring how much we can do with a text editor.
+It's hard to give a general overview
+of all the cool talks today and tomorrow,
+so you can flip through the talks
+and see what sparks your interests.
+Don't feel limited to one track or another.
+The best parts of EmacsConf are the conversations.
+The wiki has a page on how to watch and participate,
+and I'll give you a quick overview as well.
+You can watch both streams at live.emacsconf.org
+using free and open source software.
+Using a streaming media player like mpv
+seems to be the best way to watch in terms of performance
+but there are also web-based players
+just in case that's all you've got.
+The schedule shows the General track on top
+and the Development track on the bottom,
+so you can see what else is going on.
+As you're watching the talks,
+you can refer to the schedule in another window.
+Hover over the boxes to see the times and titles,
+and click on the boxes in the schedule
+to jump to the talk's page for more details.
+You can also get the schedule as an iCalendar file
+or as an Org file in different time zones.
+Many talks will be followed by
+live Q&A web conferences with the speaker,
+which will be done in BigBlueButton or BBB.
+These are indicated with a solid border on the schedule
+and by Q&A: BBB on the schedule page.
+You can join the web conference room
+by clicking on the BBB link
+
+on the schedule page or the talk's webpage.
+Then you can ask your questions yourself when the Q&A starts.
+To improve performance, please keep your webcam off
+and stay muted until it's your turn to talk.
+If you don't like Javascript,
+you can still ask questions via IRC
+and the hosts can read them out for you.
+We're probably going to automatically switch
+between talks and Q&A sessions,
+so the transitions on the stream might be a little sudden.
+
+People in the BigBlueButton room
+can continue the conversation
+even after the talk moves off-stream.
+and you can also reach out to the speakers
+using the contact information on the talk page.
+
+Other talks will have Q&A via Etherpad or IRC,
+depending on what the speakers prefer.
+This is indicated in the schedule with a dashed border
+and on the schedule page as well.
+Some talks will have the Q&A after the event,
+so you can add your questions to their Etherpad
+or ask on IRC.
+We'll e-mail the speakers afterwards
+and update the talk pages when they answer.
+The schedule pages and track pages have quick shortcuts
+so that you can find out more about talks, open the Etherpads,
+and join the Q&A sessions. The watch page has more tips
+on how to make the most of Q&A.
+If you can, please add notes and ask questions
+in the Etherpad for the talk. That makes it easier
+for everyone to share their notes,
+and speakers and hosts can read the questions from there.
+We'll copy the notes to the talk pages afterwards.
+We have one pad for each talk,
+so you can follow the links to get to the next one
+or go back to the schedule and get the link from there.
+If you have general feedback about
+the conference itself, please put it in
+pad.emacsconf.org/2024 , which is linked on each pad.
+You can also use this as a general community message board
+for things like Help Wanted.
+Internet Relay Chat or IRC can be another great way
+to be part of lots of conversations.
+You can use chat.emacsconf.org to join the IRC channels
+through your web browser. The tabs on the left can help you
+switch between the different channels.
+There's #emacsconf-gen for the General track
+and #emacsconf-dev for the Development track.
+If you need to reach us, you can join #emacsconf-org
+or e-mail emacsconf-org-private@gnu.org.
+You can use #emacsconf for hallway conversations.
+Of course, you can join any of these channels
+with your favourite IRC client.
+You can connect to irc.libera.chat
+port 6697 with TLS.
+Once again, we're going to be streaming with open captions
+for most of the talks this year, thanks to our speakers and
+captioning volunteers. The captioned talks are indicated
+on the schedule, and with any luck, we'll be posting
+transcripts on talk pages shortly after the talks start.
+If you need additional accommodations,
+please let us know in #emacsconf-org
+and we'll see if we can make things happen.
+If something goes down, we'll update status.emacsconf.org.
+If it doesn't look like we've noticed yet,
+please let us know in the #emacsconf-org IRC channel,
+where we will be quietly panicking.
+In all of these conversations, please keep in mind
+our guidelines for conduct. You can find them on the wiki,
+They basically boil down to: please be nice.
+If all goes well, the prerecorded talks and transcripts
+should be available from the talk pages
+shortly after they start playing,
+and we'll post the recordings of live talks
+and Q&A sessions within the next month or so.
+If you'd like to get an update, you can subscribe to
+the emacsconf-discuss mailing list.
+All right, let's get going.
+Leo is hosting the general track,
+and Corwin hosting the development track.
+The other volunteers and I will run around mostly backstage,
+and you'll probably meet us in the closing remarks.
+That's also where we get to thank
+all the people and organizations
+who make EmacsConf possible.
+Thanks for coming to EmacsConf 2024.
+*** TODO Record sun-open remarks
+:PROPERTIES:
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-record-sun-open-remarks
+:END:
+
+Welcome to the second day of EmacsConf 2024.
+Today we have one track of talks,
+so you don't have to worry about
+missing out on anything.
+The best parts of EmacsConf are the conversations.
+The wiki has a page on how to watch and participate,
+and I'll give you a quick overview as well.
+You can watch the stream at live.emacsconf.org
+using free and open source software.
+Using a streaming media player like mpv
+seems to be the best way to watch in terms of performance
+but there are also web-based players
+just in case that's all you've got.
+As you're watching the talks,
+you can refer to the schedule in another window.
+Hover over the boxes to see the times and titles,
+and click on the boxes in the schedule
+to jump to the talk's page for more details.
+You can also get the schedule as an iCalendar file
+or as an Org file in different time zones.
+
+Many talks will be followed by
+live Q&A web conferences with the speaker,
+which will be done in BigBlueButton or BBB.
+These are indicated with a solid border on the schedule
+and by Q&A: BBB on the schedule page.
+You can join the web conference room
+by clicking on the BBB link
+on the schedule page or the talk's webpage.
+Then you can ask your questions yourself when the Q&A starts.
+To improve performance, please keep your webcam off
+and stay muted until it's your turn to talk.
+If you don't like Javascript,
+you can still ask questions via IRC
+and the hosts can read them out for you.
+
+We're probably going to automatically switch
+between talks and Q&A sessions,
+so the transitions on the stream might be a little sudden,
+People in the BigBlueButton room
+can continue the conversation
+even after the talk moves off-stream,
+and you can also reach out to the speakers
+using the contact information on the talk page.
+
+Other talks will have Q&A via Etherpad or IRC,
+depending on what the speakers prefer.
+This is indicated in the schedule with a dashed border
+and on the schedule page as well.
+Please ask your questions in the recommended places
+so that the speakers can easily see them.
+
+Some talks will have the Q&A after the event,
+so you can add your questions to their Etherpad.
+We'll e-mail the speakers afterwards
+and update the talk pages when they answer.
+
+We're going to start Sunday morning
+with more IRC/Etherpad Q&A
+to try to get around
+some of the bandwidth issues
+that we noticed last year.
+
+The schedule pages and track pages have quick shortcuts
+so that you can find out more about talks, open the Etherpads,
+and join the Q&A sessions. The watch page has more tips
+on how to make the most of Q&A.
+If you can, please add notes and ask questions
+in the Etherpad for the talk. That makes it easier
+for everyone to share their notes,
+and speakers and hosts can read the questions from there.
+We'll copy the notes to the talk pages afterwards.
+We have one pad for each talk,
+so you can follow the links to get to the next one
+or go back to the schedule and get the link from there.
+If you have general feedback about
+the conference itself, please put it in
+pad.emacsconf.org/2024 , which is linked on each pad.
+You can also use this as a general community message board
+for things like Help Wanted.
+Internet Relay Chat or IRC can be another great way
+to be part of lots of conversations.
+You can use chat.emacsconf.org to join the IRC channels
+through your web browser. The tabs on the left can help you
+switch between the different channels.
+Most discussions will be in
+#emacsconf-gen for the General track.
+If you need to reach us, you can join #emacsconf-org
+or e-mail emacsconf-org-private@gnu.org.
+You can use #emacsconf for hallway conversations.
+Of course, you can join any of these channels
+with your favourite IRC client.
+You can connect to irc.libera.chat
+port 6697 with TLS.
+Once again, we're going to be streaming with open captions
+for most of the talks this year, thanks to our speakers and
+captioning volunteers. The captioned talks are indicated
+on the schedule, and with any luck, we'll be posting
+transcripts on talk pages shortly after the talks start.
+If you need additional accommodations,
+please let us know in #emacsconf-org
+and we'll see if we can make things happen.
+If something goes down, we'll update status.emacsconf.org.
+If it doesn't look like we've noticed yet,
+please let us know in the #emacsconf-org IRC channel,
+where we will be quietly panicking.
+In all of these conversations, please keep in mind
+our guidelines for conduct. You can find them on the wiki,
+They basically boil down to: please be nice.
+If all goes well, the prerecorded talks and transcripts
+should be available from the talk pages
+shortly after they start playing,
+and we'll post the recordings of live talks
+and Q&A sessions within the next month or so.
+If you'd like to get an update, you can subscribe to
+the emacsconf-discuss mailing list.
+All right, let's get going.
+Leo Vivier is hosting the general track again today.
+The other volunteers and I will run around mostly backstage,
+and you'll probably meet us in the closing remarks.
+That's also where we get to thank
+all the people and organizations
+who make EmacsConf even possible.
+Thanks for coming to EmacsConf 2024.
+
* TODO [#A] Check EmacsConf infrastructure :project:
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure
+:END:
- [X] IRC
- [ ] Streaming assets
@@ -393,50 +861,435 @@ Coloring by availability:
- [ ] Streaming
- [ ] Toobnix
- [ ] YouTube
+- [X] Mumble: Can join from my phone, can speak on stream
-** WAITING [#A] bbb.emacsverse.org replacement
+** TODO [#A] BigBlueButton
DEADLINE: <2024-11-15 Fri>
:PROPERTIES:
:CREATED: [2024-11-02 Sat 11:38]
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton
+:END:
+
+- Plan: spin up Linode temporarily: [[#bbb][BigBlueButton replacement]]
+
+*** Notes
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes
+:END:
+**** install, sizes
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-install-sizes
+:END:
+[2024-11-19 Tue]
+
+Prerequisites:
+- BBB requires 4 CPU cores before it will install. bbb-conf.sh is fairly straightforward, so I guess we could spin down and then spin up again.
+ Image: Ubuntu 22.04
+
+Steps:
+1. Run the BBB installer: ~./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g~
+2. ~sudo apt install bbb-playback-video~ and then follow the instructions at [[https://docs.bigbluebutton.org/3.0/administration/customize/#install-additional-recording-processing-formats][Server Customization | BigBlueButton]] .
+3. https://docs.bigbluebutton.org/3.0/administration/customize/#mute-all-users-on-startup
+
+I think it needs 4 CPU cores for regular running, too.
+
+Sizing to shared 8GB 4 core for testing
+#+begin_src sh :eval no
+linode-cli linodes resize 67329098 --type g6-standard-4 --allow_auto_disk_resize false
+#+end_src
+takes about 2 minutes
+
+Sizing to shared nanode, dormant
+
+#+begin_src sh :eval no
+linode-cli linodes resize 67329098 --type g6-nanode-1 --allow_auto_disk_resize true
+#+end_src
+
+#+begin_src
+echo "notify-send 'Resizing BBB...'; linode-cli linodes resize 67329098 --type g6-nanode-1 --allow_auto_disk_resize true" | at 'now + 1 hour'
+#+end_src
+
+Resize disk
+linode-cli linodes disks-list 67329098
+linode-cli linodes disk-resize 67329098 131474261 --size 24000
+
+/var/bigbluebutton is where recordings will go
+
+https://techdocs.akamai.com/linode-api/reference/post-resize-disk
+
+https://www.linode.com/community/questions/21942/how-can-i-schedule-resizing-a-linode
+**** backing up
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-backing-up
+:END:
+[2024-11-20 Wed] ssh root@66.175.208.243 'tar zcvf - /var/bigbluebutton /etc/bigbluebutton /root/greenlight-v3 /usr/local/bigbluebutton /usr/share/bbb-web' > bbb-backup.tar.gz
+**** DONE Set up bbb with new domain name
+CLOSED: [2024-11-28 Thu 10:00]
+:PROPERTIES:
+:Effort: 1:00
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-set-up-bbb-with-new-domain-name
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-28 Thu 09:06]--[2024-11-28 Thu 09:17] => 0:11
+:END:
+If changing IP:
+
+bbb-conf --setip bbb-new.example.com
+service nginx stop
+certbot certonly
+service nginx start
+edit /etc/hosts, add domain name
+
+Certificate is saved at: /etc/letsencrypt/live/bbb.emacsverse.org/fullchain.pem
+Key is saved at: /etc/letsencrypt/live/bbb.emacsverse.org/privkey.pem
+
+edit /etc/nginx/sites-available/bigbluebutton to add server_name
+/etc/letsencrypt/live/
+
+grep in /etc for the old domain
+
+https://github.com/bigbluebutton/greenlight/issues/1794
+- change greenlight/.env
+
+ curl failed to verify the legitimacy of the server and therefore could not
+establish a secure connection to it. To learn more about this situation and
+how to fix it, please visit the web page mentioned above.
+.curl: (60) SSL: no alternative certificate subject name matches target host name 'bbb.emacsverse.org'
+More details here: https://curl.se/docs/sslcerts.html
+
+haproxy is already listening on 443
+
+Fine, let's just reinstall it, harumph.
+
+Create the users:
+
+user_id = User.find_by_email("sacha@sachachua.com").id
+
+... ugh, what's going on, why is free only reporting a little memory? ah, we're still resizing, that's why
+*** STARTED Set up moderator access codes for all the meeting rooms, and make it so people can start the meeting
+SCHEDULED: <2024-11-28 Thu>
+:PROPERTIES:
+:CREATED: [2024-11-28 Thu 11:12]
+:Effort: 0:30
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-set-up-moderator-access-codes-for-all-the-meeting-rooms-and-make-it-so-people-can-start-the-meeting
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-28 Thu 12:13]--[2024-11-28 Thu 13:10] => 0:57
:END:
-- Delegated to Corwin for now, will get back to stressing out about it in a couple of weeks
-- May need to spin up a Linode and either pay for it for a few weeks or figure out how to spin it down and up again
- - [[#bbb][BigBlueButton replacement]]
-- Possibly relevant: dynamic DNS?
- https://www.linode.com/community/questions/7945/custom-dynamic-dns
- Can also update manually
-*** TODO Create meeting rooms for each speaker
-SCHEDULED: <2024-11-15 Fri>
+- Let's try
+ - [ ] Rails
+ - [ ] Spookfox
+ - [ ] Manual
+
+ https://github.com/bigbluebutton/greenlight/blob/a5da808fc33f03613aa3a4089fd418403c539b2f/spec/models/room_spec.rb#L128
+ RoomMeetingOption.
+
+room.get_setting
+
+yeah, that's not good, rails console keeps quitting!
+docker-compose down
+docker-compose up
+
+1:M 28 Nov 2024 17:16:23.441 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
+
+docker-compose down
+docker-compose up -d
+
+makes it more reliable, it seems
+
+room = Room.find_by_id('8b3f36b1-7aee-459d-b963-bddcfe03e1db')
+
+o = MeetingOption.find_by_name('glAnyoneCanStart')
+o.default_value = 'true'
+o.save!
+
+o = MeetingOption.find_by_name('glModeratorAccessCode')
+
+"https://bbb.emacsverse.org/rooms/p4o-29n-esd-ow5/join"
+#+begin_src emacs-lisp
+(dolist (talk (seq-filter (lambda (o)
+ (and (plist-get o :bbb-room)
+ (not (plist-get o :bbb-mod-code))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
+ (spookfox-js-injection-eval-in-active-tab
+ (format "window.location.href = \"%s\""
+ (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
+ t)
+ (sleep-for 3)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('input#glAnyoneCanStart').checked = true")
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('input#muteOnStart').checked = true")
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelectorAll('.border-end button')[2].click()" t)
+ (let ((code (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('.access-code-input input').value" t)))
+ (message "Setting %s to %s" (plist-get talk :slug) code)
+ (emacsconf-set-property-from-slug
+ talk "BBB_MOD_CODE"
+ code)
+ (sit-for 2)))
+#+end_src
+
+#+begin_src emacs-lisp
+(dolist (talk (seq-filter (lambda (o)
+ (plist-get o :bbb-room))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
+ (spookfox-js-injection-eval-in-active-tab
+ (format "window.location.href = \"%s\""
+ (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
+ t)
+ (sleep-for 3)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
+ (sleep-for 3))
+#+end_src
+*** DONE [#A] Figure out what's going on with BBB!
+CLOSED: [2024-11-28 Thu 10:59] SCHEDULED: <2024-11-28 Thu>
+:PROPERTIES:
+:CREATED: [2024-11-28 Thu 10:12]
+:Effort: 1:00
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-figure-out-what-s-going-on-with-bbb
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-28 Thu 10:47]--[2024-11-28 Thu 10:59] => 0:12
+:END:
+*** DONE Create meeting rooms for each speaker
+CLOSED: [2024-11-28 Thu 10:59] SCHEDULED: <2024-11-15 Fri>
:PROPERTIES:
:CREATED: [2024-11-02 Sat 11:50]
+:Effort: 0:30
+:CUSTOM_ID: create_rooms
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-28 Thu 10:00]--[2024-11-28 Thu 10:12] => 0:12
+CLOCK: [2024-11-20 Wed 10:48]--[2024-11-20 Wed 12:18] => 1:30
+:END:
+
+Now that I'm more familiar with BigBlueButton and
+Greenlight, I don't have to [[https://sachachua.com/blog/2023/10/using-emacs-and-spookfox-to-automate-creating-bigbluebutton-rooms-in-mozilla-firefox/][use Spookfox to
+automate creating BigBlueButton rooms in Mozilla
+Firefox]]. I can just create them through the Rails
+console.
+
+docker exec -it greenlight-v3 bundle exec rails c
+
+user_id = User.find_by_email("sacha@sachachua.com").id
+
+docker exec -it greenlight-v3 bundle exec rails console
+
+#+begin_src emacs-lisp :results replace
+(mapconcat (lambda (group)
+ (format
+ "Room.create(user_id: user_id, name: \"%s - %s\")\n"
+ (plist-get (cadr group) :speakers)
+ (string-join (mapcar (lambda (talk) (plist-get talk :slug))
+ (cdr group)))))
+ (emacsconf-mail-groups (emacsconf-active-talks (emacsconf-get-talk-info)))
+ "")
+#+end_src
+
+#+RESULTS:
+:results:
+Room.create(user_id: user_id, name: "Eduardo Ochs - maxima")
+Room.create(user_id: user_id, name: "Robin Templeton - guile")
+Room.create(user_id: user_id, name: "Daniel Pinkston - students")
+Room.create(user_id: user_id, name: "Ihor Radchenko and Bastien Guerry - org-update")
+Room.create(user_id: user_id, name: "Mats Lidell - hyperbole")
+Room.create(user_id: user_id, name: "screwlisp - mcclim")
+Room.create(user_id: user_id, name: "Vincent Conus - papers")
+Room.create(user_id: user_id, name: "Jonathan Otsuka - secrets")
+Room.create(user_id: user_id, name: "Ryota - color")
+Room.create(user_id: user_id, name: "Danny McClanahan - regex")
+Room.create(user_id: user_id, name: "Bob Weiner - hywiki")
+Room.create(user_id: user_id, name: "Abhinav Tushar - links")
+Room.create(user_id: user_id, name: "Mohsen BANAN - blee")
+Room.create(user_id: user_id, name: "Gabriele Bozzola - julia")
+Room.create(user_id: user_id, name: "Philip Kaludercic - emacs30")
+Room.create(user_id: user_id, name: "Ramin Honary - gypsum")
+Room.create(user_id: user_id, name: "Colin Woodbury - transducers")
+Room.create(user_id: user_id, name: "MetroWind - theme")
+Room.create(user_id: user_id, name: "Joseph Turner - hyperdrive")
+Room.create(user_id: user_id, name: "Charles Choi - casual")
+Room.create(user_id: user_id, name: "Troy Hinckley - rust")
+Room.create(user_id: user_id, name: "Blaine Mooers - project")
+Room.create(user_id: user_id, name: "Peter Prevos - writing")
+Room.create(user_id: user_id, name: "Howard Abrams - literate")
+Room.create(user_id: user_id, name: "Eric Marsden - pgmacs")
+Room.create(user_id: user_id, name: "Zac Romero - p-search")
+Room.create(user_id: user_id, name: "Bala Ramadurai - learning")
+Room.create(user_id: user_id, name: "Gopar - sharing")
+Room.create(user_id: user_id, name: "Christopher Howard - shellwater")
+:end:
+
+Print out the room IDs with
+
+#+begin_src ruby
+Room.all.each { |x| puts x.friendly_id + " " + x.name }; nil
+#+end_src
+https://github.com/bigbluebutton/greenlight/issues/1925
+
+
+*** DONE Check BBB audio from my phone
+CLOSED: [2024-11-28 Thu 13:03] SCHEDULED: <2024-11-21 Thu>
+:PROPERTIES:
+:CREATED: [2024-11-19 Tue 15:39]
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-check-bbb-audio-from-my-phone
+:END:
+*** DONE Create accounts for corwin
+CLOSED: [2024-11-28 Thu 10:11]
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-create-accounts-for-corwin
+:END:
+*** CANCELLED [#C] Customize BBB to process at night
+CLOSED: [2024-11-27 Wed 13:17]
+:PROPERTIES:
+:CREATED: [2024-11-20 Wed 12:11]
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-customize-bbb-to-process-at-night
+:END:
+
+https://docs.bigbluebutton.org/3.0/administration/customize/
+Change processing time
+
+On a 2.2.x BigBlueButton server, the server will process recordings as meetings finish. You can restrict the recording processing interval to specific hours by creating the file /etc/systemd/system/bbb-record-core.timer.d/override.conf with the contents
+
+[Timer]
+OnActiveSec=
+OnUnitInactiveSec=
+OnCalendar=21,22,23,00,01,02,03:*:00
+Persistent=false
+
+and do systemctl daemon-reload. This file overrides the timing of when systemd runs bbb-record-core.target. In the above example, recordings will start processing between 21:00 and 03:59.
+
+- [[file:~/sync/orgzly/Inbox.org::*Set up rooms and assign as properties][Set up rooms and assign as properties]]
+*** TODO [#C] Change background presentation
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-background-presentation
+:END:
+https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-presentation
+*** TODO [#C] Modify landing page
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-modify-landing-page
+:END:
+/var/www/bigbluebutton-default/assets/index.html
+keep backup copy as it will be overwritten when bbb-conf is called
+*** TODO [#C] Change default welcome message
+:PROPERTIES:
+:Effort: 0:30
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-default-welcome-message
:END:
+:LOGBOOK:
+CLOCK: [2024-11-20 Wed 12:21]--[2024-11-20 Wed 12:46] => 0:25
+:END:
+https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-welcome-message
+*** TODO [#C] Change html5 title
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-html5-title
+:END:
+/usr/share/bigbluebutton/html5-client/private/config/settings.yml
+
+TARGET=/usr/share/bigbluebutton/html5-client/private/config/settings.yml
+yq e -i ".public.app.clientTitle = \"EmacsConf\"" $TARGET
+*** TODO [#C] Try live captions
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-try-live-captions
+:END:
+https://docs.bigbluebutton.org/3.0/administration/customize/#enable-live-captions
+*** TODO Explore meeting layout? Default to custom, hosts will need to drag people's webcam over if there's a share
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-explore-meeting-layout-default-to-custom-hosts-will-need-to-drag-people-s-webcam-over-if-there-s-a-share
+:END:
+
** IRC web client
-*** TODO Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 7 and 8
+: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
-** TODO Publishing videos to the media server
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements-confirm-automated-irc-announcements-from-res
+:END:
+** Media
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-media
+:END:
+
+*** TODO Switch public media to unprotected root before the conference
+SCHEDULED: <2024-11-29 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-12 Tue 14:18]
+:CUSTOM_ID: check-emacsconf-infrastructure-media-switch-public-media-to-unprotected-root-before-the-conference
+:END:
+
+1. Clear public media directory.
+2. Set =media_protect_root= to false in Ansible =group_vars/all.yml=.
+3. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media=
+
+You can generate the index with =emacsconf-publish-update-media=.
** TODO Publishing resources to the wiki
-***
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-publishing-resources-to-the-wiki
+:END:
+ansible-playbook -i inventory.yml prod-playbook.yml --tags publish
+
+
+** TODO Publishing videos to the media server
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-publishing-videos-to-the-media-server
+:END:
** Playing videos, switching to windows
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows
+:END:
*** TODO Generate test videos for everything
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows-generate-test-videos-for-everything
+:END:
*** TODO Document how to get that set up again
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows-document-how-to-get-that-set-up-again
+:END:
** Etherpad
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-etherpad
+:END:
*** TODO Generate pads for all the talks
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-etherpad-generate-pads-for-all-the-talks
+:END:
*** TODO Generate the main index
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-etherpad-generate-the-main-index
+:END:
** TODO Do a dry run
SCHEDULED: <2024-11-22 Fri>
:PROPERTIES:
:CREATED: [2024-11-02 Sat 11:40]
+:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run
:END:
*** DONE Generate all the test assets
CLOSED: [2024-11-06 Wed 18:52]
:PROPERTIES:
:Effort: 0:15
+:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run-generate-all-the-test-assets
:END:
:LOGBOOK:
CLOCK: [2024-11-06 Wed 18:47]--[2024-11-06 Wed 18:52] => 0:05
@@ -445,9 +1298,60 @@ 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
+meet: 64GB
+
+*** TODO [#A] Resize nodes before production
+SCHEDULED: <2024-12-06 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-22 Fri 13:46]
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-before-production
+:END:
+
+live0: 64GB
+front0: 32GB
+meet: 64GB
+
+*** TODO [#A] Resize nodes after production
+SCHEDULED: <2024-12-08 Sun>
+:PROPERTIES:
+:CREATED: [2024-11-22 Fri 13:46]
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-after-production
+:END:
+
+live0: nanode
+front0: nanode
+*** TODO [#A] Resize meet after production
+SCHEDULED: <2024-12-10 Tue>
+:PROPERTIES:
+:CREATED: [2024-11-22 Fri 13:47]
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-meet-after-production
:END:
+meet: nanode
* Processes and notes
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes
+:END:
+** Hosting
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-hosting
+:END:
+*** TODO Finalize host for dev track
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-hosting-finalize-host-for-dev-track
+:END:
** ERC
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-erc
+:END:
Some convenient commands are defined in emacsconf-el:emacsconf-erc.el.
@@ -459,7 +1363,7 @@ Some convenient commands are defined in emacsconf-el:emacsconf-erc.el.
:PROPERTIES:
:CUSTOM_ID: decisions
:END:
-** BigBlueButton replacement
+** BigBlueButton replacement (BBB)
:PROPERTIES:
:CUSTOM_ID: bbb
:END:
@@ -472,24 +1376,80 @@ The server running bbb.emacsverse.org has been decommissioned, since the nonprof
- also includes some notes on hosting
- Nice thing about running our own server: we can make one room per speaker, pre-assign their URLs, and let people stay as long as they want in recorded Q&A sessions
+Recommendation:
+
+We spin up a shared CPU 4GB under bandali's Linode
+account (for bandwidth pooling and easier
+reimbursement), do the setup/testing, scale down
+as small as possible over the next few weeks,
+scale up to dedicated CPU 16GB a day or two before
+the conference, and keep it at that level until
+the recordings are all done. I have access to that
+Linode account, so I can set it up. If bandali can
+configure emacsverse.org to be handled by Linode,
+I can manage the DNS changes, or he can change
+bbb.emacsverse.org to the IP address of the new
+node.
+
Some options:
-- Go back to using meet.jit.si
+- Linode with 16GB RAM and 8 cores
+ - Advantages: can experiment with both Galene and BBB, manage things ourselves, have filesystem access
+ - Disadvantages: needs someone to do it
+ - Base pricing
+ - Shared CPU 4GB 80GB storage: hourly USD 0.04, monthly USD 24
+ - Dedicated CPU 16GB: hourly USD 0.22, daily 5.28, weekly 36.96, monthly USD 144 - meets minimum requirements and can probably support 200 simultaneous ([[https://docs.bigbluebutton.org/support/faq/][FAQ]])
+ - Shared CPU 8GB 160GB storage: hourly USD 0.07
+ - Shared CPU 16GB 320GB storage: hourly USD 0.14
+ - Last year
+ - Block storage: $1/10GB/month
+ - 125M/hour - [[https://docs.bigbluebutton.org/support/faq/#what-is-the-disk-space-usage-for-storing-one-hour-of-recordings][FAQ]]
+ - In 2023, we had 31 hours of trimmed recordings (main + answers),
+ - (* 31 0.125) 3.875, oh, maybe we can get away with 10GB storage and add another chunk of 10GB midway if we need it, or extend the dedicated
+ - Actually, block storage probably not needed if we're going to keep the big instance up until the recordings are done
+ - Ideas
+ - *We're here -- Option B: Run a slightly larger shared CPU instance from now until shortly before the conference, then scale up* in case BBB does not work for installation/testing with less memory; block storage probably not needed
+ - (* 0.07 24 7 3) USD 35.28 for 8GB, total (+ 35.28 36.96) USD 72.24
+ - (* 0.14 24 7 3) USD 70.56 for 16GB, total (+ 70.56 36.96) USD 107.52
+ - *Option A: Run a small instance continuously, scale up for the conference, pull the recordings off, spin the instance down* - est total USD 60+tax
+ - There are three weeks between now and the conference (* 0.04 24 7 3) USD 20
+ - Last year, recordings were available within three days after the conference
+ - Let's plan for a week at high capacity. (* 0.22 24 7) USD 36.96
+ - and a month of 10GB, possibly up to 30GB. USD 3
+ - That's probably small enough that it doesn't make as much sense to try to fully spin down for a week in between now and the conference (* 0.04 24 7) - which would save USD 6.72 but require figuring out backing up, etc.
+
+- Ask FSF if we can borrow their BBB or Galene, maybe limit it to cycling among 6 or 7 rooms
+ - Waiting for feedback; Corwin has asked them
+- Pay for BigBlueButton hosting; can we find one that's compatible with our commitment to freedom?
+ - https://bigbluebutton.host/plans/#economyplans - Economy 120 (USD 130/month) or Economy 80 (USD 85/month), custom URL
+ - https://www.bigbluemeeting.com/#pricing - 100 concurrent users: USD 125/month, custom URL
+ - https://www.mynaparrot.com/affordable-bigbluebutton-hosting
+ - 100 concurrent users: USD 79/month
+ - 200 concurrent users and custom URL: USD 15 setup fee + USD 149/month
+ - https://www.webhostingzone.org/solutions/bigbluebutton-hosting.html - 150 concurrent, USD 75/month
+ - https://bbbplugin.com/en/pricing/bigbluebutton-for-api/ - 250 concurrent, USD 49 setup + USD 108.80/month
+ - https://biggerbluebutton.com/plans
+ - 150 concurrent users, 10 concurrent meetings, USD 40/month
+ - custom domain, 600 concurrent users, USD 149/month
+ - Compare with Linode pricing
+- Try to squeeze it onto res.emacsconf.org
+ - Tricky to run on a shared server; it likes to use a lot of ports and strongly recommends running it on its own server
+- Go back to using meet.jit.si?
- Free:
- Need to check speed, reliability
- Can send RTMP from the meeting itself
+ - [2024-11-13 Wed] I attended Ihor's
+ OrgMeetup, which he hosted on meet.jit.si. I
+ think he had bandwidth issues at some point
+ and we lost his audio. I remember we ran
+ into that problem before, too, when we used
+ Jitsi for one of the Emacsconfs. Free Jitsi
+ hosting might not be the right fit for us.
- Paid: USD 99/month + $0.01/min for recordings + $0.01 min (optional) for RTMP streaming
-- Try to squeeze it onto res.emacsconf.org
- - Tricky to run on a shared server; it likes to use a lot of ports and strongly recommends running it on its own server
-- Linode with 16GB RAM and 8 cores
- - Dedicated CPU 16GB is $.216/hour at Linode
- - Premium CPU is $.26/hour
- - Plus block storage, $1/10GB/month charged hourly (recommended 500, so $+18/month)
-- Ask FSF if we can borrow theirs, maybe limit it to cycling among 6 or 7 rooms
-- Pay for BigBlueButton hosting; can we find one that's compatible with our commitment to freedom?
- Galene?
- [2024-10-31 Thu] I checked out Galene in the last Emacs Berlin meeting. It's promising, but I think the user interface might still need a bit of work. Simple deployment (run one Go binary, I think), but muting/unmuting doesn't trigger enabling the microphone, and the chat was buggy to get to on my mobile device. Supposed to have support for raising hands.
+
* Support code
:PROPERTIES:
:CUSTOM_ID: support-code
diff --git a/2024/organizers-notebook/schedule-1.5-tracks.svg b/2024/organizers-notebook/schedule-1.5-tracks.svg
index fa844bcf..3d166341 100644
--- a/2024/organizers-notebook/schedule-1.5-tracks.svg
+++ b/2024/organizers-notebook/schedule-1.5-tracks.svg
@@ -1 +1 @@
-<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/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(217,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="https://emacsconf.org/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="235" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(248,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: 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/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="141" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">language</text></g></a><a href="https://emacsconf.org/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="172" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(201,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="https://emacsconf.org/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="227" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(248,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:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="431" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(444,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/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="470" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(530,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/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="549" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(578,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:25- 3:35 An example of a cohesive student workflow in Emacs</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)">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:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(664,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:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="682" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(727,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> 5:00- 5:10 Sunday 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)">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> \ No newline at end of file
+<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> \ No newline at end of file
diff --git a/2024/prepare.md b/2024/prepare.md
index 4b20d5ba..8ae74e6f 100644
--- a/2024/prepare.md
+++ b/2024/prepare.md
@@ -154,14 +154,16 @@ 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 a quick way
-to familiarize yourself with it is to run it in a test room:
-<https://test.bigbluebutton.org/> 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.
+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 2024!
@@ -245,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 02fbe250..a769e01b 100644
--- a/2024/schedule-details.md
+++ b/2024/schedule-details.md
@@ -1,56 +1,41 @@
-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.
+Jump to: <a href="#dev">Development</a>
-[[!inline pages="internal(2024/schedule-image)" raw="yes"]]
+<h1 id="gen" class="sched-track General">General (26 talks)</h1>
+[[!template id=sched resources="""<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://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>""" title="""Writing academic papers in Org-Roam""" url="""/2024/talks/papers""" speakers="""Vincent Conus""" 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 resources="""<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://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>""" title="""Managing writing project metadata with org-mode""" url="""/2024/talks/project""" speakers="""Blaine Mooers""" 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 resources="""<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://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>""" title="""The Future of Org""" url="""/2024/talks/org-update""" speakers="""Ihor Radchenko""" 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 resources="""<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://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>""" title="""Colour your Emacs with ease""" url="""/2024/talks/color""" speakers="""Ryota Sawada""" 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 resources="""<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://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>""" title="""My journey of finding and creating the “perfect” Emacs theme""" url="""/2024/talks/theme""" speakers="""MetroWind""" 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 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 (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></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"""]]
+[[!template id=sched resources="""<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://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>""" title="""An example of a cohesive student workflow in Emacs""" url="""/2024/talks/students""" speakers="""Daniel Pinkston""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""students""" note="""captioned, video posted, Q&A posted, video: 08:27"""]]
+[[!template id=sched resources="""<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>""" title="""So you want to be an Emacs-fluencer?""" url="""/2024/talks/sharing""" speakers="""Gopar""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sharing""" note="""captioned, video posted, video: 21:40"""]]
+[[!template id=sched resources="""<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://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>""" title="""Transducers: finally, ergonomic data processing for Emacs!""" url="""/2024/talks/transducers""" speakers="""Colin Woodbury""" 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 resources="""<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>""" title="""Saturday opening remarks""" url="""/2024/talks/sat-open""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sat-open""" note="""video posted, video: 04:50"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li>""" title="""Saturday closing remarks""" url="""/2024/talks/sat-close""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sat-close""" note="""video posted, video: 05:49"""]]
+[[!template id=sched resources="""<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>""" title="""Sunday opening remarks""" url="""/2024/talks/sun-open""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sun-open""" note="""video posted, video: 04:37"""]]
+[[!template id=sched resources="""<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>""" title="""Open mic/pad for quick updates etc.""" url="""/2024/talks/open-mic""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""open-mic""" note="""video posted, video: 40:13"""]]
+[[!template id=sched resources="""<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>""" title="""Sunday closing remarks""" url="""/2024/talks/sun-close""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sun-close""" note="""video posted, Q&A posted, video: 01:59"""]]
-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).
+Jump to: <a href="#gen">General</a>
-You can also get this schedule as iCalendar files: <a href="https://media.emacsconf.org/2024/emacsconf.ics">emacsconf.ics</a> - <a href="https://media.emacsconf.org/2024/emacsconf-gen.ics">emacsconf-gen.ics</a> - <a href="https://media.emacsconf.org/2024/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/2024/schedules/>
-
-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-07"></a>
-# Saturday Dec 7, 2024
-[[!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>""" 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=""""""]]
-[[!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="""video: 10:07"""]]
-[[!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="""video: 21:38"""]]
-[[!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=""""""]]
-[[!template id=sched time="""20""" 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-07T15:40:00+0000""" start="""10:20""" end="""10:40""" title="""The Future of Org""" url="""/2024/talks/org-update""" speakers="""Ihor Radchenko and Bastien Guerry""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""org-update""" note=""""""]]
-[[!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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: aindilis</a>""" startutc="""2024-12-07T16:00:00+0000""" endutc="""2024-12-07T16:20:00+0000""" start="""11:00""" end="""11:20""" title="""The Free Life Planner: Empowering lives with Emacs-based AI""" url="""/2024/talks/flp""" speakers="""Andrew Dougherty""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""flp""" note=""""""]]
-[[!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="""video: 22:42"""]]
-[[!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:30:00+0000""" endutc="""2024-12-07T16:40:00+0000""" start="""11:30""" end="""11:40""" title="""Colour your Emacs with ease""" url="""/2024/talks/color""" speakers="""Ryota""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""color""" note=""""""]]
-[[!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: 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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: robin</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=""""""]]
-[[!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: 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=""""""]]
-[[!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: 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: 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=""""""]]
-[[!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: org-transclusion, easy installation, and more!""" url="""/2024/talks/hyperdrive""" speakers="""Joseph Turner""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hyperdrive""" note=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-repro.html">BBB</a>""" startutc="""2024-12-07T20:45:00+0000""" endutc="""2024-12-07T21:05:00+0000""" start="""3:45""" end="""4:05""" title="""Reproducibly building Emacs: “Hey your checksum is the same as mine!”""" url="""/2024/talks/repro""" speakers="""Aaron Grothe""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""repro""" note=""""""]]
-[[!template id=sched time="""10""" q-and-a="""none""" 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="""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="""video: 24:44"""]]
-[[!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=""""""]]</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 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=""""""]]
-[[!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=""""""]]
-[[!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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://pad.emacsconf.org/2024-learning">Etherpad</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="""video: 19:39"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-language">Etherpad</a>""" startutc="""2024-12-08T15:30:00+0000""" endutc="""2024-12-08T15:40:00+0000""" start="""10:30""" end="""10:40""" title="""Immersive language learning with Emacs""" url="""/2024/talks/language""" speakers="""Sebastian Dümcke""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""language""" note=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-org-teach.html">BBB</a>""" startutc="""2024-12-08T15:50:00+0000""" endutc="""2024-12-08T16:10:00+0000""" start="""10:50""" end="""11:10""" title="""org-teach: a minor mode for writing course materials in Emacs""" url="""/2024/talks/org-teach""" speakers="""James Endres Howell""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""org-teach""" note=""""""]]
-[[!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:25:00+0000""" endutc="""2024-12-08T16:40:00+0000""" start="""11:25""" end="""11:40""" 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="""video: 14:09"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-hywiki.html">BBB</a>""" startutc="""2024-12-08T18:00:00+0000""" endutc="""2024-12-08T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""HyWiki: Fast, hyperlinked note-taking with no markup required""" url="""/2024/talks/hywiki""" speakers="""Bob Weiner""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hywiki""" note=""""""]]
-[[!template id=sched time="""10""" 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:35:00+0000""" endutc="""2024-12-08T18:45:00+0000""" start="""1:35""" end="""1:45""" 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=""""""]]
-[[!template id=sched time="""40""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-blee.html">BBB</a>""" startutc="""2024-12-08T19:00:00+0000""" endutc="""2024-12-08T19:40:00+0000""" start="""2:00""" end="""2:40""" 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=""""""]]
-[[!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:50:00+0000""" endutc="""2024-12-08T20:10:00+0000""" start="""2:50""" end="""3:10""" 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="""video: 16:39"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: bardman</a>""" startutc="""2024-12-08T20:25:00+0000""" endutc="""2024-12-08T20:35:00+0000""" start="""3:25""" end="""3:35""" 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=""""""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sharing">Etherpad</a>""" startutc="""2024-12-08T20:45:00+0000""" endutc="""2024-12-08T21:05:00+0000""" start="""3:45""" end="""4:05""" 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=""""""]]
-[[!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:15:00+0000""" endutc="""2024-12-08T21:45:00+0000""" start="""4:15""" end="""4:45""" 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="""video: 26:51"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sun-close">Etherpad</a>""" startutc="""2024-12-08T22:00:00+0000""" endutc="""2024-12-08T22:10:00+0000""" start="""5:00""" end="""5:10""" title="""Sunday closing remarks""" url="""/2024/talks/sun-close""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sun-close""" note=""""""]]</div><div class="cancelled">Cancelled:<ul><li>Graph mode: a major mode to create, edit and display discrete element graphs - John Darrington</li></ul></div> \ No newline at end of file
+<h1 id="dev" class="sched-track Development">Development (8 talks)</h1>
+[[!template id=sched resources="""<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://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>""" title="""Gypsum: my clone of Emacs and ELisp written in Scheme""" url="""/2024/talks/gypsum""" speakers="""Ramin Honary""" 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 resources="""<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://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>""" title="""An experimental Emacs core in Rust""" url="""/2024/talks/rust""" speakers="""Troy Hinckley""" 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 resources="""<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://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>""" title="""p-search: a local search engine in Emacs""" url="""/2024/talks/p-search""" speakers="""Zac Romero""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""p-search""" note="""captioned, video posted, Q&A posted, video: 22:42"""]]
+[[!template id=sched resources="""<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://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>""" title="""Exploring shared philosophies in Julia and Emacs""" url="""/2024/talks/julia""" speakers="""Gabriele Bozzola""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""julia""" note="""captioned, video posted, Q&A posted, video: 09:17"""]]
+[[!template id=sched resources="""<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://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>""" title="""Beguiling Emacs: Guile-Emacs relaunched!""" url="""/2024/talks/guile""" speakers="""Robin Templeton""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""guile""" note="""captioned, video posted, Q&A posted, video: 15:57"""]]
+[[!template id=sched resources="""<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>""" title="""Committing secrets with git using sops-mode""" url="""/2024/talks/secrets""" speakers="""Jonathan Otsuka""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""secrets""" note="""video posted, video: 14:57"""]]
+[[!template id=sched resources="""<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://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>""" title="""Elisp and McCLIM""" url="""/2024/talks/mcclim""" speakers="""screwlisp""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""mcclim""" note="""captioned, video posted, Q&A posted, video: 34:29"""]]
+[[!template id=sched resources="""<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>""" title="""Emacs, eev, and Maxima - now!""" url="""/2024/talks/maxima""" speakers="""Eduardo Ochs""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""maxima""" note="""captioned, video posted, Q&A posted, video: 30:34"""]] \ No newline at end of file
diff --git a/2024/schedule-image.md b/2024/schedule-image.md
index 2927510b..66b3f670 100644
--- a/2024/schedule-image.md
+++ b/2024/schedule-image.md
@@ -1 +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="/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="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="/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="peachpuff"></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="/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="peachpuff"></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="/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="peachpuff"></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="/2024/talks/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(217,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="235" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(248,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="/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="/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="peachpuff"></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="/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="/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="/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="/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="/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="peachpuff"></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="/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="peachpuff"></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="/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="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="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="/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="peachpuff"></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="/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="peachpuff"></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="/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="peachpuff"></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="/2024/talks/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="141" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">language</text></g></a><a href="/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="172" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(201,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="227" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(248,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperbole</text></g></a><a href="/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="/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="431" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(444,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="470" y="15" opacity="0.8" width="62" 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)">blee</text></g></a><a href="/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="549" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(578,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:25- 3:35 An example of a cohesive student workflow in Emacs</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)">students</text></g></a><a href="/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(664,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="682" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(727,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 5:00- 5:10 Sunday closing remarks</title><rect x="752" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(765,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></div> \ No newline at end of file
+<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="/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="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="/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="peachpuff"></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="/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="peachpuff"></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="/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="peachpuff"></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="/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="peachpuff"></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="/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="/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="peachpuff"></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="/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="/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="/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="/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="/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="peachpuff"></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="/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="peachpuff"></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="/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="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="" fill="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="skyblue"></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="/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="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="/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="peachpuff"></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="/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="peachpuff"></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="/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="" fill="peachpuff"></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="/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="peachpuff"></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="/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="peachpuff"></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="/2024/talks/open-mic" title="Open mic/pad for quick updates etc." data-slug="open-mic"><title> 1:00- 1:30 Open mic/pad for quick updates etc.</title><rect x="376" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(421,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">open-mic</text></g></a><a href="/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="peachpuff"></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="/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="/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="" 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="/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="/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="/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="" fill="peachpuff"></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></div> \ No newline at end of file
diff --git a/2024/speakers.md b/2024/speakers.md
new file mode 100644
index 00000000..72e9d9c2
--- /dev/null
+++ b/2024/speakers.md
@@ -0,0 +1,131 @@
+[[!meta title="Conference-day instructions for speakers"]]
+[[!meta copyright="Copyright &copy; 2024 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 multi-monitor setups can be tricky, 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/2024/talks.md b/2024/talks.md
index bfe6ac4c..6bd50d06 100644
--- a/2024/talks.md
+++ b/2024/talks.md
@@ -2,14 +2,10 @@
[[!meta copyright="Copyright &copy; 2024 Sacha Chua"]]
[[!sidebar content=""]]
-We're getting ready for EmacsConf 2024. Missed the proposal deadline but got a great idea anyway? [[Let us know|/2024/cfp]] just in case we can still squeeze you in somehow!
-
-[[How to watch and participate|watch]]
-
-Here's the schedule:
+Thank you for joining us for EmacsConf 2024! Here are the resources:
[[!inline pages="internal(2024/schedule-details)" raw="yes"]]
Want to help make EmacsConf even awesomer? [[Volunteer!|/volunteer]]
-We hope to see you all around on Dec 7-8 for EmacsConf 2024!
+Thanks for checking out EmacsConf 2024!
diff --git a/2024/talks/blee.md b/2024/talks/blee.md
index 971c2af0..7bfa12a2 100644
--- a/2024/talks/blee.md
+++ b/2024/talks/blee.md
@@ -117,21 +117,162 @@ BISOS, ByStar, and the model and the concept of Libre-Halaal Polyexistentials.
About the speaker:
-Mohsen Banan is a software and internet engineer.
-In this talk he describes how he has leveraged
-Emacs as an integration platform to create a
-comprehensive integrated usage environment. In his
-recent book "Nature of Polyexistentials", he
-introduces the Libre-Halaal ByStar Digital
-Ecosystem. Both in the book and this talk, he
-outlines a blueprint and presents initial
-implementations for BISOS (By\* Internet Services
-OS) and Blee (ByStar Libre Emacs Environment).
-Central to his presentation is the positioning of
-Emacs, as the core of Blee.
+Mohsen Banan is a software and internet engineer. He was one of the principal
+architects of the Cellular Digital Packet Data (CDPD) network specifications. He
+is the primary author of two Internet RFCs. He is the principal architect of the
+ByStar Digital Ecosystem and BISOS and Blee. The software and internet services
+that he publicly offers all conform to the definition of Libre-Halaal Software
+and Libre-Halaal Internet Services. All of his public writings are web published
+and unrestricted. He has never applied for a patent. As an expert witness he has
+assisted in legal efforts involving invalidation of a number of patents. He has
+been using Emacs since 1986.
Previous Talks: <https://emacsconf.org/2021/talks/bidi> and
<https://emacsconf.org/2022/talks/mail>
+
+# Discussion
+
+## Questions and answers
+
+- Q: You mentioned that there's two editions: one aimed at
+ westerners, and one for worldwide readers. I'm from Brazil, which
+ edition would you recommend? It's a western country, but you
+ didn't make the distinction exclusive for the second edition, so I
+ 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 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 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.
+ - There is a lot of global growth and collective understanding
+ towards the notion that the direction we're headed in (i.e.
+ American digital ecosystems) is dangerous.
+ - We should revisit the entirety of the strategy.
+ - \[For the questioner\] Can you clarify? (I'll write to you :) )
+- 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? My
+ computing education at school amounted to learning how to use the MS
+ Office suite - ie, the opposite of lasting, open knowledge.
+ - 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".
+ [ 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
+ changed from what it used to be, at least until it they came up with
+ a series that honored what Star Trek used to be. Does this
+ intersect?
+ - A: Not sure if I fully get the point.
+ - On my criticism of the FOSS movement:
+ - The idea is that we have jumped on the FOSS movement and
+ recognized it as an alternative, but we haven't looked
+ deeply enough to see if our own philosophy and movement have
+ problems.
+ - The problems that I note is that the FOSS movement does not
+ recognize clearly and explictly that the entirity of the
+ intellectual property system is flawed.
+ - It's only now that we are seeing the FOSS movement is
+ broader than the Western world.
+ - The labels of Free Software and Open Source are not
+ necessarily correct.
+ - We are not paying enough attention to establishing
+ relationship with society.
+ - There's a whole chapter in the book dedicated to this topic.
+ - \[To the questioner\] Clarification please
+ - The point of the question was even though a media company
+ owned Star Trek they couldn't do what they wanted with the
+ series if you involve other people. The question was also
+ open ended so you did answer it by taking it where you
+ wanted it to go.
+- Q: I am involved in Politics in my country, my party is very
+ sympathetic to FOSS ideals and I've been pushing for better policy
+ with regards to public procurement. Do you have any recommended
+ reading materials designed for such an audience?
+ - A: The idea is that my own book would be an excellent resource. I'd say the bibliography in the book contains various other pointers that could be quite useful.
+- Q: How can we promote a culture of more active thought with regard to
+ the societal impacts of ethical and philosphical choices made in the
+ wider FOSS community?
+ - A:
+
+## Notes
+
+- Am I too young to understand? Maybe I need to read the book
+ - Aah I get it!! IPR forces single ownership of what are
+ polyexistentials
+- From YouTube: ​​gnome is not halal. ​​gnome is western
+ - Did he elaborate on how GNOME is haram by his
+ definition? Oh, sorry, nevermind, the quote on GNOME isn't from
+ the speaker.
+- interesting. and - obviously - radical thoughts. not sure
+ about if Americanism critique is the core, but moreover a general
+ critique of (extreme) capitalism mechanism. but that's certainly
+ not merely a "Western" issue. imo
+- Okay, I have to admit, I love this
+ political/philosophical dissection of software's impact on
+ society.   Very interesting.
+ - It's like an extension of the GNU (free software)
+ thought. I think I need more literature on that topic\...
+ - Essentially a free, open-source and
+ privacy-respecting ecosystem akin to those provided by the big
+ tech companies (Google, Microsoft, Apple).
+- Great talk on Polyexistentials. Awesome to see
+ EmacsConf including international voices .
+- He hit the nail on the head:  This point has been on
+ my mind: Capitalism creates artificial scarcity and then
+ manufactures junk to fill it.  How can that be overcome?  So that we
+ get software that is actually needed \...
+ - 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
+ Capitalism" predospes a free market which would limit this
+- The blee panel actually is cool!
+- Very thought-provoking talk!
+- Dovetailing nicely / with other talks from EmacsConf 2024
+ - Working **on** Emacs vs working **for** Emacs
+ - Peter mentioned "too much choice"
+ - Mixing org-mode with programming languages
+ - org-babel has successfully integrated org-mode with all
+ kinds of languages
+ - Has happened within the context of literature programming
+ - cf. Literate Programming for the 21st Century (EmacsConf
+ 2024)
+ - Traditional programming mixed with org-mode
+ - polymode is key to that
+- Several concepts which were introduced like "dynamic blocks
+ everywhere" and "COMEEGA" would probably require other talks
+- Probably my favourite talk of the event
+- Wonderful talk!
+- This presentation gets better and better.
+- 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 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
+- YouTube comment: Dude was cooking with this one 🔥🔥🔥🔥
[[!inline pages="internal(2024/info/blee-after)" raw="yes"]]
diff --git a/2024/talks/casual.md b/2024/talks/casual.md
index c64aec29..b940d859 100644
--- a/2024/talks/casual.md
+++ b/2024/talks/casual.md
@@ -24,6 +24,132 @@ About the speaker:
Charles Choi has been an Emacs user since 1989 but did not get around to learning Elisp until 2022. He possesses formal knowledge of computers with a Ph.D. in Computer Engineering received from the University of Virginia in 1997. He is from and continues to live in San Francisco.
+# Discussion
+
+## Questions and answers
+
+- Q: I wonder whether casual can only be used with the packages you
+ mentioned or whether it can be used with whatever package you like?
+ e.g., can I use causal with AUCTeX?
+ - A: More the latter; can the questioner clarify the question?
+ - People are free to fork and iterate over casual
+ - transient.el already has mechanism for modifying an existing
+ transient to redefine the bindings over the definition
+- Q: \[related to the previous\] 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?
+ - A: 
+- Q: Does Casual have a log where you can see what commands were
+ invoked?  This is always available via M-x view-lossage or via
+ command-log-mode, but I\'m wondering if it can do for Emacs commands
+ what Magit\'s process buffer (\$) does for learning Git commands. 
+ (Leo just spoke about this.)
+ - A: That just works. (But try keycast-log-mode instead of
+ view-lossage.)
+- Q: Is there a setting to close menu after executing command?
+ - A:
+- Q: What modes are you working on at the moment for casual / are excited to explore?
+ - A:
+- Q: Why not improve which-key (which seems to be included in Emacs 30
+ by default) to accommodate for your very slight differences instead
+ of reinventing the same thing from scratch in an incompatible way?
+- \@majorgnu on YouTube: This is great! Emacs\'s plethora of powerful
+ functionality really needs a better way to surface itself to users
+ and this is a great step in that dirrection. I do have a few
+ thoughts, though: 
+ - Is there a convenient way for a user in a transient to get more
+ information about a menu entries? Specifically: the normal
+ keybindings (if available) and command documentation. 
+ - It could be useful to gather and display statistics about menu
+ usage. Imagine being able to generate a personalized keybinding
+ cheat sheet with the menu items you use the most!
+- Q: Is there a way to update a part of a transient menu?
+ - A: menus can be refreshed
+ - But that refreshes the whole menu
+ - Okay, I thought so. I've been calling (transient-setup) in transient infixes where required, but occasionally it's slow. And in every case it throws away the values of all the other infixes that have been set
+## Notes and feedback
+
+- You can also use the menu from the keyboard with F10 and arrow keys. I turn the menu off, but I sometimes use it anyway with F10.
+- is that fvwm?
+- I disagree that searching for stuff in menus is easier than remembering commands. It's probably easier to learn, but not easier to use once you know them.
+ - worst of all: searching in a hierarchical effing hamburger
+ - Hamburger menus make sense on extremely small screens, not on other screens.
+ - yeah, I don't think updates are that granular
+- 2 hour Calc talk when?
+- I'm really wowed by your talk
+- this was such a great talk
+- I want casual support for more modes :) guess I need to do that, then
+- The enthusiasm around casual always surprises me, because all the stuff is documented and easy to find if you read the manual and use the help system :(
+ - and can remember it all! with casual, you don't *need* to
+ - (and in time, use will nail it into an aging memory)
+ - I don't use casual, but the obvious problem with the manual/help system is that you still have to memorize it all
+ - Even if it just means memorizing that it exists in the first place
+ - yeah. I use org like a savage because I only need it a few times a month and I can only remember about 5% of its capabilities...
+ - and I bet most people are like that for most modes they only use occasionally.
+ - You can look a lot of commands up using apropos, you don't need to memorise everything?
+ - But I also set transient-show-popup to nil
+ - apropos is so *clumsy* compared to transient though
+ - there's a nice benefit to having it there and callable by one more keystroke
+ - but then I grew up with WordStar and have long missed its menu/keybinding stuff
+ - Consider less commonly used commands like transpose-region or repunctuate-sentences. How would the user think to even look for commands that do these things? If they do remember, then they have to look up the keybindings every time they use them until it becomes muscle memory. For rarely used commands like these it might never become muscle memory.
+- But a question of mine is do you use and make use of transient-default-level?
+- There's a repunctuate-sentences?!
+ - Case in point. if repunctuate-sentences was in the casual editkit menu on text operations there would be no discovery or memorization issue.
+ - Yes, it is very useful when arguing for double-spacing.
+ - oooh, useful! I'm a newbie though, only been using emacs since 1992 so of course I hadn't discovered that yet :)
+ - in my case, overriding my single-space muscle memory when contributing to double-space-end GNU projects :)
+- that's a little like why I want some kind of embark/cmap thing too, so I can have friendly menus that are scoped to the type of thing at point
+- to the extent post-its still serve a function for much simpler things for most people, contextual surfacing of what's possible serves (and not the firehose, the select few) makes similar sense to me.
+- I want to push back on the point that Transient gives you discoverability for free. Perhaps I am too much of a zoomer, but a big menu with a lot of options is just too much information at once for me. The irony is that I often cannot use isearch/occur to search the text buffer as one would expect from Emacs to.
+ - Similarly, I do find that with my embark menus, I occasionally use C-h to then search for a command with completion
+ - I'm with you on the disadvantages of transient -- it breaks the unspoken Emacs contract of treating every buffer the same. But that's unrelated to the fact that it helps many people with the discoverability and memorization issues.
+ - I think the poweruser vs casual user optimization was answered in the naming choice by Charles :)
+ - doesn't vertico also break this unspoken contract, karthik?
+ - For me that speaks to a deeper contradiction in Emacs..
+ - yes :( I much prefer vertico's predecessor for that reason, but it's dead :(
+ - to a much lesser extent. The minibuffer prompt itself works like a regular buffer
+- if casual is not dedicated to powerusers, it's unfortunate that it does not help its users to become powerusers by disagreeing with some key bindings, i.e. it has different bindings from default emacs
+ - that argument wouldn't go far with the Doom/Spacemacs people though, with their "non-default" default bindings and such
+- I played around with an experiment to write a small alternative to Casual that would re-use my quick-help "framework" to extract recommended bindings from the current keymap.
+- NullNix: i mean, for vertico, this is just the default. you can easily tell vertico to use a buffer instead.
+- You can isearch inside the minibuffer prompt when using Vertico for instance
+ - can you?! new feature in the last year, perhaps? will look again
+ - not the first time my ignorance has torpedoed me
+ - ok i agree with your latest point but still minibuffer is different than other normal buffers imho :)
+ - Why is it different? The minibuffer is just a buffer, no reason it should break the Emacs contract.
+ - Vertico does not take over the "event loop" like transient does -- not sure how to describe this correctly. So most Emacs commands will work from inside Vertico, especially once you enable recursive-minibuffers
+ - I meant you can run regular emacs commands on the prompt "line" in the minibuffer when using Vertico
+- mct looks interesting...
+- karthik: M-x C-s does not behave like i-search in a normal buffer for me, using vertico
+- +1 for edebug, that would be great
+- wonders about gud and gdb interfaces -- would definitely benefit
+- (poke has already gained a transient menu system :) )
+- Doesn't Ediff present a help buffer at the bottom?
+- yes, but it's so small it's easily overlooked on modern big screens
+- yes, ironically ediff has an anemic one already, and I don't see people criticizing it
+ - Heh, modern screens means big, right? On the other hand, on non-modern screens (small) transient buffers take over too much of the screen :)
+ - honestly I wonder if I should rejig ediff to use transient :)
+ - I can recommend (setopt ediff-window-setup-function 'ediff-setup-windows-plain)!
+- yeah, did that a loong time ago, but most people haven't...
+- The memory and cognitively impaired if merely due to aging thank you Charles, that's not just you
+- hear hear
+- there are also menus :)
+- If you use Avy, try using an Avy command when running find-file using Vertico. You'll see Avy jump candidates in the current text of the minibuffer prompt, and you can jump there.
+- Indeed, but Charles addressed this in clarification of where Casual stands in the design space (vs menus, M-x, etc), namely context-specific keyboard-driven interactive use where some toggling of args can stick while you build a command (i.e. Transient)
+ - menus are also context-specific actually
+ - that said, I agree that transient is an alternative interface with various advantages
+ - it is just not the only way to learn Emacs commands
+ - And menus are also keyboard driven, as M-x tmm-menubar shows
+ - Indeed, I just wanted to point out that if ever Transient fills an interesting/useful point in design space, so those its generalized application to other modes (vs Magit)
+- that said, I agree that transient is an alternative interface with various advantages
+- it is just not the only way to learn Emacs commands
+- And menus are also keyboard driven, as M-x tmm-menubar shows
+- time for a keyboard upgrade, i can't be bothered to type C-c c or M-x anymore either
+- YouTube comment: Great presentation! I've been using Casual since it arrived and have been very happy with it; it makes working with emacs much easier. I now also create transients for commands I use, neatly grouped in categories. Transients: life saver.
+- YouTube comment: This is great! Emacs's plethora of powerful functionality really needs a better way to surface itself to users and this is a great step in that direction. I do have a few thoughts, though:
+ - Q: Is there a convenient way for a user in a transient to get more information about a menu entries? Specifically: the normal keybindings (if available) and command documentation.
+ - It could be useful to gather and display statistics about menu usage. Imagine being able to generate a personalized keybinding cheat sheet with the menu items you use the most!
[[!inline pages="internal(2024/info/casual-after)" raw="yes"]]
diff --git a/2024/talks/color.md b/2024/talks/color.md
index e302c691..ba01397c 100644
--- a/2024/talks/color.md
+++ b/2024/talks/color.md
@@ -1,5 +1,5 @@
[[!meta title="Colour your Emacs with ease"]]
-[[!meta copyright="Copyright &copy; 2024 Ryota"]]
+[[!meta copyright="Copyright &copy; 2024 Ryota Sawada"]]
[[!inline pages="internal(2024/info/color-nav)" raw="yes"]]
<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
@@ -7,16 +7,16 @@
# Colour your Emacs with ease
-Ryota (he/him) - Pronunciation: Ree-yo-tah, https://hachyderm.io/@rytswd https://x.com/rytswd
+Ryota Sawada (he/him) - Pronunciation: Ree-yo-tah, https://hachyderm.io/@rytswd https://x.com/rytswd
[[!inline pages="internal(2024/info/color-before)" raw="yes"]]
Emacs comes with various themes to pick from, and there are myriad
-different themes out on the internet. Even when you choose a theme, from
-there, you can make your exact adjustments to add or remove certain
-colours. Emacs provides you so much control over how you work, write, code,
-and everything in between. You are certainly left equipped with all the
-controls for your theme as well.
+different themes out on the Internet. After choosing a theme, you can make
+any adjustments to add or remove certain colours exactly as you wish. Emacs
+provides you so much control over how you work, write, code, and everything
+in between, including the colour choice. You are certainly left equipped
+with all the controls for your theme as well.
However, when it comes to colour, there is a bit of difficulty: RGB.
Hexadecimal colour codes are ubiquitous and relatively easy to understand.
@@ -24,14 +24,19 @@ Yet, they are difficult to work with, especially when you need to make
different shades and variants. In recent years, CSS started to support not
just sRGB (standard RGB), but other colour spaces such as HSL, Oklab, etc.
With Emacs, we also have a great set of tools from color.el, as well as
-this amazing package called ct.el (<https://github.com/neeasade/ct.el>),
+this amazing package called ct.el (<https://github.com/neeasade/ct.el>)
In this talk, we will have a quick look at different colour spaces than
sRGB, namely HSL and LCH. We will check out how ct.el can make a set of
-colour shades and variants at ease, and how they can help defining themes.
+colour shades and variants at ease, and how they can help define themes.
Finally, Ryota will share his own theme called Hasliberg Theme, which is
using the full power of LCH.
+Resources (will be public starting Dec 7):
+
+- <https://codeberg.org/rytswd/emacsconf-2024>
+- <https://github.com/rytswd/hasliberg-theme>
+
About the speaker:
Ryota started his Emacs journey more than a decade ago, but was forced to
@@ -42,6 +47,49 @@ his Emacs looks and works better than many other editors. He works for Civo
as a Principal Engineer.
+# Discussion
+
+## Questions and answers
+
+- 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?
+ - A: Started the journey just for myself, and didn't think this
+ would be useful for others.
+ - A: Making it a library is definitely something that I can think
+ about.
+- Q: Can we have a dark as well as light theme variations made from your theme?
+ - A: You can customize the code easily into dark, light and change
+ something based on someone's mood. Keep in mind that it is a
+ personal theme, so customize as you see fit.
+
+## Notes
+
+- Interesting idea to be inspired from tailwind and
+ frontend dev, thanks for talk
+- [https://github.com/alphapapa/prism.el](https://github.com/alphapapa/prism.el)
+ has some interesting colour experiments as well
+- i felt about same with the christmas tree colored
+ code editor
+- annoyance is a great motivator for learning Emacs Lisp
+- Yay fellow Dvorak user!
+- [https://github.com/rytswd/hasliberg-theme](https://github.com/rytswd/hasliberg-theme)
+- Thank you everyone for tuning in! Also my slides are
+ available at
+ [https://codeberg.org/rytswd/emacsconf-2024](https://codeberg.org/rytswd/emacsconf-2024)
+- Contributing these developments back to ct.el sounds like a really fantastic idea, and I would really love to see it 🙂 I would love to start writing my own themes using this strategy
+- hasliberg-theme-use-dark-nature-colour-palette (and a dark-red variant) is going to be useful for dynamically switching in as I'm working with remote systems e.g. staging and production systems
+- i like that type of usage scenario
+- Fellow orange fan here btw ;)
+- Ryota must have used those old skool CRT terminals that had orange as their primary colour for orange to be his favourite colour :)
+ - bernstein color we used to say in German for that type of CRT orange
+ - haven't used it myself, but remembering this retro terminal project, which features some nice looking oldschool term/color schemes :) https://github.com/Swordfish90/cool-retro-term
+- rytswd: Thanks for the support everyone! Now the world knows I'm an orange person ;)
+
+- Great talk! Thank you 🙂
+- Excellent talk, thanks!
+- Beautiful theme
+- Thanks :)
+- Awesome job Ryota, thank you for sharing!
+
[[!inline pages="internal(2024/info/color-after)" raw="yes"]]
diff --git a/2024/talks/emacs30.md b/2024/talks/emacs30.md
index 20a163e1..5fbfec44 100644
--- a/2024/talks/emacs30.md
+++ b/2024/talks/emacs30.md
@@ -13,6 +13,77 @@ Philip Kaludercic
+# Discussion
+
+## Questions and answers
+
+- 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)
+ - A: One package that was being discussed was **macrostep**
+ ([https://github.com/emacsorphanage/macrostep](https://github.com/emacsorphanage/macrostep)).
+ - **Magit** is an ongoing discussion, but I don't know of any
+ concrete progress.  Generally the best way to help is just to
+ send a message to emacs-devel and keep to it.  Feel free to CC
+ me to help!
+- Q:When thinking about using Emacs on android I start realising all
+ the other software I also want with it. For example pdf-tools wants
+ a small additional emacs specific program to be installed and
+ notmuch wants notmuch. Any way to get the goodness of Emacs for
+ android with this other stuff? Using nixos or guix, nix-on-droid to
+ make an apk with extra stuff?
+ - A:
+- Q: Does package-vc download a tarball from the specified git repository or clone the repository itself?
+ - A: Clones the repository (that's the -vc in the name)
+ - Compare with vc-clone (which is now exposed as an interactive
+ command compared to before)
+- Q: How is the new behavior of M-q in prog-mode (prog-fill-reindent-defun or something like that) different from the behavior of C-M-q (indent-pp-sexp) in older Emacs versions?  (My apologies if indent-pp-sexp is not bound to C-M-q by default, I can't tell)
+ - A: The difference is in the behavior when the cursor is inside a
+ string.
+- Q:Any plans for Emacs running in IOS?
+ - A: Probably not. Emacs support on Android is completely free. To
+ my understanding, you need Xcode to build iOS stuff.
+- 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? I gather that most users of
+ Emacs are still on non-free platforms and will remain to be there.
+ - A: I don't know about the last point if that's true; there are
+ no statistics on the matter. I know Corwin is involved in the
+ Windows port. Someone has to do the work. Eli is on a Windows XP
+ system. As long as he's doing that, there's going to be
+ Windows some way or another.
+ - Corwin: accessibility issue (ex: maybe that XP system is
+ what they can afford, or what they need to use for work)
+ Concerning when we hear about black holes in the braintrust
+ for support for these things.
+ - And the same thing applies for macOS.
+- Q: I'm a bit confused about what version of org I should write
+ towards, because there's org (in emacs) org (in elpa) org (in org)
+ etc... Is there a best practice on what-org-to-use when following
+ emacs-latest?
+ - A: Depends on... my rough heuristic is if you're using the
+ latest features of Org, use the one on ELPA, maybe. Personally I
+ just use the one bundled in Emacs.
+
+## Notes and feedback
+
+- Loving to use all of these changes.
+- Graphical Emacs in Android is awesome
+ - that seems more usable than i thought it would be
+ - swipe left/right for next buffer?
+ - I was able to load my custom configuration on Android by traversing through the directories with M-x shell.
+- Oooo, which-key is so helpful for beginners. It fits right in to the core. Great addition!
+ - that would have saved me a lot of time years ago haha
+- An alternative to both which-key and prefix-help-command (which pkal is demoing right now) is embark-prefix-help-command
+ - thanks, I was not aware of it (I still "M-x embark-..." or preset bindings from completion/vertico candidates) - how does it differ from prefix-help-command?
+ - This is my favourite change, but not all packages are compatible with it...
+ - It offers a completing-read interface to complete the partial command.
+ - completion within completion within completion within.. love it
+ - (setq prefix-help-command 'embark-prefix-help-command)
+ - Will try it for a while, thanks for the pointer
+ - it's completion all the way down
+- use-package :vc is much welcome! (as one coming from Clojure's deps, such a breeze)
+- great talk!
+- YouTube comment: Really good rundown of the changes. Thank you! Looking forward to start using 30.
+- YouTube comment: I would like to know when EMACS 30 will be officially released? I looked around Arch repos and EMACs website; I just see EMACS 29.4. Also I did install from the Google Store the EMACs editor on my Samsung S22, it works but one problem is I can't access file directors in the home directory. It is very annoying, yet the EMACs editor works well. There is so much security and permissions on these Android devices, makes it very annoying just to open a text file.
[[!inline pages="internal(2024/info/emacs30-after)" raw="yes"]]
diff --git a/2024/talks/guile.md b/2024/talks/guile.md
index e00b075a..1bd72def 100644
--- a/2024/talks/guile.md
+++ b/2024/talks/guile.md
@@ -7,38 +7,41 @@
# Beguiling Emacs: Guile-Emacs relaunched!
-Robin Templeton (they/them) - IRC: robin, - robin on libera.chat - Matrix: @terpri:matrix.org - Mastodon: @lispwitch@octodon.social - Website: <http://terpri.org/>, <mailto:robin@terpri.org>
+Robin Templeton (they/them)
+
+IRC: robin on libera.chat; Fediverse: [@lispwitch@octodon.social](https://octodon.social/@lispwitch); Matrix: [@terpri:matrix.org](https://matrix.to/#/@terpri:matrix.org); website: <http://terpri.org/>; mail: <mailto:robin@terpri.org>
[[!inline pages="internal(2024/info/guile-before)" raw="yes"]]
-The Guile-Emacs project seeks to develop new foundations for Emacs to
-serve as the basis for the next forty years of development. It
-integrates Emacs and Guile by providing a new Elisp implementation based
-on Guile's Lisp-oriented compiler tower and runtime environment.
-Guile-Emacs is being developed by a new, publicly-funded democratic
-workers cooperative, founded to support development of Guile-Emacs
-itself and Free Software in general. We envision Guile and Emacs being
-co-developed in a sort of mutualism, along with other components of the
-GNU system, and for Emacs to become a central part of what we describe
-as "a Lisp machine for the 21st century", and to help fulfill the
-promised role of Lisp outlined in the original GNU Manifesto.
+[The Guile-Emacs project](https://guile-emacs.org/) seeks to develop new
+foundations for Emacs, building on forty years of development to prepare
+the way for the next forty. Guile-Emacs brings Emacs and Guile together
+by providing a new Elisp implementation based on Guile's compiler
+technology, serving as the basis for a more expressive and extensible
+version of Elisp. We envision Guile and Emacs being co-developed in a
+sort of mutualism, with Emacs becoming the heart of a "Lisp machine for
+the 21st century" and with Guile fulfilling the promised role of Lisp
+from the GNU Manifesto.
+
+Guile-Emacs is now being developed by a democratic workers cooperative,
+focused on development of the project itself and related components of
+the GNU system.
In this talk, I'll cover:
-- What exactly is Guile-Emacs, in terms of its goals and general
- architecture? What is it, and what is it not? Why is Guile in
- particular well-suited to the goals of the project?
-- What is its history and current status? What can one already do with
- Guile-Emacs?
-- What are the immediate tasks for Guile-Emacs development, and how will
- they improve Guile-Emacs itself and Emacs in general?
+- What is Guile-Emacs, in terms of its goals and general architecture?
+ Why is Guile well-suited to the goals of the project?
+- How did the Guile-Emacs project begin, and what is its status today?
+- What are the immediate tasks for Guile-Emacs development, and how
+ will they improve Guile-Emacs itself as well as its component
+ projects?
- How are our long-term goals for Guile-Emacs connected to the spirit of
Emacs and the GNU Project in general? What do we envision for the
future of GNU Emacs?
-- How can I get involved with and support this effort?
+- How can you get involved with and support this effort?
-Along the way, we'll show brief code samples and live demos of Guile's
-Elisp implementation and Guile-Emacs itself.
+Along the way, we'll show live demos of Guile-Emacs itself and its
+extensions to Emacs Lisp.
About the speaker:
@@ -55,6 +58,136 @@ significant role for Emacs within the GNU Project, becoming a central
part of a "Lisp machine for the 21st century".
+# Discussion
+
+## Questions and answers
+
+- 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?
+ - A: Fibers do not provide thread-safety for any of the existing
+ data structures.  They are useful for building things that
+ don't use Emacs data structures, like a network client that
+ reads a "stream".  Fibers can introduce new data structures
+ that are thread-safe, like "thread-local buffers".
+- Q: <ramin\> You mentnioned that Emacs is roughly 25% written in C.
+ Do you have a rough idea of how much of Guile is written in C? Could
+ it be an improvement to make libguile a dependency of Emacs?
+ - A: The problem is not the quantity of C, but that there is C
+ involved at every single level/layer of computation in Emacs. 
+ This makes it difficult to use concepts like delimited
+ continuations, that can make it easy to implement Emacs concepts
+ more simply.
+ - A: About guile: it's about 1/2 C.
+- Q: A Common Lisp implementation for Guile sounds really cool! Is there already work on this underway?
+ - A: Yes, Robin is working on it, but focuses more on research on
+ how to do a polyglot lisp environnement where elisp and
+ common-lisp can work together (with lisp 1 vs lisp 2 issues with
+ different name spaces, package and module system interaction,
+ \...). If you are interested, the guile project will work on it.
+- Q: As someone who's kinda new to the concept of Guile, is the
+ primary goal to transpile Emacs Lisp into Guile bytecode rather than
+ primarily focusing on adding support for writing code in Guile's
+ Scheme interface in particular? 
+ - A: (not yet answered)
+- Q: Did switching from guile 2 to 3 give any performance benefits?
+ - A: Not benchmarking stuff here yet, because guile emacs has too
+ much overhead involved in conforming to Emacs.  Have not noticed
+ a perceptible change.  Based on the Gabriel benchmark results,
+ it might have benefited a  bit, but for Emacs we don't know
+ yet.  Lowering the overhead is the best place to focus on to
+ optimize guile-emacs.
+- Q: Do you know if the Emacs maintainers are interested in switching to Guile as the engine for Emacs Lisp?
+ - A: Previous maintainers were cautiously optimistic and
+ interested. Issues might be cross-platform compatibility.
+- Q: Do you think guile-emacs will be able to use or (collaborate
+ with) some of the other awesome projects around Emacs-Lisp, like the
+ gypsum project presented earlier today, or Andrea Corallo's efforts
+ to make Emacs-Lisp more suitable for native compilation? Or even
+ something like the renewed PreScheme efforts?
+ - A: Gypsum has a different focus. Guile tries to improve lisp
+ instead of replacing lisp in any way. But some code can be
+ shared, especially if some parts of emacs are rewritten in lisp
+ - A: For libgccjit: it is accelerating the interpreter, which is
+ not great in the first place. So no direct relationship.
+ - A: For prescheme: it  is a useful tool to look at, making it
+ easier to upstream one day.
+- Q: SBCL, \...You mentioned Robert Strandh's SICL along with SBCL---does that work help with the implementation of CL in Guile? 
+ - A: Time consuming part are the DSL from common lisp. So they can
+ be used. No plan on sharing code yet, as they are open-source.
+- Q: Can you comment more on relation with hoot project and advantages
+ that might bring to guile-emacs?
+ - A: Hoot is only tested on scheme decompilation. But it is a
+ completely different project. One could image compile emacs to
+ wasm and maybe with a different garbage collector.
+- Q: Thoughts on the gui situation for guile-emacs? A dom gui backend would be amazing
+ - A: (not yet answered)
+- Q: is the "initial rebase work repo" the latest/preferred archive? i sent two patches to guile-emacs-devel to get emacs to link, but cannot get it to dump just yet: No applicable method: function-documentation
+
+## Notes and feedback
+
+- [https://guile-emacs.org/](https://guile-emacs.org/)
+- Some more motivation: avoid FFI to increase performance and allow
+ for more optimizations (including type annotations)
+
+- Love to hear reduction of reliance on C highlighted as a project goal, it's something I've brought up as a "third perspective" vs performance and language ergonomics in this weeks discussions
+- my other go-to discussion contrib is "is anyone watching what Larry Valkama is doing?"
+- is guile the core of gnu guix too ?
+ - yep!
+ - well, there's a bit of C++, bits of shell and make, yk -- more complex under the hood >u<
+ - but it's the core in spirit
+ - this is really interesting because this means gnu guix can use guile emacs and have better performance / features ? like define the system and emacs too with guile right? (I never used gnu guix but this talk makes me one to install it right now :P)
+ - I'm not sure there are really any implications for GUIX here, besides more eyeballs on Guile
+ - robin: there may be a guix connection in that object-capability-based secure IPC may enable guile-emacs to have fairly deep integration with other guile programs like guix and shepherd
+- Ahhhh~ I love to see tail-call optimization 😊
+- Is the goal to keep rebasing forever? Seems like a lot of work without little benefit
+ - Ah here's the slide addressing that...
+- Woohooo wasm via hoot!
+- i've def heard from a lot of guix users who are primarily interested in using one language everywhere, just on the edge of the performance and lang-interop disscusions
+- why would you want to use emacs in a web browser?
+ - maybe because you can use emacs shortcuts on it ?
+ - wasm != web browser
+ - there's wasi
+ - exactly, Larry mentions emacs on wasm in his readme too, but i try not to use the web as my example when talking about porting away from C bc i find alternatives more compelling
+ - though tbf, *i* would love to be able to hit a shortcut from org-roam-ui and have it open emacs in-browser like vscode on github
+ - Not convinced that browsers equipped with WASM and WASM-GC are actually more portable than Emacs today
+ - it sucks that browser shortcuts conflict with Emacs keybindings
+ - That's due to the browser, not the underlying engine tho
+- Ahhh you thought the CL bit would piss us off! Joke's on you, love CL ;)
+- not as much as you might expect! boot-9.scm is a great place to look to see the world being built up in parens
+- robin: thanks for watching my guile-emacs talk everyone! just one update, the -announce list may not be working properly yet, so please subscribe to guile-emacs-discuss if you want to stay informed about future guile-emacs work
+ - (the hcoop.net admins should be back to fix that in a few hours)
+- robin: and thank you corwin for convincing me to do an emacsconf talk in the first place :)
+ - Thanks so much, robin and corwin!
+
+Feedback:
+
+- 👏👏👏👏
+- Great! Thank you
+- Utterly fantastic. This is so, so exciting!
+[13:41:59] * gs-101 claps
+- 👏👏👏
+- 👏👏👏
+- 👏👏👏
+- 👏👏👏
+- 👏👏👏👏
+- Thank you Robin!
+- 👏👏👏👏
+- *applause* the dead are rising!
+- This bring back memories of Smalltalk implementations being written in Smalltalk after initially being written in C.
+- I utterly love Common Lisp 😊
+- cl-lib is already a fifth of quality elisp (/s?)
+- heh I feel this pain trying to get Wayland, CLIM, and OpenGL working
+- in CL
+- 👏 👏
+- O_O
+- I really liked robins talk
+- great work, great talk -- thank for your work O)
+- short and sweet, thank you
+- +1
+
+- <3
+- lounge-204, there may be a guix connection in that object-capability-based secure IPC may enable guile-emacs to have fairly deep integration with other guile programs like guix and shepherd
+- robin: speaking of security, guile-emacs will have a very straightforward answer to problems like https://eshelyaron.com/posts/2024-11-27-emacs-aritrary-code-execution-and-how-to-avoid-it.html -- the application of the slogan "if you don't have it, you can't use it". ordinary elisp coding style doesn't necessarily allow for automatic detection of that kind of threat, but in that specific case we would use our CL dialect's reflection mechanisms to provide an environment in which the macroexpander, at least when used for code completion and similar, simply would not have the ability to produce side effects in the global environment
+- YouTube comment: we're so back bless you robin
[[!inline pages="internal(2024/info/guile-after)" raw="yes"]]
diff --git a/2024/talks/gypsum.md b/2024/talks/gypsum.md
index 3ee5a75a..3ee7c4cd 100644
--- a/2024/talks/gypsum.md
+++ b/2024/talks/gypsum.md
@@ -9,8 +9,9 @@
# Gypsum: my clone of Emacs and ELisp written in Scheme
Ramin Honary (he/him)
+ - Source code: <https://codeberg.org/ramin_hal9001/gypsum>
- E-mail: <mailto:ramin.honary@gmail.com>
- - ActivityPub: @ramin_hal9001@fe.disroot.org
+ - ActivityPub: [@ramin_hal9001@fe.disroot.org](https://fe.disroot.org/@ramin_hal9001)
- Website: <https://tilde.town/~ramin_hal9001>
[[!inline pages="internal(2024/info/gypsum-before)" raw="yes"]]
@@ -284,7 +285,7 @@ Example program
- Homepage :: <https://tilde.town/~ramin_hal9001>
-- Codeberg :: <https://codeberg.org/ramin_hal9001>
+- Codeberg :: <https://codeberg.org/ramin_hal9001/gypsum>
- This presentation :: <https://emacsconf.org/2024/talks/gypsum/>
@@ -361,6 +362,103 @@ professionally.
You may also like another talk by this speaker:
[EmacsConf - 2022 - talks - Build a Zettelkasten with the Hyperbole Rolodex](https://emacsconf.org/2022/talks/rolodex/)
+# Discussion
+
+## Questions and answers
+
+- Q: Would it be possible to support a GUI toolkit other than GTK? Like how GNU Emacs still supports Lucid
+ - A: Yes this planed by having proper backend: emacs-lisp running
+ into a module and the GUI being another module. So normalized
+ communication. Currently GTK being standard implementation, also
+ done here.
+- 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?
+ - A: Plan is to keep up-to-date with new releases. So new GNU
+ feature should be included with each release. But also intend to
+ have support for pure Scheme features.
+- Q: If Emacs Lisp support for Guile was documented
+ better, could you be nudged/convinced to (re)start using, and
+ contributing to that?
+ - A: Compatibility is the most important things. Documentation not
+ sufficient to convince users to switch.
+ - IRC: Where do you think elisp documentation should be improved? I've always found the built in documentation to be excellent
+ - janneke is referring to Guile's ELisp support, I believe; sorry, i meant the documentation of guile's elisp backend
+- Q: Why is being able to interpret all of \`init.el\` an useful goal?
+ Sure, there is a lot of code written in elisp - can we consider a
+ translator like utility to convert elisp to scheme, once guile-emacs
+ becomes a reality? 
+ - A: Probably, but first step is getting the interpretter working.
+ Emacs-lisp basically compiled down to intermediate
+ representation of the guile compiler \[this was one of the hard
+ things to get to work\]. But unclear how this works for other
+ schemes. Best solution probably translation elisp -\> scheme,
+ but this is not the approach that was done. Would be very cool
+ to have. Feel free to give a PR.
+- Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)? 
+ - A: Will be tricky. If loading directly into the elisp process,
+ very hard. Cairo could help, but you need emacs lisp binding on
+ top of that. For magit, you can call regular process
+ communication via stdin/stdout; so you can reuse existing scheme
+ libraries. Dynamic libraries not a goal. Rg/ripgrep probably the
+ same with process communication.
+- 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?
+ - A: Guile is a scheme. Not sure what you mean.
+ - A: Check presentation later of Robin Templeton ("Beguiling
+ Emacs: Guile-Emacs relaunched!"): the attempt exists by
+ translating elisp to guile. 
+ - thank you
+
+- Q: Not really a question, but how about Schemacs as a name?
+
+- - A: Cool name, but did not check if it is already used. Feel free
+ to discuss by email.
+- 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?
+
+## Notes
+
+- oo neat, i didn't know about that first bit of history
+- i've heard rms say that scheme (guile) is just a nicer
+ lisp; but didn't know there were concrete talks/attempts to use
+ guile for emacs that early
+- robin: yes, guile-elisp not being portable might be a
+ showstopper for ramin
+- I've heard good things about guile from guix people. Never really tried it out
+- FWIW, I think there have been various attempts to make an Emacs clone in Common Lisp. I guess lem is currently the most active. https://github.com/lem-project/lem/
+- I like how he edited his slide mid-presentation.
+- https://www.emacswiki.org/emacs/GuileEmacsHistory has some info on very efforts; i was surprised that there were so many (especially with old-school guile, eww ;))
+- joining for all the guiles and all the emacsen
+- He's got a long way to go.
+- of course there were, RMS had decreed that guile was the GNU scripting language and it was a bit embarrassing that it was so little-used...
+ - At least Guix uses it now.
+ - oh yes, guile 3 was a great step forward, and I do wonder how much of that was due to the impetus of its having real users :)
+- if you're interested in guile emacs, be sure to check out robin's guile talk this afternoon
+- nice, my silly https://gitlab.com/janneke/guimax also used guile-gi but this looks much more mature
+- developed actively til 2014, but more recent work is on a branch so may not be as obvious...
+- so...i guess that some basic documentation on elisp may be very helpful
+- wbn if you could join efforts somehow
+ - there should definitely be some overlap between the projects
+- I have 6500 interactive ones, according to Vertico...
+ - I got 8021 interactive ones ;)
+ - 7690 here
+ - 34557 callables \o/
+- working towards a similar goal approached from different directions
+ - however, working on guile's elisp backend may be a common ground
+- ramin's probably talking about subrs, i.e. primitives not themselves implemented in elisp
+- you mean providing modularization for elisp programs? or something else
+- Being more specific, removing the need to namespace every single internal variable/procedure in an elisp module. Maybe that isn't a goal, but I wish it were
+ - yes, i have some ideas for adapting the CL package system for that. it'd have to be opt-in, maybe some tools for automated refactoring
+- And... the part where we need more bandwidth for any core runtime efforts to be viable
+- my-special-module--loop-variable-3
+- How can I get involved with this? if I want to contribute
+ - hang out in #guile-emacs and/or subscribe to the mailing lists https://guile-emacs.org/
+- an embryonic re-implementation by ramin of emacs in guile, with their own new elisp interpreter that should be r7rs compatible
+- would love robin's guile-emacs and ramin's efforts to somehow share some of their efforts
+- Robin's talk mentions developing a better elisp in Scheme. Why can't your project leverage it?
+- guile-elisp is part of guile's compiler system (elisp -> tree-il -> cps -> bytecode), unless another scheme sets out to be guile-compatible in that respect it won't be portable at all
+- To be fair, I've been screwing around with chicken, guile, and racket. I haven't found any 2 scheme implementations to be compatible, even within SRFI implementations
+ - Just the basic syntax and semantics, nothing else
+ - yeah, scheme's lack of portable libraries in practice motivated me to suggest something that's sure to piss everyone off: Javascript
+- YouTube comment: Cool, great, amazing. Extremely ambitious. A clone like this project might be significant harder than for example Lem, which does not care about backward compatibility with Emacs. A clone also is somewhat harder to create a unique selling point for. Especially if Guile-Emacs is also going to be a thing now. Just my 2 cents up to discussions. Anyway I am excited and will follow it:)
+
[[!inline pages="internal(2024/info/gypsum-after)" raw="yes"]]
[[!inline pages="internal(2024/info/gypsum-nav)" raw="yes"]]
diff --git a/2024/talks/hyperbole.md b/2024/talks/hyperbole.md
index 198ad712..33663038 100644
--- a/2024/talks/hyperbole.md
+++ b/2024/talks/hyperbole.md
@@ -30,6 +30,88 @@ See also:
- [EmacsConf - 2023 - talks - What I learned by writing test cases for GNU Hyperbole](https://emacsconf.org/2023/talks/test)
- [[!taglink CategoryHyperbole]]
+# Discussion
+
+## Questions and answers
+
+- Q: Hey, how is the log buffer generated?
+ - A: interaction-log package
+- Q: So, the "select a thing" C-c RET is similar to expand-region? How does it behave in codes (functions, class, ...)
+ - A: Behaves exactly the same.
+- Q:I know you Hyperbole devs are active and interested in sharing and
+ interoperating with other emacs tools. 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?
+ - A: Lately, focussing on making Hyperbole work with org-mode so
+ that they may interoperate.
+ - The idea with Hyperbole is not to be better than everything
+ else, but to be a connector between the different modes.
+ - ace-window is a small, great package that selects  windows or
+ displays a buffer in them.  Hyperbole extends this a bit letting
+ you theow a region or buffer to a window or replace its contents
+ with another buffer.  This is documented in the Hyperbole
+ manual.
+ - There's also C-@ (mark-org-subtree) which
+ interferes with Hyperbole
+ - Can you explain how it interferes?  Any conflict would
+ likely be a bug, not an incompatibility.
+ - Sometimes, it does clash with other modes, especially M-RET.
+- Q: Hi Mats! Can I ask you a technical question about Hyperbole? Many
+ years ago I tried to learn hyperbole but I gave up after some
+ time\... I remember that I found the code of the dispatcher very
+ hard to understand. Anyway, here is the question: if I type M-RET on
+ this button - {C-h h d d} - Hyperbole detects the extent of the
+ button and the kind of the button, and at some point it probably
+ calls a Lisp function with the argument "C-h h d d", and that
+ function makes emacs behave as if the user had typed C-h h d d. Do
+ you know what function is that?
+ - A:See the defib of kbd-key in the hib-kbd.el file.  That is an
+ implicit button type defined via defib which invokes an action
+ type of the same name defined with defact.  Just read the code
+ and you'll see how it works.
+- Q: is hyperbole easy to turn on and off nowadays? I remember that many years ago just having it installed would make it change some behaviours globally
+ - audience: yes just a hyperbole-mode to toggle or (hyperbole-mode -1) to make sure to disable
+ - audience: I can usually just type M-x hyperbole to toggle it
+
+## Notes
+
+- Hyperbole looks like an incredible tool but I can't quite
+ seem to get it. These examples make me want to try again though :)
+ - Same here, I actually leave it in the background and hit M-RET
+ from time to time :D
+- "take away your freedom" 🤔 "ta bort din
+ frihet" 🙁
+- nice talk! Hyperbole is in my TODO list for some
+ time already, I should bring it to the top\...
+- I think that Hyperbole is a little diamon inside Emacas
+- ditto! it seems a wonderful grab-bag of random nifty
+ stuff :)
+- alzai: I always viewed it as this mysterious tool. Some
+ users recommend it but there's no simple overview of it. But I'd
+ say this was one.
+ - gs-101: for me one of the problems with hyperbole is
+ the lack of examples in the documentation
+ - We have written multiple example use files included in
+ Hyperbole, a full Texinfo manual and a number of videos but
+ maybe we should add a step-by-step how to use it for new users.
+- \* NullNix suspects hyperbole window configs and winner window
+ configs might be\... confusing if used together :) \[11:47\]
+- Maybe it could be jokingly summarized as
+ do-everything-at-point
+- well, I got lost around several types of buttons -
+ cheatsheet would be huge help for jumping in
+- \[re transient discussion\]: Very excited for the Org
+ move to transient.
+- sachac: In the org-update talk, Ihor mentioned wanting to move some
+ more of the Org functionality into libraries that other packages
+ could take advantage of, so it might be interesting to see what
+ might be good to share with each other.
+ - Could this be akin to refactoring useful features from emacs
+ packages into emacs itself, especially if that feature is widely
+ used and useful across many packages.
+- one of those legendary packages i've just never quite
+ gotten around to learning
+- Yeah, Hyperbole does way too much to be integrated into core Emacs imo
+- I promise study Hyperbole for the next Emacsconf. Hyperbole it's a great tool
+
[[!inline pages="internal(2024/info/hyperbole-after)" raw="yes"]]
[[!inline pages="internal(2024/info/hyperbole-nav)" raw="yes"]]
diff --git a/2024/talks/hyperdrive.md b/2024/talks/hyperdrive.md
index 4c900c3c..e0247b50 100644
--- a/2024/talks/hyperdrive.md
+++ b/2024/talks/hyperdrive.md
@@ -1,4 +1,4 @@
-[[!meta title="New in hyperdrive.el: org-transclusion, easy installation, and more!"]]
+[[!meta title="New in hyperdrive.el: quick install, peer graph, transclusion!"]]
[[!meta copyright="Copyright &copy; 2024 Joseph Turner"]]
[[!inline pages="internal(2024/info/hyperdrive-nav)" raw="yes"]]
@@ -6,35 +6,33 @@
<!-- You can manually edit this file to update the abstract, add links, etc. --->
-# New in hyperdrive.el: org-transclusion, easy installation, and more!
+# New in hyperdrive.el: quick install, peer graph, transclusion!
Joseph Turner - <https://ushin.org> xmpp:discuss@conference.ushin.org (XMPP MUC for USHIN discussion), <mailto:contact@ushin.org>
[[!inline pages="internal(2024/info/hyperdrive-before)" raw="yes"]]
-In case it's been a while since you checked out `hyperdrive.el`,
-here's a refresher: [hyperdrive.el](https://ushin.org/hyperdrive/hyperdrive-manual.html) is an Emacs interface to [hyperdrive](https://docs.holepunch.to/building-blocks/hyperdrive),
-a mutable, versioned, peer-to-peer shared filesystem. Among other
-things, hyperdrive.el has these features: Share unlimited files of
-unlimited size; Explore file history with built-in versioning; Stream
-video and audio; No signup or account creation; Free as in Freedom!
+[hyperdrive.el](https://ushin.org/hyperdrive/hyperdrive-manual.html) is an Emacs interface to [hyperdrive](https://docs.holepunch.to/building-blocks/hyperdrive),
+a mutable, versioned, peer-to-peer shared
+filesystem. Among other things, hyperdrive.el has
+these features: Share unlimited files of unlimited
+size; Explore file history with built-in
+versioning; Stream video and audio; No signup or
+account creation; Free as in Freedom!
-Since [last year's EmacsConf talk](https://emacsconf.org/2023/talks/hyperdrive), `hyperdrive.el` grew some new
-features, most notably the ability to [transclude hyperdrive content](https://ushin.org/hyperdrive/hyperdrive-manual.html#Org_002dtransclusion-integration)
-with `org-transclusion`! Getting started with `hyperdrive.el` is much
-easier now with `M-x hyperdrive-install`.
+Since [last year's EmacsConf talk](https://emacsconf.org/2023/talks/hyperdrive), `hyperdrive.el` grew some new features, including:
+
+- Easily install the gateway program with `M-x hyperdrive-install`.
+- Visualize your network of sources as a graph or a list.
+- Transclude snippets of hyperdrive files with [hyperdrive-org-transclusion](https://elpa.nongnu.org/nongnu/hyperdrive-org-transclusion.html).
This talk will show off these new `hyperdrive.el` features in action!
Feel free to join our public XMPP chat room!
-- xmpp:discuss@conference.ushin.org
-
-([Join anonymously from your browser](https://anonymous.cheogram.com/discuss@conference.ushin.org))
-
+- xmpp:discuss@conference.ushin.org ([Join anonymously from your browser](https://anonymous.cheogram.com/discuss@conference.ushin.org))
- \#\_bifrost\_discuss\_conference.ushin.org:aria-net.org (Matrix bridge)
-Bugs can be submitted to the [ushin issue tracker](https://todo.sr.ht/~ushin/ushin). Patches, comments or
-questions can be submitted to the [ushin public inbox](https://lists.sr.ht/~ushin/ushin).
+Bugs can be submitted to the [ushin issue tracker](https://todo.sr.ht/~ushin/ushin). Patches, comments or questions can be submitted to the [ushin public inbox](https://lists.sr.ht/~ushin/ushin).
About the speaker:
@@ -45,6 +43,97 @@ mission is to promote personal, community, and global health through
free and open universal shared information for everybody.
See also: [EmacsConf - 2023 - talks - hyperdrive.el: Peer-to-peer filesystem in Emacs](https://emacsconf.org/2023/talks/hyperdrive/)
+# Discussion
+
+## Questions and answers
+
+- Q: Hi there, thank you for your talk - I enjoyed watching it! I
+ tried this tool last year, and it seemed to work well - but I don't
+ know anyone who actually uses it. Network effects are tricky - do
+ you know of any public shares people can join to try this tool out
+ properly? Thank you!
+ - A:  Yes, network effects are indeed tricky.  Hopefully, the peer
+ graph can help with this.  That said, here are some hyperdrives
+ I know of:
+ - [https://ushin.org](https://ushin.org) -
+ hyper://aaj45d88g4eenu76rpmwzjiabsof1w8u6fufq6oogyhjk1ubygxy/
+ - [https://blog.mauve.moe](https://blog.mauve.moe) -
+ hyper://1m51x54k3fwbuec5z4edbathiq3aj6bew8b556ezrszizskogo3o/
+ - [https://hypha.coop](https://hypha.coop) -
+ hyper://zdouwaei9kc5zbk93w5dakbr8maayupojthf3eafo16s4d5pbsry/
+- Q:One usecase for this is sharing and building upon second
+ brains/zettelkastens"denote or org-roam" but a blocker from me
+ wanting to make one public is wanting to use a blocklist or
+ whitelist so I can make them containing useful information for only
+ my while also being useful with in a public sense
+ - A: Rephrasing: how to keep the content of a Zettelkasten
+ private, and only have parts of it be public?
+ - If the desire is only to share certain files in the
+ Zettelkasten, M-x hypedrive-mirror can do this
+ - Can specify either a regexp that matches some of the files
+ that get uploaded to a directory of files on a machine (and
+ only those files will be shared)
+ - It can also be a lambda, i.e. anything that can be
+ formulated as a function
+ - E.g., with Karl Voit's filetags (or Prot's Denote
+ filenaming scheme), you could share only those files which
+ are tagged as "public".
+- Q: idea: try hyperdrive to distribute WORG (and EmacsWiki)
+ - A: Great idea!
+- 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.)?
+ - A:  We submited a patch which was merged in Emacs 30 to make
+ image maps (the "overlay" which makes images clickable and
+ have hover-over help-echo descriptions) transform along with the
+ image, e.g., if you zoom in on an image, the clickable map still
+ matches the zoomed-in image.
+ - A: In hyperdrive-sbb-view.el, we build a Graphviz string based
+ on the peer relations data, then call out to the external
+ graphviz process twice, once for the svg and once for the
+ cmapx.  Then we build an image map based on the cmapx string. 
+ We put the image and image map together and render it in a
+ buffer.  I also adapted some code from image-mode.el to make the
+ image resize whenever the buffer's window resizes.  For
+ details, see
+ [https://git.sr.ht/\~ushin/hyperdrive.el/tree/master/item/hyperdrive-sbb-view.el](https://git.sr.ht/~ushin/hyperdrive.el/tree/master/item/hyperdrive-sbb-view.el)
+ - A: This approach is directly inspired by org-graph-view.el, by
+ Adam Porter (github alphapapa).
+- Q:What is something surprising about how you or somebody else that
+ you didn't expect from using the hyperdrive network?
+ - A: Don't quite understand the question. I think the surprising use case for it is to be able to share say a bunch of Org files, link between those Org files... You could use transclusion to to have a discussion and then you could collaborate on on projects using this sort of asynchronous communication using hyperdrive files. If there's a more specific question, I'm happy to answer it better.
+
+- Q: You mentioned streaming audio and video - could you confirm that
+ this is in reference to consumption of media, and not broadcasting
+ of it - right?
+ - A: Since the network is peer-to-peer, audio and video is
+ streamed between peers.
+ - So this is all shared on a peer-to-peer network. So if I have a file on my machine that's a video or audio and I'm advertising on the network that people can download it from me, then if you want to download that video and I have a copy of it, when you click on that video in your hyperdrive, not only does it download it from me, but also you can stream it so you don't have to download the whole thing before watching it. So it is both in terms of serving the file and downloading the file.
+
+## Notes
+
+- The "sources, blockers, blocked" idea was influenced by:
+ - Alex Cobleigh :
+ [https://cblgh.org/trustnet](https://cblgh.org/trustnet)
+
+- the safe hyperdrive feature was designed in part based on org-safe-remote-resources. I'd be curious to hear thoughts on how something like this could be improved or generalized.
+- ooo nice graph
+- Perhaps a function which accepts buffer-file-name and returns non-nil if it's safe to call set-auto-mode
+- also, there was off list discussion related to CVE: untrusted-content
+ - untrusted-content is a variable
+ - we also discussed generalization of this idea with trusted/untrusted files to define them based on file location
+ - in a way it is similar to code blocks inside Org files
+ - not sure if all this is relevant to hyperdrive
+ - It definitely could be. It could be useful to enumerate the different potentially dangerous interactions we could have with files.
+ - (1) enabling a major mode (2) enabling file-local variables (3) including remote content (4) evaluating code blocks
+ - You might want a file to automatically set major mode but not evaluate code blocks, so more granular control would be useful.
+ - I think that allowing the user to set these safety settings based on buffer-file-name would benefit hyperdrive.el, eww, and any other remote protocol.
+- nice!
+- impressive!
+- idea: try hyperdrive to distribute WORG
+- better yet, those EmacsWiki "packages" that are getting rediscovered every decade or so, if they're not going to end up on a git host (as per its opinionated author's non-interest to do so if I'm not mistaken)
+- putting EmacsWiki on hyperdrive would be useful too!
+- YouTube comment: Awesome.
[[!inline pages="internal(2024/info/hyperdrive-after)" raw="yes"]]
diff --git a/2024/talks/julia.md b/2024/talks/julia.md
index f2914ad9..ba610a75 100644
--- a/2024/talks/julia.md
+++ b/2024/talks/julia.md
@@ -25,6 +25,103 @@ environments. Furthermore, I'll examine how their active and passionate
communities drive innovation.
+# Discussion
+
+## Questions and answers
+
+- Q: As someone who uses Julia, Emacs and Julia *in* Emacs, I feel
+ like Julia's integration with Emacs is lacking.  I haven't found
+ any way to debug Julia code that works as well as edebug for elisp,
+ SLY/SLIME for common lisp, or gdb for many other languages (with gud
+ or realgud).  Both Debugger.jl and Infiltrator.jl are difficult to
+ use interactively. Do you have any suggestions for interactive
+ debugging of Julia code in Emacs? (Adding to my question: Do other
+ editors do a better job of interactive Julia debugging?)
+ - A: GB: Debbuger.jl and Infiltrator.jl are the main debugging
+ tools available in Julia at the moment. Both of them are not
+ great (yet) and can use some work. Debugger is going to see
+ major performance improvements in future releases thanks to work
+ in the core language. Unfortunately, I don't see anything
+ better for interactive debugging that is avilable now or in the
+ near future. Most of the julia community is clustered around VS
+ code, but the situation is not better
+- Q: Can you call out something that Julia has that Emacs does not, and
+ which could benefit Emacs?
+ - A: GB: The Julia community is active and more tightly knit than
+ other communities (e.g., the Python one), JuliaCon is an
+ in-person event that brings people together. Emacs is also doing
+ great in this.
+- Q: Is there a way to use lisp syntax with Julia, like hy for python
+ or lisp flavoured erlang?
+ - A: Julia used to have a femtolisp interpreter built-into its
+ REPL.
+ - A: GB: I am not aware, but it might be possible to write a
+ package to do that.
+- Q: Have you tried the Julia Snail package for Emacs?  It tries to be
+ like SLY/SLIME for Common Lisp.
+ - A: GB: Yes, but I settled on julia-repl (with vterm). I didn't
+ test julia-snail too much because I found julia-repl easier to
+ setup and use the way I wished.
+- Q: Along the same lines as question 1 \-- is there a data inspector
+ for a Julia REPL available that you can use in Emacs?
+ - A: good mode, other good tooling; room for improvement in this
+ area
+ - A: GB: No, I don't think anything of that sort is available 
+- Q: Have you tried literate programming Julia (using Org babel or
+ some other means) in Emacs?
+ - A: Literate programming in Julia: Pluto (Jupyter-style, in the
+ browser), emacs-jupyter (in Emacs)
+
+## Notes
+
+- Great, now I wanna learn Julia\... :-)
+ - Highly recommend it. Especially if you do any sort
+ of scientific computing. It's an amazing language
+- Lots of things to like. Perhaps the most Dylan-like modern
+ language? 
+- Got me interested in Julia, great talk
+- Sooooo emacs written in julia?
+- Amazing, thank you
+- M-x clap
+- Great talk \[13:10\]
+- Thank you for the talk! \\o/
+- Thank you!
+- I've been so happy ditching python for julia for all
+ my scientific research needs :)
+- Some of these features, like the interactivity and the decompiler
+ reminds of Common Lisp
+- One of Julia's best features (multiple dispatch) was inspired by
+ Common Lisp's defgeneric/defmethod.
+ - I would also add that Julia takes the idea further than Common
+ Lisp ever did, because you can't opt-out of being generic in
+ Julia, so it's everywhere and used pervasively.
+ - In Common Lisp, you had to opt-in, so it wasn't as apparent how
+ powerful this way of organizing code could be.
+- Got me interested in Julia, great talk
+- Sooooo emacs written in julia?
+- akirakyle: First Guile Scheme (re: Robin's talk, next),
+ then Julia! ;-)
+- Yes ;)
+- So julia is like using CLOS everywhere?
+- Sort of, but with the llvm runnig full optimized
+ native code generation for every argument type a function is called
+ with
+- also julia \--lisp is built in!
+- emacs-jupyter works with julia quite well btw
+- org-babel also works well
+- def looking forward to the julia talk
+- It would be great to integrate pluto with emacs, but currently very hard to figure out best way to do so
+- That would be interesting for sure
+- Pluto.run(auto_reload_from_file=true) is the best right now
+ - Problem is pluto is very tied to browser
+ - I dislike leaving emacs for things
+ - But Pluto is a great tool
+ - Same, I suppose one could alternatively say the problem is emacs can't be very easily tied to the browser
+ - As opposed to vscode where such integrations are easier
+ - Although, on the other hand, I am happy emacs isn't tied to a browser
+ - It's better in general
+ - Yes it shouldn't be tied to a browser, but it also would be very helpful for emacs to have better access to rendering content that requires a dom/js environment in an emacs window
+
[[!inline pages="internal(2024/info/julia-after)" raw="yes"]]
diff --git a/2024/talks/learning.md b/2024/talks/learning.md
index f0259706..82672de4 100644
--- a/2024/talks/learning.md
+++ b/2024/talks/learning.md
@@ -60,6 +60,123 @@ and system operator (or 9-windows). Bala will guide you through a
transformative journey of self-improvement and productivity.
See also:
+# Discussion
+
+## Questions and answers
+
+- Q:What is TRIZ?
+ - A: Russian methodology (documented in books)
+ - Translates to "Theory of Inventive Problem Solving"
+- Q: Thank you for this talk, very interesting. One of the things that
+ frustrates me about modern webdev is the rate of churn when it comes
+ to useful knowledge. I think Emacs can help to counteract against
+ this by building lasting tools where mastery can be built. Do you
+ agree that learning similar but different things again and again is
+ ultimately wasted bandwidth? What can we do as technologists to push
+ back against this?
+ - A: New things are always coming up, and we "have" to learn that
+ new things. We also have to be aware that there are so many
+ projects, hobbies, and Life™ waiting for you. It's not a
+ balancing act, but if you pay attention and are present in the
+ moment (fully present), then **look back** and **connect**.
+ Something that appears to be a waste of time at first could
+ potentially tie back to something else and be really helpful.
+ - EX: Experimenting with CSS, and how it could be used to
+ customize an org-mode export.
+ - Then, a student mentioned that the slides were too bulky
+ to be scrolled through.
+ - ...But because I'd looked already at CSS, I could play
+ with weasyprint to make the slides.
+- Q (reworded as a question): \<chum-cha\> Why add an "Abandoned"
+ project to the "Resources" folder instead of the "Archives"
+ folder?
+ - A: Many a time, when the projects are abandoned, given some
+ time, some projects revive and you could restart. Also, these
+ abandoned projects could serve as useful resources for some
+ other related projects. I tend to move Archives to another
+ filing system to conserve space at the end of the year.
+- Q: How would you avoid the blind spots in your personal review, e.g.
+ problems you cannot see with yourself because of unconscious
+ hinderances?
+ - A: I feel that when you are reviewed by others, those blind
+ spots become apparent. Otherwise, it can be tricky to get to
+ know this in personal reviews alone, in my opinion
+- Q: What tool are you using to sync your todos and notes in multiple
+ hosts?
+ - A: The only other tool I use, apart from emacs on my computer is
+ Google calendar. I use org-gcal to sync the events from Google
+ Calendar. If I am on the move and away from my computer, I mark
+ an event for monday morning, 09:30am with the task that I just
+ thought about. In that event, I prefix it with TODO, so that
+ when it shows up in my org agenda, it shows up as a TODO task
+ and I am able to process it. Org-gcal syncs to my
+ 0Inbox/TODO.org
+- Q:Emptying your teacup is something interesting you had in your
+ talk. Sometimes my thinking is sluggish until i write down the
+ thoughts that refuse to leave my head "generally in journaling or
+ gtd". I am also pleasantly surprised about what comes out. You
+ brought this up multiple times other reasons for this?
+ - A: Emptying your teacup is just the start, in my opinion. When
+ you finish processing all your thoughts is when the thought
+ actually leaves your head for good. Since, there is no reason
+ for your head to hold on to those thoughts. GTD suggests using a
+ someday-maybe folder or file for parking thoughts that are not
+ going to work out now, but you would like to keep to them look
+ up later. I look at the someday/maybe once a quarter.
+- people can join BBB: 
+ [https://media.emacsconf.org/2024/current/bbb-learning.html](https://media.emacsconf.org/2024/current/bbb-learning.html)
+
+## Notes
+
+- i want to learn new skills because it is annoying
+ not being able to do something
+- I like learning because it feels good for me, like it
+ grants some dopamine. And the more one learns, the more one is able
+ to do.
+- By analogy, the email inbox is for receiving mail, not for
+ holding it
+- Article on e-mail organization:
+ [https://pointieststick.com/2024/07/09/how-i-manage-my-kde-email/](https://pointieststick.com/2024/07/09/how-i-manage-my-kde-email/)
+ - Thunderbird enables automatic tagging.
+- For adding files to the agenda, I have an updated version of the
+ System Crafters setup.
+ - System Crafters Set-up:
+ [https://codeberg.org/SystemCrafters/systemcrafters-site/src/branch/master/content/videos/build-a-second-brain-in-emacs/5-org-roam-hacks.org#headline-5](https://codeberg.org/SystemCrafters/systemcrafters-site/src/branch/master/content/videos/build-a-second-brain-in-emacs/5-org-roam-hacks.org#headline-5)
+ - Updated Set-up:
+ [https://github.com/gs-101/.emacs.d/blob/17c04c0ef1c5fb4083c8d94a5240ed8ef7d4a841/modules/gs-org-roam.el#L96](https://github.com/gs-101/.emacs.d/blob/17c04c0ef1c5fb4083c8d94a5240ed8ef7d4a841/modules/gs-org-roam.el#L96)
+ - Just add a ":agenda:" tag to the file and call
+ "dw/org-roam-refresh-agenda-list"
+- I plan to add an "Archive" file to my Roam set-up, I don't have
+ one currently. Usually I just leave the finished task in the file.
+ Not sure if it's effective.
+- perhaps "abandoned" means in PARA not
+ definitive for all time, and could be useful in the future again.
+ but that's just a guess, not being familiar enough with PARA.
+ - Thanks! That makes sense and I think
+ that's probably the correct answer. I guess my interpretation
+ of the "Archive" folder is that it's there so that you can
+ pull stuff out if you change your mind, whereas Resources is
+ more for things that are "Active" and I wouldn't personally
+ see an "Abandoned" project as active.
+ - personally i would also pull out from
+ any folder, may it be named "archives" or not :) but maybe
+ archive implies in PARA for completed projects only -
+ however, pls double check with the presenter Bala
+- I was doing some of these already but not in a formal way. This
+ gives me a lot of structure to do it. Thank you so much. I like the
+ "emptying the teacup" idea a lot.
+- I will probably add the regular reviews to my workflow. I also think
+ it is the hardest concept in your talk, isn't it? 
+- Personally, I use Syncthing
+ ([https://syncthing.net/](https://syncthing.net/))
+ to sync files.
+ - I'm using Nextcloud for syncing files. It also has WebDAV
+ interface which can be used by the Phone Apps.
+ - I'd use NextCloud too, but I don't have a server set-up (a
+ NAS, for example) at home. I'm waiting until I buy one to
+ get into self-hosting.
+- Thanks, that was a great talk - I'll be watching it again :)
+
[[!inline pages="internal(2024/info/learning-after)" raw="yes"]]
diff --git a/2024/talks/links.md b/2024/talks/links.md
index 37ce2df1..6cf24d63 100644
--- a/2024/talks/links.md
+++ b/2024/talks/links.md
@@ -46,6 +46,86 @@ Org to unlock the benefits of linked data.
Another talk by this speaker:
- [EmacsConf - 2023 - talks - MatplotLLM, iterative natural language data visualization in org-babel](https://emacsconf.org/2023/talks/matplotllm/)
+# Discussion
+
+## Questions and answers
+
+- Q: Have you thought about doing the cosine similarity and sentence
+ transformer calculations in Elisp so you don't need a separate
+ Python process?  In my experience having to set up and manage
+ additional state throws people off track.
+ - A: I do want to try removing the dependency. But I haven't yet
+ done any work in that direction. Mostly the problem is that
+ model (for transformers) runtimes are much easier available in
+ other languages. But if there is an ONNX runtime (or dynamic
+ module) for Elisp, we should be able to do this.
+ - Thanks, I can try writing an ONNX runtime module, this can be
+ useful for several Emacs tasks besides semantic linking.
+- Q: So far I have not used packages such as org-roam because I do not
+ like the idea that it might become unmaintained some day. So I keep
+ to the basic features in org for my workflow. Did you consider this
+ aspect?
+ - A: I thought about this too. But I have found the internals of
+ org-roam simple enough that I don't think maintaining a fork is
+ any hassle. Anyway it uses features already available in
+ org-mode. The only development addition it does is, IMO, to
+ maintain an SQLite index.
+ - Thank you for your advice. I'll take another look at
+ org-roam. And thank you for your talk. It was quite
+ inspiring to me.
+- Q: this is very cool and seems a bit influenced by logseq, which i
+ am trying to transition away from and on to org roam. have you
+ looked into somehow embedding the contents of a \"linked\" node into
+ the parent itself? this is something that i miss quite a lot from
+ logseq, where the contents were/could be transparently embedded and
+ made for a nicer review experience
+ - A: I haven't used logseq. When you say embedding, do you mean
+ like document transclusion? Or something else?
+ - yes, something like transclusion. quite useful for example in
+ daily journalling where one can just dump the notes instead of
+ figuring out a location. and then link them afterwards in the
+ right file/node.
+ - In some way, the org-roam buffer I showed shows linked nodes
+ with nearby content. But I haven't done any work on
+ transclusion till now.
+ - This may be relevant to your question
+ [https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#logseq-like-tagging-functionality](https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#logseq-like-tagging-functionality).
+ I don't remember exactly what it does because I don't use it
+ myself, but I was curious to try and hack it after a discussion
+ and it was relevant to how Logseq does transclusion in linked
+ documents.
+ - ooh, thanks for the link. this looks rather interesting :)
+- Q: How did you do the similarity search?
+ - A: Similarity, as of now, is just using embedding vectors from a
+ locally running transformer model and then matching using cosine
+ scores. Code is here
+ [https://github.com/lepisma/org-roam-exts/tree/master/org-roam-sem](https://github.com/lepisma/org-roam-exts/tree/master/org-roam-sem)
+- Q: Is your ml model for topics like \"family members\" available
+ somewhere?
+ - A:
+ [https://github.com/lepisma/org-roam-exts/tree/master/org-roam-sem](https://github.com/lepisma/org-roam-exts/tree/master/org-roam-sem)
+ the model I am using is a simple lightweight embedding
+ transforme model. See this line
+ [https://github.com/lepisma/org-roam-exts/blob/a71f2ec3bb6bd9d2b21ab5fd70ec45fa18128896/org-roam-sem/src/org_roam_sem/featurize.py#L17C7-L17C77](https://github.com/lepisma/org-roam-exts/blob/a71f2ec3bb6bd9d2b21ab5fd70ec45fa18128896/org-roam-sem/src/org_roam_sem/featurize.py#L17C7-L17C77)
+- Q: is your org-roam config public? (init.el stuff) I've found
+ vanilla org-mode not the most ergonomic. Thanks!
+ - A: Do you mean
+ [https://github.com/lepisma/org-roam-exts](https://github.com/lepisma/org-roam-exts)
+ - Also some of my writing config is here -\>
+ [https://github.com/lepisma/rogue/blob/master/lisp/r-writing.el](https://github.com/lepisma/rogue/blob/master/lisp/r-writing.el)
+
+## Notes
+
+- This looks very useful, thanks for your work
+- Looks really handy! One of the biggest inhibitors to my usage has
+ been figuring out how to collect things on mobile without friction.
+ Will check it out!+1
+- Thank you all!
+- A few project links from the talk:
+ - [https://github.com/lepisma/org-roam-exts](https://github.com/lepisma/org-roam-exts)
+ - [https://github.com/lepisma/pile-android](https://github.com/lepisma/pile-android)
+- Very interesting talk
+- This is super cool 🙂
[[!inline pages="internal(2024/info/links-after)" raw="yes"]]
diff --git a/2024/talks/literate.md b/2024/talks/literate.md
index 0fb0a0de..94f5332c 100644
--- a/2024/talks/literate.md
+++ b/2024/talks/literate.md
@@ -42,6 +42,198 @@ the years, I’ve filed them off with helper functions, snippets and
other features. Thought I would share these.
+# Discussion
+
+## Questions and answers
+
+- Q: You touched on it briefly, but how do you handle things like
+ "C-h f" helpful info not being tied back to the defuns in src
+ block code when you "C-c C-c" them in the org buffers instead of
+ re-tangling it to the files, and other such things? Did you create
+ wrappers for jumping  back and forth atop org's built-in mechanisms
+ to go back and forth between org/tangled files?
+ - A: (not yet answered)
+- Q: Apropos large literate programs: what's the largest code base
+ you've ever tackled with the literate approach (esp. Emacs +
+ Org-mode)?
+ - A: The largest is the one I mentioned in the talk ... about
+ 8000 lines of "code" and another "10000" lines of prose. I
+ think I came to 15,000 max (in code blocks only).
+- Q: Have you ever used org-transclusion
+ ([https://github.com/nobiot/org-transclusion](https://github.com/nobiot/org-transclusion))?
+ - A: Nope \... but I will
+ - I tried it out once, and had one hour of work deleted 🥲,
+ but it was from an issue already reported:
+ [https://github.com/nobiot/org-transclusion/issues/177](https://github.com/nobiot/org-transclusion/issues/177)
+ and
+ [https://github.com/nobiot/org-transclusion/issues/257](https://github.com/nobiot/org-transclusion/issues/257)
+- Q: What is your usage of dynamic blocks in such workflows? Any
+ interesting use cases and custom ones?
+ - A: Not yet, will report back
+- Q:Is the minibuffer being deliberately hidden in this video? (first
+ noticed this in the section previous to "Navigating by Function
+ Names")
+ - A: Not intentionally :)  You may notice the minibuffer comes and
+ goes, sorry about that; not intentional (didn't quite "fix"
+ all of them) (Thanks for the answer, no worries.)
+- Q:What's your take on Emacs+Org vs. Jupyter notebooks (for
+ interactive programming)?
+ - A: Not something I use right now.  Tend to include things from
+ jupyter/python (e.g. numpy) that has been the biggest challenge
+ (not knowing that stuff all that well), things like matrix
+ multiplications are easy in jupyter not such much in org. May
+ make sense to stay where you are comfortable.  Curious what the
+ community can do to make this transition easier
+ - You can't work with Jupyter in \> 1 language either (I think).
+ It's Py + SQL or R + SQL etc. Org allows 45+ languages in one
+ document (I often mix languages).
+- Q: Do you think any programming language is more suited to literate
+ programming than another?
+ - A: R, C are my favorites (for literate programs). C (and C++)
+ have got great support. There are some great books implemented
+ in literate programming I think. The two that come to mind are
+ Physically Based Rendering: From Theory to Implementation and C
+ Interfaces and Implementations. The first is C++ and the
+ second C. Ty.
+ - \<gs-101\> Personally, when working with Org files, I have a
+ better time dealing with interpreted languages, such as Python,
+ because you can initialize a session and the code is all
+ conected. You can divide blocks however you seem fit.
+- Q: related to above, do you use inline org function calls and org
+ babel library and such?
+ - A: Used to use more org-babel inline functions, found sound bugs
+ (maybe) 8yrs ago, right now my literate dev-ops is calling a lot
+ of backend programs so the org-babel has limited help in that
+ regard while in the emacs session things are "just available"
+ so that hasn't help much either
+- Q: How do you handle the cases where org markup may sometimes
+ interfere with some of the code, in places where you can't use
+ "escapes" (\~ or = or \| \<- vertical bar), doubly so if you use
+ modes to not show these but the styled text instead, and so on?
+- I think an example is in C when you assign to a pointer  \*p = &i;  
+ (In Org, you need to write (\*p) or ,\*p = &i; or it will be
+ mistaken for a headline \*
+ - A: (clarifying) when I'm making pros and I'm talking about a
+ function I've written somewhere else I'll use tildes and look
+ for those things so I can strip them off.  Is that the spirit of
+ the question.  (confirmed).  Yes, I'll strip that off after
+ finding the function name, so I can still mark it correctly.
+ - Q: clarifying: when in code inside an org buffer, you don't get
+ to use \~ or = (verbatim/etc), and any font-locking interferes
+ with the proper display in the src blocks, that kind of
+ interference.
+- Q: You said at the start that literate didn't catch on in corporate
+ DevOps - why not?
+ - A: I guess the big thing is not everyone is using Emacs and org
+ is needed to make it work really well.
+- Q: I gotta ask: why not that full stack on Markdown, I'm sure it's
+ crossed your mind at least a few times how the same setup on
+ Markdown would be more interop-friendly with colleagues and such?
+ - A:  It's a real good idea.
+- Q: How does your management of "TODOs" (projects/tasks) interact
+ with this literate mindset, any insightful things you do on that
+ front?
+ - A: Yeah. Okay. So, uh, on to do's and that sort of thing, um. You know, a lot is the same as it was 10 years ago. At the beginning of every sprint, my company, we're using JIRA. All jokes are valid when I say that. But I just go to its web page. I copy all the tasks that I need to do that sprint. I wrote a function that takes that code and reformats it as a bunch of org tasks for me to do that I can just now have all my to-dos. And I start to work off of that from that point on. So it'll reference all the projects, and I do symlinks to every code base that I need to use. Most of the to-dos I put inside my code block is kind of just for me, just so I can remember it. Because the work that I have to do needs to be tracked a little more fine-grained, I guess. Yeah.
+- Q: \<Donovan\> Do you LP also on larger projects? (More files &
+ nested directories) 
+ - A:  I haven't done nested directories, but I can now. Now that
+ i've realized I have the feature where I can just jump to any
+ projects and all the org-files and all the headings just show
+ up, that works in nested directories, that that's fun.
+- Q: Have you used Cucumber/Gherkin/BDD and do you think it has a
+ strong overlap to what you talked about here?
+ - A: I tend to put the tests right next to the function, I like
+ tangle it out to different files; keeping things together is
+ nice.  Many frameworks assume we'll have things seperated out
+ in a way that isn't useful to me.  I like to go old-school on
+ that?
+- 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?
+ - A:  Great questions, really subjective.  I change that all
+ time.  I have an idea, I start to refine it. My goal at one
+ point was to have an emacs config that was really small and
+ simple and that just really doesn't happen, it's full of ideas
+ and things that are half-baked and i pull them out and polish
+ them up bit by bit so it ends up being like any code-base it
+ just keeps getting refined.  Sub-trees, archiving are useful.
+ - I've found it useful to prune the init file back to minimal
+ every once in a while (actually, AI has been surprisingly
+ helpful - perhaps it helps that Emacs is ancient and hence there
+ is a lot of doc out there and much of it \... correct?)
+
+## Notes
+
+- My literate programming code extensions:
+ [https://www.howardabrams.com/git/howard/hamacs/src/branch/main/ha-org-literate.org](https://www.howardabrams.com/git/howard/hamacs/src/branch/main/ha-org-literate.org)
+- My Emacs configuration written in a literate style:
+ [https://github.com/howardabrams/hamacs](https://github.com/howardabrams/hamacs)
+- See it rendered here:
+ [https://howardabrams.com/hamacs/](https://howardabrams.com/hamacs/)
+- My JOPS (Jump to Project Sections) code that "searches Org
+ headers":
+ [https://www.howardabrams.com/git/howard/jops](https://www.howardabrams.com/git/howard/jops)
+ \... temporary location?
+- snippet on \<ssl: Cool one. 
+ - 0_0 I need to do this.
+- This (evaluating babel blocks) is also possible with the
+ Avy + Embark combo developed by karthik:
+ ([https://karthinks.com/software/avy-can-do-anything/#avy-plus-embark-any-action-anywhere](https://karthinks.com/software/avy-can-do-anything/#avy-plus-embark-any-action-anywhere)),
+ just jump to a block and then "RET".
+- Really good talk.  I need to find out how to extend
+ xref to handle org files!
+ - same here, I asked a long-winded
+ question that was about that (before he touched a bit on it),
+ but feel there's more in terms of wrappers and such
+- Denote has some pretty good use of dynamic blocks I
+ think
+ ([https://protesilaos.com/emacs/denote#h:8b542c50-dcc9-4bca-8037-a36599b22779](https://protesilaos.com/emacs/denote#h:8b542c50-dcc9-4bca-8037-a36599b22779))
+ - There's also the dynamic blocks from org-nursery:
+ [https://github.com/chrisbarrett/nursery?tab=readme-ov-file#org-roam-dblocks-incubating](https://github.com/chrisbarrett/nursery?tab=readme-ov-file#org-roam-dblocks-incubating)
+- there is an RFC in for 'cargo-script' which allows
+ building single-file crates - i think that will be quite useful in
+ ob-rust
+ - There's a ob-rust already and it uses
+ rust-script: [https://github.com/micanzhang/ob-rust](https://github.com/micanzhang/ob-rust),
+ but the developer wanted to use rustc instead.
+ - cargo-script RFC issue: [https://github.com/rust-lang/cargo/issues/12207](https://github.com/rust-lang/cargo/issues/12207)
+- Not a Q, just a comment that we need more of your insightful
+ posts and videos! :) (sic)
+
+
+- I am both hyped and scared by Howard's talk, some of his past insights into using org-mode (literate everything, many small spreadsheets, etc.) have changed the way I operate so thoroughly...
+- 19th century? Isn't that in the 1800s?
+ - 21 1/4 century?
+ - you are not incorrect I believe - easy mistake to make, it's not intuitive!
+ - YouTube comment: 1:00 So Knuth invented literate programming in the 19th century? I knew he was old, but not that old!
+- i think the only time i have worked with literate programming is Inform 7
+- I find that the Julia support in org (babel) is good enough. Most of my programming is in Julia.
+ - re: Julia in Org: For ob-julia support I wrote an ob-julia that does a few more things than the one that ships with ESS. https://github.com/karthink/ob-julia
+- (I'm here trying to milk Howard for all his fantastic insights in the Etherpad, hope that's not a faux-pas...!)
+ - I, at least, am enjoying the Q&A session so not a faux-pas as far as I'm concerned.
+
+- YouTube comment: The best reason I've heard explaining why most programmers don't (and won't) use literate programming. It requires them to be literate in three languages: the programming language, the markup language, and most challenging of all, English.
+- YouTube comment: Q: Literate programming is very appealing in theory, but it's difficult with languages like Go where your code is split across multiple files. Any suggestions?
+
+Feedback:
+
+- very cool
+- Lovely talk, thank you!
+- Awesome, thank you!
+- That was wonderful, thank you! 😊
+- Thank you Howard!
+- Thanks for your continued work, Howard!
+- A legend! ... loved the Ironsworn presentation from previous year.
+- excellent presentation indeed
+- Thank you for the marvelous talk!!
+- Thanks for the presentation
+- Your way of delivering is inspiring.
+- god I wish I was that good a presenter
+- 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/maxima.md b/2024/talks/maxima.md
new file mode 100644
index 00000000..280d5ac8
--- /dev/null
+++ b/2024/talks/maxima.md
@@ -0,0 +1,102 @@
+[[!meta title="Emacs, eev, and Maxima - now!"]]
+[[!meta copyright="Copyright &copy; 2024 Eduardo Ochs"]]
+[[!inline pages="internal(2024/info/maxima-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, eev, and Maxima - now!
+
+Eduardo Ochs - IRC: edrx, <http://anggtwu.net/>, @eduardoochs on Telegram, <mailto:eduardoochs@gmail.com>
+
+[[!inline pages="internal(2024/info/maxima-before)" raw="yes"]]
+I teach Calculus in a bad campus of a good federal univeral in
+Brazil. The main campus of that university is located in a big city
+and has lots of resources, and I work in a small campus, that is in
+a small city, and that has few resources - and we get the students
+that don't get enough points in the entrance exams to go to better
+places. In this presentation I will show how I've been teaching
+Maxima, and Emacs, and eev, to my students.
+
+With very few exceptions my students are "beginners" in a sense that
+is inconceivable in developed countries - they're not people for
+whom things like spreadsheets, Jupyter Notebooks, and VSCode are
+"intuitive"... most of them have never seen a terminal in their
+lives, and many of them have so little familiarity with computers
+that they don't know, for example, that keyboards have a key called
+F8.
+
+It turns out that if we _define_ "beginners" in the right way -
+hint: not by statistics! - then we can find a way to present Maxima,
+and then Emacs and eev, that makes all sense to the "beginners" in
+my classes, and that approach lets them install everything and
+become (sort of) autonomous very quickly. A few students were able
+to install everything - WSL, Debian, Emacs, eev, Maxima - and run
+the examples in about one hour; most others took between one hour
+and two hours, and some others had to plonked.
+
+<http://anggtwu.net/emacsconf2024.html>
+
+About the speaker:
+
+Eduardo is the author of an Emacs package called eev, that is a way
+of creating "executable notes" that apparently makes very little
+sense to people in developed countries. In this talk he will show
+how he has been using Emacs and eev to teach Maxima to his students
+in Brazil, who - with few exceptions - have very little experience
+with computers, and who are not the kind of "beginners" for whom
+programs like spreadsheets and VSCode are "intuitive".
+
+# Discussion
+
+## Questions
+
+- Q: I'm very happy to find and hear you though, are you on the Mastodon?
+ - edrx: no, I never learned to use mastodon (yet)... what is the link?
+ - All the different mastodon servers talk to each other. I'm on https://mastodon.sdf.org but there are also others
+ - You sound like my friends on https://mathstodon.xyz
+- Q: Seeing where you are and how active you are in software freedom, you don't happen to know my friend Gonzalo Nemmi do you?
+- Q: Presumably edrx, before I was kind of wondering if eev can do anything magical with ielm, but I'm a bit new to both of those modes.
+ - edrx6: I never learned ielm, it looks scary to me
+ - ielm is very like slime (but superior)
+ - ielm is for elisp and slime is for common lisp though, right?
+
+## Notes and feedback
+
+- hell yeah maxima time (and eev!!) that's what blackboards are for
+- Thank you for your talk!
+- Yes, thanks for your Maxima talk.
+- Interesting talk edrx, thanks!
+- dang i spaced out (focused on writing some elisp :) and missed this one. i'll have to go back & review it, though i'm familiar with transducers from clojure
+- Hang on I'm reading your tutorial. But the words executable logs and the bits I've mentally parsed so far look very exciting to me.
+ - Sounds a little like Hyperbole or Embark
+- whoa...structural navigation... for html and php. this would have been nice when I was in that every day
+- edrx: I took a better look at maxima-interface. it's very interesting!!!!
+ - Yeah jmbr does great stuff https://superadditive.com
+- Haha, typing very slowly and with lots of mistakes is the only way I can understand
+ - edrx: I type slowly and I commit mistakes all the time, so interfaces in which the lines that I type get lost - or just go to the history - look painful to me
+- my friend jmbr (in cl) has https://sr.ht/~jmbr/maxima-interface/ I'm not sure if it's relevant to your experiences of wanting access to maxima's internals. Basically I guess jmbr made maxima "easy to use" by obscuring its underlying mechanisms and working more ordinarily. Maybe it's the opposite to what you want.
+ - edrx: right, sounds like exactly the opposite of what I want...
+ - edrx: I'm doing things like this: http://anggtwu.net/lisptree.html
+- edrx: screwlisp: I missed the part of your talk in which you explained a certain way to install slime... I need to watch it later
+ - Some people are saying to use Sly over Slime now.
+ - I remember using sly and not being conscious of the differences for a long time
+ - I couldn't make slime work with eev
+ - I kinda think of SLIME as the most normal one. I know some people are true believers in lisp-mode and just an *inferior-lisp* buffer. On the other hand, the cool people are meant to use sly.
+ - I guess I should rewatch Gavin Freeborn's Sly youtube video or reread the Sly info pages perhaps.
+ - You might have noticed my tremendously kloodgy keyboard macro I defined at the start of my talk to pseudo-integrate ielm and an elisp file
+ - The sly manual has a comparison of sly and slime: https://joaotavora.github.io/sly/#A-SLY-tour-for-SLIME-users
+- Yeah, I always use customize-variable on package-archives instead of writing elisp code myself in an init.el
+- I think sly has stickers? I haven't used stickers myself though for debugging Common Lisp.
+ - yes - here: http://anggtwu.net/emacsconf2024.html#0:35
+ - stickers allow you to trace expressions with history playback
+ - Try evaluating this I guess: (info "(sly) Stickers")
+- I will definitely look more into eev edrx2. I often feel confused about this, wanting a buffer that is a replay of what I've been doing in my repl.
+- edrx: the best way to try eev nowadays is this one: http://anggtwu.net/2024-find-tryit-links.html
+ - edrx: "best" in the sense that if people don't get it running in less than 5 minutes they disappear forever
+
+[[!inline pages="internal(2024/info/maxima-after)" raw="yes"]]
+
+[[!inline pages="internal(2024/info/maxima-nav)" raw="yes"]]
+
+
diff --git a/2024/talks/mcclim.md b/2024/talks/mcclim.md
index 432a0180..0f64f1bd 100644
--- a/2024/talks/mcclim.md
+++ b/2024/talks/mcclim.md
@@ -98,6 +98,34 @@ Bib:
}
```
+**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:
I'm screwlisp from the lispy gopher climate, a weekly Wednesday
@@ -113,6 +141,52 @@ this talk is about. I have many friends who picked those up in some
small part thanks to the show.
+# Discussion
+
+- Q: I would love to see the GUI interacting with the scheduling stuff
+ you were working on initially, if I didn't miss it somewhere
+ earlier.
+ - A: Will do a follow-up video
+- Q:Or any other GUI stuff you've worked on in the past that you'd
+ be comfortable showing?
+ - A:[https://toobnix.org/a/screwtape/video-channels](https://toobnix.org/a/screwtape/video-channels)
+- Q: Are we going to get a McCLIM LambdaMOO client?
+ - A: You're right, I should make that into a client for Common Lisp.
+- Q: is the expression being returned directly eval-able is elisp / ielm?
+ - screwlisp: Yes I didn't think this ahead
+ - screwlisp: Like I've just said, you have to call (slime-eval-sync)
+ - screwlisp: After which you can get it out of your kill-ring, because it has syncronised -> to be there
+ - screwlisp: I was going to ask you if you had a way for me to do that
+- Q: i wonder if there's a presentation type for readable output that is returned to elisp?
+ - most of the time i assume the expression type will be readable on the other end, but CL has readtables and other things that would need translation
+- similar to the multiple package-archive options with emacs there is also UltraLisp which tracks upstream more closely, but can cause fun-to-debug package conflicts in some situations
+ - screwlisp: I guess I should try that, basically melpa right, I occasionally use person quicklisp dists
+- screwlisp: 40ants has often done things I want to do
+- lol @ either it will be faster or you will be smug about it running slowly
+ - screwlisp: Old computer challenge ;)
+- we did see a little bit of that
+- https://toobnix.org/c/screwtape_channel/videos
+- Is the MOO McCLIM app still going?
+ - yes
+ - telnet lambda.moo.mud.org 8888, connect Guest, Y, then @join screwtape
+ - maybe something like this would work for slime eval assuming we still want to use emacs while CLIM window is open: (slime-eval-async '(cl:+ 2 2) (lambda (x) (print x)))
+ - the second arg is a continuation so can bind it, insert in a buffer, etc
+ - I think most emacs users use scratch buffer
+- thanks for the talk! great intro. look forward to IELM talk next :P
+- Thank you! 😊
+- Thanks for the talk, it was super interesting
+- May the source be with everyone
+- I use ielm as a repl but not a power user... sometimes I know I want to do more than a few M-:
+- (lazy-eval 'thanks)
+- screwlisp: "Yeah, I forgot now but during the talk there were a few tiny bits where it was different to slime that tripped me up
+- thanks for the talk screwlisp, always good to see lisp history being explored. i'll have to check out lambdamoo again
+- screwlisp: Quite a few people hang around during the Wednesday show (000UTC, anonradio.net)
+- screwlisp: Probably not a coincidence a lot of my emacs useage is the same as yduJ's who is normally there
+- what emacs mode/tool were you using to access the moo?
+ - I dusted off rmoo.el, but it could definitely use some modernization =)
+ - I went for the quick M-x telnet instructions for Guest
+- screwlisp: Can @request your nick with an email address
+
[[!inline pages="internal(2024/info/mcclim-after)" raw="yes"]]
diff --git a/2024/talks/open-mic.md b/2024/talks/open-mic.md
new file mode 100644
index 00000000..577ee0f5
--- /dev/null
+++ b/2024/talks/open-mic.md
@@ -0,0 +1,90 @@
+[[!meta title="Open mic/pad for quick updates etc."]]
+[[!meta copyright="Copyright &copy; 2024 ${speakers}"]]
+[[!inline pages="internal(2024/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 mic/pad for quick updates etc.
+
+
+[[!inline pages="internal(2024/info/open-mic-before)" raw="yes"]]
+
+
+# Discussion
+
+- sachac: I had fun writing some code to copy a line from ERC for easier copying to Etherpad, that was a nice new thing for EmacsConf 2024. Also the random package mentions on our countdown screen was fun too. This year I've had less time to work on Emacs-y things (about half the time compared to last year's leadup to EmacsConf), but it's nice to see we can still pull it off!
+- transient discussion:\
+- do you like to much hydra? Leo?
+- I love which-key.
+ - Yeah, I think adding which-key to Emacs 30 was
+ a great idea!
+- I wrote a transient to make it easy to access various
+ Emacs help resources, and I don't know Elisp very well.    
+- Its amazing how in emacs people don't need to
+ frequently migrate to the newer packages all the time.
+- at one point i experimented a bit with using
+ transcient as an interface to run shell commands that I was trying
+ to parse from the man pages, i still think this is an interesting
+ discoverability into all the options that shell commands offer
+ - inkpotmonkey: ffmpeg comes to mind
+- I use transient for my job, and that save my life.
+- I wrote a little package that combines transient and
+ tabulated list mode to fetch issues from services as jira. 
+ Transient is a nice package to quickly get an UI going.
+- eldoc-mode.\
+- I also kinda just had a thought for discussion. Browser related thoughts and speculation
+- sachac: I've been using spookfox to control Firefox from Elisp,
+ which has been handy for some automation (can both send stuff to and
+ get stuff out of Firefox, I have some blog posts about it)
+- [https://github.com/browsh-org/browsh](https://github.com/browsh-org/browsh)
+- Discussion: Right now it exist as a bunch of hacks on top of sly 
+ 12:16:19 
+- re: qutebrowser \--
+ [https://github.com/lrustand/qutebrowser.el](https://github.com/lrustand/qutebrowser.el)
+- karthik: WOW! I am going to have to start using
+ this immediately! Thank you!
+- I've been really meaning to try out Meow as a
+ long-time Evil user 🙂
+ - The vim bindings never clicked for me. I came directly from the emacs keybindings. Setup meow to mimic the emacs bindings and been working great e.g. n,p,f,b for navigation. Works eally well for colemak dh layout
+- fristed: I've been experimenting with using emacs as a GUI toolkit for common lisp applications
+ - ooo, does your experiment have a home/name?
+ i've been wondering about using emacs as an interface for clim apps
+ (partly as a step towards using clim in emacs, possibly), seems
+ possible considering that their was a web-based interface in the
+ 1990s
+- have you shared links about this? "emacs as a GUI
+ toolkit for common lisp applications"
+- I would like to take a look
+ - did you see my guile talk? you might be
+ interested in the long-term future section :)
+- Currently I do not have any public items yet, but
+ now I know that there is interest i'll look into it
+- If i have something working next year i'll consider
+ having a emacsconf talk. It is inspired by CLOG, but using emacs
+ instead of the browser
+- oooh, another possible topic for discussion: what's something you've recently started trying in Emacs?
+
+- I've been experimenting with using semgrep to
+ review elisp for security issues 
+
+- It was really cool being able to jump in! 😊
+- hey hey, I've been experimenting with ways to make packages
+very easy to try! link:
+[http://anggtwu.net/2024-find-tryit-links.html](http://anggtwu.net/2024-find-tryit-links.html)\
+
+- to the person who was lounge-928 a few minutes ago: I found
+ the slide in which I start to discuss choosing the right level of
+ detail! See here:
+ [http://anggtwu.net/emacsconf2024.html#16:06](http://anggtwu.net/emacsconf2024.html#16:06)
+
+- everyone should know of greader-mode.  it is amazing.  i
+use it all the time\
+
+
+[[!inline pages="internal(2024/info/open-mic-after)" raw="yes"]]
+
+[[!inline pages="internal(2024/info/open-mic-nav)" raw="yes"]]
+
+
diff --git a/2024/talks/org-update.md b/2024/talks/org-update.md
index 6141f4f0..4406b3bc 100644
--- a/2024/talks/org-update.md
+++ b/2024/talks/org-update.md
@@ -1,5 +1,5 @@
[[!meta title="Updates on Org Mode maintenance"]]
-[[!meta copyright="Copyright &copy; 2024 Ihor Radchenko and Bastien Guerry"]]
+[[!meta copyright="Copyright &copy; 2024 Ihor Radchenko"]]
[[!inline pages="internal(2024/info/org-update-nav)" raw="yes"]]
<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
@@ -7,13 +7,181 @@
# The Future of Org
-Ihor Radchenko and Bastien Guerry
+Ihor Radchenko
[[!inline pages="internal(2024/info/org-update-before)" raw="yes"]]
+# Discussion
+## Questions and answers
+
+- Q:<\_viz\> Q: Is the track-changes item about the org-element
+ parser? \[10:34\]
+ - A:Yes
+ - <Ihor\> Moreover, track-changes has been developed with my
+ input specifically aimed to make sure that it can support
+ org-element use case. See
+ [https://debbugs.gnu.org/cgi](https://debbugs.gnu.org/cgi)
+ /bugreport.cgi?bug=70077
+- Q: Could you please keep IRC alive? I prefer it to Matrix. Thx.
+ - A: I am mostly live on IRC from mobile (via Revolution IRC) and
+ should be able to see most of the messages. Except when my
+ mobile phone does not have good internet connection or is
+ discharged
+ - I got a suggestion to use chat.sr.ht as a bouncer. I will look
+ into it to make the connection more reliable. (It is not bad
+ now, but I do miss messages once in a while).
+- Q: Is there any plan for adding support for other modalities of
+ notes like handwritten,  audio, etc.? Would that be interesting to
+ the community? It will definitely be useful for me.
+ - A: Might want to look into jkitchin's repos (possibly via
+ tesseract)
+ - tesseract + image paste:
+ [https://www.youtube.com/watch?v=rGGAr1AWkTc](https://www.youtube.com/watch?v=rGGAr1AWkTc) 
+ - John Kitchin \[Youtube\] (2021) scimax - #drawing
+ screenshot, tesseract, pngpaste and ox-clip
+ - For audio, I do not know much. My bookmarks contain a couple
+ of possibly related items:
+ - [https://git.sr.ht/\~lxsameer/orion](https://git.sr.ht/~lxsameer/orion)
+ - [https://github.com/rksm/org-ai?tab=readme-ov-file#setting-up-speech-input\--output](https://github.com/rksm/org-ai?tab=readme-ov-file#setting-up-speech-input--output)
+ - You can use attachment and images to paste.
+
+ - <Ihor\> In terms of actually adding support for hadwritten
+ notes/audio, it is not 100% clear what that support would
+ consitute. Tooling to convert images/sound to text would
+ probably not be appropriate for Org mode. It would be better
+ done as a separate package(s). Then, using such tooling could be
+ supported, but again, it is not clear what such a support would
+ constitute.
+
+ - "Would that be interesting to the community?" Go and ask ;)
+ Just write about your idea in details to the mailing list and
+ you will get feedback. What I can tell is that this topic does
+ not surface frequently as far as I am aware.
+
+- Q: I spent some time writing a library for myself which involved
+ working with org files. One thing I struggled with was finding a
+ good source of reference code which demonstrated idiomatic usage. Is
+ there/could there be a resource with which to recommend particularly
+ well written codebases for review by others?
+ - A: Ideally, Org codebase should be such a place. Unfortunately,
+ not every part of Org is a good reference for others (I hope to
+ keep pushing for improvements).
+ - Decent references could be ox.el, many ob-\* backends, and
+ ox-\* backends. But I cannot suggest something definite
+ without knowing what exactly you tried to do. There are many
+ APIs in Org mode.
+ - What might be useful is
+ [https://orgmode.org/manual/Hacking.html](https://orgmode.org/manual/Hacking.html)
+ and
+ [https://orgmode.org/worg/dev/index.html](https://orgmode.org/worg/dev/index.html)
+ - Maybe also
+ [https://alphapapa.github.io/org-almanac/#development](https://alphapapa.github.io/org-almanac/#development)
+
+- Q: WRT IETF standardization, have you looked at Karl Voit's OrgDown? 
+ - A: Lot of pushback to this idea on the mailing-list.
+ - A large part of it was about naming
+ - Some links:
+ - [https://list.orgmode.org/2021-11-28T20-44-37@devnull.Karl-Voit.at/](https://list.orgmode.org/2021-11-28T20-44-37@devnull.Karl-Voit.at/)
+ - My followup:
+ [https://list.orgmode.org/87tufnbj1w.fsf@localhost/](https://list.orgmode.org/87tufnbj1w.fsf@localhost/)
+ - Despite pushback, Karl's idea did align with our IETF idea
+ and with one of the point I make in the presentation about
+ making life easier for non-Emacs apps.
+ - See
+ [https://list.orgmode.org/orgmode/2022-10-17T22-36-38@devnull.Karl-Voit.at/](https://list.orgmode.org/orgmode/2022-10-17T22-36-38@devnull.Karl-Voit.at/)
+ - I will quote Bastien here:
+ - [https://list.orgmode.org/orgmode/87fsfl7g01.fsf@bzg.fr/](https://list.orgmode.org/orgmode/87fsfl7g01.fsf@bzg.fr/)
+ - What occurred to me while rereading this thread is
+ that definining a
+ - syntax for a IETF RFC on an Org mimetype probably
+ needs to be done not
+ - just by this Emacs Org-mode community, but by
+ bringing together other
+ - "consumers" of .org files, from ecosystems outside
+ of Emacs.
+ - Such a collective work could lead to define what
+ subset of the Org
+ - syntax is useful as the corner-stone for .org files
+ everywhere - which
+ - is what you rightfully brought up with "Orgdown".
+ - If successful, such a process could end up in
+ defining the minimal and
+ - official "Org syntax" while allowing
+ implementations (like the one for
+ - Emacs org-mode) to supercharge this syntax if deemed
+ useful.
+ - Perhaps TEC is right and we will end up having the
+ minimal syntax
+ - being the one we currently use for Org-mode: we'll
+ see.
+- Q: About a year ago we discussed switching GNU documentation from texinfo to org. Do you still consider this?
+ - A: We don't want to complicate org syntax to adjust to the
+ texinfo markup.
+ - ...But we want to keep org's syntax generic so that it can be
+ customized to support the necessary Texinfo constructs
+ - I detailed my vision in
+ [https://list.orgmode.org/875xwqj4tl.fsf@localhost/](https://list.orgmode.org/875xwqj4tl.fsf@localhost/)
+ - apart from Texinfo parity, the idea is to help
+ addressing various syntax edge cases by providing
+ aliases to the existing markup elements
+
+## Notes
+
+- Nice to see mobile apps actively being considered when talking about org :D
+- Transient integration in org will be a very welcome improvement! Being able to save the
+ transient state on org-export would be very nice indeed
+- fun fact: Transient did take some inspiration from Org's menus
+ - tarsius: Oh, I did not know this!
+ - From which menus exactly, those implemented by Nicolas
+ for the exporter?
+ - Not any specific menus but the "dim unreachable
+ commands, when the user typed an incomplete key sequence"
+ feature.
+- love to hear how folks in emacs real approach
+ project development as social endeavors to a significant degree
+- Another mobile app that understands org-markdown is
+ ZettelNotes
+ ([https://znotes.thedoc.eu.org/](https://znotes.thedoc.eu.org/))
+ - It is not the only one missed. For a reason. I did not
+ find source code.
+ - Ah ok, that is fair.
+- <jaafar\>There is a Ruby parser too, in the Guthub renderer
+ - Right. It is also listed at
+ [https://orgmode.org/tools.html](https://orgmode.org/tools.html)
+ (alongside with Pandoc)
+- As an org user but someone who is not familiar with
+ development (and has no context on org's direction before Ihor's stewardship), I'm really excited about the priorities being expressed in this talk :) Thanks
+ \[10:47\]
+- another great (and absolute core to me) app with org-mode
+ support (respectively org files are at the core of it) for iOS
+ devices is: beorg
+ [https://www.beorgapp.com/](https://www.beorgapp.com/)
+ - the dev is responsive and open for feedback/feature requests, from my experience so far. i'm still "a noob", but org-mode, emacs and beorg allow me to structure my workflows/needs and to get rid of possibly many other apps/software.
+ - The list of iOS-native apps are still quite small with varying quality. So far, I'm quite happy with beorg. Tried out other too (1-2 i may be missing, maybe considering buying them, even if it's just a small contribution to Emacs/orgmode as community as such). as far as the libre aspect. true, but i have to be pragmatic at some point, and firstly i want to be productive/efficient/effective. As long as it's a sole dev / community-inspired thing, and not a big corporate raider, i'm fine with non-libre software, if the standards are kept and no proprietary overhead stuff is modifying the core of org-mode (in this example for example).
+- Really encouraging stuff, thanks :D
+- Thank you yantar92\` 
+- Thank you for this wonderful talk!
+- We appreciate all the work being done
+- really enjoying this talk as a long time user who hasn't
+ ever really thought about how org mode gets developed (much less
+ contributed)
+- For audio transcription, I use Speech Note (offline) and copy the
+ text to orgmode
+- It's great to see Carsten, Bastien and Ihor together. I run my life
+ with orgmode, so we owe you guys a lot :)
+- I think a huge part of Org Mode is workflow, and that's
+ both highly individual and highly social - we learn about what's
+ possible by hearing about how other people do things
+- Thank you for taking over org! I use it every day and I'm happy to see that org's future is in good hands.
+- YouTube comments:
+ - Congratulations! I'm super excited for the things to come, especially about mobile apps not being an afterthought anymore. Also looking forward to the transition to transient menus!
+ - That was a great talk. Thank you for bringing all that information together and thank you for your work on org-mode. I use it every day and it's good to see it's still in active and constructive development. I particularly like the focus on the standard and parsers to define the format and clean up code bases both in org-mode and beyond.
+ - As someone who has just started using org mode, it's really reassuring to see that someone with such a well thought through, comprehensive, specific, detailed, and balanced vision of the future of org is taking the helm! May your bugs always be shallow and your users grateful <3
+ - I've been using org-mode for over a decade now, and can't imagine life without it. So welcome aboard, Ihor, may org-mode continue to prosper with you as Maintainer!
+
[[!inline pages="internal(2024/info/org-update-after)" raw="yes"]]
[[!inline pages="internal(2024/info/org-update-nav)" raw="yes"]]
diff --git a/2024/talks/p-search.md b/2024/talks/p-search.md
index 01e8aed7..f4fd1b9e 100644
--- a/2024/talks/p-search.md
+++ b/2024/talks/p-search.md
@@ -53,6 +53,186 @@ tools.
Code: <https://github.com/zkry/p-search>
+# Discussion
+
+## Questions and answers
+
+- Q: Do you think a reduced version of this functionality could be
+ integrated into isearch?  Right now you can turn on various flags
+ when using isearch with M-s \<key\>, like M-s SPC to match spaces
+ literally.  Is it possible to add a flag to "search the buffer
+ semantically"? (Ditto with M-x occur, which is more similar to your
+ buffer-oriented results interface)
+ - A: it's essencially a framwork so you would create a generator;
+ but it does not exist yet.
+- Q: Any idea how this would work with personal information like
+ Zettlekastens? 
+ - A: Useable as is, because all the files are in directory. So
+ only have to set the files to search in only. You can then add
+ information to ignore some files (like daily notes).
+ Documentation is coming.
+- Q: How good does the search work for synonyms especially if you use
+ different languages?
+ - A: There is an entire field of search to translate the word that
+ is inputted to normalize it (like plural -\> singular
+ transformation). Currently p-search does not address this. 
+ - A: for different languages it gets complicated (vector search
+ possible, but might be too slow in Elisp).
+- Q: When searching by author I know authors may setup a new machine
+ and not put the exact same information. Is this doing anything to
+ combine those into one author?
+ - A: Currently using the git command. So if you know the emails
+ the author have used, you can add different priors.
+- Q: A cool more powerful grep "Rak" to use and maybe has some good
+ ideas in increasing the value of searches, for example using Raku
+ code while searching. is Rak written in Raku. Have you seen it? 
+ - [https://github.com/lizmat/App-Rak](https://github.com/lizmat/App-Rak)
+ - [https://www.youtube.com/watch?v=YkjGNV4dVio&t=167s&pp=ygURYXBwIHJhayByYWt1IGdyZXA%3D](https://www.youtube.com/watch?v=YkjGNV4dVio&t=167s&pp=ygURYXBwIHJhayByYWt1IGdyZXA%3D) 
+ - A: I have to look into that. Tree-sitter AST would also be cool
+ to include to have a better search.
+- Q: Have you thought about integrating results from using cosine
+ similarity with a deep-learning based vector embedding?  This will
+ let us search for "fruit" and get back results that have "apple"
+ or "grapes" in them \-- that kind of thing.  It will probably also
+ handle the case of terms that could be abbreviated/formatted
+ differently like in your initial example.
+ - A: Goes back to semantic search. Probably can be implemented,
+ but also probably too slow. And it is hard to get the embeddings
+ and the system running on the machine.
+- Q:  I missed the start of the talk, so apologies if this has been
+ covered - is it possible to save/bookmark searches or search
+ templates so they can be used again and again?
+ - A: Exactly.  I just recently added bookmarking capabilities, so
+ we can bookmark and rerun our searches from where we left off. 
+ I tried to create a one-to-one mapping from the search object to
+ the search object - there is a command to do this- to get a data
+ representation of the search, to get a custom plist and resume
+ the search where we left off, which can be used to create
+ command to trigger a prior search.
+- Q: You mentioned about candidate generators. Could you explain about
+ to what the score is assigned to. Is it to a line or whatever the
+ candidate generates? How does it work with rg in your demo?
+
+   FOLLOW-UP: How does the git scoring thingy hook into this?\
+
+- - A: Candidate generator produces documents. Documents have
+ properties (like an id and a path). From that you get
+ subproperties like the content of the document. Each candidate
+ generator know how to search in the files (emails, buffers,
+ files, urls, \...). There is only the notion of score +
+ document.
+ - Then another method is used to extract the lines that matches in
+ the document (to show precisely the lines that matches).
+
+- Q: Hearing about this makes me think about how nice the emergent
+ workflow with denote using easy filtering with orderless. It is
+ really easy searching for file tags, titles etc. and do things with
+ them. Did this or something like this help or infulce the design of
+ psearch?
+ - A: You can search for whatever you want. No hardcoding is
+ possible for anything (file, directories, tags, titlese\...).
+
+- Q: \[comments from IRC\] \<NullNix\> git covers the "multiple
+ names" thing itself: see .mailmap  10:51:19 
+ - \<NullNix\> thiis is a git feature, p-search shouldn't need to
+ implement it  10:51:34 
+ - \<NullNix\> To me this seems to have similarities to notmuch \--
+ honestly I want notmuch with the p-search UI :) (of course,
+ notmuch uses a xapian index, because repeatedly grepping all
+ traffic on huge mailing lists would be insane.)  10:55:30 
+ - \<NullNix\> (notmuch also has bookmark-like things as a core
+ feature, but no real weighting like p-search does.)  10:56:07 
+ - A: I have not used notmuch, but many extensions are
+ possible. mu4e is using  a full index for the search. This
+ could be adapted here to with the SQL database as source. 
+
+- Q: You can search a buffer using ripgrep by feeding it in as stdin
+ to the ripgrep process, can't you?
+ - A: Yes you can. But the aim is to search many different things
+ in elisp. So there is a mechanism in psearch anyway to be able
+ to represent anything including buffers. This is working pretty
+ well.
+
+- Q:  Thanks for making this lovely thing, I'm looking forward to
+ trying it out.  Seems modular and well thought out. Questions about
+ integreation and about the interface
+ - A: project.el is used to search only in the local files of the
+ project (as done by default)
+
+- Q: how happy are you with the interface?
+ - A: psearch is going over the entire files trying to find the
+ best. Many features can be added, e.g., to improve debuggability
+ (is this highly ranked due to a bug? due to a high weight? many
+ matching documents?)
+ - A: hopefully will be on ELPA at some point with proper
+ documentation.
+
+- Q: Remembering searches is not available everywhere (rg.el? but AI
+ package like gptel already have it). Also useful for using the
+ document in the future.
+ - A: Retrievel augmented generation: p-search could be used for
+ the search, combining it with an AI to fine-tune the search with
+ a Q-A workflow. Although currently no API.  
+ - (gptel author here: I'm looking forward to seeing if I can use
+ gptel with p-search)
+ - A: as the results are surprisingly good, why is that not used
+ anywhere else? But there is a lot of setup to get it right. You
+ need to something like emacs with many configuration (transient
+ is helping to do that) without scaring the users. 
+ - Everyone uses emacs differently, so unclear how people will
+ really use it. (PlasmaStrike) For example consult-omni
+ (elfeed-tube, \...) searching multiple webpages at the same
+ time, with orderless. However, no webpage offers this option.
+ Somehow those tools stay in emacs only. (Corwin Brust) This is
+ the strength of emacs: people invest a lot of time to improve
+ their workflow from tomorrow. \[see xkcd on emacs learning curve
+ vs nano vs vim\]
+ - [https://github.com/armindarvish/consult-omni](https://github.com/armindarvish/consult-omni)
+ - [https://github.com/karthink/elfeed-tube](https://github.com/karthink/elfeed-tube)
+ - [https://www.reddit.com/r/ProgrammerHumor/comments/9d6f19/text_editor_learning_curves_fixed/](https://www.reddit.com/r/ProgrammerHumor/comments/9d6f19/text_editor_learning_curves_fixed/)
+ - A: emacs is not the most beginner friendly, but the solution
+ space is very large
+ - (Corwin Brust) Emacs supports all approaches and is extensible.
+ (PlasmaStrike) Youtube much larger, but somehow does not have
+ this nice sane interface.
+
+- Q: Do you think the Emacs being kinda slow will get in the way of
+ being able to run a lot of scoring algorithms?
+ - A: The code currently is dumb in a lot of places (like going of
+ all files to calculate a score), but that is not that slow
+ surprisingly. Elisp enumerating all files and multiplying
+ numbers in the emacs repo isn't really slow. But if you have to
+ search in files, this will be slow without relying on ripgrep on
+ a faster tool. Take for example the search in info files / elisp
+ info files, the search in elisp is almost instant. For
+ human-size documents, probably fast enough \-- and if not, there
+ is room for optimizations. For coompany-size documents (like
+ repos), could be too small.
+
+- Q: When do you have to make something more complicated to scale
+ better?
+ - A: I do not know yet really. I try to automate tasks as much as
+ possible, like in the emacs configuration meme "not doing work
+ I have to do the configuration". Usually I do not add web-based
+ things into emacs.
+
+## Notes
+
+- I like the dedicated-buffer interface (I'm assuming using
+ magit-section and transient).
+- Very interesting ideas. I was very happy when I was able
+ to do simple filters with orderless, but this is great \[11:46\]
+- I dunno about you, but I want to start using p-search
+ yesterday. (possibly integrating lsp-based tokens
+ somehow\...)
+- Awesome job Ryota, thank you for sharing! 
+- Very interesting ideas. I was very happy when I was able to do simple filters with orderless, but this is great
+- git covers the "multiple names" thing itself: see .mailmap
+- thiis is a git feature, p-search shouldn't need to implement it
+- To me this seems to have similarities to notmuch -- honestly I want notmuch with the p-search UI :) (of course, notmuch uses a xapian index, because repeatedly grepping all traffic on huge mailing lists would be insane.)
+- (notmuch also has bookmark-like things as a core feature, but no real weighting like p-search does.)
+- YouTube comment: thats novel and intersting . The ship wrek analogy was perfect too
+- YouTube comment: Wow... thank you
[[!inline pages="internal(2024/info/p-search-after)" raw="yes"]]
diff --git a/2024/talks/papers.md b/2024/talks/papers.md
index c4c457c7..bbff053d 100644
--- a/2024/talks/papers.md
+++ b/2024/talks/papers.md
@@ -47,6 +47,93 @@ See also:
[[!taglink CategoryOrgMode]]
[[!taglink CategoryRoam]]
+# Discussion
+
+## Questions and answers
+
+- Q: how do you convince your coauthors to use emacs?
+ - (not yet answered)
+- 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!
+ - A: I saw this one before and I guess it would be possible to do that, to use Org documents only as the way that you are writing papers. Maybe you can just use that as a template that you're going to export. If you are familiar with LaTeX, it's going to be more useful, and maybe more convenient to work with inside of Emacs. But then I'm not 100% sure if that's... How do you say that? Maybe, in my opinion, the benefits of using org-roam in that setup is that you can link the things. For me, I'm using the search function for org-roam to just navigate between the files. So that's really some, a good advantage, but like, yeah, that could be, like Leo said in the presentation, that's some, maybe that's something you can start using org-mode with to write papers. So yeah.
+ - Agreed on opinion of working in org vs LaTeX
+- Q: How about connecting Emacs Org-Roam to Zotero? Is that something you have experience with?
+ - A: You could export your bibliography from Zotero to bibtex.
+ - Tip: check out the Better Bibtex plugin and its handly \"Keep
+ updated\" option - I do this selecting biblio.bib file in roam
+ folder as target
+- Q: Out of curiosity, how do you manage your bibliography? Do you do it from inside Emacs, or using a separate program like Zotero?
+ Because personally, I have struggled to do it from Emacs, although I
+ have wanted to for sometime. I see, then I am just lazy and don\'t
+ want to do it by hand -_-
+ - A: So the way I manage that is I just have a couple of .bib files that I edit by hand, where I put the reference when I find them. And yeah, I just showed very briefly in the presentation, but the way. One of the great thing with the org reference system is that if you have your bibliographic files that are connected to that system, you can just like, you can put the link, the reference to the paper, like click on it from your org note, and then you can open the PDF. You can open the DOI link to open the whatever publisher page. So no, I don't use Zotero and I just edit bib or bib files by hand in Emacs.
+ - I understand the appeal for having it integrated in the browser. Maybe that's something I should look up, actually, because right now I just like doing it very much by hand, like going on the publisher page and copying the bibtex block and just using putting that in my file. Yes, it can be not a very efficient workflow on that side. But after that, you're having the PDF and having it inside the note.
+- Q: How do you start a new document? There are a lot of headers you
+ have to setup! Do you use a template? I'm curious if they use
+ yasnippets to deal with all of those latex/org meta commands? (IRC:
+ gringo)
+ - A: At present, not using snippets (but considering).  Currently
+ re-uses previous doc as template.  There's reconciling template
+ received from the journal/publisher.
+- Q: What do you think of using citar with org-roam-bibtex? It seems
+ that bibtex-completion is tied to org-roam-bibtex.
+ - A: Has not explored citar. I am pretty sure org-roam-bibtex
+ works with citar.
+- Q: Most academic journals insist that papers are formatted in their
+ own custom LaTeX documentclass.  Does org-roam make it easy to do
+ that? (jmd)
+ - A: No.  Makes a custom org latex class, to the import the cls;
+ then putting the template provided in the headers of the
+ document, or as needed in the body block.  Then there\'s manual
+ adaption.  When using LaTeX, you care much about the output of
+ the document; each domain/field of research has its own flavour
+ of expectations.
+- Q: Are you using zotra
+ ([https://github.com/mpedramfar/zotra](https://github.com/mpedramfar/zotra))
+ or org-ref ?
+ - Never heard of it. That's something I'm going to have to look into.
+- Q: How much of this is tied to org-roam specifically?
+ - Not that much
+
+## Notes
+
+- Presentation org notes formatted for org-present: [https://gitlab.com/sunoc/emacsconf-2024-presentation](https://gitlab.com/sunoc/emacsconf-2024-presentation)
+- Thank you for this! I am using org to export my CV, and had to
+ figure out a few of these things. Lots of new bits for me to
+ explore.
+- Thanks, good presentation.
+- Those exports look awesome
+- Nice demo, thanks!
+- How'd he get that image on the right page? ;-)
+- I wonder if work has been done to export an ODT document with citations in zotero's format
+- Yeah, that's what I enjoy about citations, It's a sort of universal link.
+- I wonder how much LaTeX experience is wrapped up in that export
+ process
+- The problem-solving aspect of tinkering with Emacs is a boon.
+- The reference management that Vincent demo'd comes from org
+ integration. You wouldn't have that functionality with bare
+ LaTeX/Typst, etc. 
+- Org to typst converstion:
+ [https://github.com/jmpunkt/ox-typst](https://github.com/jmpunkt/ox-typst)
+- One way I've seen to go about headers is having a template file:
+ [https://www.youtube.com/watch?v=0qHloGTT8XE](https://www.youtube.com/watch?v=0qHloGTT8XE) that you can import with a "#+SETUPFILE:" line
+ - Then you just override the document specific stuff right gs-101? In that case a snippet would come in handy
+ - Yes, for packages not featured in the template I just add them to the file with "#+latex_header:"
+- Maybe down the line we can make ties with LLMs to translate styles
+- IIRC pandoc also now has tools to do the conversion. I don't know how good that is though.
+- It's a good point. I think a lot of people use org mode as their default document editing syntax, so being able to use the same syntax for your papers instead of switching contexts to latex is helpful
+- The reference management that Vincent demo'd comes from org integration. You wouldn't have that functionality with bare LaTeX/Typst, etc.
+- AFAIK, pandoc converts everything to an intermediate format, so you do lose some information.
+- i come from latex originally, before i started trying to do everything from org, so i recognize how powerful latex is. typst is just not there yet at all.
+ - mainly started learning typst as i orginally started with latex but got overwealmed
+- as long as you don't have typesetting software specific code in your org file, sure
+- I learned LaTeX just to write good looking math in Org notes lol
+- for journals, you usually need appropriate documentclass. That does not require org-roam. Just Org itself
+- Thanks Vincent! work in progress
+- just got this in mind when reading here about typst ;-) https://xkcd.com/927/
+- I also have the video saved in the bibliography, so I can go to the file by just opening the citation link.
+- I'll check out Zotra now, seems really interesting. better.
+- Thanks for sharing your techniques Vincent!
+
[[!inline pages="internal(2024/info/papers-after)" raw="yes"]]
[[!inline pages="internal(2024/info/papers-nav)" raw="yes"]]
diff --git a/2024/talks/pgmacs.md b/2024/talks/pgmacs.md
index 232294ac..8d901d80 100644
--- a/2024/talks/pgmacs.md
+++ b/2024/talks/pgmacs.md
@@ -7,7 +7,7 @@
# PGmacs: browsing and editing PostgreSQL databases from Emacs
-Eric Marsden (he/him) - <mailto:eric.marsden@risk-engineering.org>
+Eric Marsden (he/him) - <mailto:eric.marsden@risk-engineering.org>, [@emarsden@mastodon.social](https://mastodon.social/@emarsden)
[[!inline pages="internal(2024/info/pgmacs-before)" raw="yes"]]
@@ -31,6 +31,8 @@ over the network or over a Unix socket.
The talk will provide an overview of the functionality of PGmacs, then show how it can be easily
extended to display images stored as database BLOBs inlined in a row-list buffer.
+<https://github.com/emarsden/pgmacs>
+
About the speaker:
Eric Marsden developed his first Emacs packages
@@ -41,6 +43,119 @@ working on his PhD. He continues to use Emacs Lisp
in his spare time.
+# Discussion
+
+## Questions and answers
+
+- Q: This is brilliant, thank you! Do you know if PGmacs works with
+ TRAMP? I often use TRAMP multi-hop to access databases - both
+ remotely when accessing via a 'bastion server' and locally when
+ using OCI containers
+ - A: There is no TRAMP support, I'm afraid. PGmacs is directly
+ connecting to the database server over the network. You can set
+ up ssh tunnels, but that would be done separately from Tramp.
+ Thanks :)
+ - you can tunnel arbitrary data over ssh
+ - ssh subsystems are the thing to look at, I
+ think\... I might look at it
+ - (sftp works that way: basically you can put
+ arbitrary progams at the remote end\... like, oh, say,
+ pgsql. transparently to the ssher.)
+ - Possibly PGmacs could setup the tunnel itself,
+ using TRAMP?
+ - With docker.el, kubel, etc, it's often possible to for example
+ select a container/pod/whatever that is hosted on a machine
+ you've connected to via TRAMP (such as
+ /podman:\<image\>:/path/), and trigger a terminal/eshell as well
+ as port-forwards and other similar things. It'd be nice to be
+ able to use this tool in a similar way since it would open up
+ the ability to use it with complex connection configurations.
+ Doing SSH tunnels manually is ofc totally fine in practice :)
+- Q: \<Donovan\>Great work! I'm impressed. How did you come up with
+ this brilliant idea?
+ - A: First got the idea by looking at sqlite-mode
+- Q: Is sqlite-mode also capable of all of this functionality (table
+ relations, etc)? If not, will it be possible to abstract out this
+ functionality from pgmacs somehow?
+ - A: I'm not veyr familiar with sqlite-mode but  it looks more
+ basic. There are differences between the sql dialects so it will
+ be difficult to abstract it out.
+- Q: Would it be possible to move it into Emacs tree? Are the
+ maintainers interested in it?
+ - A: Currently its at a very early stage and is being updated
+ regularly. I also have some philosophical reasons to not do it
+ regarding copyright transfer to the FSF.
+- Q: Almost missed this one, so glad I didn't, but this may have been
+ answered already: what do you use for the in-buffer tables? vtable?
+ - A: vtable but "forked" (some changes/improvements, may
+ consider "merging" back with vtable core work)
+- Q:
+ - A:
+
+## Notes
+
+- I have got 270 tables, and it stays there forever "loading"
+ tables, and nothing appears.
+- Thanks for checking it out! You may have an authentication failure,
+ and PGmacs is not very good at showing that in the connect phase.
+ Switch to the \*Messages\* buffer and see whether there's an error
+ message there.
+ - This is happening with me as well. I noticed this error message
+ in Postgres Logs. It works if I open the postgres database.
+ - db-1  \| 2024-12-08 18:58:41.524 UTC \[48\] STATEMENT: 
+ CREATE EXTENSION IF NOT EXISTS vector
+ - db-1  \| 2024-12-08 18:59:13.831 UTC \[50\] ERROR:  could
+ not open extension control file
+ "/usr/share/postgresql/14/extension/vector.control": No
+ such file or directory
+ - In \*Messages\* buffer, this is what I see
+ - pg-bind: Wrong type argument: stringp, 97
+- OK, thanks for this feedback. It looks like your Postgres vector
+ extension is not well set up, but that really shouldn't be causing
+ a complete connection failure. You can comment out the line
+ (pg-vector-setup con) in function pgmacs-open in pgmacs.el and see
+ whether that helps
+ - - Let me try that and report back.
+ - I got this error: pg-do-startup: Process postgres not
+ running: failed with code 111
+ - OK, that means that the network connection failed. There is
+ probably more error information in the backtrace
+ - Ah sorry, had stopped the pg. This time I got the same error
+ - pg-bind: Wrong type argument: stringp, 97
+ - But it didn't try to load vector extensions (from pg logs).
+ - With toggle-debug-on-error, this is the backtrace
+ - [https://gist.github.com/ankitrgadiya/d9ae038489e4f680e3037e2e61584312](https://gist.github.com/ankitrgadiya/d9ae038489e4f680e3037e2e61584312)
+ - OK, thanks for that backtrace. I don't immediately see what
+ is wrong here. There is something strange about that
+ shared_urls table, it seems. Are you using pg-el from the
+ github repo? 
+ - I created the github issue to continue the discussion:
+ [https://github.com/emarsden/pgmacs/issues/9](https://github.com/emarsden/pgmacs/issues/9)
+- - - BTW I'm using the postgres docker image.
+
+- This is amazing! Image inline :o !!
+
+- I'm impressed by the inline images.  Just sprinkle a little elisp
+ and voila.
+
+- A PostGIS point field -\> osm.el integration would be very cool
+- Interesting idea, will look into that.
+- Super slick Emacs/PG hacking and presentation!
+ Eat your heart out, MS Access
+- another package I never knew I needed
+- Very cool, I'm currently using PG on a small project and
+ it's always a pain to leave emacs to do checks in the database.
+- I just wish it had existed when I was doing massive db
+ work in the 90s/2000s
+- Just installed it, to prevent me from forgetting about
+ it.
+- I just wish it had existed when I was doing massive db work in the 90s/2000s
+ - Better 20+ years late than never 😆
+- there is a grantback if you assign copyright to the FSF: you get all the rights you gave away right back again
+- Thanks Eric, looks fantastic, and quite eager to look into those vtable enhancements myself (thanks for answering)
+- YouTube comment: Very impressive, thanks!
+- YouTube comment: Finally a perspective on a potential real excel killer.
+- YouTube comment: How is the duckdb more coming along?
[[!inline pages="internal(2024/info/pgmacs-after)" raw="yes"]]
diff --git a/2024/talks/project.md b/2024/talks/project.md
index 65c33ac1..7aa44df8 100644
--- a/2024/talks/project.md
+++ b/2024/talks/project.md
@@ -56,6 +56,200 @@ He switched from using LaTeX to Org-mode recently.
He will discuss the features of the writing log and the joys of editing it in Org-mode.
+# Discussion
+
+## Questions and answers
+
+- Q: what does 0573 means in your init. file name?
+ - A: Index number used to "name"/ describe a project. My
+ project folders in my home directory are of the format
+ ####stubOfTheProjectsFullName. Maybe i will describe my project
+ numbering system in a future talk. It helps enormously in
+ navigating between projects and stayting organized. I store the
+ project ID number and the folder name in a sqlite database that
+ I pop open with a bash alias to the DB Browser for SQlite. I
+ also use the Project ID to track time spent on each project to
+ the nearest 15 minues increment. I do this time tracking once
+ every several hours 2-4 times a day. If I cannot remember what I
+ was doing, nothing is recorded. This is important for keeping
+ the data accurate. This practive is a pain but the data are
+ valuable for self-assessments and annual reports.
+- Q: <gringo\> What does Zettelkasten mean?
+ - A: <vidianos\> It's a notetaking method <Neil\>Useful
+ overview at
+ [https://zettelkasten.de/introduction/](https://zettelkasten.de/introduction/)
+ - A: Pls cf.
+ [https://en.wikipedia.org/wiki/Zettelkasten](https://en.wikipedia.org/wiki/Zettelkasten)
+ An augmented org-roam is found in the zetteldesk.el project by Vidianos [https://github.com/Vidianos-Giannitsis/zetteldesk.el](https://github.com/Vidianos-Giannitsis/zetteldesk.el). See  his talk from EmacsConf 2022: 
+ [https://www.youtube.com/watch?v=dJ859kiFRLg&t=0s](https://www.youtube.com/watch?v=dJ859kiFRLg&t=0s)
+ - A: A great resource is Sönke Ahrens's "How to Take Smart
+ Notes" (to get you thinking about the progressive evolution of
+ your note taking; and a solid walk through of Zettlekasten in
+ practice/implementation) . There also is a German edition of the
+ book, it's called: "Das Zettelkasten-Prinzip". The book
+ "Antinet Zettelkasten" by Scott Scheper clarifies several
+ misconceptions about the Zettelkasten Method (see chapter 3). He
+ spent months replicating the analog version that Luhman used and
+ gained a number of important insights. I have seen the method
+ applied in ways that were never intended. I think that these
+ vairant approaches are innovative and can enhance productivity,
+ but they can cause some confusion. The ultimate source is the
+ [https://niklas-luhmann-archiv.de/](https://niklas-luhmann-archiv.de/).
+ - Smart notes are linked to one another. They make up a kind of
+ hypertext, similar to a wiki, as a whole.
+ - Org-Roam and Denote are two implementations that can support the
+ slipcase; backlinks are important (and also/perhaps a
+ consideration of the hierarchy)
+- Q: How many papers are you writing at the same time?
+ - A: Working on 10--15/y, publishing 1--8/y
+ - On a given day, 2 papers/day usually, sometimes up to 5
+ papers/day
+- Q: How you capture those ideas when when you are away from Emacs?+3
+ - A: Digital recorder for recording thoughts, especially during
+ daily commute. I also mentioned caputing thoughts in
+ 750words.com. I was an early user (May 2012) and was
+ grandfathered in with a free subscription for life. This is why
+ I am reluctant to give it up. I started learning to use Emacs
+ in 2000. I have not yet moved all of my workflow to Emacs, but I
+ am getting there. The other site that I use when I exceed the
+ 5000 word limit at 750words.com is WriteHoney
+ [https://app.writehoney.com/write](https://app.writehoney.com/write).
+ - Whisper AI to transcribe the recordings. See this site for the
+ post transcription scripts that I apply to clean up the text before I see the transcript: [https://github.com/MooersLab/bash-whisper-transcription](https://github.com/MooersLab/bash-whisper-transcription).
+ I also jot down notes but not so much after I started using the
+ digitial voice recorder (DVR). Dragging the audio file to the
+ folder where I do the transcriptions does take a wee bit of time
+ so I try to be judicious about selecting when I turn on the DVR.
+ I should probably write a Elisp function to transcribe the audio
+ recording from the DVR, save the transcript, and delete the
+ audio recording so that I can streamline this process. There is
+ always a way to do things more efficiently with Emacs!
+ - sachac: oooh, I can recommend getting an inexpensive lapel mic if you don't already have one. I'm also experimenting with using keywords to organize my audio braindumps.
+- Q: What if an ideas does not belong to any current working manuscript?
+ - A: Sandbox area in a log file. The Sandbox area is called
+ "Future additions and tangents" in the template log file and
+ is also used to draft sections of the paper that I am uncertain
+ that I will retain.
+ - If not related, kept in an external diary
+- Q: It looks like you have daily log per project, what do you think
+ about just using single daily notes and cross referencing different
+ projects?
+ - A: I have \> 800 projects per year in 10 categories. Several
+ years ago, I made org files for each category with 1000
+ headlines, but this proved to be too unwieldy for me at the time
+ as a noivice org-mode user. The log files for the manuscript
+ projects wind up with 50-100 pages of content each so the
+ single-threaded nature of Emacs hampers scrolling through such
+ huge org files. In addition, I want to keep all other projects
+ out of sight and mind while focused on the project at hand.
+- Q: If there were one habit from your process (referencing your extensive flow chart) that you want active learners/professional researchers to adopt, which would it be and why?
+ - Keeping a daily diary is essential for overcoming the fears of
+ forgetting and losing momentum. These fears are the maiin
+ barriers to switching between projects on a given day. The
+ in-grained preference is to do binge writing, which I still
+ succumb to doing sometimes, but I am trying to avoid binge
+ writing with this system.
+- Q: I see that you use checkboxes for tasks. Did you know
+ you can format headings to support tracking them? Like this: TODO
+ Heading \[0/4\]
+ - A: Yes, I convert some of my most important todo items into
+ \*\*\* TODO headline to be picked up by arg agenda. I add the
+ writing-project log file to the list of org files that org
+ agenda searches. I use a Elisp function to add new \*\*\*TODO
+ items to the list when they come to mind. I will post this
+ function shortly on the AAAreadme of [https://github.com/MooersLab/writingLogTemplateInOrg](https://github.com/MooersLab/writingLogTemplateInOrg).
+ This eliminates the need to refile the idea, which I am too
+ undisciplined to do.
+- Q: I actually love this one! But it creates as much separated log as
+ there is project. You limit yourself to work only on how many
+ project per day? How do you explore them back (if you ever)?  I
+ assume your org files is growing exponantially over time. You said
+ about "valuable when receiving critiques?" (Donovan)  
+ - A: Thank you for the opportunity to make clarifications. I try to
+ work on two writing projects a day on average terms of doing
+ generative writing tasks. Yes, there is one writing-project log file
+ per project. They tend to grow to a length of 50-100 pages by the
+ time the paper is published. Because of the ability to fold
+ sections, I have not run into trouble with the longer lengths.  I
+ use the template on GitHub to start the log file for a new writing
+ probject. I could consider retaining a log file for a sequel paper
+ to retain the history of decisions made in the first paper but I
+ would duplicate it and rename the copy with the new project number.
+ I will go through an old log file for a published paper from years
+ ago to recover details on how I carried out certain procedures. The
+ history of decisions in the daily log is invaluable for responding
+ to probing questions by reviewers about why we decided to do certain
+ procedures.
+- Q: Sorry, not really related to the talk's topic but can
+ you share the pymol project that shown in the writing log slide
+ earlier in the talk? I am interested in the paper/project.
+ - A: Thank you for your interest on the PyMOL project. I have not published that particular project yet, but a number of related PyMOL projects are on my GitHub site. The most popular is MooersLab/PyMOLshortcuts [https://github.com/MooersLab/pymolshortcuts](https://github.com/MooersLab/pymolshortcuts). The associated paper is here [https://onlinelibrary.wiley.com/doi/10.1002/pro.3781](https://onlinelibrary.wiley.com/doi/10.1002/pro.3781). I have run PyMOL in Jupyter [https://github.com/MooersLab/jupyterlabpymolpysnips](https://github.com/MooersLab/jupyterlabpymolpysnips)  [https://pubmed.ncbi.nlm.nih.gov/33967632/](https://pubmed.ncbi.nlm.nih.gov/33967632/) ,  Colab   [https://github.com/MooersLab/colabOpenSourcePyMOLpySnips](https://github.com/MooersLab/colabOpenSourcePyMOLpySnips)  [https://proceedings.scipy.org/articles/majora-1b6fd038-002](https://proceedings.scipy.org/articles/majora-1b6fd038-002), RStudio  [https://github.com/MooersLab/rstudiopymolpysnips](https://github.com/MooersLab/rstudiopymolpysnips), and Org-mode [https://github.com/MooersLab/orgpymolpysnips](https://github.com/MooersLab/orgpymolpysnips). I gave a talk about the later at emacsconf 2021
+ [https://emacsconf.org/2021/talks/molecular/](https://emacsconf.org/2021/talks/molecular/). 
+- Q: Have you tweaked your Emacs configuration at all
+ \-- with cus keybindings, etc \-- to support the process you
+ demonstrated?
+ - A: Thank for the good question because my talk was focused on a template org document. I use org-ref heavily. I use it to add Bibtex entries, download PDFs of research articles by their DOIs, and rename them with the citekey. I made several Elisp functions that do minor tasks to support my worflow. I will post them github. 
+- I like to separate my ZettelKasten and GTD  with
+ daily and global, Zettelkasten daily would be a journal. The reason
+ to keep them seperated is daily is to start with a black sheet and
+ can be thrown ignored if not done well, If good enough goes into
+ zettel etc.
+ - Blaine: That is a good suggestion. Thank you for sharing it.
+
+## Notes
+
+- Hi, This is Blaine. I am checkin in!
+ - Hey :)
+- Hello from Madagascar :) Hello from Brazil (there's an old song
+ about madagascar:
+ [https://www.youtube.com/watch?v=k206JIkXJbk](https://www.youtube.com/watch?v=k206JIkXJbk))
+ :) Hello from Uganda Hello from ISS\^\^ The International Space Station? 0_0 Hello from US
+ - Blaine: Hello world and outer space!!!
+- It's so awesome seeing these talks that are not strictly software
+ development related
+ - Thank you!
+- It's amazing to see how much people do with emacs
+ - Thank you!
+- \[MooersLab/writingLogTemplateInOrg: Template for
+ writing.log in
+ org-mode\]([https://github.com/MooersLab/writingLogTemplateInOrg](https://github.com/MooersLab/writingLogTemplateInOrg))
+- it's really impressive. it also makes me realise that
+ people are a lot more organised than could ever be.
+ - Blaine: I have been studying time management for decades; it is still a stuggle for me.
+- That chart looks complicated. It can get pretty complicated
+ as its deeply personal and has seen several revisions.  (Sounds like
+ the chart is descriptive and not prescriptive)
+ - Blaine: Right, is just descriptive. Yes, that concept map it a bit overwhelming. I plann to make a slimmed down version. Thank you for the feedback.
+- I love the fact. that "shower" is called out as an
+ Ideation "feed" in the writing process chart :-) Takes shower
+ thoughts to a whole new level...
+ - Blaine: It is a feature of our insane 24-7 culture.
+ - I missed that, but that's kinda cute. (Kinda true too)
+ - I do love the "Shower" element in that diagram.
+ - Wow didnt notice the Shower element
+- The man is trying to treat cancer, I expected nothing
+ less complicated than this gg
+ - Blaine: Thank you! Yes, our work has added years of additional life to many cancer patients.
+- There is a package \-- I think it is 'org-tracktable
+ \-- that records word counts by session in an inline block within
+ org files 
+ [https://github.com/tty-tourist/org-tracktable](https://github.com/tty-tourist/org-tracktable)
+ - Blaine: I will check it out. Thank you for the link! My time tracking database has 10,848 rows after 2.5 years. It may be over 100,000 rows long by the time that I expire. I decided that a org-mode table would be not appropriate. I adandoned the Google Sheet Workbook over a year ago because it is redundant with entries in my timespent.db. I did not like the duplicated effort.  I am now testing the use of a heat map for a similar writing accountability purpose. It tallies my writing effort per day from my timespent.db file. I enter \`hmj\` for Heat Map of Journal article writing to effort.  This is a long bash alias to to script and commands that generate the heatmap and post it on Github. The GitHub repo for the script is here [https://github.com/MooersLab/writing-time-spent-heatmap](https://github.com/MooersLab/writing-time-spent-heatmap). I have similar aliases for makng heatamps for grant writing, teaching, and service, but my daily focus is on article writing.
+- oohhh using a drawer for stashing these details away is a
+ nice idea!
+ - Blaine: Thank you! Org-mode has so many nifty feature like drawers.
+- I'm impressed by how systematic he is about everything.
+ - Blaine: Thank you!
+- I'm thankful for people like the presenter that dedicate
+ so much of their time to researching treatments for the horrible
+ diseases that people suffer.
+ - Blaine: Thank you!
+- I feel like that writing log can be turned into an emacs mode. the spreadsheet that was shown earlier
+- Also noticed that he uses Emacs without any themes.
+ - Evidence that the default theme is sufficient for some. Black on white, however uncomfortable to me, really is what most people want.
+- So his car gets a lecture every morning. I suspect his car is more highly educated than I am
+- No cell phone. Just emacs and superhuman focus lol
+- YouTube comment: excellent presentation that I will definitely keep as a reference!
[[!inline pages="internal(2024/info/project-after)" raw="yes"]]
diff --git a/2024/talks/regex.md b/2024/talks/regex.md
index 32ea74f5..dbc3d55c 100644
--- a/2024/talks/regex.md
+++ b/2024/talks/regex.md
@@ -29,6 +29,94 @@ Work: Composeable build tools, parsing frameworks, and cryptographic messaging.
This talk will cover my train of thought over the course of this year on how regex engines in general may be improved, and the discussions with emacs-devel that have helped me along. I hope this talk will convince people of the boundless future directions in text search. My PhD research will be inspired by the expressivity and power of Emacs.
+# Discussion
+
+## Questions and answers
+
+- Q: A bit off topic, but how did you get the emoji into your slides?
+ I\'m assuming you exported via Beamer to PDF. Thank you very much
+ for the swift answer. Great presentation, too🙏🏻
+ - A: \\usepackage{twemojis}!
+ [https://ctan.math.washington.edu/tex-archive/macros/latex/contrib/twemojis/twemojis.pdf](https://ctan.math.washington.edu/tex-archive/macros/latex/contrib/twemojis/twemojis.pdf)
+ - and yes beamer to pdf! i used org-beamer too
+ - had to break out of org a couple times
+ - For LaTeX packages supporting emojis cf.
+ [https://www.ctan.org/search?phrase=emoji](https://www.ctan.org/search?phrase=emoji)
+ - i tried just pasting unicode but had an error and
+ couldn\'t figure it out in my mad dash for making this
+ in time
+ - In order for this to work you need the same kind of
+ unicode support over the whole toolchain, from
+ editor to tex engine to font.
+ - i\'m a big fan of toolchains so this makes me want
+ to fix it more :) thanks!!
+
+## Notes
+
+- i have a 50-minute version of this talk which i will be posting
+ somewhere on my page
+ [https://hypnicjerk.ai](https://hypnicjerk.ai)
+ after the conference!
+ - oh good! I wish the last talk I attended with this many slides could have done that (Florian Weimer's traditional future directions for glibc talk at the GNU Tools Cauldron: every year he gets through a third of it and puts the rest on the schedule for next year!)
+- great, the slides are now available at https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--slides.pdf and from the talk page
+- i was not able to add subtitles in time for the conference, so
+ please please ask questions here or on irc during the talk (even
+ just asking for what i just said) and i will do my best to answer
+ all of them!
+- Something you might be interested in Rak a lesser known grep
+ alternative dosent seem to have a emacs frontend though
+ - oooh!
+ [https://github.com/danlucraft/rak](https://github.com/danlucraft/rak)
+ this ?
+ - helm-rg is based on helm-ag which i previously contributed to
+ and i think ag and ack have some interesting features which
+ avoid doing some online work we don't need to do
+ - no emacs frontend? sounds like a challenge\...!
+ - [https://github.com/lizmat/App-Rak](https://github.com/lizmat/App-Rak)
+ - thanks so much!!
+ - [https://www.youtube.com/watch?v=YkjGNV4dVio&t=167s](https://www.youtube.com/watch?v=YkjGNV4dVio&t=167s)
+- followup on emacs-devel with NullNix's suggestion to make the cache
+ buffer-local:
+ [https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00299.html](https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00299.html)
+
+- I think having an LLM do this is just perfect! all the people asking for it want is comforting lies anyway, and LLMs are really good at those!
+ - LLM's can be run locally. for example using localai
+ - cosmicexplorer: yes! but the weights come from somewhere! they come from training in cloud services!
+ - Running locally is not the same as reproduce it localy... I guess...
+ - It is like having a proprietary binary blob running on the linux kernel.
+ - cosmicexplorer: that is true. it does get a bit iffy when running open source models trained on remote services when using localai.io
+ - cosmicexplorer: inflicting a hidden dependency on my users :( :(
+- on other things you should never do, that AI adjustment of the speaker image is *really annoying*
+ - I have literally blanked off that part of my screen with a piece of paper so I don't have to see it, sorry
+ - excellent talk though!! wish it was twice as long
+ - cosmicexplorer: yes :( thanks for feedback. next time i won't be so embarrassed with my bed
+ - cosmicexplorer: i captured this live in obs with the filtering so i don't even have the video stream without it
+ - I recently told somebody about Nvidia brodcast studio for the good green screen removel which annoyed me becouse it is 1 not open source. 2 I use amd and can't use it nor is it multiplatform 3 I use linux and don't know if you can run if from linux :( anybody know of a better solution?
+
+- ohhh I never realised the reason the match data isn't reified was so tied up with the implementation. not too surprising in hindsight, thats the emacs way :)
+- I would recommend having the regex cache be *in* a buffer-local variable. most of the speedups, works everywhere maybe?
+ - cosmicexplorer: SMART!!!!!!
+ - cosmicexplorer: could also then explicitly have a cache busting API
+- Q: What about tree-sitter? Is it better? Does it uses regexps?
+ - cosmicexplorer: basically: yes tree-sitter solves this, but no it does not use regexps
+ - cosmicexplorer: so it's really much more applicable for well-specified programming language definitions
+ - cosmicexplorer: but it means we can let tree-sitter solve problems we don't want to ourselves
+ - cosmicexplorer: they depend on the current syntax table which is buffer-local, and on case-folding from the current buffer
+ - so only buffer-local, so a buffer-local cache should be the right level then
+ - just making sure it wasn't anything finer-grained than that :)
+ - cosmicexplorer: yes! and also they very very rarely change
+ - hm, you could probably share many buffer-local caches with identical values for syntax tables, case folding etc even :)
+ - more complex though, and likely marginal gains
+- worth making sure regexes can't depend on things like overlays, but I don't see how they could or a match over a buffer might require recompilation *in the middle of a match*, which is overkill even for emacs :P
+- using orderless and consult with consult ripgrep means you have the performant part outside of emacs and powerful emacs facilites don't need to be as performant while still being fast
+ - cosmicexplorer: looking up orderless and consult now :)
+- I was meaning with the consult-ripgrep command from the consult package
+- wonders about combining this with p-search from yesterday... :)
+
+- This is brilliant
+- Great talk!
+- That was great, thank you, your enthusiasm is infectious!
+- That was a great talk, thanks!
[[!inline pages="internal(2024/info/regex-after)" raw="yes"]]
diff --git a/2024/talks/rust.md b/2024/talks/rust.md
index e994d28f..29567813 100644
--- a/2024/talks/rust.md
+++ b/2024/talks/rust.md
@@ -26,6 +26,132 @@ About the speaker:
Hardware Engineer with interest in low-level programming and the hardware-software boundary.
+# Discussion
+
+## Questions and answers
+
+- Q: Have you considered using CRDTs to share buffers between threads
+ and merge any concurrent edits automatically?
+ - A: While mathematically correct, CRDT does not always produce a
+ useful answer. With different packages, this will the issue: not
+ a useful result. [https://www.moment.dev/blog/lies-i-was-told-pt-1](https://www.moment.dev/blog/lies-i-was-told-pt-1)
+ - This question answer about CRDT's is by itself showing a lot of problem awareness
+- Q: Why hosted on GitHub? GitHub is nonfree. Is it possible to report
+ bugs/send patches without using GitHub?
+ - A: Email patches are possible. Github is what the speaker knows.
+- Q: Do you think it's possible to achieve 100% compatibility with
+ current emacs code? 
+ - A: Most should be compatible (since elisp package is the biggest
+ emacs strength) but there might be differences on purpose.
+- Q: troyhinckley: so you're re-implementing elisp in
+ rust?  have you considered using a more modern lisp, such as scheme?
+ \[11:03\]
+ - A: No actually. Only trying to reimplementing the C part of
+ emacs, replacing it by rust. There are two other talks in the
+ conference to use something else (guile and scheme).
+- Q:can remacs be reused?
+ - A: Some of the code and some of the ideas (documentation, ideas
+ and approach to problems) were taken. But different model: in
+ remacs everything is an external type. Here, instead trying, to
+ use the builtin type reimplementating the objects instead.
+- Q: hello, great talk, fascinating topic! I am a
+ contributor of the compiler team of the Rust prog. language (though
+ I don't delve in the code myself). Do you have specific features
+ from the Rust compiler that are missing (or are nightly-only) that
+ you would take advantage of?  10:05:38 
+ - A: Polonius: the new borrow checker. Would solve
+ lifetime-tracking issues. A better tracking mechanism would be
+ better.
+ - A: Enum with variant types to avoid boilerplate
+ [https://github.com/rust-lang/lang-team/issues/122](https://github.com/rust-lang/lang-team/issues/122)
+ - A: Allocator API could be better (still nightly-only)
+ - A: thanks! Dont forget to fill out the survey :)
+ [https://blog.rust-lang.org/2024/12/05/annual-survey-2024-launch.html](https://blog.rust-lang.org/2024/12/05/annual-survey-2024-launch.html)
+- Q: What are you thoughts on the GUI layer. Any plans on how to
+ reimplement it?
+ - A: Either GTK+ or direct GUI in Rust, but no concrete plan so
+ far.
+- Q: (not a question) Re. the GUI layer, the Gtk project has
+ automated bindings with a framework called "GObject
+ Introspection," which is what I am using for my "Gypsum" project.
+ Probably Rust has a GObject Implementation which you could use.
+ - A: Problem with Rust GUIs very new and mostly demo without
+ accessibility and test in all environements.
+- Q: If money could fix the problem, how much would it cost to ship
+ this with feature parity before 2026?
+ - A: Probably needs a couple people and more than one year of
+ work. Lots of testing required to fix all bugs.
+- Q: troyhinckley: elisp is implemented in c, so if
+ you're not implementing elisp in rust, are you using/keeping the c
+ implementation of elisp?
+ - A: Idea of the project is to keep the Elisp layer and changing
+ the C layer underneath that is currently called, replacing it by
+ rust. Elisp does not change. Plan is to be even be bug
+ compatible to emacs: Elisp should be perfectly compatible with
+ both C and rust. Elisp is fixed in this approach.
+- Q: sorry if you already discussed this, but will your Rust
+ implementation also be able to run Emacs bytecode? Or are you
+ implementing it at the Lisp level?
+ - A: Bytecode interpreter already exists (actually bytecode
+ compiler and interpreter was bootstrapped first as it is
+ implemented in Elisp).
+ - A: the bytecode is missing some OP-code that have not been
+ encountered so far.
+- Q: Cool, so will you also provide bytecode JIT compilation via
+ "libgcc" the way Emacs currently does?
+ - A: Eventually maybe, but a proper JIT would be better as it
+ includes type information to better optimize the code.
+-  Q: Is it possible to bootstrap without the interprerter?
+ - A: having only bytecode does not work, as some part are expected
+ to be interpreted with macros containing functions that are not
+ yet defined. You really need an interpreter for the lazy macro
+ expansion.
+- Q: How would you do the native module system?  What would be
+ different?  Sounded like part of an anwer about Rust Emacs modules
+ got cut off.
+ - A: There is an FFI, so it should be possible to have the same
+ thing. Could possibley implement FFI in elisp.
+- Q:  That was me who was discussing with you about
+ bootstrapping Scheme! (Not Guile, R7RS Scheme) Yes, it would be a
+ whole other thing than what you have done so far. But it would be
+ cool, because then you would be able to run the "Gypsum" editor on
+ top of your Emacs engine.
+ - A: I still think that would be really cool to
+ get working! we will have to collaborate on that more.
+- Q: elisp is implemented in c, so if you're not implementing elisp in rust, are you using/keeping the c implementation of elisp?
+ - IRC: of course they are implementing elisp in rust (?), what else could they mean?
+ - I think they misunderstood your question
+ - (not yet answered)?
+
+## Notes
+
+- Getting good vibes from this Rust work
+- (you can do the offscreen-cursor thing in current emacs
+ with enough effort. see scroll-in-place.el.)
+- Oooooh flow images.  My last expectation was Rust
+ making Dslide image animations slick
+- troyhinckley: Very cool talk! 
+- I recommend
+ [https://codeberg.org/](https://codeberg.org/)
+ (as a freedom-respecting github replacement)
+- one big problem with using gtk \-- there is a
+ \*two-decade-old\* unfixed bug in gtk where it keeps permanent
+ references to the x server etc (IIRC, its wayland support has
+ similar problems). this means a gtk emacs \--daemon crashes if you
+ connect to an x server and then close the x server down. this
+ is\.... unfortunate
+- I had not thought about the fact that we could just mutate functions on the fly just like data. Neat!
+- really good talk!
+- Getting good vibes from this Rust work
+- I'm spending half this talk going OOH and wishing we had this in current emacs
+- Very cool talk!
+- So looking forward to a faster multi-threaded Emacs :D
+- Well, it does sound like we need some scale to turn this from a multi-year idea to a next-year idea
+- ruby shows one advantage here -- they're reimplementing bits of the ruby C core in ruby, and *speeding it up* because their new jitter then sees the insides of it and can optimize the hell out of it. ruby is, of course, famously slow... but not as slow as elisp :)
+ - one wonders if emacs could benefit similarly...
+- one big problem with using gtk -- there is a *two-decade-old* unfixed bug in gtk where it keeps permanent references to the x server etc (IIRC, its wayland support has similar problems). this means a gtk emacs --daemon crashes if you connect to an x server and then close the x server down. this is.... unfortunate
+- yeah "of course" all new emacs efforts should be able to run elisp code; but it would be awesome if new lispy code could be written in scheme
+- YouTube comment: Really interesting approach. I like the humility in the beginning, the likes of "this is to try new approaches".
[[!inline pages="internal(2024/info/rust-after)" raw="yes"]]
diff --git a/2024/talks/sat-close.md b/2024/talks/sat-close.md
new file mode 100644
index 00000000..b4193477
--- /dev/null
+++ b/2024/talks/sat-close.md
@@ -0,0 +1,94 @@
+[[!meta title="Saturday closing remarks"]]
+[[!meta copyright="Copyright &copy; 2024 EmacsConf"]]
+[[!inline pages="internal(2024/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(2024/info/sat-close-before)" raw="yes"]]
+
+
+
+# Discussion
+
+- Thank you for all your patience!
+- Wheeeee! We made it to the end of the first day! Thank you so much
+ for joining us for the first day of EmacsConf 2024.
+- We\'re going to keep these closing remarks short so that people can
+ get some sleep in preparation for tomorrow (zaeph is in
+ Europe/Paris). We\'ll hang out a bit more tomorrow. But if you\'re
+ just here for today, you can read through the notes at your
+ leisure. 
+- Pre-recorded talks are up on the talk pages at
+ [https://emacsconf.org/2024/talks/](https://emacsconf.org/2024/talks/)
+ and at
+ [https://media.emacsconf.org/2024](https://media.emacsconf.org/2024)
+ . They\'re also on YouTube.
+- We\'ll work on extracting the live talks and Q&As in the weeks to
+ come. If you\'d like updates, please subscribe to the
+ emacsconf-discuss mailing list
+ ([https://lists.gnu.org/mailman/listinfo/emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss))
+- Feel free to spread the word (#EmacsConf #Emacs). There\'s another
+ day of fun talks tomorrow.
+- What did you like? Got ideas for making things even better? General
+ conference discussion/notes/community message board:
+ [https://pad.emacsconf.org/2024](https://pad.emacsconf.org/2024)
+- Stats: 
+ - gen: 177 peak + 14 peak lowres
+ - dev: 226 peak + 79 peak lowres
+- Thanks
+ - 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.
+ - This year\'s conference hosts are Leo Vivier and Corwin Brust.
+ Streams were managed by Sacha Chua and checkins by FlowyCoder.
+ - 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, and thanks to him and other people 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, and the media.emacsconf.org server. 
+ - The Free Software foundation is having it\'s semi-annual
+ fund raiser
+ - Supporting FSF, as well as helping projects like EmacsConf,
+ is the primary way to contribute financially toward the
+ development of Emacs and other GNU packages.
+ - Thanks to people who have donated to Emacsconf via the FSF
+ Working Together program! 
+ - [https://www.fsf.org/working-together/fund](https://www.fsf.org/working-together/fund)
+ - Used for hosting costs
+ - We can talk more about this tomorrow
+ - 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 preair
+ and host this years conference
+ - Thanks to everyone (including people we\'ve missed because
+ we\'re scrambling to write these notes =) )!
+ - Come back tomorrow for more talks!
+
+
+[[!inline pages="internal(2024/info/sat-close-after)" raw="yes"]]
+
+[[!inline pages="internal(2024/info/sat-close-nav)" raw="yes"]]
+
+
+
diff --git a/2024/talks/sat-open.md b/2024/talks/sat-open.md
new file mode 100644
index 00000000..10445ce7
--- /dev/null
+++ b/2024/talks/sat-open.md
@@ -0,0 +1,55 @@
+[[!meta title="Saturday opening remarks"]]
+[[!meta copyright="Copyright &copy; 2024 EmacsConf"]]
+[[!inline pages="internal(2024/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(2024/info/sat-open-before)" raw="yes"]]
+
+# Discussion
+
+- Testing
+ - Yup this is being tested :)
+- I need that countdown screen :)  . So cool!!  I agree.
+ - emacsconf-stream.el in emacsconf-el repo
+ - [https://git.emacsconf.org/emacsconf-el/tree/emacsconf-stream.el](https://git.emacsconf.org/emacsconf-el/tree/emacsconf-stream.el)
+ Thanks SachaChua?
+- You mean champagne?That's the name of it?It is the name of a
+ package that has a countdown.OK, searching for that!
+ Thanks[https://github.com/positron-solutions/champagne](https://github.com/positron-solutions/champagne)
+ :). Awesome
+- Champagne seems a bit different than the countdown in the livestream
+ tho! But it is also awesome!Ah I see, that might just be some quick
+ custom Elisp.
+- Can I join in on the testing too?  Why don't you have any color? I
+ set it to white :)(lol)Greetings\^\^
+ - Practicing indentation
+ - Hierarchy is important.
+ - I have been having ~~fun~~  not fun time with indentation lol
+ - Dealing with visual lines for Master of Ceremonies, my first
+ pass was too manual.  I need to offload more work onto normal
+ Emacs text editing.  It was about 1k lines and I just decided to
+ torch it and go with a buffer-based solution
+- My ideal academic workflow would include some synergy between zotero
+ and Emacs
+- What is Zotero good at? For me, its good at handling more item
+ types.
+- not using zotero, but ebib. Working fairly well to maintain a very
+ large bib file
+- Oh god they're spying on us More importantly, Is RMS watching this
+ with us?
+ - I'm not sure RMS would be allowed (unless temporarily using
+ someone else's machine), see:
+ [https://stallman.org/stallman-computing.html](https://stallman.org/stallman-computing.html)
+- Why is the countdown music so good?
+
+
+[[!inline pages="internal(2024/info/sat-open-after)" raw="yes"]]
+
+[[!inline pages="internal(2024/info/sat-open-nav)" raw="yes"]]
+
+
diff --git a/2024/talks/secrets.md b/2024/talks/secrets.md
index ebe75187..b6b75dca 100644
--- a/2024/talks/secrets.md
+++ b/2024/talks/secrets.md
@@ -19,6 +19,34 @@ About the speaker:
My name is Jonathan Otsuka. I have a background in software development and SRE/DevOps. In my free time, I enjoy optimizing my workflow, contributing to open-source projects I use, and engaging in swimming and cycling.
+# Discussion
+
+- Q: can you describe some potential interactive uses for this within
+ Emacs. Is there some other activity that would be enabled with sops
+ decryption first. Like an IT or configuration task that requires
+ authentication 
+ - So in the README right now, there is a block and it's called SOPS setup environment. I think it's a hook. Don't quote me. I haven't touched it in a while. I think that hook runs prior to doing any sort of decryption or encryption. So there's an example in the README for ways that you can set up your SOPS mode for AWS. You can set the profile. It was actually a pretty fun thing to add because with that bit of code, I can pretty much go to any one of our repos and decrypt and encrypt on the fly and not have to do much fanfare of like, well, what account or what profile do I need to switch to? I haven't looked at GCP yet or Azure, and that's kind of one of my future things. I need to maybe look into those to see what they look like and give example configs to help users. Hopefully that answered your question.
+- Q:Is this saved in the repo or file as \"run sops here\" or is the
+ encrypted blob in the git repo?
+ - A: They're saved as just text files so that you can do SOPs and encrypt like a binary. I think in the end, no matter what, they become just a text file, and then it does the encoding and decoding on the fly when you encrypt or decrypt. So no matter what it's going to be, I think it might just be a JSON in the end. Uh, so yeah.
+ - Q: Is all the information in the repo, how much would be off the
+ repo?
+- Q: How do you decide whether to use SOPS or other solutions such as
+ pass-cli? (Perhaps not exactly related to this talk)
+ - A:
+- Q:One limitation with guix (similar package manager to nix) is there
+ is no great way of storing secrets in the store, would SOPS be
+ useful for this?
+ - A: The biggest use case that I've been using it recently is, Bitbucket has a way to... In a repository, you can store non-secrets and secrets. So we're trying to move the secrets into the repository and then allow the engineers to have access to that. Bitbucket variables is a black box. Since the devs can access it, it's manual work for everybody that has to deal with it. Since we're moving SOPS-encrypted files into the repo, now there's that trackability from who made the change and what it changed from, what did it go to, and just things like that. You can use it anytime you'd want to commit them.
+- Q: One limitation with guix (similar package manager to nix) is there is no great way of storing secrets in the store, would SOPS be useful for this?
+ - nixos -
+ [https://github.com/Mic92/sops-nix](https://github.com/Mic92/sops-nix)
+ - [https://nixos.wiki/wiki/Comparison_of_secret_managing_schemes](https://nixos.wiki/wiki/Comparison_of_secret_managing_schemes)
+ - guix -
+ [https://github.com/fishinthecalculator/sops-guix](https://github.com/fishinthecalculator/sops-guix)
+ - I think so, but I don't know how that package manager works, if it's just like some sort of "you decrypt and then you run the package manager," then yeah, that's a lot of our workflows. If we're doing a deployment and the container needs it, we'll decrypt, put that in whatever place, or source it if it's an environment file for the container, and then pass it in. I think it'd be a great choice there.
+- Q:Wacky question: what happens in sops-mode if you encrypt the already encrypted file as if it was plaintext?
+ - A: You know, I might have actually accidentally did that today. I didn't actually see the resulting file. But that's a great question. Well, it's technically still binary, isn't it, at the end? You've got binary stuff that is being encrypted again. It's just double encryption. I'm pretty sure it works.
[[!inline pages="internal(2024/info/secrets-after)" raw="yes"]]
diff --git a/2024/talks/sharing.md b/2024/talks/sharing.md
index 4c71a925..f07b2c96 100644
--- a/2024/talks/sharing.md
+++ b/2024/talks/sharing.md
@@ -31,6 +31,311 @@ From starting a YouTube channel to writing blogs, Gopar will provide
practical tips and share personal experiences to help you embark on your
journey of sharing Emacs knowledge.
+# Discussion
+
+## Questions and answers
+
+- Q: Why does Gen-Z listen to podcasts and videos instead of read
+ books (not just a rumor, that's what they've told me)? The
+ question has baffled me for a while and perhaps you've got an idea.
+ - A: Gopar: Not quite sure how to answer this but I do know that
+ the vast majority of my viewers are millenials and older
+ (According to youtube analytics)
+ - A: \<gs-101\> Gen Z here. Not all of us raised in a book-centric
+ family for education, so visual or audio media is mostly all we
+ know (that's how it was for me, never seen my parents reading
+ books, but that's probably because I'm from a low income
+ enviroment). I moved to books for learning so I can't answer
+ this question that much further. But one thing I can say is that
+ it can be easier to visualize the amount of content, since you
+ can easily view in the video's timestamp, that it has 12 hours
+ or something. Podcasts are similar too. Interesting, ty. I
+ notice that most intermediate to advanced content is book based.
+ Put differently: few videos/podcasts break through the
+ beginner's barrier. Easier to get started than to grow
+ professionally w/o books.
+ - sachac: might also be related to how niche-y the topics get.
+ Like, we have lots of Emacs and Org tutorials, but go a bit
+ further and things get pretty specific / idiosyncratic, and
+ then the cost/benefit (making it, searching it, etc.) of
+ video vs literate programming notes exported as a blog post
+ tends to lean more towards words. I like videos for quick
+ workflow demonstrations.
+- Q: What do you think about "silent coding videos"? I'm not a
+ native speaker and conscious of my accent/voice & I really prefer
+ recording "silent hacking" videos now.
+ - A: Gopar: Awesome! The beauty of the interwebs is that there is
+ always a group of people that like/learn/prefer the same way you
+ do. You can cater to these people :) Also whats stopping from
+ creating content in your native language? (German is ugly :-) &
+ I live in US) I would also encourage that! More Emacs videos in
+ multiple languages :) Good point.
+- Q: Does anyone know what happened to the emacs-elements YT channel?
+ The style and cadance were quite different to a lot of the other
+ Emacs video content online, and I found it to be a fantastic
+ reference. It's a shame it seems to have disappeared :(
+ - sachac: I confirmed with him that it was his decision (not a
+ hack); he didn't provide details, so we'll respect his privacy
+ thanks, totally understand!
+ - audience: a pity. i enjoyed his YTs too.
+ - gs-101: A bit unrelated, but there's also this creator who made
+ one video on Emacs and then disappered too: [https://www.youtube.com/watch?v=XRpHIa-2XCE](https://www.youtube.com/watch?v=XRpHIa-2XCE).
+ This is his first video but it just show so much experience\...
+ - Related: Are there any Emacs AI channels yet? (Emacs advice
+ channel created by AI)
+ - sachac: there are occasionally low-effort videos that read
+ through Stack Overflow answers, but\... \<shrug\>
+ - audience: I don't see any value in these type of generated
+ "AI"-vids. Have you seen/heard NotebookLM podcasts? Not
+ vid but often surprisingly well made and insightful
+ (function of the sources fed to it) - essentially a
+ conversation between two AIs. I'm not aware of this
+ podcast, but will give it a try. Thx. [https://notebooklm.google.com/?pli=1](https://notebooklm.google.com/?pli=1)
+ Recommended e.g. for literature reviews or to summarize
+ "jagged" content (always regression to the mean, of course
+ but that's the AI curse).
+ - A:
+- Q: Just discovered that I had already subscribed to \@goparism! But
+ your last video 3 months ago\...?
+ - A: Gopar: Ah yes, sadly life does come up and other priorities
+ take place. I plan on recording more thanks to the holidays
+ coming up :) 
+ - audience: Txs Keep at it, love your stuff
+- Q: Do you have any recommendations on where to find good advice on
+ lighting for the camera?
+ - A: Gopar: Sorry, not sure. I never looked into lighting. I
+ don't use any lighting besides what comes through my window :) 
+ - audience: it looks great! I thought you'd refined it. I
+ live in a very dark place :D
+ - gs-101: The free lighting setup strat.
+- Q: Why youtube and not peertube?
+ - A: Gopar: I wasn't aware of peertube until emacsconf :0 (I will
+ proabbly look into it)
+ - audience: I guess some people want to make money? AFAIK,
+ peertube does not pay people for making videos. 
+ - sachac: Also audience/discovery is pretty low
+ - \<robin\> (i'd guess a lot of people neglect this side of
+ things since it's almost inevitably tied into surveillance
+ capitalism etc.)
+ - A good question to ask is the goal to reach people,
+ specifaly people who are not as used to emacs or make a
+ workflow that is entirly floss but reaches far less people.
+ I think the way Emacs Conf does it is pretty good using
+ floss primarly for an Emacs Crowd and later hosting the
+ videos in addition to hosting them on youtube for the people
+ their to later discover
+ - \<robin\> (but the big proprietary platforms have an almost
+ absolute monopoly on the requisite platforms, in effect,
+ outside of almost-mainstream things like the fediverse)
+ - audience: Maybe it would be cool to setup some kind of ring
+ or collective for content producers who are in some way
+ related to the Emacs community? So that Peertube et al can
+ be a more viable place to stream to?
+ - sachac: let me know when you post something and I can add it
+ to Emacs News (Mastodon \@sacha@social.sachachua.com or
+ e-mail sacha@sachachua.com) You pushing Mastodon over X? You
+ still seem to be at X.com/@sachac 
+ - \<lh\> \[: if you want to introduce people to emacs via your
+ content, a peertube-only strategy is not very pragmatic. but
+ syndicating to both is always good!
+ - \<karthik\`\> Where are peertube videos hosted?  Doesn't
+ video hosting get expensive very quickly as you scale?
+ - \<lh\> they are hosted on the instance where the account
+ lives, so yes, typically instances are relatively small
+ - audience: Some content creators mirror their YTs to Odysee.
+ Whenever I come across a YT channel, I check on Odysee,
+ which I prefer to watch videos on. No ads interruption,
+ afaik.
+ - gs-101: I also prefer to watch on Odysee, but the
+ comments can get a bit, you know\... hateful of certain
+ groups. Maybe I'm in the wrong communities. Yes, I
+ noticed such comments. I tend to not pay unnecessary
+ attention to comments of these type. Difficult. If there
+ is a choice between free speech and censorship, I lean
+ towards the free speech first. It does not excuse stupid
+ comments of course. Agreed.
+ - \<robin\> gopar, i hope my digressive side-comments didn't
+ come off as negative, they're just concerns that come with
+ the territory, as if only microsoft were able to host
+ software manuals :p i'm definitely going to be watching
+ your talk a few times over
+ - \<gopar\> robin: ah no worries. Didn't really take them
+ that way. Appreciate reaching out to say that though :)
+
+- Q: Does using tools like yt-dlp / invidious hurt or impact the
+ content creator's traction on the platform?
+ - A: Gopar: Technically it would since its not displaying 'ads'
+ but the amount of \$\$ lost is so small it's not really an
+ issue. Personally do not mind if people do that, rather have
+ people learning and sharing :)
+ - audience: So views are still counted and will allow for the
+ video to be suggested to others regardless of usage? That has
+ been a thought running through my head in the past. TY for your
+ talk :) 
+ - Gopar: Not completely sure, it all depends on how youtube
+ handles things on their side.
+ - audience: I'd be fine with running any clips on YT in some sort
+ of unattended mode (so it does "benefit" YT creators) while in
+ reality I watch myself them - if available - on another platform
+ :) As far as your channel, I'm having not much of an issue with
+ watching them on YT of course.
+ - Gopar: Ah, don't worry about "gaming" the system, if the
+ content is good, it will get viewers eventually :)
+
+- Q: Emacs promotion as a topic is kind of an infinitely wide
+ umbrella. You don't think that there should be a vague consensus on
+ the direction emacsformational content?
+ - A: I don't think, I mean I started my YT channel b/c I wanted
+ to talk about Emacs from my perspective and talk about things
+ that were interesting to me :) Telling Emacs creators to
+ "focus" on a specific topic, I believe would be a net negative
+ since it might discourage videos created b/c they dont revolve
+ around the topic. Plus a "consensus" is already kinda made via
+ things like EmacsConf I guess? :)
+
+- Q: How might creators collaborate to promote each other's content?
+ In other content I notice lots of cross-collaboration on content to
+ introduce viewers to the wider ecosystem of creators on the
+ platform, but I haven't witnessed much of that with Emacs creators
+ - A: Gopar: Personally, i've linked to other creators channels
+ but I think the "cross polination" of channels is largely due
+ to the channel owners themselves talking about it between them.
+ I haven't talked to any other emacs channels about doing such a
+ thing (yet.. :)) But I don't mind sharing links to ther
+ channels. I much perfer Emacs as a whole to grow, than to try to
+ be greedy with very little to gain. Thanks :)
+
+## Notes
+
+- https://www.youtube.com/@goparism
+- Want to focus and highlight excerpts of buffers for videos and stuff? 
+Master of Ceremonies coming to M/ELPA soon.  [https://github.com/positron-solutions/moc](https://github.com/positron-solutions/moc) It was born to be used with Dslide.  Psionic wuz here (probably asleep on azn time)\
+- I shared the link/information to this conference/talk with my
+ students yesterday!
+- I mostly do this for my students -
+ [https://www.youtube.com/@LiterateProgramming](https://www.youtube.com/@LiterateProgramming)
+- Good points about the imposter syndrome!
+- Been embracing impostor syndrome for decades & it never gets better
+ :-(
+ - jreicher: I agree!!
+- It's great having a talk like this in the conference.
+- i was a little skeptical about this talk due to the title,
+ but this really is great information if one is going to be doing
+ remote conference presentations or whatever
+- i'm used to group video chat, unsurprisingly, but
+ there's just so much more to know (and, um, equipment to own) when
+ it comes to preparing something that's not solely going to be
+ watched in real-time ...where of course you'd normally have assistance in contexts like in-person conferences
+- OBS unfortunately requires an OpenGL version newer than 2.1,
+ so won't run on a ThinkPad X200
+ - Just use ffmpeg with x11grab. It works everywhere
+ basically.
+ - \[: I sometimes use simplescreenrecorder (love it)
+ - I think that worked on my X230
+- I like using Emacs to edit my audio.
+ [https://sachachua.com/blog/2024/10/yay-emacs-tweaking-my-video-workflow-with-whisperx-and-subed-record/](https://sachachua.com/blog/2024/10/yay-emacs-tweaking-my-video-workflow-with-whisperx-and-subed-record/)
+ - sachac: Your whole A/V workflow is pretty crazy.
+ Subed with waveforms in Emacs, WhisperX\...
+- \[re: DaVinci Resolve\] kdenlive or pitivi is a nice free
+ as in freedom alternatives that are worth mentioning
+ - I've used Blender to do video editing. It worked
+ - i used kdenlive, the UI is very straightforward
+ for clipping out bits of unwanted video and similar. i've
+ heard blender's video editor is great but my partner told
+ me to just "find a youtube tutorial" (instead of showing
+ how it works) and there's a lot of junk out there, at least
+ wrt my simple use cases
+- i have no interest in making revenue from videos but this
+ sort of information is critical if one wants to maintain a
+ high-profile free software project that can sustain itself
+ financially (a lesson i learned from a lot of time working at coops
+ and nonprofits)
+- karthik\`: speaking of videos, yours are truly
+ fantastic - the only issue is that there isn't more of them :)
+- Also having a good mic does help with voice quality. I
+ used a basic condenser mic and I found it to be vastly better than
+ the snowball
+- Gopar, come on the lispy gopher climate sometime
+- Apropos "negative comments": Lotsa bot commenters on YouTube.
+ Student of mine programmed one in class, almost trivial to do,
+ despite attempts to stop it.
+- Good point about using pauses.
+- One editing tip regarding pauses, you should be able to
+ see them by viewing the audio waveform.  Might be quicker than
+ watching the whole take in 2x.
+ - that's what I do too! I also use "oops"
+ to remind me to go back and edit things
+ - I have some Elisp that scans backward for
+ the previous instance of the words that I say after the oops
+ - "elisp to scan backward for oops": this
+ is what I meant by your A/V setup being crazy
+ - well it only makes sense\... what I
+ really want is something that can string-distance approximate
+ matches
+ - like,
+ [https://github.com/stevenwaterman/narration.studio](https://github.com/stevenwaterman/narration.studio)
+ is a cool approach too
+ - that shows this segment and the next
+ segment, and if you move on to the next segment, it knows that
+ the first segment is okay
+ - Indeed, your personal infrastructure for
+ these things is a sight to behold, hehe
+ - I'm watching your quest to treat video as
+ searchable text closely!
+ - In general you're trying to do with audio/video
+ what we do with text in Emacs.  This is a thing that should
+ exist but doesn't yet.
+ - that's a great framework, the
+ paradigm and capabilities of Emacs generalized to modalities
+ beyond text (A/V)
+ - that's impressive, never got that far in
+ my video editing quest 😅
+ - From reading your blog posts it looks like
+ you're almost there already (treating audio like text).  I
+ haven't tried anything except subed.el with a connected mpv
+ instance, and that alone was the best sub editing experience
+ I've ever had.
+- this presentation made me think about streaming
+ package-code reviews for ELPA on peertube\...
+ - pkal: yes!
+- +1 to the request for more unstructured videos
+ like the notmuch one, in fact I would prefer a raw, unnarrated
+ stream to see how you typically navigate (e.g. avy usage) without
+ half your brain dedicated to walking through the process!
+ - Interesting.  Sounds like the kind of thing
+ that works better as a livestream
+ - myself I'm quite
+ curious as to how you became so intimately knowledgeable and
+ proficient with sometime arcane internals so fast
+- I'd be interesting in helping organize or just rabble
+ rouse for some Emacs themed livestreaming group project, if such a
+ thing happened. I think AP made some noises several conferences ago
+ about this being a generally good thing for "somebody" to work on
+ :)
+- OBS unfortunately requires an OpenGL version newer than 2.1, so won't run on a ThinkPad X200
+ - Just use ffmpeg with x11grab. It works everywhere basically.
+ - I haven't used this alot but I think this might work as an equivilent tool https://github.com/russelltg/wl-screenrec
+- ...Mac keybindings? We need an emacsfluencer mode :) ...and possibly a derived one for emacsconf-presenter? :)
+- I often record the audio on my phone so that I can avoid the fan noise from my computer
+- Not editing at all ever under any condition makes it real ;p
+- I feel just watching over your shoulder as you do these things (investigate and fix a point of friction, etc) without much edit would still be a powerpack of value for most
+
+
+Feedback:
+- 👏🏻👏🏻👏🏻
+- 👏👏👏
+- \* gs-101 claps
+- 👏
+- \* inkpotmonkey 👏
+- \* karthik\` 👏
+- 👏
+- 👏
+- 👏
+- 👏 \[15:43\]
+- 👏
+- 👏👏👏👏
+
+- Gopar! love your YTs 👏
[[!inline pages="internal(2024/info/sharing-after)" raw="yes"]]
diff --git a/2024/talks/shell.md b/2024/talks/shell.md
index 69e8575a..8c01476f 100644
--- a/2024/talks/shell.md
+++ b/2024/talks/shell.md
@@ -28,6 +28,91 @@ See also these other talks by the same speaker:
- [EmacsConf - 2024 - talks - Watering my (digital) plant with Emacs timers](https://emacsconf.org/2024/talks/water/)
- [EmacsConf - 2023 - talks - Org-Mode Workflow: Informal Reference Tracking](https://emacsconf.org/2023/talks/ref/)
+# Discussion
+
+- a nice interface for using process filters directly sounds really
+ useful, reminds me of emacs-piper
+
+- Uniline?
+ - lispmacs[work]: gs-101: yes
+- feels like a museum to see someone using helm x)
+ - lispmacs[work]: heh heh
+ - lispmacs[work]: it was the first one I learned, now I'm hooked
+ - gs-101: First one I used was Ivy + Counsel, but then I moved to the Vertico + Consult stack as it was newer.
+- lispmacs[work]: I haven't had any pressuring motivations to try anything else yet, but am open minded
+- Is there a convenient way to share shell history between Eshell and the system shell (fish in my case)?
+ - lispmacs[work]: I know there is, but I don't use it. let me check the eshell modules list
+ - I use atuin and eshell-atuin to share shell history across programs, shells and machines.
+ - Ah yes, I gave atuin a try some time ago but I hate that it takes over full terminal for history. Not sure if that changed now though.
+ - lispmacs[work]: I'm not seeing something like that in the built-in Eshell Modules List unless eshell-hist does something like that
+ - i use my consult-shell-command package which is a small wrapper around async-shell-command that also suggests shell history :D https://codeberg.org/mekeor/consult-shell-command
+ - atuin is a CLI utility; eshell-atuin is a third party Emacs package. (https://github.com/SqrtMinusOne/eshell-atuin/)
+ - there is also https://github.com/svaante/recall by dape.el-developer with a similar goal
+- I need to look more into Eshell. Just started using native Emacs on Windows and switched from cmd.exe in shell mode to PowerShell, but it would be nice to have a better shell that I can use both on my home machines and the two work machines that run GNU/Linux that would also work on my work Windows laptop.
+ - Yes, I saw that's one of the main use cases for eshell. But on windows, for some reason, git provides a bash shell. https://gitforwindows.org/
+ - Yes, I was thinking to maybe hook that into shell mode. The advantage of Eshell would be that I would not have to configure shell mode at all and just use the built in functionality of Emacs no matter what system I am on.
+- Using buffers for input and output is such a killer feature
+ - Do you mean in eshell or more generally in Emacs
+ - both! But particularly in eshell
+ - How do you use a buffer as input in eshell?
+- That looks really cool!
+- wow!
+- I don't see an eshell/@ command, I think I missed something
+ - lispmacs[work]: https://codeberg.org/infrared/emacsconf-2024/src/branch/main/shell-talk.el
+- Oh, it's piping (buffer-string). I think this should be (buffer-substring-no-properties (point-min) (point-max)) Otherwise you'll pipe propertized text causing issues with shell commands. (Unless the eshell pipe somehow strips text properties, which I doubt.)
+ - lispmacs[work]: oh okay, I wonder if the eshell pipe gets rid of that on its own
+- There's also https://github.com/szermatt/emacsclient-commands which has an epipe utility
+- Input redirection from buffers in eshell would be great -- actually, input redirection at all would be great.
+ - isn't the "solution" to use cat input | ...?
+ - What is input here?
+- what's the use case of #\<buffer NAME\> or #\<NAME\> notation in eshell, as described at (info "(eshell) Arguments")?
+ - It's useful for redirection. run-foo > #\<buffer NAME\>
+ - ah right, described at (info "(eshell) Pipelines")
+- I just can’t get eshell to stick … I keep running back to vterm with my tail between my legs
+ - eat fan here -- it doesn't require an additional external c library :D
+ - mekeor: I need to try it out, I read on its README that vterm is faster but I'm not sure if I actually need that speed.
+ - Eat seems to handle buffer resizes better
+- lispmacs[work]: I think an important point is to just use Eshell where you find it useful - same with all the other Emacs tools. Of course, you should explore some of Eshell's Emacs/Elisp integration features
+- The integrations with the rest of Emacs is probably what makes Eshell worth it once you get used to it. I am going to read up and try it out.
+- Thanks
+ - einar_m: Thank you! :-)
+ - lounge-664: thanks chris good talk
+ - chum-cha: This was fantastic, thanks lispmacs[work]!
+ - mretka: M-x clap 👏👏👏
+ - dubs: Great talk
+ - [14:32:57] * gs-101 claps
+ - lispmacs[work]: thank you
+ - johnhamelink: Thank you :)
+ - jsiegel62: Thanks!
+ - lispmacs[work]: 🙇
+ - karthik: Thank you
+ - mraabo: Very nice, thank you!
+ - lounge-267: ty, lispmacs.
+ - [14:33:42] * inkpotmonkey 🙇
+ - oylenshpeegul: 👏
+ - ankit: Thank you, I've picked up a lot of things that I'll try to use in my workflow.
+ - einar_m: Thank you for the inspiration, lismacs!
+
+- YouTube comments:
+ - 11:28 This should have been a shell-command instead of an eshell-command.
+ - is the voice generated by a software program?
+ - not judging by the no-pop-filter-noises
+ - bro forgot he was giving a talk and thought he was narrating an audiobook lmao
+ - be kind
+ - Surprised you didn't mention "vterm" or "multi-vterm" especially if some shell commands have fancy ansi output.
+ - I have a question regarding command line argument passing with emacsclient. In my fish.config file create a function called "e' so I can just type e sometext.txt
+ emacsclient -c "$argv[1]"
+ But I want this actually
+ emacsclient -c -a "" --eval "(set-frame-size (selected-frame) 106 42)" "$argv[1]"
+ so
+ $ e sometext.txt
+ #^That works but below doesn't work and I get an elisp message
+ #If I use that emacsclient with --eval
+ $ e sometext.txt
+ #says "nil"... and I don't get emacsclient to open up with the text file I want. It is very annoying and I guess once you put --eval you can't do argument passing but goes into an elisp mode I assume.
+ - I think the scope of this talk was mentioned in the beginning.
+ - 0:20 I think of Emacs as an OS
+
[[!inline pages="internal(2024/info/shell-after)" raw="yes"]]
[[!inline pages="internal(2024/info/shell-nav)" raw="yes"]]
diff --git a/2024/talks/students.md b/2024/talks/students.md
index 7a6168ba..65eedad8 100644
--- a/2024/talks/students.md
+++ b/2024/talks/students.md
@@ -39,6 +39,144 @@ Linux, programming, and customizable/libre software. I have been using
Emacs since 2022, starting with DOOM Emacs.
+# Discussion
+
+## Questions and answers
+
+- Q: I use org-roam for notes and find it very useful - have you
+ considered it?
+ - A: I know about it; started with it, actually. Didn't like the
+ dependancy on an external db, e.g. if using syncthing from a
+ laptop to a desktop. Fair enough.
+- Q: Do you use the Getting Things Done methodology as part of your
+ Org workflow?
+ - A: I started with org, and then heard about GTD, so I didn't
+ exactly design my workflow with that in mind.
+ - I probably don't do it the exact way.
+ - audience: I can never Get Things Done :-\\
+ - \<gs-101\> Personally, I just add checkboxes to TODO
+ headings. For example. I scheduled to learn scheme today: 
+ - \* TODO Study Scheme \[0/4\] 
+ - \- \[ \] A Scheme Primer 
+ - \- \[ \] Structure and Interpretation of Computer
+ Programs 
+ - \- \[ \] Video lectures of thre previous book 
+ - \- \[ \] The Scheme Programming Language Fourth Edition
+ - And each checkbox is a link to a bibliographic note of
+ the book/video.
+- Q:org-fc and org-drill are emacs  org mode centric flash card
+ solutions, have you looked into them?
+ - A: Looked into org-drill, but wanted to use Anki because I
+ wanted to use it on my phone, so that demotivated me.
+- Q:What do other students think about your approach - and what are
+ they doing instead (if anything)? And your teachers - what do they
+ think?
+ - A: Other students are usually just confused. They know I use
+ Linux but they don't know what it is, so they assume that
+ everything I do on my computer is hacking or doing some Linux
+ thing. I don't usually bother explaining it to them. That's
+ one of the reasons I made this talk, so I can refer people who
+ are actually interested in it instead of superficially
+ interested in it.
+ - For my teachers, I think\... I showed them this year for the
+ first time. It didn't really interact where they would see what
+ happens. Export to LaTeX\... I did that for my physics class. My
+ teacher was pretty satisfied with the results for the math
+ programming. I think they don't really have a problem with it.
+ It's actually more convenient.
+ - audience: I'm a teacher and I'd be over the moon. And if I
+ didn't know it yet, I'd be super inspired. I use it with
+ all my students (some complain but the best ones adopt it
+ pretty effortlessly).
+- Q: What was your biggest source of frustration/friction/confusion
+ when getting started with Emacs?
+ - A: I don't really remember; it somehow just clicked one day.
+- Q: How did you come across Emacs? What got you into it?+1
+ - A: I get asked this quite a bit; I have a prepaired answer. 
+ Similar to how I stumbled into Linux.  Saw screen-shots on
+ Reddit, saw video on YouTube (doom cast is what got me really
+ into it). Chat recommended: SystemCrafters' videos; yes, as
+ well as prot's videos about completion and embark.  i would
+ watch videos while washing dishes. 
+- Q: What the situation with respect to "mobile" use (if ever
+ that's applicable)? (yes, Orgzly\...using that?)
+ - A:  Didn't want to use a paid-app to sync files, didn't need
+ to look into too much because I carry a notebook and usually a
+ laptop.  I've seen others get started with eink tablets, can't
+ attest to how good that is.
+- Q: Has using emacs led to expanded interest in programming/computer
+ science? (apologies if I forgot from your presentation) (+1; emacs
+ configuration seems like a natural entry-point into learning
+ programming)
+ - A: Emacs is what got me started with lisp specifically,
+ otherwise I might not have looked into it that much other than
+ dabbling with Scheme from the Structures and Interpertations of
+ Computer Science book.  I was into programming before Emacs.  I
+ used vscode then vim, before emacs, but now I've done most of
+ my programming in Emacs.
+- Q:You mentioned exporting notes, essays, etc. for handing them on to
+ other people. How does interaction with others work in technical
+ terms? We mostly find workflows centered around Microsoft products.
+ How do you manage with that? (+1; now that computers are fully
+ integrated into education, how do you deal with conflicts in terms
+ of the tools and workflows others expect you to use?)
+ - A:
+
+## Notes
+
+- Evangelism. We need more of that. Like the quote "Investing in your
+ future". Going to spread this.
+- (This high-schooler is definitely going places!)
+- makes note of anki
+- For creating flash cards entirely from inside Emacs, there's
+ Gnosis:
+ [https://thanosapollo.org/projects/gnosis/](https://thanosapollo.org/projects/gnosis/)
+- i started living in emacs around age 13, this talk is
+ definitely bringing back a lot of memories \^\^
+ - wow! do you remember how you heard the first
+ time about emacs back then?
+ - hearing about some "linux" thing on the
+ radio and reading some LJ copies -\> my dad bought an old pc
+ from a grad student -\> reading a bunch of those "learn
+ everything about gnu/linux" tomes -\> switch todebian and
+ deciding to try out that Other Editor
+ - thx for sharing. my dad has been definitely also making an impact to my "computing development", but i encountered unix-y stuff not before my first university contact unfortunately. i though successfully bypassed the "win 3.11" times … :)
+ - (i was also included in some old-school seemingly MIT-esque educational experiment involving LOGO and robots, back in elementary school)
+ - i don't think it's a coincidence that my parents are scientists and i was practically raised in a biology laboratory :P i'm not *that* old but i think the first browser i used was ncsa mosaic
+- Great talk! Thank you! I'm really going to have to
+ try out some of those packages 😊
+- Yes, 30-40 years back \*sigh\*
+- I hope I get praised this much by the professors if I'm
+ able to join university 😄
+- ah bardman is gone, if there are more people with
+ "learning scheme" on their TODO list, there'll be a sicp reading
+ group next year (loosely affiliated with
+ ##transgeeks/#guile-emacs/#systemcrafters), i think daviwil of
+ systemcrafters.net also runs guile scheme courses from time to time
+ - privmsg or email me if you want a direct notification,
+ but i'll be mentioning it occasionally in those channels when
+ they're close to starting
+- I can relate, I finished High School just last year. trying to get into college too
+- there's some sort of series to be made here. aaron wolf has a series of talks about using free software to ensure his young son has a healthy relationship with computers...
+- Reminds me of Eduardo's talk on the dev track yesterday about mathematics students in Brazil
+- YouTube comment: When I was a student, I would take notes on paper. They would be messy. I would review, re-write, and organize my notes on paper. Then I would type them into the computer so I can print out nicely formatted notes. I did all this on a 16bit Atari ST and it blew my instructors mind in electronics school when I turned in my ring bound, printed notes for grading / review. I had drawn circuits and did all this desktop publishing work on it. It was very new at the time, only Macs, Atari, Commodore were doing this stuff at the time. Really wish I had today's Emacs back then. Even if I could have obtained a copy of Emacs it would have been lacking a GUI and Org-Mode and most of the popular packages. So today, is the best time to pick up Emacs because it is even more useful today than 40 years ago.
+- YouTube comment: Yes emacs is amazing and with latest llm it is easy to learn how to use it. I know the llm will destroy jobs but I do appreciate that it helps me embrace emacs faster
+
+Feedback:
+
+- 👏👏👏 well done!
+- 👏
+- 👏👏
+- 👏👏👏
+- 👏👏👏👏
+- 👏 (i wish i would have discovered emacs also in my
+ school time)
+- 👏👏👏👏👏
+- Fanstastic talk! I will save the link to the talk for
+ new users of org-mode.
+- fantastic talk ty
+- Like the moderator,  too, very upbeat just what I need on this day
+ of drizzle.
[[!inline pages="internal(2024/info/students-after)" raw="yes"]]
diff --git a/2024/talks/sun-close.md b/2024/talks/sun-close.md
new file mode 100644
index 00000000..66ed8965
--- /dev/null
+++ b/2024/talks/sun-close.md
@@ -0,0 +1,200 @@
+[[!meta title="Sunday closing remarks"]]
+[[!meta copyright="Copyright &copy ; 2024 ${speakers}"]]
+[[!inline pages="internal(2024/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(2024/info/sun-close-before)" raw="yes"]]
+
+
+
+# Discussion
+
+- \<Fade\> thanks for the conference, kind people.
+- \<johnhamelink\> Its the first time I've been able to attend the
+ whole conference live, and it's been great fun, I've had a blast
+ :)
+- \<Fade\> I look forward to emacsconf even more than ELS
+- \<robin\> emacsconf is absolutely knocking it out of the park when
+ it comes to conference logistics
+- \<Fade\> I think this conference has defined the terms for a
+ successful online conference. it's literally the first one I've
+ seen that is actually,  you know, \*good\* (but\... not cheap.)
+ - \<NullNix\> Fade: the other awesomely good one was LPC,
+ especially during lockdown. Amazing use of BBB (they had to
+ extend it in all directions)
+- \<jrootabega\> I forget whose screen this is being broadcast right
+ now, but I'm curious in general about the style you use for your
+ IRC client.
+- \<plattfot\> Great conference as always.  A highlight each year!
+- \<lounge-081\> Thanks again to the organizers, and presenters for
+ many great talks, and participants for interesting exchanges, see
+ you all next year (fingers crossed)
+- \<ElephantErgo\> EmacsConf is one of the big highlights of my year
+ every year. Thank you a ton for running this 😊
+- \<Mjolnir\> Thanks to everyone putting together EmacsConf. Loved
+ attending like the past few years. Have a happy holiday season, see
+ everyone around and next year!
+- \<fristed\> Amazing, just like the previous years! Maybe i'll
+ manage to prepare a talk or volunteer for next year, it would be a
+ honor
+- \<kickingvegas\> thanks to all the organizers! you are so
+ appreciated!
+- \<lounge-987\> Thanks to everyone, it was great
+- \<fosskers\> Thanks for putting this together
+- \<karthik\`\> Thanks to the organizers
+- \<snamellit\> Thanks to everyone, was a blast!
+- \<robin\> thank you sachac corwin zaeph lh FlowyCoder and, er,
+ anyone i'm forgetting :D 👋👋👋
+- \<edrx\> thanks for the conference!!! so many wonderful talks - and
+ the organization was amazing!!! =)
+- \<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 \^\^)
+- \<kswiss\> 👏 must-attend event every year - thx all
+- \<lounge-081\> Surely there's time for a last round of applause for
+ the organizers! Many thanks to you!
+- \<jack7\> ty organizers! great conf.
+- \<ElephantErgo\> This was so incredibly fun, everyone. It was
+ wonderful hanging out with you all and seeing so many amazing talks!
+- \<pizzapal\> very cool, thanks everyone for putting this on!
+- \<lounge-081\> Thanks, fantastic conference, yet again!
+- \<ellis\> yay! great conf yall
+- \<johnhamelink\> woooo! Well done everyone! Amazing weekend :)
+- \<gs-101\> Great conference!
+- \<@sachac\> I would love it if someone could go figure out editing
+ etherpads from Emacs =)
+ - \<robin\> that doesn't exist?! i once implemented a
+ collaborative text editor with an emacs client as a CSCW
+ experiment\...
+ - \<@sachac\> robin: I write to the pads with Emacs Lisp, but
+ I don't know how to, say, append considering the realtime
+ edits
+- Things that have been working well
+ - Crontab
+ - Automation
+ - Checklists and shortcuts: it was very nice being able to just
+ bring on FlowyCoder 
+- Org conference or some kind of event, maybe? July-ish? zaeph can
+ help with the admin too, and corwin might also be able to coordinate
+ with FSF sysads to explore things like Galene as well as routine
+ maint/patching on the hosts
+ - Might be good for the hackathon as well
+- Europe/APAC-friendly time zone?
+- Things we added this year:
+ - New BBB instance, also BBB version 3, directly creating BBB
+ rooms and users via Rails console
+ - We had a couple of crashes, not sure
+ - Random package
+ - copy IRC
+ - open-mic
+ - mpv 0.38 to fix the colour conversion issues
+ - YouTube streaming straight from OBS with multiple events (AM/PM)
+ was more straightforward than using ffmpeg; went this way since
+ Toobnix livestreaming didn't seem to be working.
+ - Scheduled YouTube videos
+ - Sunday was single-track, which was pretty relaxed
+ - Corwin and Leo were able to jump in and out of hosting the
+ various tracks, that was nice
+ - Experimented with dedicated CPU for live0 on day 1, doesn't
+ seem to be needed
+ - Changed intro and play scripts to use the cache directory
+ instead of a separate stream directory
+ - fossevents
+- Things that were a little challenging
+ - Didn't have much time leading up to the conference, had to
+ re-figure-out stuff I hadn't documented well enough last time
+ - Schedule mostly driven by availability constraints, which is
+ fine; might be a good opportunity to experiment with something
+ that might work for Europe/APAC time zones?
+- Infrastructure and process notes:
+ [https://emacsconf.org/2023/talks/emacsconf/](https://emacsconf.org/2023/talks/emacsconf/)
+ ,
+ [https://emacsconf.org/captioning/](https://emacsconf.org/captioning/)
+ ,
+ [https://emacsconf.org/infra/](https://emacsconf.org/infra/)
+- Ideas for improvement / notes for next year:
+ - Do the podcast tour suggested in 2023-sun-close
+ - Maybe it would be good to get in touch with podcasts like
+ This Week in Linux, Linux Unplugged, Ask Noah, Linux After
+ Dark etc to give a heads up on EmacsConf before it happens
+ and also mention to them when videos are available to spark
+ more interest.
+ - 60 fps looks like it's challenging for our playback, drop down
+ to 30 fps
+ - Consider making audio mono (ex: Ihor's talk)
+ - Make sure intro VTTs go into the cache directory as well so that
+ the intros have subtitles.
+ - See if we can work on audio normalization earlier, document the
+ process, get more volunteers
+ - Consider Galene, might be more efficient than BBB
+ - Check emacsconf-publish for doubled inclusion of Etherpad links
+ - Launch mpv always in a screen, turn off OSD display, Leo will
+ figure out MPV and Lua and configuration
+ - Switch to tmux instead of screen
+ - Consider hosting from people's home computers again because of
+ dropped frames
+ - Figure out what happened to my intro.vtt for literate
+ - Show Javascript countdown on talk webpage
+ - Show when this video is finishing and when the next talk is
+ going to start
+ - Send the intro check e-mail earlier, maybe at original video
+ target date even if they haven't done the video yet
+ - Caption the Interview with an Emacs Enthusiast video.
+ - Doublecheck that intro is playing from cache
+ - Countdown to specified talk, countdown to next talk on this
+ track, even if manually playing with track-mpv
+ - Get mpv to tell us how much time is remaining - maybe track-mpv
+ in the stream, or write to a file at the start
+ - Check CPU stats TODO - sacha
+ - front0: peak 76%, typical 25%
+ - live0
+ - More validating functions:
+ - Check permissions and ownership for files
+ - Check case sensitivity for Q&A type detection
+ - Check BBB redirect pages to make sure they exist
+ - Check transcripts for \` because that messes up formatting;
+ consider escaping for the wiki
+ - Check files are public and readable
+ - Check captioned by comment vs caption status vs captioner
+ - Put code for copying the current ERC line into emacsconf-erc.el
+ - Check Etherpad new version, see if we can append
+ - Make sure emacsconf-stream-config includes emacsconf-cache-dir
+ and case-fold-search settings
+ - Document scripts and processes for easier extraction of live
+ talks and Q&A from Icecast dump or Youtube dump
+ - Follow up on Toobnix livestreaming
+ - See if we can schedule Toobnix uploads
+ - Shortcut to insert talk URL
+ - Consider recommending light text on dark background
+ - Things to document:
+ - Restreaming the other stream (mpv \--profile=full URL) - we
+ probably also have a script somewhere
+ - How to update captions after they have already been
+ published
+ - Reloading subtitles: j in the mpv player
+ - Adjusting volume: 9 and 0 in the mpv player
+ - Last-minute addition of session
+ - Last-minute change to Q&A
+ - Music removal/addition
+ - Consider WhisperX medium model for fast processing of
+ last-minute submissions
+ - Change private pad prefix for next year
+ - Check access to Working Together donation stats, public donors
+ - 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"]]
+
+[[!inline pages="internal(2024/info/sun-close-nav)" raw="yes"]]
+
+
diff --git a/2024/talks/sun-open.md b/2024/talks/sun-open.md
new file mode 100644
index 00000000..1bf98035
--- /dev/null
+++ b/2024/talks/sun-open.md
@@ -0,0 +1,21 @@
+[[!meta title="Sunday opening remarks"]]
+[[!meta copyright="Copyright &copy ; 2024 ${speakers}"]]
+[[!inline pages="internal(2024/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(2024/info/sun-open-before)" raw="yes"]]
+
+
+
+
+[[!inline pages="internal(2024/info/sun-open-after)" raw="yes"]]
+
+[[!inline pages="internal(2024/info/sun-open-nav)" raw="yes"]]
+
+
diff --git a/2024/talks/theme.md b/2024/talks/theme.md
index 9df68c8b..12adfbe1 100644
--- a/2024/talks/theme.md
+++ b/2024/talks/theme.md
@@ -25,6 +25,42 @@ I'm picky about how it looks. This talk shows how may hoops I'm
willing to jump through to make it look "right".
+# Discussion
+
+## Questions and answers
+
+- Q: When you choose colors based on the same lightness, does it not
+ hurt readability since the eye sees lightness most?
+ - A: 
+- Q: One area I see emacs able to do themes that is "underused?" is
+ changing the font. font size, font typee, monospace or perpotional,
+ bold. based on the varios faceets of emacs. Is it a magit issie a
+ code comment a  code string or varible name etc\...
+ - A:
+- Q:
+ - A:
+- Q: For monte-carlo, are all the "random" colors picked using a
+ colorwheel/hue rotation? 
+ - A:
+- Q: Have you ever kept any of the random themes that were thrown up?
+ - A: No. When Emacs picks monte carlo by chance, I wouldn't know
+ about it. That's why I didn't keep any of the themes it
+ generated.
+- Q:
+ - A:
+
+## Notes
+
+- Links:
+ - [https://github.com/MetroWind/flucui-theme](https://github.com/MetroWind/flucui-theme)
+ - [https://github.com/MetroWind/lab-theme](https://github.com/MetroWind/lab-theme)
+ - [https://github.com/MetroWind/notink-theme](https://github.com/MetroWind/notink-theme)
+ - [https://github.com/MetroWind/monte-carlo-theme](https://github.com/MetroWind/monte-carlo-theme)
+- Comment: Hi MetroWind, your lab-theme was the inspo for my initial
+ color space journey \~6 years ago, thanks for putting your work out
+ there
+ - Wow I'm so glad you found your inspiration! Thanks!
+
[[!inline pages="internal(2024/info/theme-after)" raw="yes"]]
diff --git a/2024/talks/transducers.md b/2024/talks/transducers.md
index 5abe4371..f5f82c2b 100644
--- a/2024/talks/transducers.md
+++ b/2024/talks/transducers.md
@@ -39,6 +39,243 @@ ported the pattern to three other Lisps.
Colin is originally from Canada and lives in Japan.
+# Discussion
+
+## Questions and answers
+
+- Q: When I tried comparing transducers.el to cl-lib and dash
+ (benchmark-compiled), I got the following results:
+ ```
+ cl-lib: 0.5 sec, 2 GCs
+ dash: 0.3 sec, 1 GC,
+ transducers: 0.75 sec, 2 GC
+ cl-loop: 0.025 sec, 0 GC (note: 0.025, one order-of-magnitude faster)
+ I expected transducers to be slower than cl-loop but faster than the
+ cl-lib or dash.  However this isn't the case.  Any idea why? (benchmark
+ is here:
+ [https://old.reddit.com/r/emacs/comments/1h5c778/which_emacsconf_2024_talks_have_your_attention/m061dge/](https://old.reddit.com/r/emacs/comments/1h5c778/which_emacsconf_2024_talks_have_your_attention/m061dge/))
+ ```
+ - (benchmark-run-compiled 1000  (cl-loop for n from 1 below
+ 2000 by 2           sum (\* n n) into total          
+ finally return total))
+ - A: Loop is always going to win in cases like this where we are
+ not doing two nested (e.g.) change calls, what I called comp
+ steps.  tranducers shines while we need to do things which chain
+ things together; we can sometimes express ourselves more clearly
+ vs loop.  this may sound sounds like moving the goal-posts:
+ it's really about internal function calls, avoiding stepping
+ though each loop in ways which loop doesn't need to do, so loop
+ might "win".
+ - Note: I'm comparing against cl-lib and dash \-- the cl-loop is
+ only for reference. I'm curious about the performance gap
+ between transducers and cl-lib/dash.  The number of function
+ calls is the same for cl-lib and dash and transducers.
+
+- Q: Did you think about generators as a source cf lists, vectors,
+ etc? Maybe I got a word wrong. After the development that generators
+ and Series operations needed-each-other, not being redundant as had
+ been thought. I forgot who the generators person was in lisp.
+ - A: (not yet answered)
+
+- Q:  Do you know of any theoretical texts on transducers?
+ - A: My README and Rich Hickey (inventor of Clojure) may be the
+ key texts on transducers. 
+ - and his talks/videos (on the topic)
+ - [https://andreyorst.gitlab.io/posts/2022-08-13-understanding-transducers/](https://andreyorst.gitlab.io/posts/2022-08-13-understanding-transducers/)
+ - (not fosskers): I think AIM-1082 is interesting to read. 
+ ([https://dspace.mit.edu/handle/1721.1/6035](https://dspace.mit.edu/handle/1721.1/6035)?)
+ Yes
+
+- Q: Waters (lazy series in lisp, late 70s) said that this \*should
+ have\* been done as an additional compiler feature in compilers, but
+ if not it must be a macro package. Did you think about that viz your
+ cl, fennel, elisp, porting of your transducers?
+ - A: I think my work could help provide the basis for this;
+ there's much more to be done.
+
+- Q: Does t-buffer-read provide a lazy stream that's linewise, or
+ charwise, or do something else entirely?
+ - A: t-file-read
+
+- Q: Can the Elisp library be combined with the stream.el API
+ ([https://elpa.gnu.org/packages/stream.html](https://elpa.gnu.org/packages/stream.html))? 
+ Or seq in general?
+ - A: I'd say these libraries are completely orthogonal. (Re: what
+ made me ask this question was seeing \`t-buffer-read' and
+ hoping that this doesn't convert a buffer into a string)  With
+ seq/generics it should just work: magic of defgeneric
+
+- Q: How does one debug a t-comp expression? Can you single step and
+ see intermediate results of the different statements you declare?
+ - A: In Common Lisp it is wonderful. In Emacs Lisp it is more
+ complicated. I don't know if step debugging would work, but
+ there is a "log" (?) function to print out values.
+
+- 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?
+ - A: Possibly so yes
+
+- Q: Re the performance issues mentioned and that popped up recently
+ in the lists/forums, to what extend does tailcall optimization and
+ other mechanisms (incl. inlining, GC-friendliness, etc.) could
+ eventually alleviate issues and enable their use at little to no
+ extra cost?
+ - A: Over time, with further work and optimizations. Some already
+ there (tailcall notably)
+
+- Q: Is there an option to read a csv/json and produce an alist or
+ plist instead of a hash table for an entry?
+ - A:  Absolutely.
+
+- Q: Is the common lisp version ready for 'production' use? Is it
+ complete enough and the API stable enough?
+ - A: I use it all the time. I use it extensively. Programming a
+ game, not realizing a dent in the frame rate.
+
+- 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?
+ - A: already defined. This is basically fold. Some built-in functions like plus already function like reducers. It's a coincidence that they do that. But there's an example in the README. Max is one that does not act like that. For instance, maybe I could screen share later, but if you just type in plus one, If you call plus one in Emacs or Common Lisp, you get back one. It actually only needs one argument. If you only type plus, it actually gives you zero. Plus and multiple satisfy the API of reducers. But if you have one that doesn't, like the max function, and similarly, just type in plus as a function call, just plus with nothing else, and you'll see. No, as a function. zero will come out. This basically means it satisfies the reducer API. But a function like max does not. If you just type in max and then one, it won't work. Pardon me, it did. But if you type in max with nothing else, it wouldn't work. Hence, we have to wrap it in something like fold. I would say go look at the fold function.
+
+- Q: Is the compelling argument for transducers is that it's a better
+ abstraction? Seems like a lot of concerns/objections (while
+ pragmatically valid) are focused on implementation. Can this
+ abstraction allow for advances in implementation?
+ - A: Yes, what I've basically done is mostly followed the pattern of usage that exists in Clojure and in Scheme's SERP 171. In theory, the service level API is the same no matter where you're using this, and that's the idea. If you learn them in one list, you should be able to use them everywhere. Then what it's actually doing under the hood is free for us to change around. My implementations are mostly based on the scheme with a few alterations here and there. And in the Common Lisp case, like adding some Common Lisp isms to improve usage like UX a little bit. But overall, we are free to do whatever we want internally to speed up performance. I just haven't done that work.
+- Q: is there a path for transducers to enable elisp processing of otherwise excessively huge data ets as if just a normal Emacs "buffer" (i.e. but just pulling one thing at a time so essentially stream-like under the hood), with none of the usual issue when a traditional buffer structure?
+ - (not yet answered)
+- Q: So the "reducer API" means that the function accepts a variable number of arguments in a monoidal way?
+ - that's what I gathered
+- 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?
+ - A: Yeah, like, if we really wanted to go that hardcore, maybe there's some like C level stuff that we could you know, significant demand for such a thing. You know, so far there hasn't been such demand, but maybe there will be in the future. Yeah, perhaps there's some custom stuff we could do.
+- Q: why does the reducer have to sometimes be a custom function, but other times just something like #'+?
+ - it depends on if that reducer function needed special input or not
+- Q: do you have FSF copyright assignment? it is nice to get low-level libraries like transducers on ELPA so other copyright-assigned packages can use them (and so they can be included in Emacs when they reach wide adoption)
+ - transducers is on MELPA
+- Q: Is that #' business for some lisps and not others the lisp-1/lisp-2 distinction?
+ - Sharp quote refers to (symbol-function 'my-symbol) in a lisp2
+ - yes, it emphasizes using the "function" associated with the symbol (if there's one in the "function slot" for the symbol) as opposed to some "variable"-type value
+ - (and in this case pkal is not asking about the sharp quote but a t-prefixed function as opposed to a standard function like +)
+ - that's because of the separate namespace for function symbols?
+ - function rather than symbol-function to be extra-nitpicky (to accomodate lambda forms)
+ - If I remember correctly, single quote (') does not respect when a function symbol is overridden by a let, but (pound quote) #' does?
+ - yes, my question was about the t- prefix.
+ - "let"s only bind the symbol value slot, not the function slot.
+ - yes, iiuc; in effect, it's sort of an early-binding/late-binding distinction
+ - My bad. Should've specified flet.
+ - @can't speak for the elisp case, but in the clojure case using things in transducer form has a slightly different "typing" shape as you'd expect and may require a wrapper if a function can't be used as is and such, though I missed the context and that may not be relevant to your point
+- 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?
+ - So the presentation itself was done with RevealJS from Org Mode. So as you saw, I had a raw Org Mode buffer, which was which was the presentation itself, which I then just exported with a few certain settings, a few customizations. And then for screen recording, I used OBS, which worked flawlessly on Arch Linux. I used Sway, Wayland, and all of that. So all of that just worked, which was very impressive. Where do the HTML host the presentation? I don't have that presentation hosted anywhere.
+ - Text is a little small bth
+ - no keep the latin on screen, i was trying to read that
+ - It was Lorem Ipsum
+ - Translating lorem ipsum plus plus
+ - Thanks for larger text
+
+## Notes
+
+- What made transducers click for me way back when was
+ realizing that the usual operations (think map/reduce/filter/etc and
+ their generalizations) implicitly or explicitly demand realized
+ collections, plus intermediate ones between those operations (and
+ GC), instead of composing such transformations into one operation
+ and then making this applicable to streams of unknown-sizes and
+ such.
+ - ah, like\...\*thinks very hard\*\...stream
+ fusion, iirc?
+ [http://lambda-the-ultimate.org/node/2192](http://lambda-the-ultimate.org/node/2192)
+ that makes a lot of sense
+ - "Rich Hickey has a point" need never be said :)
+- Sorry but map is collect and filter is select for me :)
+- there are many ways to get to them (some may
+ already think of those functions as folds, etc.), but for the bulk
+ of people familiar with map/reduce/filter/etc, it's useful to enter
+ the thinking realizing that you may have infinite streams (of any
+ type even) on input, and may not want to have realized collections
+ at every step of the usual function applications, thus the need to
+ compose the things that make up a map/reduce/filter/etc before
+ applying them one by one on a continued stream of things one at a
+ time
+- ellis: I wrote about half of one in binutils libctf
+ (generators, anyway). See the \*\_next() functions. Having seen this
+ I'll try to mutate the internals to something closer, right now
+ every iterator is independently implemented (mostly).
+ - (inspired by generators, not transducers, since I
+ didn't know about them)
+ - still \*far\* less ugly than "call a function with
+ every item" \*\_iter() stuff
+- Thanks for the answers fosskers, I'm quite hopeful
+ with transducers working their way into many things, so thinking
+ ahead to where that may happen and to solving perf hurdles
+- I'm totally sold. I'm working on a CL codebase
+ right now, and these are going in there immediately
+- (also CL does not require TCO but good compilers support
+ it to the extent that extensive use of FP is practical)
+- it's a tricky protocol to get perfect the first time for
+ sure, is something that transcends language barriers so always fun
+ to see more impls :)
+- CLTL2 docs on SERIES for those who are curious
+ [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node347.html#SECTION003400000000000000000](http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node347.html#SECTION003400000000000000000)
+ - (lisp.se mirror in case the ai repository disappears
+ someday:
+ [http://cltl2.lisp.se/cltl/clm/node347.html](http://cltl2.lisp.se/cltl/clm/node347.html)
+ )
+- definitely watching this one more carefully. if it's
+ CLOS-oriented i'm going to like it
+- note that full TCO is strictly more expressive than
+ special-case optimizations as with emacs's cl-labels
+- in the general case, there not need to actually process such a composed operation on an item from the input until needed/"pulled" from the output side, so yes in a way
+
+- yea i think the next step in terms of performance would be using a 'plan' object internally to rewrite the lambda calls
+- Julia does loop fusion through its broadcast operator.
+- that gets very hairy and makes it far less simple imo
+- Re the current answer, it doesn't yet, but it's on the path where it could eventually (i.e. introspecting on the composed transformation and simplifying it, be it fusion-type or otherwise)
+- Waters agreed that ergonomics was the key key key thing. (In the PhD world, because of studies that people have trouble reading other peoples' iteration = loop codes)
+- "galaxy brain" is great expression.
+- CLTL2 docs on SERIES for those who are curious http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node347.html#SECTION003400000000000000000
+- i'm curious about what mathematical structures are related to transducers but that's probably a README question
+- Q: transducers C impl when
+- ecl slime repl + transducers or series
+- I wrote about half of one in binutils libctf (generators, anyway). See the *_next() functions. Having seen this I'll try to mutate the internals to something closer, right now every iterator is independently implemented (mostly).
+- note that full TCO is strictly more expressive than special-case optimizations as with emacs's cl-labels
+- (inspired by generators, not transducers, since I didn't know about them)
+- still *far* less ugly than "call a function with every item" *_iter() stuff
+- Thanks for the answers fosskers, I'm quite hopeful with transducers working their way into many things, so thinking ahead to where that may happen and to solving perf hurdles
+- I'm totally sold. I'm working on a CL codebase right now, and these are going in there immediately
+- (also CL does not require TCO but good compilers support it to the extent that extensive use of FP is practical)
+- it's a tricky protocol to get perfect the first time for sure, is something that transcends language barriers so always fun to see more impls :)
+- absolutely. I will try :) of course libctf is ABI-stable so I can't just change what the user sees, but maybe I can make the internals less repetitive :)
+- (and maybe add another API that is more transducery.)
+- Nice ielm
+- @pkal: that's what I meant back up, that some functions happen to have the right form for use in transducers, but fosskers expounds much better, small incompatibilities (think order of params, variadicity, etc)
+- I used emacs for so long before finding out that ielm existed. (I wish I knew sooner.)
+
+Feedback:
+
+- 👏👏
+- impressive
+- cool presentation
+- (still, very nice!)
+- I am so, so thrilled with this. This blew my mind. Thank you! 😊
+- 👏
+- nice 👏👏
+- deeply not ugly
+- Thank you for the excellent talk!
+- Thanks for the talk
+- Thanks fosskers
+- 👏
+- awesome 👏
+- always a pleasure to watch transducers in action - thanks fosskers!
+- Inspiring talk, promptly added to my aoc.asd. Will come in handy.
+- definitely watching this one more carefully. if it's CLOS-based i'm going to like it; CLOS-oriented, rather
+- Thank you fosskers! it is bound to end up in some, if not all of my common lisp projects
+
+- YouTube comment: Nice, this seems to do basically the same thing as C++ ranges, which I've enjoyed using a lot
+- YouTube comment: Good
+- YouTube comment: Nice presentation!
[[!inline pages="internal(2024/info/transducers-after)" raw="yes"]]
diff --git a/2024/talks/water.md b/2024/talks/water.md
index 10454db7..2f3938e2 100644
--- a/2024/talks/water.md
+++ b/2024/talks/water.md
@@ -22,6 +22,12 @@ See also these other talks by the same speaker:
- [EmacsConf - 2024 - talks - Emacs as a Shell](https://emacsconf.org/2024/talks/shell/)
- [EmacsConf - 2023 - talks - Org-Mode Workflow: Informal Reference Tracking](https://emacsconf.org/2023/talks/ref/)
+# Discussion
+
+- \<lounge-502\> Not exactly a browser but after yesterday\'s Emacs
+ timer talk, I installed elpher and browsed around some gemini
+ websites and that was a really good experience.
+
[[!inline pages="internal(2024/info/water-after)" raw="yes"]]
[[!inline pages="internal(2024/info/water-nav)" raw="yes"]]
diff --git a/2024/talks/writing.md b/2024/talks/writing.md
index d05af940..66ca53e9 100644
--- a/2024/talks/writing.md
+++ b/2024/talks/writing.md
@@ -26,6 +26,58 @@ talk Peter introduces Emacs Writing Studio, a starter kit and
associated manual for authors with no Emacs experience.
+# Discussion
+
+Technical issues connecting to the BigBlueButton room, so no live Q&A
+
+- Q: What's Emacs composition proposition above focused/opinionated packages but below full config bases (Doom/Spacemacs) -- say for "js/ts devel with the kitchen sink", or "writer studio" like this? Akin to Doom/Spacemacs "modules" and such. Just other packages? If so, why haven't these caught up, and convenient libraries of those emerge? We're typically composing at the lowest levels of packaging, and proliferation of base configs could be a symptom(?)
+ - A: (not yet answered)
+- Q: For writers who procrastinate, it's very tempting to fall into
+ the time sink of configuring Emacs rather than simply writing, even
+ with the optimal Emacs writing setup. Is this something you've
+ encountered, and do you have any suggestions for how to combat it?
+ - A: As probably all beginning Emacs users I spent a lot of time
+ tinkering. I decided that I should work with rather than on
+ Emacs and thus EWS was born. My prod config is 99% EWS with some
+ enhancements. My config developed by just starting with vanilla
+ Emacs and only add what I needed, as the need arose. 
+ - Don't try to develop the ideal system in your mind and then
+ build it, let it grow organically.
+- Q: How much success have you had getting writers to use Emacs \--
+ and *stick with it* \-- using  EWS?  I've had people ask me about
+ using Emacs for technical writing and/or coding, and start off well,
+ but move to another editor in two months.  The main reason is when
+ they want to do something with Emacs, can't figure out how, and
+ find a plugin (for Obsidian or VSCode, say) that does the thing they
+ want with no further setup or tweaking required.
+ - A: I have had some good feedback from readers, but I cannot
+ attest to their personal success. The aim of EWS is to get
+ things working without the need for much config. However, Emacs
+ will never bny an easy point and click system such as the ones
+ you mention. 
+- Q:When I was learining Emacs I bounced off it the first couple of
+ times, after reading Mastering Emacs and hearing it was the
+ tinkerers editor I got the right mental model to learn Emacs. Did
+ you have that? and what made it worth using and teaching others?
+ - A: The best way to learn anything is to teach other people. So I
+ used EWS as a project to imporve my understanding of Emacs. Not
+ only did it force me to fully understand how things works, but
+ also develop new fucntions and packages where I saw a need.
+- Q: I love using org to write prose. For me, I like writing the final
+ version of the text in org, and I prefer paper to brainstorm ideas
+ and draft things. How was the brainstorming experience and the
+ process to organize your thoughts to write the book using org-mode?
+ - A: I do my brainstorning in a paper notebook. The first EWS idea
+ is a sketch in my notebook. In my weekly review I transfer notes
+ worth keeping to Denote (scan graphic notes). Writing by hand
+ has many advantages for idea generation. Denote is my
+ repository, not a thinking tool.
+
+## Notes
+
+- Thanks for the great questions. Apologies for the technical glitch.
+- Very interesting talk
+- YouTube comment: ❤
[[!inline pages="internal(2024/info/writing-after)" raw="yes"]]
diff --git a/2024/watch.md b/2024/watch.md
index 4f5c38dd..e6b25f57 100644
--- a/2024/watch.md
+++ b/2024/watch.md
@@ -7,10 +7,12 @@ EmacsConf 2024 will be on **Dec 7** (Sat) and **Dec 8** (Sun), 2024 from
2pm-10pm UTC, 3pm-11pm Zurich/CET, 7:30pm-4:30am(next-day) India/IST,
10pm-6am GMT+8.
-You can view streams using the watch pages or in a streaming web
-player such as [MPV](https://mpv.io). 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`.
+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
@@ -19,34 +21,47 @@ video. If that still doesn't work, please check our status page at
parts of our infrastructure, and instructions on how to get in touch
with us about disruptions.
-We will also try to rebroadcast on [Toobnix](https://toobnix.org/c/emacsconf) (a
-Peertube instance) and [YouTube](https://www.youtube.com/@EmacsConf). Please check back
-here for details closer to the event.
+We will also try to rebroadcast on [YouTube](https://www.youtube.com/@EmacsConf).
+Youtube events:
-<!-- If you prefer, you can watch the livestream via Toobnix (a PeerTube
-instance): [General
-track](https://toobnix.org/w/7t9X8eXuSby8YpyEKTb4aj), [Development
-track](https://toobnix.org/w/w6K77y3bNMo8xsNuqQeCcD). Pre-recorded
-videos and replays will also be available on Toobnix in the [EmacsConf
-channel](https://toobnix.org/c/emacsconf). -->
+- [General - Dec 7 Sat AM](https://youtube.com/live/1vlnB-hCQ2g)
+- [Development - Dec 7 Sat AM](https://youtube.com/live/_Dm_kinip_A)
+- [General - Dec 7 Sat PM](https://youtube.com/live/QwD9F6O9DqE)
+- [Development - Dec 7 Sat PM](https://youtube.com/live/49ve1FYHbf0)
+- [General - Dec 8 Sun AM](https://youtube.com/live/VPDT_Nj3IUE)
+- [General - Dec 8 Sun PM](https://youtube.com/live/eqVb1x9BhDU)
+
+(Unfortunately, we're running into issues livestreaming to Toobnix/PeerTube.)
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 Q&A. 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.
-
-The Etherpad for general EmacsConf discussions is at
-<https://pad.emacsconf.org/2024>. 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.
-
-You can join IRC using <https://chat.emacsconf.org> or your favourite
-IRC client. Here are the irc.libera.chat IRC channels that we'll be
-using this year:
+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/2024>. 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
@@ -57,20 +72,22 @@ 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.
-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.
-
-Pre-recorded talk videos will be available on the talk pages 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:
+**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
diff --git a/2024/watch/dev.md b/2024/watch/dev.md
index e05093f8..fc8fe974 100644
--- a/2024/watch/dev.md
+++ b/2024/watch/dev.md
@@ -21,7 +21,7 @@ If you don't have a streaming media player, you might be able to watch using the
<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="/2024/watch/gen/">General</a> - <strong>Development</strong></div><div><span><a href="https://emacsconf.org/2024/talks/gypsum">gypsum</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-gypsum">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-gypsum.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/rust">rust</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-rust">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-rust.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/p-search">p-search</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-p-search">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-p-search.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/julia">julia</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-julia">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-julia.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/guile">guile</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-guile">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: robin</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/secrets">secrets</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-secrets">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-secrets.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/mcclim">mcclim</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-mcclim">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-mcclim.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/repro">repro</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-repro">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-repro.html">BBB</a>)</span></div>
+<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="/2024/watch/gen/">General</a> - <strong>Development</strong></div><div><span><a href="https://emacsconf.org/2024/talks/gypsum">gypsum</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-gypsum">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-gypsum.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/rust">rust</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-rust">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-rust.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/p-search">p-search</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-p-search">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-p-search.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/julia">julia</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-julia">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-julia.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/guile">guile</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-guile">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: robin</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/secrets">secrets</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-secrets">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-secrets.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/mcclim">mcclim</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-mcclim">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-mcclim.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/maxima">maxima</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-maxima">pad</a>, <a href="https://pad.emacsconf.org/2024-maxima">Etherpad</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="/2024/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>
@@ -32,7 +32,7 @@ If you don't have a streaming media player, you might be able to watch using the
<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/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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(217,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="https://emacsconf.org/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="235" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(248,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="peachpuff"></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="peachpuff"></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="peachpuff"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="141" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">language</text></g></a><a href="https://emacsconf.org/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="172" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(201,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="https://emacsconf.org/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="227" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(248,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:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="431" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(444,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/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="470" y="15" opacity="0.8" width="62" 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)">blee</text></g></a><a href="https://emacsconf.org/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="549" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(578,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:25- 3:35 An example of a cohesive student workflow in Emacs</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)">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:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(664,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:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="682" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(727,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> 5:00- 5:10 Sunday closing remarks</title><rect x="752" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(765,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></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/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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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:25- 4:50 Emacs 30 Highlights</title> <rect x="698" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></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="peachpuff"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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/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="peachpuff"></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="peachpuff"></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></div>
<div><h1>Saturday, Dec 7, 2024</h1>
<div data-start="2024-12-07T15:00:00+0000" data-end="2024-12-07T15:20:00+0000" class="sched-entry track-Development">
<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-gypsum">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-gypsum.html">BBB</a></span>; <span class="sched-slug">id:gypsum</span></div>
@@ -63,7 +63,7 @@ If you don't have a streaming media player, you might be able to watch using the
</div>
<div data-start="2024-12-07T18:25:00+0000" data-end="2024-12-07T18:45:00+0000" class="sched-entry track-Development">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:25</span> - <span class="sched-end">1:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-guile">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: robin</a></span>; <span class="sched-slug">id:guile</span></div>
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:25</span> - <span class="sched-end">1:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-guile">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: robin</a></span>; <span class="sched-slug">id:guile</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/guile">Beguiling Emacs: Guile-Emacs relaunched!</a></div>
<div class="sched-speakers">Robin Templeton (they/them)</div>
@@ -84,9 +84,9 @@ If you don't have a streaming media player, you might be able to watch using the
</div>
<div data-start="2024-12-07T20:45:00+0000" data-end="2024-12-07T21:05:00+0000" class="sched-entry track-Development">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:45</span> - <span class="sched-end">4:05</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-repro">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-repro.html">BBB</a></span>; <span class="sched-slug">id:repro</span></div>
-<div class="sched-title"><a href="https://emacsconf.org/2024/talks/repro">Reproducibly building Emacs: “Hey your checksum is the same as mine!”</a></div>
- <div class="sched-speakers">Aaron Grothe (he/him)</div>
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:45</span> - <span class="sched-end">4:05</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-maxima">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2024-maxima">Etherpad</a></span>; <span class="sched-slug">id:maxima</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2024/talks/maxima">Emacs, eev, and Maxima - now!</a></div>
+ <div class="sched-speakers">Eduardo Ochs</div>
</div>
diff --git a/2024/watch/gen.md b/2024/watch/gen.md
index 231fc5b2..67edb798 100644
--- a/2024/watch/gen.md
+++ b/2024/watch/gen.md
@@ -21,7 +21,7 @@ If you don't have a streaming media player, you might be able to watch using the
<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="/2024/watch/dev/">Development</a></div><div><span><a href="https://emacsconf.org/2024/talks/sat-open">sat-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sat-open">pad</a>, <a href="https://pad.emacsconf.org/2024-sat-open">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/papers">papers</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-papers">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-papers.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/project">project</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-project">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-project.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/org-update">org-update</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-org-update">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-org-update.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/flp">flp</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-flp">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: aindilis</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/color">color</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-color">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-color.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/theme">theme</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-theme">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-theme.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/water">water</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-water">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/shell">shell</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-shell">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/casual">casual</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-casual">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-casual.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/hyperdrive">hyperdrive</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-hyperdrive">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-hyperdrive.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/writing">writing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-writing">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2024/talks/emacs30">emacs30</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-emacs30">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-emacs30.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/sat-close">sat-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sat-close">pad</a>, <a href="https://pad.emacsconf.org/2024-sat-close">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/sun-open">sun-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sun-open">pad</a>, <a href="https://pad.emacsconf.org/2024-sun-open">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/links">links</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-links">pad</a>, <a href="https://pad.emacsconf.org/2024-links">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/regex">regex</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-regex">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: cosmicexplorer</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/learning">learning</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-learning">pad</a>, <a href="https://pad.emacsconf.org/2024-learning">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/language">language</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-language">pad</a>, <a href="https://pad.emacsconf.org/2024-language">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/org-teach">org-teach</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-org-teach">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-org-teach.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/hyperbole">hyperbole</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-hyperbole">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-hyperbole.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/hywiki">hywiki</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-hywiki">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-hywiki.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/pgmacs">pgmacs</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-pgmacs">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-pgmacs.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/blee">blee</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-blee">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-blee.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/literate">literate</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-literate">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-literate.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/students">students</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-students">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: bardman</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/sharing">sharing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sharing">pad</a>, <a href="https://pad.emacsconf.org/2024-sharing">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/transducers">transducers</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-transducers">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-transducers.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/sun-close">sun-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sun-close">pad</a>, <a href="https://pad.emacsconf.org/2024-sun-close">Etherpad</a>)</span></div>
+<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="/2024/watch/dev/">Development</a></div><div><span><a href="https://emacsconf.org/2024/talks/sat-open">sat-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sat-open">pad</a>, <a href="https://pad.emacsconf.org/2024-sat-open">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/papers">papers</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-papers">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-papers.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/project">project</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-project">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-project.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/org-update">org-update</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-org-update">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-org-update.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/color">color</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-color">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-color.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/theme">theme</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-theme">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-theme.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/water">water</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-water">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/shell">shell</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-shell">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/casual">casual</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-casual">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-casual.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/hyperdrive">hyperdrive</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-hyperdrive">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-hyperdrive.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/writing">writing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-writing">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-writing.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/emacs30">emacs30</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-emacs30">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-emacs30.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/sat-close">sat-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sat-close">pad</a>, <a href="https://pad.emacsconf.org/2024-sat-close">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/sun-open">sun-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sun-open">pad</a>, <a href="https://pad.emacsconf.org/2024-sun-open">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/links">links</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-links">pad</a>, <a href="https://pad.emacsconf.org/2024-links">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/regex">regex</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-regex">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: cosmicexplorer</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/learning">learning</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-learning">pad</a>, <a href="https://pad.emacsconf.org/2024-learning">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/blee">blee</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-blee">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-blee.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/hyperbole">hyperbole</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-hyperbole">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-hyperbole.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/pgmacs">pgmacs</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-pgmacs">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-pgmacs.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/literate">literate</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-literate">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-literate.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/students">students</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-students">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: bardman</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/sharing">sharing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sharing">pad</a>, <a href="https://pad.emacsconf.org/2024-sharing">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/transducers">transducers</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-transducers">pad</a>, <a href="https://media.emacsconf.org/2024/current/bbb-transducers.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2024/talks/sun-close">sun-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2024-sun-close">pad</a>, <a href="https://pad.emacsconf.org/2024-sun-close">Etherpad</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="/2024/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>
@@ -32,7 +32,7 @@ If you don't have a streaming media player, you might be able to watch using the
<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/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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(217,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="https://emacsconf.org/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="235" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(248,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="peachpuff"></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="peachpuff"></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="peachpuff"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="141" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">language</text></g></a><a href="https://emacsconf.org/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="172" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(201,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="https://emacsconf.org/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="227" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(248,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:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="431" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(444,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/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="470" y="15" opacity="0.8" width="62" 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)">blee</text></g></a><a href="https://emacsconf.org/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="549" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(578,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:25- 3:35 An example of a cohesive student workflow in Emacs</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)">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:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(664,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:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="682" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(727,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> 5:00- 5:10 Sunday closing remarks</title><rect x="752" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(765,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></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/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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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:25- 4:50 Emacs 30 Highlights</title> <rect x="698" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></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="peachpuff"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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/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="peachpuff"></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="peachpuff"></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></div>
<div><h1>Saturday, Dec 7, 2024</h1>
<div data-start="2024-12-07T14:00:00+0000" data-end="2024-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/2024-sat-open">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2024-sat-open">Etherpad</a></span>; <span class="sched-slug">id:sat-open</span></div>
@@ -55,24 +55,17 @@ If you don't have a streaming media player, you might be able to watch using the
</div>
-<div data-start="2024-12-07T15:20:00+0000" data-end="2024-12-07T15:40:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:20</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/2024-org-update">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-org-update.html">BBB</a></span>; <span class="sched-slug">id:org-update</span></div>
+<div data-start="2024-12-07T15:20:00+0000" data-end="2024-12-07T16:00:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:20</span> - <span class="sched-end">11:00</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-org-update">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-org-update.html">BBB</a></span>; <span class="sched-slug">id:org-update</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/org-update">The Future of Org</a></div>
- <div class="sched-speakers">Ihor Radchenko and Bastien Guerry</div>
+ <div class="sched-speakers">Ihor Radchenko</div>
</div>
-<div data-start="2024-12-07T16:00:00+0000" data-end="2024-12-07T16:20:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:00</span> - <span class="sched-end">11:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-flp">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: aindilis</a></span>; <span class="sched-slug">id:flp</span></div>
-<div class="sched-title"><a href="https://emacsconf.org/2024/talks/flp">The Free Life Planner: Empowering lives with Emacs-based AI</a></div>
- <div class="sched-speakers">Andrew Dougherty (he/him)</div>
-
-</div>
-
-<div data-start="2024-12-07T16:30:00+0000" data-end="2024-12-07T16:40:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:30</span> - <span class="sched-end">11:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-color">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-color.html">BBB</a></span>; <span class="sched-slug">id:color</span></div>
+<div data-start="2024-12-07T16:20:00+0000" data-end="2024-12-07T16:30:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:20</span> - <span class="sched-end">11:30</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-color">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-color.html">BBB</a></span>; <span class="sched-slug">id:color</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/color">Colour your Emacs with ease</a></div>
- <div class="sched-speakers">Ryota (he/him)</div>
+ <div class="sched-speakers">Ryota Sawada (he/him)</div>
</div>
@@ -84,14 +77,14 @@ If you don't have a streaming media player, you might be able to watch using the
</div>
<div data-start="2024-12-07T18:30:00+0000" data-end="2024-12-07T18:45:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:30</span> - <span class="sched-end">1:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-water">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a></span>; <span class="sched-slug">id:water</span></div>
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:30</span> - <span class="sched-end">1:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-water">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</a></span>; <span class="sched-slug">id:water</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/water">Watering my (digital) plant with Emacs timers</a></div>
<div class="sched-speakers">Christopher Howard (he/him)</div>
</div>
<div data-start="2024-12-07T18:55:00+0000" data-end="2024-12-07T19:35:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:55</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/2024-shell">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a></span>; <span class="sched-slug">id:shell</span></div>
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:55</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/2024-shell">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</a></span>; <span class="sched-slug">id:shell</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/shell">Emacs as a shell</a></div>
<div class="sched-speakers">Christopher Howard (he/him)</div>
@@ -106,13 +99,13 @@ If you don't have a streaming media player, you might be able to watch using the
<div data-start="2024-12-07T20:25:00+0000" data-end="2024-12-07T20:45:00+0000" class="sched-entry track-General">
<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:25</span> - <span class="sched-end">3:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-hyperdrive">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-hyperdrive.html">BBB</a></span>; <span class="sched-slug">id:hyperdrive</span></div>
-<div class="sched-title"><a href="https://emacsconf.org/2024/talks/hyperdrive">New in hyperdrive.el: org-transclusion, easy installation, and more!</a></div>
+<div class="sched-title"><a href="https://emacsconf.org/2024/talks/hyperdrive">New in hyperdrive.el: quick install, peer graph, transclusion!</a></div>
<div class="sched-speakers">Joseph Turner</div>
</div>
<div data-start="2024-12-07T21:05:00+0000" data-end="2024-12-07T21:15:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:05</span> - <span class="sched-end">4:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-writing">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:writing</span></div>
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:05</span> - <span class="sched-end">4:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-writing">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-writing.html">BBB</a></span>; <span class="sched-slug">id:writing</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/writing">Emacs Writing Studio</a></div>
<div class="sched-speakers">Peter Prevos (he)</div>
@@ -148,7 +141,7 @@ If you don't have a streaming media player, you might be able to watch using the
</div>
<div data-start="2024-12-08T14:30:00+0000" data-end="2024-12-08T14:50: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:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-regex">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: cosmicexplorer</a></span>; <span class="sched-slug">id:regex</span></div>
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:30</span> - <span class="sched-end">9:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-regex">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: cosmicexplorer</a></span>; <span class="sched-slug">id:regex</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/regex">Emacs regex compilation and future directions for expressive pattern matching</a></div>
<div class="sched-speakers">Danny McClanahan (they/them)</div>
@@ -161,78 +154,57 @@ If you don't have a streaming media player, you might be able to watch using the
</div>
-<div data-start="2024-12-08T15:30:00+0000" data-end="2024-12-08T15:40:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:30</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/2024-language">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2024-language">Etherpad</a></span>; <span class="sched-slug">id:language</span></div>
-<div class="sched-title"><a href="https://emacsconf.org/2024/talks/language">Immersive language learning with Emacs</a></div>
- <div class="sched-speakers">Sebastian Dümcke (he/him)</div>
-
-</div>
-
-<div data-start="2024-12-08T15:50:00+0000" data-end="2024-12-08T16:10: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:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-org-teach">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-org-teach.html">BBB</a></span>; <span class="sched-slug">id:org-teach</span></div>
-<div class="sched-title"><a href="https://emacsconf.org/2024/talks/org-teach">org-teach: a minor mode for writing course materials in Emacs</a></div>
- <div class="sched-speakers">James Endres Howell (he/him)</div>
+<div data-start="2024-12-08T15:30:00+0000" data-end="2024-12-08T16:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:30</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/2024-blee">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-blee.html">BBB</a></span>; <span class="sched-slug">id:blee</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2024/talks/blee">About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</a></div>
+ <div class="sched-speakers">Mohsen BANAN (he/him)</div>
</div>
-<div data-start="2024-12-08T16:25:00+0000" data-end="2024-12-08T16:40: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:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-hyperbole">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-hyperbole.html">BBB</a></span>; <span class="sched-slug">id:hyperbole</span></div>
+<div data-start="2024-12-08T16:30:00+0000" data-end="2024-12-08T16:45:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:30</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/2024-hyperbole">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-hyperbole.html">BBB</a></span>; <span class="sched-slug">id:hyperbole</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/hyperbole">Fun things with GNU Hyperbole</a></div>
<div class="sched-speakers">Mats Lidell (he/him)</div>
</div>
-<div data-start="2024-12-08T18:00:00+0000" data-end="2024-12-08T18:20: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:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-hywiki">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-hywiki.html">BBB</a></span>; <span class="sched-slug">id:hywiki</span></div>
-<div class="sched-title"><a href="https://emacsconf.org/2024/talks/hywiki">HyWiki: Fast, hyperlinked note-taking with no markup required</a></div>
- <div class="sched-speakers">Bob Weiner</div>
-
-</div>
-
-<div data-start="2024-12-08T18:35:00+0000" data-end="2024-12-08T18:45: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">1:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-pgmacs">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-pgmacs.html">BBB</a></span>; <span class="sched-slug">id:pgmacs</span></div>
+<div data-start="2024-12-08T18:40:00+0000" data-end="2024-12-08T18:55:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:40</span> - <span class="sched-end">1:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-pgmacs">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-pgmacs.html">BBB</a></span>; <span class="sched-slug">id:pgmacs</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/pgmacs">PGmacs: browsing and editing PostgreSQL databases from Emacs</a></div>
<div class="sched-speakers">Eric Marsden (he/him)</div>
</div>
-<div data-start="2024-12-08T19:00:00+0000" data-end="2024-12-08T19:40:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:00</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/2024-blee">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-blee.html">BBB</a></span>; <span class="sched-slug">id:blee</span></div>
-<div class="sched-title"><a href="https://emacsconf.org/2024/talks/blee">About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</a></div>
- <div class="sched-speakers">Mohsen BANAN (he/him)</div>
-
-</div>
-
-<div data-start="2024-12-08T19:50:00+0000" data-end="2024-12-08T20:10: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:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-literate">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-literate.html">BBB</a></span>; <span class="sched-slug">id:literate</span></div>
+<div data-start="2024-12-08T19:15:00+0000" data-end="2024-12-08T19: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/2024-literate">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-literate.html">BBB</a></span>; <span class="sched-slug">id:literate</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/literate">Literate programming for the 21st Century</a></div>
<div class="sched-speakers">Howard Abrams (he/him)</div>
</div>
-<div data-start="2024-12-08T20:25:00+0000" data-end="2024-12-08T20:35:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:25</span> - <span class="sched-end">3:35</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-students">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: bardman</a></span>; <span class="sched-slug">id:students</span></div>
+<div data-start="2024-12-08T20:00:00+0000" data-end="2024-12-08T20:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:00</span> - <span class="sched-end">3:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-students">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: bardman</a></span>; <span class="sched-slug">id:students</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/students">An example of a cohesive student workflow in Emacs</a></div>
<div class="sched-speakers">Daniel Pinkston (he/him)</div>
</div>
-<div data-start="2024-12-08T20:45:00+0000" data-end="2024-12-08T21:05:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:45</span> - <span class="sched-end">4:05</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-sharing">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2024-sharing">Etherpad</a></span>; <span class="sched-slug">id:sharing</span></div>
+<div data-start="2024-12-08T20:20:00+0000" data-end="2024-12-08T20:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:20</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/2024-sharing">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2024-sharing">Etherpad</a></span>; <span class="sched-slug">id:sharing</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/sharing">So you want to be an Emacs-fluencer?</a></div>
<div class="sched-speakers">Gopar</div>
</div>
-<div data-start="2024-12-08T21:15:00+0000" data-end="2024-12-08T21:45:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:15</span> - <span class="sched-end">4:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-transducers">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-transducers.html">BBB</a></span>; <span class="sched-slug">id:transducers</span></div>
+<div data-start="2024-12-08T21:00:00+0000" data-end="2024-12-08T21:30: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:30</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-transducers">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2024/current/bbb-transducers.html">BBB</a></span>; <span class="sched-slug">id:transducers</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/transducers">Transducers: finally, ergonomic data processing for Emacs!</a></div>
<div class="sched-speakers">Colin Woodbury (he)</div>
</div>
-<div data-start="2024-12-08T22:00:00+0000" data-end="2024-12-08T22:10:00+0000" class="sched-entry track-General">
-<div class="sched-meta"><span class="sched-time"><span class="sched-start">5:00</span> - <span class="sched-end">5:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-sun-close">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2024-sun-close">Etherpad</a></span>; <span class="sched-slug">id:sun-close</span></div>
+<div data-start="2024-12-08T21:50:00+0000" data-end="2024-12-08T22:00:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:50</span> - <span class="sched-end">5:00</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2024-sun-close">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2024-sun-close">Etherpad</a></span>; <span class="sched-slug">id:sun-close</span></div>
<div class="sched-title"><a href="https://emacsconf.org/2024/talks/sun-close">Sunday closing remarks</a></div>
diff --git a/2024/watch/info.md b/2024/watch/info.md
index cbeb2ef0..fe5e601f 100644
--- a/2024/watch/info.md
+++ b/2024/watch/info.md
@@ -4,8 +4,8 @@
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>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="/2024/watch/gen/">General</a></div></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="/2024/watch/dev/">Development</a></div></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>
+</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/2024/watch/gen/">General</a></div></td><td><a href="https://live.emacsconf.org/2024/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/2024/watch/dev/">Development</a></div></td><td><a href="https://live.emacsconf.org/2024/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/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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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/flp" title="The Free Life Planner: Empowering lives with Emacs-based AI" data-slug="flp"><title>11:00-11:20 The Free Life Planner: Empowering lives with Emacs-based AI</title><rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(217,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flp</text></g></a><a href="https://emacsconf.org/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:30-11:40 Colour your Emacs with ease</title><rect x="235" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(248,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="peachpuff"></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="peachpuff"></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="peachpuff"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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/language" title="Immersive language learning with Emacs" data-slug="language"><title>10:30-10:40 Immersive language learning with Emacs</title><rect x="141" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">language</text></g></a><a href="https://emacsconf.org/2024/talks/org-teach" title="org-teach: a minor mode for writing course materials in Emacs" data-slug="org-teach"><title>10:50-11:10 org-teach: a minor mode for writing course materials in Emacs</title><rect x="172" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(201,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-teach</text></g></a><a href="https://emacsconf.org/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:25-11:40 Fun things with GNU Hyperbole</title><rect x="227" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(248,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:35- 1:45 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="431" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(444,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/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title> 2:00- 2:40 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="470" y="15" opacity="0.8" width="62" 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)">blee</text></g></a><a href="https://emacsconf.org/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:50- 3:10 Literate programming for the 21st Century</title><rect x="549" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(578,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:25- 3:35 An example of a cohesive student workflow in Emacs</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)">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:45- 4:05 So you want to be an Emacs-fluencer?</title><rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(664,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:15- 4:45 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="682" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(727,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> 5:00- 5:10 Sunday closing remarks</title><rect x="752" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(765,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> \ No newline at end of file
+<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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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:25- 4:50 Emacs 30 Highlights</title> <rect x="698" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></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="peachpuff"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="skyblue"></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="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/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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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="peachpuff"></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/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="peachpuff"></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="peachpuff"></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> \ No newline at end of file
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--answers.vtt b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.vtt
new file mode 100644
index 00000000..df891f67
--- /dev/null
+++ b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.vtt
@@ -0,0 +1,1024 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:05.199
+Greetings. Salaam again. I'm delighted to be here
+
+00:00:05.200 --> 00:00:11.199
+and happy to answer your questions.
+
+00:00:11.200 --> 00:00:12.839
+I'm not seeing anything yet,
+
+00:00:12.840 --> 00:00:17.679
+but let me take advantage of this time
+
+00:00:17.680 --> 00:00:20.120
+to speak about one question that I saw
+
+00:00:20.080 --> 00:00:22.879
+come in earlier on the pad,
+
+NOTE Q: Where do we find all the inputs and outputs you mentioned?
+
+00:00:22.880 --> 00:00:25.540
+which was all the outputs
+
+00:00:25.541 --> 00:00:29.399
+and the inputs that you mentioned, where are they?
+
+00:00:29.400 --> 00:00:35.439
+So they are on GitHub, and this is in one of my slides.
+
+00:00:35.440 --> 00:00:41.939
+I mentioned the URL for it. I'll show you that as well.
+
+00:00:41.940 --> 00:00:50.391
+So the URL for it is https://github.com/bxplpc/180068,
+
+00:00:50.392 --> 00:00:58.679
+which is the handle for this talk.
+
+00:00:58.680 --> 00:01:06.039
+In there, you have all the PDFs and the HTMLs,
+
+00:01:06.040 --> 00:01:12.119
+a citation, a bib input, and also the sources.
+
+00:01:12.120 --> 00:01:19.439
+So if you were to go to the PDF, you will see
+
+00:01:19.440 --> 00:01:24.319
+um, both the article presentation and the beamer,
+
+00:01:24.320 --> 00:01:27.279
+let's take a quick look at the beamer,
+
+00:01:27.280 --> 00:01:34.159
+which is what you have seen. So.
+
+00:01:34.160 --> 00:01:40.279
+And as far as the sources are, there are two primary files.
+
+00:01:40.280 --> 00:01:44.120
+This presentation, left to right,
+
+00:01:44.121 --> 00:01:50.919
+is the one that includes all the LaTeX packages.
+
+00:01:50.920 --> 00:01:52.641
+We might as well take a quick look.
+
+00:01:52.642 --> 00:01:57.600
+So what's in there is primarily the use packages.
+
+00:01:57.601 --> 00:02:06.999
+And then it dispatches to bodyPresArt,
+
+00:02:07.000 --> 00:02:11.519
+and this is where the code is.
+
+00:02:11.520 --> 00:02:14.559
+And I walked through this briefly.
+
+00:02:14.560 --> 00:02:26.839
+So, notice here again that this is a mixture of LaTeX and Org.
+
+00:02:26.840 --> 00:02:31.039
+Each of the presentation slides are here.
+
+00:02:31.040 --> 00:02:34.519
+For example, my introduction
+
+00:02:34.520 --> 00:02:37.239
+is just a video that gets included.
+
+00:02:37.240 --> 00:02:41.119
+And then the notes that I use, the voiceover,
+
+00:02:41.120 --> 00:02:47.319
+is also included in the LaTeX file.
+
+00:02:47.320 --> 00:02:50.079
+Let me... It'll probably be easy
+
+00:02:50.080 --> 00:02:52.399
+to take those voiceover notes
+
+00:02:52.400 --> 00:02:54.959
+and then align them with a tool like Aeneas
+
+00:02:54.960 --> 00:02:58.399
+to make subtitles for your videos.
+
+00:02:58.400 --> 00:03:01.199
+Exactly, and that is what I do.
+
+00:03:01.200 --> 00:03:08.519
+So there is a way to gather them all as P-notes.
+
+00:03:08.520 --> 00:03:13.839
+And so all the P-notes get together in a single file,
+
+00:03:13.840 --> 00:03:20.599
+and then you feed that to Aeneas, and it will align them.
+
+00:03:20.600 --> 00:03:23.319
+And then there is the work of using your subed
+
+00:03:23.320 --> 00:03:30.279
+to just get the right sort of line length on them.
+
+00:03:30.280 --> 00:03:33.039
+But you did all of that for me this year, Sacha.
+
+00:03:33.040 --> 00:03:34.519
+Thank you very much.
+
+00:03:34.520 --> 00:03:37.559
+It was just a matter of not having time.
+
+00:03:37.560 --> 00:03:43.559
+Otherwise, I planned to do it myself. It's all right.
+
+00:03:43.560 --> 00:03:46.639
+It was very easy since he provided the full narration.
+
+00:03:46.640 --> 00:03:50.399
+I still need to tweak it sometimes,
+
+00:03:50.400 --> 00:03:52.919
+so I often use the waveforms in subed
+
+00:03:52.920 --> 00:03:58.559
+to find the right starting time and ending time for things.
+
+00:03:58.560 --> 00:04:01.519
+But it is so nice to have a presentation
+
+00:04:01.520 --> 00:04:03.879
+where you can experience it in different forms,
+
+00:04:03.880 --> 00:04:10.159
+as an article, as a video, as a post with links and everything.
+
+00:04:10.160 --> 00:04:11.479
+Very handy.
+
+00:04:11.480 --> 00:04:20.919
+Right, and in case a teacher uses this for class lectures,
+
+00:04:20.920 --> 00:04:26.079
+then the student profits from all sorts.
+
+00:04:26.080 --> 00:04:28.999
+The article presentation format is very useful
+
+00:04:29.000 --> 00:04:33.239
+for a student to add their own notes to it and the rest.
+
+00:04:33.240 --> 00:04:37.519
+Exactly as you said, having multiple forms is great.
+
+00:04:37.520 --> 00:04:40.479
+Video has its place, reveal has its place,
+
+00:04:40.480 --> 00:04:44.039
+PDF has its place, article has its place.
+
+00:04:44.040 --> 00:04:48.399
+All of them work together.
+
+NOTE Making presentations easier to distribute
+
+00:04:48.400 --> 00:04:50.479
+I've been having a hard time figuring out
+
+00:04:50.480 --> 00:04:54.719
+how to make the reveal.js version of a presentation
+
+00:04:54.720 --> 00:04:56.999
+more easily distributable, though.
+
+00:04:57.000 --> 00:04:58.839
+This is something we've had a hard time
+
+00:04:58.840 --> 00:05:00.199
+with in the past, too.
+
+00:05:00.200 --> 00:05:02.759
+You have these lovely EmacsConf presentations
+
+00:05:02.760 --> 00:05:04.839
+that could be reveal presentations,
+
+00:05:04.840 --> 00:05:07.759
+but hosting them doesn't quite fit
+
+00:05:07.760 --> 00:05:13.639
+in the usual assumptions people have. Exactly, exactly.
+
+00:05:13.640 --> 00:05:16.559
+So if we were to have a reveal server,
+
+00:05:16.560 --> 00:05:20.479
+then we could upload our reveal inputs to it.
+
+00:05:20.480 --> 00:05:24.999
+But you're right, we should look
+
+00:05:25.000 --> 00:05:26.679
+for some sort of a packaging
+
+00:05:26.680 --> 00:05:34.079
+that is more plug and distribute. Yeah, so I'd be all game
+
+00:05:34.080 --> 00:05:36.919
+if we wanted to do it for next year,
+
+00:05:36.920 --> 00:05:42.039
+I'd be happy to provide all the reveal outputs.
+
+NOTE Reveal output
+
+00:05:42.040 --> 00:05:45.919
+In fact, they are here, let me touch on that quickly.
+
+00:05:45.920 --> 00:05:53.639
+Good point you brought up. So, this is the Reveal output.
+
+00:05:53.640 --> 00:05:57.519
+So all of these, you see the images and the audio
+
+00:05:57.520 --> 00:06:02.359
+in my own environment are SIM links to where I keep them.
+
+00:06:02.360 --> 00:06:06.239
+So those need to come in,
+
+00:06:06.240 --> 00:06:10.599
+but the reveal output really comes right here.
+
+00:06:10.600 --> 00:06:13.679
+And this is how it looks.
+
+00:06:13.680 --> 00:06:15.679
+If that's a link you can add to the pad,
+
+00:06:15.680 --> 00:06:19.799
+then I can add you to the top page afterwards.
+
+00:06:19.800 --> 00:06:21.839
+I think as a, as a speaker,
+
+00:06:21.840 --> 00:06:24.119
+I tend to just self host the thing.
+
+00:06:24.120 --> 00:06:28.319
+And that way also, if I find a bug, which often happens,
+
+00:06:28.320 --> 00:06:30.679
+I can go and quietly update it.
+
+00:06:30.680 --> 00:06:36.439
+Exactly. Exactly. Sure. Sure. Yeah.
+
+00:06:36.440 --> 00:06:44.239
+This right now, what we are looking at is from GitHub.
+
+00:06:44.240 --> 00:06:48.599
+And the audio and the images, of course, are large,
+
+00:06:48.600 --> 00:06:55.759
+and I did not upload them. But I can send them, sure.
+
+00:06:55.760 --> 00:07:01.999
+So, a few other things maybe I can elaborate on.
+
+00:07:02.000 --> 00:07:08.639
+This is the bootstrapping page for BISOS, also on there.
+
+00:07:08.640 --> 00:07:11.079
+And if somebody wanted to actually
+
+00:07:11.080 --> 00:07:12.919
+dig deeper and go through this,
+
+00:07:12.920 --> 00:07:18.959
+a good starting point would be my GitHub page.
+
+00:07:18.960 --> 00:07:24.639
+But my GitHub page is not done and organized the usual way.
+
+00:07:24.640 --> 00:07:26.999
+So I only have three repositories
+
+00:07:27.000 --> 00:07:30.359
+and the repositories basically say,
+
+00:07:30.360 --> 00:07:32.266
+here is where you need to go.
+
+00:07:32.267 --> 00:07:39.159
+So all of my work is organized as organizations.
+
+00:07:39.160 --> 00:07:48.039
+So, for example, for Emacs, if you were to go to BxBlee,
+
+00:07:48.040 --> 00:07:56.359
+you will see all the relevant repos for that purpose.
+
+00:07:56.360 --> 00:07:58.975
+So, for example, if you wanted to
+
+00:07:58.976 --> 00:08:03.319
+come and take a look at mail template,
+
+00:08:03.320 --> 00:08:08.719
+templating, distribution, and tracking,
+
+00:08:08.720 --> 00:08:14.999
+you would get a Emacs package ready to go over here.
+
+NOTE GitHub organizations
+
+00:08:15.000 --> 00:08:23.479
+But again, all of this is through the use of GitHub organizations.
+
+00:08:23.480 --> 00:08:26.399
+So my repos are by subject
+
+00:08:26.400 --> 00:08:33.239
+and the BISOS itself has 69 repositories
+
+00:08:33.240 --> 00:08:38.719
+where different sections of it are packaged as PIP packages.
+
+00:08:38.720 --> 00:08:42.359
+So, for example, for LCNT, we can go there.
+
+00:08:42.360 --> 00:08:46.439
+So, these are the packages that let you,
+
+00:08:46.440 --> 00:08:53.159
+let me go there, that let you dissect.
+
+00:08:53.160 --> 00:08:55.199
+Sorry, you have your slides shared at the moment,
+
+00:08:55.200 --> 00:08:59.599
+so I don't know if you're in a different tab.
+
+00:08:59.600 --> 00:09:03.079
+Oh, am I in a different tab?
+
+00:09:03.080 --> 00:09:06.399
+I thought that that would follow me.
+
+00:09:06.400 --> 00:09:16.119
+Yes, I am in a different tab. Let me see.
+
+00:09:16.120 --> 00:09:19.879
+This is the one that you are seeing,
+
+00:09:19.880 --> 00:09:28.839
+so let me go over here. Perfect. Now you're seeing it.
+
+00:09:28.840 --> 00:09:31.279
+So literally on the same page. Awesome. Right.
+
+00:09:31.280 --> 00:09:33.679
+So you were not actually seeing what I was saying.
+
+00:09:33.680 --> 00:09:36.159
+So, so what I was saying that is that
+
+00:09:36.160 --> 00:09:42.159
+if you go to my primary website, GitHub page,
+
+00:09:42.160 --> 00:09:45.439
+you will see that there are only three repos there.
+
+00:09:45.440 --> 00:09:49.759
+And those repos just give information
+
+00:09:49.760 --> 00:09:52.959
+about where the real repos are.
+
+00:09:52.960 --> 00:09:57.399
+And the real repos are organized in various organizations.
+
+00:09:57.400 --> 00:10:06.719
+So, for example, for Emacs packages, I use the bxblee
+
+00:10:06.720 --> 00:10:11.999
+And in there, there are 40 repositories.
+
+00:10:12.000 --> 00:10:15.399
+And as an example, you can choose, for example,
+
+00:10:15.400 --> 00:10:26.519
+AI plus is just a few additional libraries for menus, for Aidermacs.
+
+00:10:26.520 --> 00:10:31.719
+And the rest of BLEE is done that way as well.
+
+00:10:31.720 --> 00:10:36.919
+So if you were to let me also show
+
+00:10:36.920 --> 00:10:43.759
+more relevant stuff to the content generation.
+
+00:10:43.760 --> 00:10:48.839
+And everything related to BISOS in Python is in BISOS-PIP.
+
+00:10:48.840 --> 00:10:52.879
+These are packages that are ready
+
+00:10:52.880 --> 00:10:57.959
+to be exported to pypi and
+
+00:10:57.960 --> 00:11:02.749
+For example, for LCNT, if you go here,
+
+00:11:02.750 --> 00:11:04.558
+let's go to the bin directory.
+
+00:11:04.559 --> 00:11:15.808
+These are the utilities that dissect the PDF output of Beamer
+
+00:11:15.809 --> 00:11:23.839
+convert it to images so that you can insert them in Reveal.
+
+00:11:23.840 --> 00:11:29.159
+And then again, if you were to just wanted to dig deeper
+
+00:11:29.160 --> 00:11:34.759
+in any of these as components,
+
+00:11:34.760 --> 00:11:40.559
+you would simply start from this top level page
+
+00:11:40.560 --> 00:11:44.719
+and explore the organizations.
+
+00:11:44.720 --> 00:11:48.719
+So in total, maybe there is 300 repos,
+
+00:11:48.720 --> 00:11:54.279
+but they are organized by subject matter
+
+00:11:54.280 --> 00:12:03.399
+within GitHub organizations.
+
+00:12:03.400 --> 00:12:10.799
+Yeah. One additional general comment.
+
+00:12:10.800 --> 00:12:13.039
+If you were to look at my presentation,
+
+00:12:13.040 --> 00:12:17.519
+I'd say I touched on five different topics.
+
+00:12:17.520 --> 00:12:24.039
+So, one topic was this content generation in general.
+
+NOTE Challenge of DIY model and recipes
+
+00:12:24.040 --> 00:12:35.279
+The second one was this challenge of DIY model and recipes
+
+00:12:35.280 --> 00:12:38.319
+versus building something large
+
+00:12:38.320 --> 00:12:40.919
+and including everything in it.
+
+00:12:40.920 --> 00:12:43.519
+And that is, that has been the motivation
+
+00:12:43.520 --> 00:12:46.919
+for BISOS and BLEE.
+
+00:12:46.920 --> 00:12:50.279
+And I'm interested in getting feedback on it.
+
+00:12:50.280 --> 00:12:54.519
+In general, the open source culture
+
+00:12:54.520 --> 00:13:00.719
+has been focusing on components
+
+00:13:00.720 --> 00:13:03.439
+and large American corporations
+
+00:13:03.440 --> 00:13:07.719
+have focused in integration of these components.
+
+00:13:07.720 --> 00:13:11.679
+So my short message here is that
+
+00:13:11.680 --> 00:13:17.959
+we should start thinking as providing solutions
+
+00:13:17.960 --> 00:13:23.519
+as opposed to minor pieces and packages
+
+00:13:23.520 --> 00:13:30.599
+and put them all together and claim them as our own digital ecosystem.
+
+00:13:30.600 --> 00:13:38.319
+And this is the concept behind ByStar, BISOS and BLEE.
+
+00:13:38.320 --> 00:13:40.999
+The third point I was making throughout
+
+00:13:41.000 --> 00:13:45.479
+is this concept of dynamic blocks everywhere,
+
+00:13:45.480 --> 00:13:51.599
+and Comeega, which is the inverse of Babel.
+
+00:13:51.600 --> 00:13:57.479
+And I'd also be interested in feedback on those.
+
+NOTE Dblocks everywhere
+
+00:13:57.480 --> 00:14:03.239
+I think the dblocks everywhere concept,
+
+00:14:03.240 --> 00:14:13.079
+I can very quickly show that.
+
+00:14:13.080 --> 00:14:18.039
+it would be in the LaTeX file, as an example.
+
+00:14:18.040 --> 00:14:23.319
+I didn't really do a good job in digging deeper into that.
+
+00:14:23.320 --> 00:14:25.479
+So if you go to the sources
+
+00:14:25.480 --> 00:14:31.319
+and you look at any of the slides,
+
+00:14:31.320 --> 00:14:39.719
+All the slides are in here inside of a dynamic block.
+
+00:14:39.720 --> 00:14:41.919
+This is an org dblock,
+
+00:14:41.920 --> 00:14:46.919
+but you would invoke it in LaTeX mode.
+
+00:14:46.920 --> 00:14:51.199
+And then from this begin to this end,
+
+00:14:51.200 --> 00:14:54.559
+everything is auto-generated
+
+00:14:54.560 --> 00:15:00.039
+through the Elisp function, body:mm/video.
+
+00:15:00.040 --> 00:15:06.879
+And the parameters that it takes are the video path.
+
+00:15:06.880 --> 00:15:12.239
+So all of this code is repeated all over the place.
+
+00:15:12.240 --> 00:15:15.799
+And all you need in it is the video path.
+
+00:15:15.800 --> 00:15:21.959
+So it's very easy to think of this as a macro capability,
+
+00:15:21.960 --> 00:15:25.079
+except that the macro is visible.
+
+00:15:25.080 --> 00:15:29.479
+And it has one additional benefit
+
+00:15:29.480 --> 00:15:34.799
+on top of general macro capabilities,
+
+00:15:34.800 --> 00:15:36.759
+and that is that it's open.
+
+00:15:36.760 --> 00:15:41.679
+In this particular case, it closes,
+
+00:15:41.680 --> 00:15:46.439
+but let me show you another one where it is open.
+
+00:15:46.440 --> 00:15:54.879
+So if you look at, this is latex section, this one is good.
+
+00:15:54.880 --> 00:16:00.439
+This is a derived image. And by saying that it's open
+
+00:16:00.440 --> 00:16:06.679
+is that you see my begin verbatim and my begin frame.
+
+00:16:06.680 --> 00:16:11.439
+They end and there is no closing for them.
+
+00:16:11.440 --> 00:16:14.999
+So the extra text that is outside
+
+00:16:15.000 --> 00:16:21.319
+of the D block and closes it is down here.
+
+00:16:21.320 --> 00:16:24.959
+And none of the existing macro capabilities
+
+00:16:24.960 --> 00:16:30.799
+gives you this feature. This even comes handy in Lisp.
+
+00:16:30.800 --> 00:16:40.039
+So that is a proposal saying
+
+00:16:40.040 --> 00:16:47.719
+that let's make D blocks, dynamic blocks,
+
+00:16:47.720 --> 00:16:52.959
+generalized to all of Emacs, as opposed to just org mode.
+
+00:16:52.960 --> 00:16:54.759
+And that's relatively simple.
+
+00:16:54.760 --> 00:17:01.359
+And the Emacs source team could easily decide
+
+00:17:01.360 --> 00:17:02.959
+that this is worthwhile doing.
+
+00:17:02.960 --> 00:17:07.759
+And then COMEEGA, of course, I've gone
+
+00:17:07.760 --> 00:17:09.959
+over it through the presentation.
+
+NOTE Q: What changes have you seen in the culture while developing all these things like libre-halal system and now blee-lcnt?
+
+00:17:09.960 --> 00:17:20.399
+So, I see 1 question coming in. What changes have you seen?
+
+00:17:20.400 --> 00:17:24.719
+the culture while developing all these things
+
+00:17:24.720 --> 00:17:36.279
+like Libre-halaal system and now Blee-LCNT?
+
+00:17:36.280 --> 00:17:40.079
+Well, it's a work in progress, I would say.
+
+00:17:40.080 --> 00:17:43.039
+We learn from one another.
+
+00:17:43.040 --> 00:17:47.719
+And what I'm doing may be considered
+
+00:17:47.720 --> 00:17:52.199
+just a stepwise increment,
+
+00:17:52.200 --> 00:18:01.799
+but the cultural input is that we really should start
+
+00:18:01.800 --> 00:18:09.399
+thinking about providing solutions as opposed to packages.
+
+00:18:09.400 --> 00:18:19.319
+The FOSS culture is really limited in its scope to packages
+
+00:18:19.320 --> 00:18:24.799
+or even if when you think something very large like Debian,
+
+00:18:24.800 --> 00:18:28.159
+which is a collection of packages.
+
+00:18:28.160 --> 00:18:31.479
+And it is still choice oriented,
+
+00:18:31.480 --> 00:18:55.399
+as opposed to solution oriented.
+
+00:18:55.400 --> 00:19:03.599
+Yeah. Are there any additional topics or questions?
+
+00:19:03.600 --> 00:19:11.159
+Otherwise, I'll just add a few additional concepts.
+
+NOTE Intellectual property rights
+
+00:19:11.160 --> 00:19:18.079
+So the two other points made throughout the presentations
+
+00:19:18.080 --> 00:19:28.759
+are that this statement about clear invalidity
+
+00:19:28.760 --> 00:19:30.719
+of the Western IPR regime.
+
+00:19:30.720 --> 00:19:34.399
+So throughout the FOSS movement,
+
+00:19:34.400 --> 00:19:42.719
+we have been focusing on providing alternative licenses
+
+00:19:42.720 --> 00:19:49.319
+which coexist with the IPR system.
+
+00:19:49.320 --> 00:19:52.199
+And that is the practical thing to do.
+
+00:19:52.200 --> 00:19:55.879
+We are doing a jujitsu on IPR.
+
+00:19:55.880 --> 00:20:00.919
+We are saying that this is our license to it.
+
+00:20:00.920 --> 00:20:07.399
+But conceptually, there has been little discussion
+
+00:20:07.400 --> 00:20:14.319
+and also positioning on this basic question
+
+00:20:14.320 --> 00:20:17.479
+as to whether or not copyright
+
+00:20:17.480 --> 00:20:21.119
+and patents are valid or invalid.
+
+00:20:21.120 --> 00:20:26.639
+And what I am saying is that it is clear that they are invalid,
+
+00:20:26.640 --> 00:20:30.439
+particularly once you start looking at them
+
+00:20:30.440 --> 00:20:33.759
+with the lens of polyexistentials.
+
+00:20:33.760 --> 00:20:39.239
+And that the FOSS movement
+
+00:20:39.240 --> 00:20:42.199
+really needs to combine these two,
+
+00:20:42.200 --> 00:20:47.359
+this notion of free software and open source licenses,
+
+00:20:47.360 --> 00:20:51.679
+and combined with the belief system
+
+00:20:51.680 --> 00:20:55.839
+that we are completely and utterly against
+
+00:20:55.840 --> 00:21:00.679
+the validity of the Western intellectual property rights regime.
+
+00:21:00.680 --> 00:21:05.399
+And I use the Western and the American occasionally,
+
+00:21:05.400 --> 00:21:12.479
+and the reason behind that is that in fact it is, they are Western.
+
+00:21:12.480 --> 00:21:16.479
+If you go to any other language, if you go to Farsi,
+
+00:21:16.480 --> 00:21:19.079
+if you go to Arabic, if you go to Chinese,
+
+00:21:19.080 --> 00:21:24.159
+if you go to Japanese, which are non-Western cultures,
+
+00:21:24.160 --> 00:21:28.639
+the concept of intellectual property,
+
+00:21:28.640 --> 00:21:33.159
+the words, the vocabulary of those
+
+00:21:33.160 --> 00:21:36.639
+combination of intellectual and property,
+
+00:21:36.640 --> 00:21:40.559
+did not exist anywhere in those cultures.
+
+00:21:40.560 --> 00:21:44.559
+It's only in the past, maybe 60, 70 years
+
+00:21:44.560 --> 00:21:52.279
+that they have been translated from the Western world and brought into it.
+
+00:21:52.280 --> 00:21:54.639
+So there is an inherent root
+
+00:21:54.640 --> 00:21:58.959
+into the intellectual property rights system,
+
+00:21:58.960 --> 00:22:02.679
+which goes to the Western culture.
+
+00:22:02.680 --> 00:22:08.439
+The second point that I have brought into
+
+00:22:08.440 --> 00:22:10.999
+this presentation and the previous ones
+
+00:22:11.000 --> 00:22:16.239
+is this question of, if we go with free software,
+
+00:22:16.240 --> 00:22:18.119
+if we go with open software,
+
+00:22:18.120 --> 00:22:22.159
+are we really creating the right labels?
+
+00:22:22.160 --> 00:22:25.679
+And my point is that no, neither of them,
+
+00:22:25.680 --> 00:22:29.479
+neither free software, nor open source
+
+00:22:29.480 --> 00:22:33.159
+are capturing really the essence
+
+00:22:33.160 --> 00:22:36.399
+of what we are trying to do.
+
+00:22:36.400 --> 00:22:41.439
+And I claim that that is in fact ethics and morality.
+
+00:22:41.440 --> 00:22:48.879
+And it is societal belief that if we reject
+
+00:22:48.880 --> 00:22:51.879
+intellectual property rights regime,
+
+00:22:51.880 --> 00:22:53.279
+what do we replace it with?
+
+00:22:53.280 --> 00:22:58.799
+And in my thinking is that a software developer
+
+00:22:58.800 --> 00:23:00.919
+does not get to choose
+
+00:23:00.920 --> 00:23:04.919
+what license goes with his or her software,
+
+00:23:04.920 --> 00:23:09.319
+and that the equivalent of a Affero GPL
+
+00:23:09.320 --> 00:23:13.839
+is the default correct license
+
+00:23:13.840 --> 00:23:16.319
+to use for all of your software
+
+00:23:16.320 --> 00:23:21.039
+because it is the one that reflects the belief system
+
+00:23:21.040 --> 00:23:24.719
+that all software should be ethical software.
+
+00:23:24.720 --> 00:23:43.559
+Yeah, I'm looking at the Etherpad again and
+
+NOTE Q: Given that large AI companies are openly stealing IP and copyright, thereby eroding the authority of such law (and eroding truth itself as well), can you see a future where IP & copyright flaw become untenable and what sort of onwards effect might that have?
+
+00:23:43.560 --> 00:23:48.679
+The question is about IP and AI.
+
+00:23:48.680 --> 00:23:54.359
+So yeah, over the past two years,
+
+00:23:54.360 --> 00:23:56.599
+something huge has happened.
+
+00:23:56.600 --> 00:24:04.919
+And what I am seeing in there as a solution
+
+00:24:04.920 --> 00:24:12.319
+is essentially comes down to a talk
+
+00:24:12.320 --> 00:24:16.839
+that was given maybe two years ago by someone at EmacsConf,
+
+00:24:16.840 --> 00:24:22.359
+and its label was attribution-based economics.
+
+00:24:22.360 --> 00:24:28.319
+In my thinking, intellectual property
+
+00:24:28.320 --> 00:24:29.839
+as a whole is invalid.
+
+00:24:29.840 --> 00:24:36.119
+But that means that through something like a Affero GPL,
+
+00:24:36.120 --> 00:24:41.719
+you focus on attribution basing, proper attribution basing.
+
+00:24:41.720 --> 00:24:43.839
+If somebody has done some work,
+
+00:24:43.840 --> 00:24:48.599
+it should be clear, no matter what, that that work is his.
+
+00:24:48.600 --> 00:24:54.879
+And that we already, even prior to AI, we were seeing this.
+
+00:24:54.880 --> 00:24:59.399
+We were seeing large GitHub repos with hundreds of authors.
+
+00:24:59.400 --> 00:25:09.879
+And it was utterly unclear as to who would own this whole thing.
+
+00:25:09.880 --> 00:25:14.119
+And any piece of it is not of significance.
+
+00:25:14.120 --> 00:25:16.879
+What is of significance is the whole thing.
+
+00:25:16.880 --> 00:25:25.039
+So moving towards that attribution based economics is key.
+
+00:25:25.040 --> 00:25:27.599
+And then once we do that,
+
+00:25:27.600 --> 00:25:31.919
+and then we accept AI as a reality.
+
+00:25:31.920 --> 00:25:38.199
+AI should still take very seriously
+
+00:25:38.200 --> 00:25:43.999
+and conform to attribution-based economics.
+
+00:25:44.000 --> 00:25:47.879
+In other words, what is generated by the machine
+
+00:25:47.880 --> 00:25:51.279
+should not be claimed to be no one's
+
+00:25:51.280 --> 00:25:54.239
+or the machine owners, the AI owners.
+
+00:25:54.240 --> 00:25:56.879
+It should still clearly be attributed
+
+00:25:56.880 --> 00:26:03.039
+to the people who contributed in its creation.
+
+00:26:03.040 --> 00:26:06.959
+This all becomes very muddy, very clear,
+
+00:26:06.960 --> 00:26:11.919
+and I don't have a simple or clear answer to it.
+
+00:26:11.920 --> 00:26:16.079
+But the perimeters of the solution lie in
+
+00:26:16.080 --> 00:26:21.479
+rejection of intellectual property,
+
+00:26:21.480 --> 00:26:25.039
+replacement of the intellectual property
+
+00:26:25.040 --> 00:26:27.399
+with attribution-based economics,
+
+00:26:27.400 --> 00:26:31.199
+and restrictions on AI use
+
+00:26:31.200 --> 00:26:38.199
+of not properly attributed content.
+
+00:26:38.200 --> 00:26:50.239
+Yeah, I'd say that would be, it's a complicated topic
+
+00:26:50.240 --> 00:26:56.119
+and I would simply say I haven't figured it out at all.
+
+00:26:56.120 --> 00:27:03.759
+I just have a perimeter set of concepts
+
+00:27:03.760 --> 00:27:06.479
+that can be used to drive it.
+
+00:27:06.480 --> 00:27:20.679
+Are there any other questions? If there aren't any,
+
+00:27:20.680 --> 00:27:23.159
+I thank everybody again,
+
+00:27:23.160 --> 00:27:27.799
+and particularly the EmacsConf organizers and Sacha.
+
+00:27:27.800 --> 00:27:32.639
+And I look forward to continuing all of this next year.
+
+00:27:32.640 --> 00:27:39.079
+Unless there is any objection,
+
+00:27:39.080 --> 00:27:45.360
+I'll leave the session and close it. Thank you.
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--answers.vtt b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.vtt
new file mode 100644
index 00000000..53f9486e
--- /dev/null
+++ b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.vtt
@@ -0,0 +1,2109 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00.000 --> 00:07.879
+All right, take it away. Okay, am I, are we live?
+
+00:07.880 --> 00:12.759
+Yes, we're live. Oh man, holy moly.
+
+00:12.760 --> 00:19.359
+Oh, that's surreal. Hi everyone. Oh man.
+
+00:19.360 --> 00:26.319
+Ah, so excited to be here. So good to see all of you. Okay.
+
+00:26.320 --> 00:29.479
+So, should we just go ahead and get right into it?
+
+00:29.480 --> 00:38.479
+Yeah, let me, let me see here. So I have.
+
+00:38.480 --> 00:41.559
+Yeah, I see, I see some, I see some questions coming in.
+
+00:41.560 --> 00:00:53.416
+Perfect. I am going to share my screen real quick.
+
+00:00:53.417 --> 00:00:59.079
+Currently, we have a sort of a ?? thing going.
+
+00:59.080 --> 01:04.519
+And so I just wanted to, while we're waiting
+
+01:04.520 --> 01:05.559
+for some more stuff to come in,
+
+01:05.560 --> 01:11.919
+I just wanted to sort of idle on this buffer here.
+
+01:11.920 --> 01:13.559
+If you increase your font size slightly,
+
+01:13.560 --> 01:15.959
+that might be even nicer.
+
+01:15.960 --> 01:38.159
+Yes, absolutely, gladly. Whoa, okay. There we go.
+
+NOTE Q: Did you show examples of files in bookclub style?
+
+01:38.160 --> 00:01:40.899
+All right, the first question
+
+00:01:40.900 --> 01:45.839
+was looking for examples of files in book club style.
+
+01:45.840 --> 01:48.799
+The person says, that seems to be related
+
+01:48.800 --> 01:49.679
+to what I've been doing,
+
+01:49.680 --> 01:54.239
+but coming from different influences. Yes, yes.
+
+01:54.240 --> 02:03.559
+So I included a...
+
+02:03.560 --> 02:07.879
+Let me see, I'm just looking at the IRC here
+
+02:07.880 --> 02:16.719
+and smiling at all the people. So, yes, I provided a link.
+
+02:16.720 --> 02:19.039
+So I think that an excellent...
+
+02:19.040 --> 02:24.159
+So I have gone ahead and provided
+
+02:24.160 --> 00:02:28.125
+the link to the repo
+
+00:02:28.126 --> 02:30.479
+and I'm going to go ahead and post that again.
+
+02:30.480 --> 02:34.039
+So this should serve as a full example
+
+02:34.040 --> 02:39.519
+of what a just sort of standard book club file looks like.
+
+02:39.520 --> 02:41.559
+And if anyone has specific questions
+
+02:41.560 --> 02:42.839
+about anything in particular,
+
+02:42.840 --> 02:47.799
+they would love to see my walkthrough
+
+02:47.800 --> 02:52.239
+and narrate specifically, you know, any place in this file
+
+02:52.240 --> 02:55.319
+that they would like to see me go over live,
+
+02:55.320 --> 02:58.719
+I would be super happy to do that.
+
+02:58.720 --> 03:03.439
+So I have the whole more or less complete
+
+03:03.440 --> 03:10.799
+book club file for Squint pulled up here.
+
+03:10.800 --> 03:14.599
+Yeah, I have my vision laid out,
+
+03:14.600 --> 03:18.639
+which has my initial sort of goal.
+
+03:18.640 --> 03:22.879
+The background and the vision sort of combined
+
+03:22.880 --> 03:28.559
+to lay out what my general sort of goal is.
+
+03:28.560 --> 03:31.319
+I just realized... Let me kill my stream there.
+
+03:31.320 --> 03:39.079
+There we go. All right. There's another question.
+
+NOTE Q: The product of a Tapa like squint.org would be pure GOLD for an agent like Claude Code - have you experimented with providing an agent with the final output and letting it chew through todos?
+
+03:39.080 --> 03:41.439
+The product of a tapa like squint.org
+
+03:41.440 --> 03:44.359
+would be pure gold for an agent like Claude Code.
+
+03:44.360 --> 03:47.519
+Have you experimented with providing an agent with a final output
+
+03:47.520 --> 03:50.919
+and letting it chew through to-dos?
+
+03:50.920 --> 03:53.319
+That would be a really excellent question.
+
+03:53.320 --> 03:54.919
+I actually just kind of recently
+
+03:54.920 --> 03:58.159
+got into Claude in particular.
+
+03:58.160 --> 04:01.679
+I played quite a bit with GPT and
+
+04:01.680 --> 04:07.239
+and a lot of 8 billion parameter local models.
+
+04:07.240 --> 04:09.879
+And I was never super impressed.
+
+04:09.880 --> 04:12.999
+It always felt like I was just sort of wrangling
+
+04:13.000 --> 04:14.639
+to get it on the same page,
+
+04:14.640 --> 04:16.799
+whether as a result of sycophantism
+
+04:16.800 --> 04:19.399
+or really just not having enough parameters
+
+04:19.400 --> 04:21.919
+in order to understand the context of what's going on.
+
+04:21.920 --> 04:25.759
+Claude has completely changed my perception
+
+04:25.760 --> 04:27.359
+of what an LLM can do or not.
+
+04:27.360 --> 04:31.119
+It makes autonomy not seem like a total fever train.
+
+04:31.120 --> 04:36.439
+I have definitely been curious about
+
+04:36.440 --> 04:39.639
+how an LLM would react to book club files.
+
+04:39.640 --> 04:41.719
+I think that, yeah, especially like,
+
+04:41.720 --> 04:43.799
+I've been daydreaming a little bit about,
+
+04:43.800 --> 04:49.919
+you know, having it generate scratch artifacts
+
+04:49.920 --> 04:54.799
+or suggesting, you know, changes to the format.
+
+04:54.800 --> 04:58.959
+It's like, yeah, the fact that
+
+04:58.960 --> 05:01.959
+this is all like, you know, like super,
+
+05:01.960 --> 05:05.239
+The goal and the hope for all of this
+
+05:05.240 --> 05:08.359
+is that we're being verbose about our thinking anyway.
+
+05:08.360 --> 05:12.199
+This is sort of how, by default,
+
+05:12.200 --> 05:14.159
+deep reasoning kind of works.
+
+05:14.160 --> 05:15.799
+I actually think that I totally agree.
+
+05:15.800 --> 05:17.559
+It would be a great fit.
+
+05:17.560 --> 05:19.599
+I have yet to personally do it,
+
+05:19.600 --> 05:21.279
+because I've always been just
+
+05:21.280 --> 05:23.319
+a little bit wary about, like, you know...
+
+05:23.320 --> 05:24.999
+Well, if I'm writing a program,
+
+05:25.000 --> 05:26.879
+I want to write it, you know?
+
+05:26.880 --> 05:29.239
+People often talk about, like, you know,
+
+05:29.240 --> 05:31.919
+oh, I just want to hand off
+
+05:31.920 --> 05:34.159
+the boring parts to Claude.
+
+05:34.160 --> 05:36.519
+But the thing is, if I'm writing in Elisp,
+
+05:36.520 --> 05:39.479
+I find the whole thing to be kind of fun.
+
+05:39.480 --> 05:46.079
+I'd be super interested in, you know,
+
+05:46.080 --> 05:48.159
+just sort of as a point of exercise,
+
+05:48.160 --> 05:49.479
+seeing what it's capable of.
+
+05:49.480 --> 05:51.479
+Because I think, I really do think
+
+05:51.480 --> 05:54.119
+that this would be kind of an ideal environment.
+
+05:54.120 --> 05:55.879
+It is kind of close to, you know,
+
+05:55.880 --> 05:59.039
+native-ish, how LLMs think.
+
+05:59.040 --> 06:01.399
+There's also, like, you know, of course,
+
+06:01.400 --> 06:03.479
+the, um, the privacy angle.
+
+06:03.480 --> 06:05.119
+I don't necessarily want to provide
+
+06:05.120 --> 06:09.319
+a whole bunch of code verbatim that I intend to GPL3.
+
+06:09.320 --> 06:15.719
+But I believe that Claude kind of has a better policy
+
+06:15.720 --> 06:20.639
+in terms of what does and does not become training data.
+
+06:20.640 --> 06:22.439
+I'll have to look into Claude in particular
+
+06:22.440 --> 06:24.599
+because I feel like that would be my target for it.
+
+06:24.600 --> 06:29.679
+But yeah, I think that's definitely onto something.
+
+06:29.680 --> 06:31.439
+I've definitely thought about this.
+
+06:31.440 --> 00:06:37.919
+I've definitely been really curious about this.
+
+NOTE Q: Do you think every Tapa should have it's own Bookclub file as well? Or would you rather keep just one bookclub file in the top of the project?
+
+00:06:37.920 --> 06:40.279
+Next question, do you think every Tapa
+
+06:40.280 --> 06:42.479
+should have its own book club file as well?
+
+06:42.480 --> 06:45.559
+Or would you rather keep just one book club file
+
+06:45.560 --> 06:46.559
+in the top of the project?
+
+06:46.560 --> 06:51.559
+So I think that I definitely would advise
+
+06:51.560 --> 06:54.879
+that each Tapa have its own book club file.
+
+06:54.880 --> 06:59.479
+The reason being is because I find that for me personally,
+
+06:59.480 --> 07:00.799
+the way that my brain kind of works
+
+07:00.800 --> 07:06.239
+is that out of sight, out of mind is very literal for me.
+
+07:06.240 --> 00:07:16.207
+I find that... I find that... What am I thinking of?
+
+00:07:16.208 --> 00:07:18.750
+Sorry, I just saw that I got an email
+
+00:07:18.751 --> 00:07:22.839
+and I'm like, yeah, okay, cool.
+
+00:07:22.840 --> 07:27.319
+Case in point, right? We are at case in point, you know,
+
+07:27.320 --> 07:30.519
+out of sight, out of mind. Yes, no, absolutely.
+
+07:30.520 --> 07:35.799
+Yeah, no, exactly. I, um, I'm definitely quite ADHD
+
+07:35.800 --> 07:36.879
+and it works for my advantage
+
+07:36.880 --> 07:38.959
+because it provides all sorts of versatility.
+
+07:38.960 --> 07:42.439
+This is another great advantage of book club.
+
+07:42.440 --> 07:46.399
+If you have an ADHD mind like I do where, you know,
+
+07:46.400 --> 07:48.319
+You love jumping around and working on
+
+07:48.320 --> 07:51.519
+all sorts of different pieces simultaneously.
+
+07:51.520 --> 07:52.999
+You don't like sitting down
+
+07:53.000 --> 07:54.519
+and doing the same thing all day
+
+07:54.520 --> 07:57.239
+unless it really latches onto you.
+
+07:57.240 --> 07:59.759
+You know, you can pivot and you don't do anything.
+
+07:59.760 --> 08:02.559
+It really rewards the fact that you can pivot.
+
+08:02.560 --> 08:06.039
+So I find that to be really excellent.
+
+08:06.040 --> 08:08.359
+But to go back to the original question,
+
+08:08.360 --> 08:11.519
+I would definitely recommend,
+
+08:11.520 --> 08:13.759
+at least in my circumstance,
+
+08:13.760 --> 08:15.679
+I find it to be incredibly useful
+
+08:15.680 --> 00:08:18.699
+to have each tapa be its own book club file
+
+00:08:18.700 --> 08:21.839
+rather than to have a unified file
+
+08:21.840 --> 08:26.599
+that holds all of your tapas. You can definitely do this,
+
+08:26.600 --> 08:28.959
+especially if you're using org
+
+08:28.960 --> 08:31.279
+to organize it hierarchically.
+
+08:31.280 --> 08:33.759
+It's just sort of a matter of preference
+
+08:33.760 --> 08:34.719
+and style at that point.
+
+08:34.720 --> 08:39.319
+So long as you're making a clear distinction between your tapas,
+
+08:39.320 --> 08:40.359
+that's the main thing
+
+08:40.360 --> 08:42.399
+that I would recommend no matter what,
+
+08:42.400 --> 08:44.919
+because the whole hope that I have is that
+
+08:44.920 --> 08:47.879
+you have a sort of separation of focus
+
+08:47.880 --> 08:49.599
+between the different you know,
+
+08:49.600 --> 08:54.719
+the different focuses of your different tapas,
+
+08:54.720 --> 08:57.959
+they really should ideally feel like different programs
+
+08:57.960 --> 09:00.119
+so that you're not, you know,
+
+09:00.120 --> 09:02.079
+getting over yourself, getting ahead of yourself.
+
+09:02.080 --> 09:05.079
+I think that, you know, on that basis,
+
+09:05.080 --> 09:07.479
+I would probably default to recommending
+
+09:07.480 --> 09:12.919
+that tapas have their own separate book club files,
+
+09:12.920 --> 09:15.679
+because ideally they should kind of be different
+
+09:15.680 --> 09:19.239
+sort of independent but related thoughts.
+
+09:19.240 --> 09:21.719
+But at the same time, I mean, like, you know,
+
+09:21.720 --> 09:23.559
+this is coming from someone
+
+09:23.560 --> 09:26.679
+who like has a billion small, like, you know,
+
+09:26.680 --> 09:28.679
+I had one giant org file for a long time
+
+09:28.680 --> 09:31.759
+and then realized that really didn't work for me.
+
+09:31.760 --> 09:34.239
+So now I have a billion tiny ones.
+
+09:34.240 --> 09:38.439
+So depending upon how you feel about, you know,
+
+09:38.440 --> 09:40.759
+should I have one really big org file
+
+09:40.760 --> 09:42.479
+or a bunch of really little org files?
+
+09:42.480 --> 09:44.639
+I feel like that more or less gives your answer.
+
+09:44.640 --> 09:48.359
+I think it's whatever works best for you.
+
+09:48.360 --> 09:51.439
+I know that far and away what works best for me
+
+09:51.440 --> 09:55.239
+is having separate files. No matter what, you should have
+
+09:55.240 --> 09:57.999
+separation of concept though.
+
+09:58.000 --> 10:00.639
+But however you do that is, you know,
+
+10:00.640 --> 00:10:08.039
+is best your judgment call.
+
+NOTE Q: How do you build habits when it comes to documentation?
+
+00:10:08.040 --> 10:11.399
+Next question, how do you build habits
+
+10:11.400 --> 10:13.119
+when it comes to documentation?
+
+10:13.120 --> 10:16.039
+I tend to produce lots of documentation in one go,
+
+10:16.040 --> 10:19.319
+then effectively forget to do it for long periods of time
+
+10:19.320 --> 10:20.599
+and end up playing catch up,
+
+10:20.600 --> 10:22.479
+which results in a loss of precision,
+
+10:22.480 --> 10:24.319
+as you alluded to in your talk.
+
+10:24.320 --> 10:26.519
+In a work setting, when something goes on fire
+
+10:26.520 --> 10:28.919
+or priorities change, it can be hard to keep discipline.
+
+10:28.920 --> 10:32.559
+Would love your thoughts. Thanks. Yes, absolutely.
+
+10:32.560 --> 10:35.719
+So what I tend to do is I don't...
+
+10:35.720 --> 10:39.239
+So really, so far, what I've been doing
+
+10:39.240 --> 10:42.159
+is that I haven't been making a conscious priority
+
+10:42.160 --> 10:45.359
+of writing documentation at all.
+
+10:45.360 --> 10:48.039
+And if that sounds contradictory
+
+10:48.040 --> 00:10:50.259
+to the talk, that is correct.
+
+00:10:50.260 --> 10:54.999
+What I mean by this is that I go about
+
+10:55.000 --> 11:00.039
+is that when I'm writing code,
+
+11:00.040 --> 11:03.959
+when I'm writing, you know, drafts of my functions,
+
+11:03.960 --> 11:05.439
+the way that I tend to approach this,
+
+11:05.440 --> 11:07.279
+the way that I really emphasize the approach for it,
+
+11:07.280 --> 11:12.999
+is that I want to focus first and foremost
+
+11:13.000 --> 11:15.559
+on sort of like just writing down
+
+11:15.560 --> 11:17.519
+what my internal monologue is
+
+11:17.520 --> 11:23.519
+for what I'm doing for that pass working on the file.
+
+11:23.520 --> 11:25.919
+So my document takes ultimate...
+
+11:25.920 --> 11:29.519
+Distance of doc is ultimately a property
+
+11:29.520 --> 11:32.359
+from the fact that I am writing
+
+11:32.360 --> 11:35.119
+what I'm doing as I'm doing it.
+
+11:35.120 --> 11:37.759
+And it's more or less just I'm just
+
+11:37.760 --> 11:39.759
+mashing out the stream of consciousness
+
+11:39.760 --> 11:43.359
+of what's going on inside my head as it's happening.
+
+11:43.360 --> 11:47.679
+So if we go down and we take a look at,
+
+11:47.680 --> 11:53.319
+yeah, so let's go ahead and take a look back at the macro.
+
+11:53.320 --> 11:56.359
+Yeah, really, this is kind of cheating,
+
+11:56.360 --> 00:12:07.541
+because mostly I would consider this to be self-documenting,
+
+00:12:07.542 --> 00:12:09.500
+but we all kind of know that
+
+00:12:09.501 --> 12:11.759
+that in and of itself is a slippery slope.
+
+12:11.760 --> 00:12:16.167
+That's not great. Because it's like, I could believe
+
+00:12:16.168 --> 12:17.719
+that this would be self-documenting
+
+12:17.720 --> 12:19.959
+if this was a three-liner.
+
+12:19.960 --> 12:24.719
+It is not. which, you know, also goes to show me
+
+12:24.720 --> 12:27.759
+that this needs to be splitting into its own Tapas
+
+12:27.760 --> 12:32.239
+I intend to, you know, write a Tapa
+
+12:32.240 --> 12:37.079
+that's a sort of macro builder
+
+12:37.080 --> 12:40.559
+that automatically, you know, does the gensyms for you.
+
+12:40.560 --> 12:41.959
+Something along the lines of
+
+12:41.960 --> 12:46.679
+what's the Common Lisp macro for that called?
+
+12:46.680 --> 12:51.879
+It's like, there's some Common Lisp faculty
+
+12:51.880 --> 12:53.919
+that does automatic gensym binding.
+
+12:53.920 --> 00:12:57.099
+I can't quite remember what it's called.
+
+00:12:57.100 --> 13:01.559
+A prior version of this talk had my live coding that,
+
+13:01.560 --> 13:04.319
+but that ended up sort of distracting
+
+13:04.320 --> 13:07.399
+from what I kind of wanted to nail out and focus on.
+
+13:07.400 --> 13:12.279
+But really kind of what I do is that,
+
+13:12.280 --> 13:19.159
+let me see here if I can find some sort of,
+
+13:19.160 --> 13:26.159
+Yeah, so I have in my research section
+
+13:26.160 --> 13:36.039
+sort of layout like what the quirks of all this sort of are.
+
+13:36.040 --> 13:39.839
+I think my development focuses contain
+
+13:39.840 --> 13:41.479
+a little bit of what could be ultimately
+
+13:41.480 --> 13:42.959
+considered to be documentation.
+
+13:42.960 --> 13:46.999
+Yeah, as I'm looking through all of this,
+
+13:47.000 --> 13:48.279
+I'm kind of realizing that like,
+
+13:48.280 --> 13:49.319
+you know, yeah, there's stuff
+
+13:49.320 --> 13:51.319
+that I'm into documentation here,
+
+13:51.320 --> 13:53.119
+but it's all a little ad hoc.
+
+13:53.120 --> 13:55.719
+You know, I would, in part,
+
+13:55.720 --> 13:57.319
+the design of this particular tapa
+
+13:57.320 --> 13:59.639
+is arguably not currently,
+
+13:59.640 --> 14:02.319
+but is going to be simple enough such that
+
+14:02.320 --> 14:04.679
+a doc string is sufficient for documentation.
+
+14:04.680 --> 00:14:10.599
+That is not the case currently.
+
+NOTE Q: How do you write examples and tests? I think that you mentioned that during the talk, but I couldn't find them on a very quick look at your org file in the squint repo...
+
+00:14:10.600 --> 14:12.279
+All right, next question is,
+
+14:12.280 --> 14:18.559
+how do you write examples and tests?
+
+14:18.560 --> 00:14:22.750
+I think that you mentioned that during the talk,
+
+00:14:22.751 --> 00:14:25.083
+but I couldn't find them on a very quick look
+
+00:14:25.084 --> 00:14:27.833
+at your org file in the Squint repo.
+
+00:14:27.834 --> 00:14:35.208
+My use of the word test was a little bit creative.
+
+00:14:35.209 --> 14:42.759
+It's my validation of the code that I've written.
+
+14:42.760 --> 14:45.479
+I more or less tend to do a,
+
+14:45.480 --> 14:50.079
+I tend to try and write really small functions
+
+14:50.080 --> 14:52.039
+and have really aggressive validation
+
+14:52.040 --> 14:55.799
+by just making sure that, like, you know,
+
+14:55.800 --> 14:59.919
+when I chain functions in the REPL,
+
+14:59.920 --> 15:03.199
+each step of them produces results
+
+15:03.200 --> 15:07.799
+that are really quite immediately and self-verifiably seen.
+
+15:07.800 --> 15:11.719
+Now, this isn't a great excuse to not use a test suite,
+
+15:11.720 --> 15:12.879
+but it's gotten me pretty far.
+
+15:12.880 --> 15:19.199
+What I mean by tests is that in the research sections,
+
+15:19.200 --> 15:26.279
+what I've done is, so I've created a sort of tested
+
+15:26.280 --> 15:29.399
+in the sense that I have created
+
+15:29.400 --> 15:33.759
+a really highly representative case
+
+15:33.760 --> 15:38.279
+of the way that the program ultimately ought to behave.
+
+15:38.280 --> 15:43.399
+In doing so, I created a sort of embedded domain language
+
+15:43.400 --> 15:46.359
+that I have termed Animal Houses.
+
+15:46.360 --> 15:50.999
+And Animal Houses is a sort of markup language
+
+15:51.000 --> 15:54.879
+that has rather simple rules.
+
+15:54.880 --> 16:00.879
+This here is the entirety of the spec for Animal Houses.
+
+16:00.880 --> 16:06.559
+Grammar or anything, but like, it is more or less.
+
+16:06.560 --> 16:08.839
+Breadth of everything that needs to be known
+
+16:08.840 --> 16:10.519
+about how Animal Houses works.
+
+16:10.520 --> 16:14.279
+And I've created Animal Houses because it is an ideal
+
+16:14.280 --> 00:16:16.875
+and incredibly simple circumstance
+
+00:16:20.040 --> 16:22.679
+for how to go about as-needed tests
+
+16:22.680 --> 16:28.119
+for how Squint ultimately ought to work in practice.
+
+16:28.120 --> 16:30.239
+So when I'm doing research,
+
+16:30.240 --> 16:34.759
+what I do is I take the text of animal houses,
+
+16:34.760 --> 16:39.879
+and I will go ahead and insert it into a buffer.
+
+16:39.880 --> 16:46.599
+And I'll just create an analog buffer.
+
+16:46.600 --> 16:48.639
+I just called it awoo.
+
+16:48.640 --> 16:55.959
+And then what I'll do is in my research sections, I will write...
+
+16:55.960 --> 00:17:02.919
+Like I'll write like step-by-step
+
+00:17:02.920 --> 17:07.919
+instructions on how to go about with a REPL-driven detection
+
+17:07.920 --> 00:17:13.843
+using Animal Houses. So it does
+
+00:17:13.844 --> 00:17:16.799
+squint pass label to :with-restriction: correctly.
+
+17:16.800 --> 17:20.479
+The tests conducted here indicate that it does not.
+
+17:20.480 --> 17:25.839
+And then I link to a development focus
+
+17:25.840 --> 17:29.959
+that effectively acts as my bug report,
+
+17:29.960 --> 00:17:37.599
+or, sorry, my bug listing for this particular problem
+
+17:37.600 --> 17:38.479
+that I've identified.
+
+17:38.480 --> 17:41.439
+I lay out some criteria of how to
+
+17:41.440 --> 17:44.959
+go about using the REPL to...
+
+17:44.960 --> 17:47.079
+you know I identify what I believe
+
+17:47.080 --> 17:49.479
+is sort of like the quarantined area
+
+17:49.480 --> 17:50.639
+that I found for the bug,
+
+17:50.640 --> 17:56.799
+and then test is that I will go about
+
+17:56.800 --> 17:59.279
+engaging with narration
+
+17:59.280 --> 18:03.479
+the step-by-step of how I produce
+
+18:03.480 --> 18:07.039
+the circumstances around the bug
+
+18:07.040 --> 18:10.559
+until I ultimately narrow all the way in
+
+18:10.560 --> 18:14.199
+and arrive at a conclusion.
+
+18:14.200 --> 18:16.879
+Something's going on with the screen share.
+
+18:16.880 --> 18:18.799
+I can see your screen but
+
+18:18.800 --> 00:18:25.119
+the server cannot see your screen updating.
+
+00:18:25.120 --> 00:18:30.749
+Sorry. Oh, no. Maybe you stop sharing...
+
+00:18:30.750 --> 18:33.399
+Yeah, and then we just redo it again. Thank you.
+
+18:33.400 --> 18:36.039
+Yes, absolutely.
+
+18:36.040 --> 18:39.039
+Thanks to someone who noticed the buffer time,
+
+18:39.040 --> 18:42.919
+the time in the mode line was not updating.
+
+18:42.920 --> 18:50.079
+Okay, let's try that again. Now it's updating. Gotcha.
+
+18:50.080 --> 18:54.999
+I hope that wasn't going on for too, too long.
+
+18:55.000 --> 18:57.279
+Hopefully what I was saying
+
+18:57.280 --> 19:02.559
+wasn't completely indecipherable. Let me see here.
+
+19:02.560 --> 19:06.959
+Yeah, this is the sample text for animal houses.
+
+19:06.960 --> 19:10.839
+This is the spec, not a formal grammar,
+
+19:10.840 --> 19:12.719
+but it is more or less the whole of the spec
+
+19:12.720 --> 19:16.399
+that you need to write a parser for animal houses.
+
+19:16.400 --> 19:19.359
+Most of the tests around Squint involve
+
+19:19.360 --> 19:23.999
+writing ad-hoc parsers for animal houses.
+
+19:24.000 --> 19:27.199
+Just when I have it in its own buffer, you know,
+
+19:27.200 --> 19:29.719
+I find, more or less, it's an excellent way
+
+19:29.720 --> 19:31.199
+of going about testing
+
+19:31.200 --> 00:19:35.479
+in an ad-hoc sort of REPL-driven manner
+
+00:19:35.480 --> 19:39.879
+that I just sort of write regular...
+
+19:39.880 --> 19:43.799
+that pull out the pieces of the sections of buffer
+
+19:43.800 --> 19:49.439
+that represent the different fields and data types
+
+19:49.440 --> 19:51.599
+in association with the animals
+
+19:51.600 --> 19:54.879
+and the houses to which they belong.
+
+19:54.880 --> 20:00.319
+And then when I am engaging in research,
+
+20:00.320 --> 20:03.559
+what my research section is,
+
+20:03.560 --> 20:05.079
+is I'm ultimately just
+
+20:05.080 --> 20:06.399
+laying out, like, you know,
+
+20:06.400 --> 20:10.239
+I'm thinking to myself, is this working right?
+
+20:10.240 --> 20:11.319
+I feel like
+
+20:11.320 --> 20:14.639
+there's something here, something in this area.
+
+20:14.640 --> 20:16.919
+And I'll ask myself, well,
+
+20:16.920 --> 20:20.199
+what is it, what am I looking for?
+
+20:20.200 --> 20:22.519
+And then nail down, how am I going
+
+20:22.520 --> 20:24.439
+to go about looking for it?
+
+20:24.440 --> 20:30.559
+The process of working with the REPL
+
+20:30.560 --> 20:34.319
+to pin down what exactly is going on
+
+20:34.320 --> 00:20:42.867
+and come to a conclusion on...
+
+00:20:42.868 --> 00:20:44.519
+Completely jumping out of order.
+
+NOTE Q: Have you experimented with something like whisper.el for doing speech-to-text as you think out loud into your Bookclub?
+
+20:44.520 --> 20:47.799
+Have you experimented with whisper.el
+
+20:47.800 --> 20:49.759
+for doing speech to text
+
+20:49.760 --> 20:51.999
+as you think out loud into your book club?
+
+20:52.000 --> 20:56.799
+Now I am. I love that idea. That is awesome.
+
+20:56.800 --> 21:00.039
+Yeah, no, I love that.
+
+21:00.040 --> 21:04.839
+[Sacha]: Even with... I only have a CPU, no GPU on mine,
+
+21:04.840 --> 21:08.039
+it does capture things a lot faster.
+
+21:08.040 --> 21:12.199
+And because it actually saves the recording to a WAV,
+
+21:12.200 --> 21:14.239
+or I guess you can configure it,
+
+21:14.240 --> 21:16.959
+in case it doesn't recognize something well,
+
+21:16.960 --> 21:20.799
+you can go back and check it. That's nice.
+
+21:20.800 --> 21:24.319
+I like that more than a straight speech-text thing.
+
+21:24.320 --> 21:27.439
+I've been mulling over the idea
+
+21:27.440 --> 21:30.959
+of having a keystroke save into a background buffer
+
+21:30.960 --> 21:33.399
+so that even when I'm looking at something else,
+
+21:33.400 --> 21:37.919
+I can dictate into my equivalent of the book club file.
+
+21:37.920 --> 21:41.759
+[Maddie]: Yes, yes, yes, absolutely.
+
+21:41.760 --> 21:44.719
+So you can be scrolling through documentation on, like,
+
+21:44.720 --> 21:48.079
+you can be scrolling through documentation on one screen
+
+21:48.080 --> 21:49.799
+and you can be musing to yourself about,
+
+21:49.800 --> 21:52.479
+like, you know, is this supposed to work this way?
+
+21:52.480 --> 21:57.319
+Like, you know, like, what in terms of, like,
+
+21:57.320 --> 21:59.799
+you know, like, I see this function.
+
+21:59.800 --> 22:01.279
+It sounds like it's what I'm looking for.
+
+22:01.280 --> 22:03.399
+I don't know if the types are quite right.
+
+22:03.400 --> 22:05.679
+I don't understand. It's named what I'm looking for,
+
+22:05.680 --> 22:07.319
+but I don't know what it's taking in.
+
+22:07.320 --> 22:09.439
+You can reason through all of this.
+
+22:09.440 --> 22:10.599
+You're not even writing into the buffer
+
+22:10.600 --> 22:14.119
+that you're working with. That's actually so cool.
+
+22:14.120 --> 22:17.279
+[Sacha]: Or you can tie it into the org capture process
+
+22:17.280 --> 22:21.039
+so that it can pick up an annotation automatically.
+
+22:21.040 --> 22:24.719
+Sorry, annotation is the link to the thing,
+
+22:24.720 --> 22:26.159
+whatever you're looking at.
+
+22:26.160 --> 22:32.999
+[Maddie]: Oh, that's super cool. Yes. No, I actually really love it.
+
+22:33.000 --> 22:36.119
+I haven't, you know, hooking this all up to Org Capture at all.
+
+22:36.120 --> 00:22:58.199
+I actually really love that idea in and of itself. Yeah.
+
+00:22:58.200 --> 23:01.119
+[Sacha]: Org capture will give you a lot of capture options.
+
+23:01.120 --> 23:03.159
+You can capture to your currently
+
+23:03.160 --> 23:11.039
+clocked in heading. So then it just files your note
+
+23:11.040 --> 00:23:15.059
+in the right place automatically.
+
+00:23:15.060 --> 23:19.199
+[Maddie]: Absolutely. I love that. Let me see.
+
+23:19.200 --> 00:23:21.099
+I'm actually like writing a note to try that out.
+
+00:23:21.100 --> 00:23:23.125
+I'm definitely going to have to do that.
+
+00:23:23.126 --> 23:36.039
+Like the flexibility of that in particular sounds just perfect.
+
+23:36.040 --> 23:38.239
+[Sacha]: I'll let you finish typing noises
+
+23:38.240 --> 23:39.679
+and then we can ask the next question
+
+23:39.680 --> 00:23:42.291
+for which there is one.
+
+NOTE Q: What is the largest project in terms of team size you had the chance to consult and introduce the Bookclub Tapas concept and what have been your experiences with these setups (implying larger applications / solutions a company is working on)?
+
+00:23:42.292 --> 23:45.839
+The question is, what is the largest project
+
+23:45.840 --> 23:48.479
+in terms of team size you had the chance to consult
+
+23:48.480 --> 23:51.079
+and introduce the book club tapas concept?
+
+23:51.080 --> 23:53.199
+And what has been your experiences with these setups,
+
+23:53.200 --> 23:56.279
+implying larger applications or solutions
+
+23:56.280 --> 23:57.319
+that company is working on?
+
+23:57.320 --> 24:01.959
+So yeah, probably the largest application.
+
+24:01.960 --> 24:05.879
+So I have, It's been interesting.
+
+24:05.880 --> 24:08.879
+So in regards to this, the largest,
+
+24:08.880 --> 24:10.119
+I would say two people
+
+24:10.120 --> 24:12.719
+in a couple of different circumstance.
+
+24:12.720 --> 24:20.079
+So it's the pair of us working in a startup context.
+
+24:20.080 --> 24:24.439
+And then, you know, we both have
+
+24:24.440 --> 24:25.799
+like rather technical backgrounds.
+
+24:25.800 --> 24:27.479
+We can both more or less, you know,
+
+24:27.480 --> 24:33.639
+You know, sort of reason about particularly excite,
+
+24:33.640 --> 24:37.199
+especially as we've been building up top us is that,
+
+24:37.200 --> 24:39.559
+you know, well, we're both rather technical.
+
+24:39.560 --> 24:42.679
+You know, I'm definitely software engineering sort of end.
+
+24:42.680 --> 24:47.359
+And, you know, this partner is more.
+
+24:47.360 --> 24:50.999
+I mean, he's done all sorts of different engineering,
+
+24:51.000 --> 24:54.039
+but none of it in a, like, especially software context.
+
+24:54.040 --> 24:56.559
+So like, you know, but what's been
+
+24:56.560 --> 24:58.119
+really cool about that is that
+
+24:58.120 --> 24:59.599
+especially as we've built up top us
+
+24:59.600 --> 25:00.799
+and made clear distinctions
+
+25:00.800 --> 25:02.879
+about what they ought to do, you know,
+
+25:02.880 --> 25:04.599
+he doesn't have a ton of like really,
+
+25:04.600 --> 25:10.839
+he doesn't like experience like
+
+25:10.840 --> 25:12.479
+specifically in software engineering,
+
+25:12.480 --> 25:15.559
+but because we have it all laid out
+
+25:15.560 --> 25:17.399
+in this really flexible way,
+
+25:17.400 --> 25:20.199
+he's able to pick up the ball and like,
+
+25:20.200 --> 25:21.879
+you know, like he's able to
+
+25:21.880 --> 25:23.119
+take the ball and run with it.
+
+25:23.120 --> 25:25.279
+because it's all laid out
+
+25:25.280 --> 25:26.559
+in a way that's so intuitive.
+
+25:26.560 --> 25:28.719
+Like, you know, he's able to like
+
+25:28.720 --> 25:31.199
+collaborate with me and like,
+
+25:31.200 --> 25:33.279
+you know, like, you know, run off these ideas
+
+25:33.280 --> 25:34.919
+and like really go for it.
+
+25:34.920 --> 25:37.399
+Like, you know, almost as quickly as I can,
+
+25:37.400 --> 25:39.319
+just because we've set up a structure
+
+25:39.320 --> 25:42.159
+where like all of the different pieces
+
+25:42.160 --> 25:43.719
+have these really intuitive
+
+25:43.720 --> 25:46.399
+and intrinsic and straightforward roles.
+
+25:46.400 --> 25:47.839
+And that's, that's something
+
+25:47.840 --> 25:49.044
+that's really exciting in of itself
+
+25:49.045 --> 25:50.669
+that I didn't really go over in the talk.
+
+25:50.670 --> 25:54.359
+Like a managerial perspective,
+
+25:54.360 --> 25:56.919
+this is actually a really excellent way
+
+25:56.920 --> 26:01.199
+of understanding the whole context
+
+26:01.200 --> 26:04.799
+of like what the software stack looks like.
+
+26:04.800 --> 26:06.439
+Because it's like, you know,
+
+26:06.440 --> 26:09.119
+it makes it more intuitive for developers for sure,
+
+26:09.120 --> 26:10.719
+but it makes it more intuitive for everyone.
+
+26:10.720 --> 26:12.759
+You know, it's on that basis
+
+26:12.760 --> 26:14.839
+that I can't imagine clients
+
+26:14.840 --> 26:18.239
+like just a better way at this point.
+
+26:18.240 --> 26:22.239
+Um, that was that was the other circumstance
+
+26:22.240 --> 26:25.239
+where I have been working with a partner.
+
+26:25.240 --> 26:29.399
+This has been with, um, you know, I would be, uh.
+
+26:29.400 --> 26:31.919
+You know, sort of going back and forth
+
+26:31.920 --> 26:34.199
+with someone who had hired me.
+
+26:34.200 --> 26:40.159
+Um, to, uh, like, you know, to work on contract.
+
+26:40.160 --> 26:42.839
+And I would use this to sort of go
+
+26:42.840 --> 26:45.199
+over with them about, um.
+
+26:45.200 --> 26:51.239
+Sort of get a solid idea of scope and function,
+
+26:51.240 --> 26:57.199
+do pre-planning as we're going into more specifics
+
+26:57.200 --> 00:27:03.375
+on what the overall look for the project
+
+00:27:03.376 --> 00:27:04.250
+and how it ought to look
+
+00:27:04.251 --> 27:05.679
+and how it all ought to be laid out.
+
+27:05.680 --> 27:11.519
+So there's a lot of really exciting flexibility there
+
+27:11.520 --> 00:27:21.999
+that I think is really cool.
+
+NOTE Q: People will also be curious about the mechanics of collaboration: other person uses Emacs and Org? Shipping things back and forth via git / version control? CRDT?
+
+00:27:22.000 --> 27:23.679
+People will, of course, be curious
+
+27:23.680 --> 27:25.919
+about the mechanics of that collaboration.
+
+27:25.920 --> 27:28.719
+Did you get other people using Emacs in org?
+
+27:28.720 --> 27:32.359
+Were you using version control? Did you try out CRDT?
+
+27:32.360 --> 27:33.239
+How did it work?
+
+27:33.240 --> 27:39.639
+So all of this so far has been over screen share,
+
+27:39.640 --> 27:43.679
+where I would be stepping through the buffer by hand.
+
+27:43.680 --> 27:47.839
+I would love to set up some sort of an environment
+
+27:47.840 --> 27:52.359
+where I could get you know, clients and partners,
+
+27:52.360 --> 27:53.359
+like, you know, really excited
+
+27:53.360 --> 27:54.799
+about using Emacs and Org.
+
+27:54.800 --> 27:58.559
+But, you know, it's, it can be a little bit to ask,
+
+27:58.560 --> 28:00.119
+I would love to see if I can, like,
+
+28:00.120 --> 28:01.879
+put together some sort of a config that,
+
+28:01.880 --> 28:04.519
+like, sands off all of this and
+
+28:04.520 --> 28:08.079
+makes this this really
+
+28:08.080 --> 28:13.759
+safety-proof sort of intuitive environment
+
+28:13.760 --> 28:16.599
+just for CRDT in particular.
+
+28:16.600 --> 28:18.879
+I love the idea of
+
+28:18.880 --> 28:21.479
+spawning CRDT
+
+28:21.480 --> 28:24.159
+so that the two of us can
+
+28:24.160 --> 28:27.559
+type-spec an ideas
+
+28:27.560 --> 28:31.239
+and draft together on, you know,
+
+28:31.240 --> 28:33.559
+especially like the glue code Tapa
+
+28:33.560 --> 28:35.639
+for a larger software stack.
+
+28:35.640 --> 28:38.399
+Like, collaborating on that over CRDT,
+
+28:38.400 --> 28:43.399
+or having folks step through Tapas and
+
+28:43.400 --> 00:28:46.719
+unfold them and point to a particular thing...
+
+28:46.720 --> 28:49.159
+And it's like, you know, what's this?
+
+28:49.160 --> 28:50.119
+What's the clock here?
+
+28:50.120 --> 28:52.239
+It looks like we're spending a lot of time,
+
+28:52.240 --> 28:54.519
+and I would like to get a little bit clearer
+
+28:54.520 --> 28:56.319
+of an idea of what exactly we're doing here.
+
+28:56.320 --> 29:01.319
+Back up a little bit because the stream just disconnected
+
+29:01.320 --> 29:02.759
+and reconnected from the audio.
+
+29:02.760 --> 29:06.599
+So, please repeat just the last sentence.
+
+29:06.600 --> 29:11.959
+Yeah, yeah, for sure. Yeah, so I would like...
+
+29:11.960 --> 29:18.239
+I love the idea of collaborating on,
+
+29:18.240 --> 29:20.519
+especially on the glue code.
+
+29:20.520 --> 29:23.839
+Tapa for a particular software stack, you know,
+
+29:23.840 --> 29:26.159
+having the both of us use CRDT
+
+29:26.160 --> 29:27.719
+to type into it simultaneously,
+
+29:27.720 --> 29:30.159
+I think that would be super cool.
+
+29:30.160 --> 29:33.679
+I also really love the idea of
+
+29:33.680 --> 00:29:37.139
+having a client or partner
+
+00:29:37.140 --> 29:41.479
+thumb through individual tapas in the stack
+
+29:41.480 --> 29:45.639
+and then look at and be like,
+
+29:45.640 --> 29:47.879
+well, we seem to have time on this recently,
+
+29:47.880 --> 29:51.759
+can you give me some clarification on
+
+29:51.760 --> 29:55.519
+what this part is and
+
+29:55.520 --> 29:57.559
+what it means for the whole
+
+29:57.560 --> 30:00.799
+and what it represents
+
+30:00.800 --> 30:02.599
+in terms of how all of this is going to come together.
+
+30:02.600 --> 30:06.439
+I think that would be super cool. I love the idea of that.
+
+30:06.440 --> 30:11.679
+I would even consider, if not Emacs proper,
+
+30:11.680 --> 30:17.119
+I would love maybe a web-based Org parser
+
+30:17.120 --> 30:21.399
+or even just a read-only version
+
+30:21.400 --> 30:25.399
+of the document where clients and partners
+
+30:25.400 --> 30:26.879
+just sort of thumb through with it
+
+30:26.880 --> 30:28.199
+and then chat with questions.
+
+30:28.200 --> 30:34.159
+Make the screen sharing for
+
+30:34.160 --> 30:36.519
+peer programming process
+
+30:36.520 --> 30:41.599
+just a little bit cleaner, more intuitive on their end.
+
+30:41.600 --> 30:50.399
+I think that'd be super cool. I love these ideas.
+
+30:50.400 --> 30:55.002
+[Sacha]: All right, theoretically, the Big Blue Button is open.
+
+30:55.003 --> 30:57.002
+I think we've gotten to the end
+
+30:57.003 --> 31:00.294
+of the questions on the etherpad.
+
+31:00.295 --> 31:03.085
+If anyone else would like to join or ask,
+
+31:03.086 --> 31:04.840
+I'm going to need a couple of minutes
+
+31:04.841 --> 31:06.359
+and then I can do closing remarks
+
+31:06.360 --> 31:07.999
+whenever people are ready.
+
+31:08.000 --> 00:31:19.559
+So I will meet now when people figure things out.
+
+00:31:19.560 --> 31:22.039
+[Maddie]: I would also be super down if, you know,
+
+31:22.040 --> 31:25.319
+anyone was curious about hearing more
+
+31:25.320 --> 31:28.999
+about some of the projects
+
+31:29.000 --> 31:30.799
+that I was kind of rambling
+
+31:30.800 --> 31:34.679
+at the close of the talk,
+
+31:34.680 --> 31:36.479
+if people wanted to
+
+31:36.480 --> 31:39.359
+hear more about some of my ideas
+
+31:39.360 --> 31:42.799
+in regards to
+
+31:42.800 --> 31:45.719
+what am I thinking at home with the...
+
+31:45.720 --> 31:49.759
+What's it called?
+
+31:49.760 --> 00:31:55.439
+Just some of the funding for passion projects,
+
+31:55.440 --> 31:58.319
+I would be interested in laying out some of the ideas
+
+31:58.320 --> 31:59.959
+about how that could work mechanically.
+
+31:59.960 --> 32:02.559
+And I think that that would be, you know,
+
+32:02.560 --> 32:04.719
+really cool for the whole ecosystem,
+
+32:04.720 --> 32:06.719
+because I think that there are definitely
+
+32:06.720 --> 32:09.639
+things that we could bang out, you know,
+
+32:09.640 --> 32:12.919
+for getting kind of all sorts of people on that model.
+
+32:12.920 --> 32:14.519
+I think that it would be really cool
+
+32:14.520 --> 32:18.399
+to to having a funding model
+
+32:18.400 --> 32:20.239
+for things that are really worth using.
+
+32:20.240 --> 00:32:29.259
+And developing the other thing is
+
+00:32:29.260 --> 00:32:31.199
+just rattling off specifics on things
+
+00:32:31.200 --> 32:34.960
+that people could potentially vote for on that,
+
+32:34.961 --> 32:53.759
+and in terms of specific "might want to work on"...
+
+32:53.760 --> 32:56.877
+All right, there's a question from IRC.
+
+32:56.878 --> 33:01.880
+Sorry, I just got that. Did you address that one already?
+
+33:01.881 --> 33:07.127
+Let's see. Where is it?
+
+33:07.128 --> 33:12.359
+I will copy it from IRC. Thank you.
+
+33:12.360 --> 33:14.319
+Gotcha. Into the pad.
+
+33:14.320 --> 33:27.759
+Perfect, perfect, perfect.
+
+33:27.760 --> 33:30.679
+Let me read the question out loud so it's in the recording.
+
+NOTE Q: I guess a major pro is it has less friction as people can do (a lot, maybe not everything) in BookClub Tapas file vs. having to log into gazillions of different systems, each one of them keeping a portion of the information. Did I get that viewing point right from your elaboration of the collaboration between you and your team mate(s)?
+
+33:30.680 --> 33:33.719
+I guess a major pro is it has less friction
+
+33:33.720 --> 33:35.759
+as people can do a lot,
+
+33:35.760 --> 33:39.039
+maybe not everything in Bookclub Tapas files
+
+33:39.040 --> 33:42.639
+versus having to log into gazillions of different systems,
+
+33:42.640 --> 33:45.199
+each one of them keeping a portion of the information.
+
+33:45.200 --> 33:47.359
+Did I get that viewing point right
+
+33:47.360 --> 33:49.479
+from your elaboration of the collaboration
+
+33:49.480 --> 33:52.159
+between you and your teammates?
+
+33:52.160 --> 33:55.439
+Yes. No, that's absolutely right.
+
+33:55.440 --> 00:34:00.519
+Because my hope is that we can you know
+
+34:00.520 --> 34:03.239
+there's a lot of conflict into that...
+
+34:03.240 --> 34:13.359
+We assume that a lot of um pieces of tooling
+
+34:13.360 --> 34:14.559
+and the separation between them
+
+34:14.560 --> 34:16.439
+is really sort of a necessary evil
+
+34:16.440 --> 34:19.239
+i think that you know having a system
+
+34:19.240 --> 34:21.519
+where really the complexity
+
+34:21.520 --> 34:25.719
+of engaging in all of the information
+
+34:25.720 --> 34:29.119
+relevant to the program.
+
+34:29.120 --> 34:30.319
+If it's in a format
+
+34:30.320 --> 34:31.799
+where you can just email it back and forth,
+
+34:31.800 --> 34:33.199
+break off pieces of it,
+
+34:33.200 --> 34:35.119
+work with those individually,
+
+34:35.120 --> 34:38.759
+I think that that's something
+
+34:38.760 --> 34:40.279
+that's incredibly rewarding.
+
+34:40.280 --> 34:42.639
+Something that just dawned on me
+
+34:42.640 --> 34:44.439
+that I wanted to mention
+
+34:44.440 --> 34:46.959
+that I've been daydreaming about
+
+34:46.960 --> 34:49.399
+is that in a circumstance
+
+34:49.400 --> 34:52.079
+where you have multiple developers,
+
+34:52.080 --> 34:53.879
+like, you know, across a larger team,
+
+34:53.880 --> 34:57.359
+working on a book club tapas driven project,
+
+34:57.360 --> 35:02.559
+what you can do is have, you know,
+
+35:02.560 --> 35:04.559
+a clear, you can lay out your goal,
+
+35:04.560 --> 35:08.439
+and then start splitting it to tapas from that point,
+
+35:08.440 --> 35:11.839
+and then assign each teammate their own tapa,
+
+35:11.840 --> 35:13.279
+which becomes their baby.
+
+35:13.280 --> 35:15.639
+And I really love the idea
+
+35:15.640 --> 35:17.479
+of people being able to, you know,
+
+35:17.480 --> 35:20.319
+have an idea of an interface
+
+35:20.320 --> 35:21.599
+about how all of these are
+
+35:21.600 --> 35:22.719
+ultimately come back together,
+
+35:22.720 --> 35:26.639
+but people have their own like agency
+
+35:26.640 --> 35:27.919
+over their own code base,
+
+35:27.920 --> 35:29.119
+despite the fact that they're
+
+35:29.120 --> 35:30.479
+working in collaboration.
+
+35:30.480 --> 35:32.719
+I think that it can be incredibly motivating
+
+35:32.720 --> 35:36.079
+for a team to, you know, have each person
+
+35:36.080 --> 35:38.039
+in charge of their own project,
+
+35:38.040 --> 35:39.839
+but of course it's all ultimately
+
+35:39.840 --> 35:41.319
+going to the same code base.
+
+35:41.320 --> 35:43.199
+So, you know, I think that,
+
+35:43.200 --> 35:45.479
+that a pursuit of beauty
+
+35:45.480 --> 35:48.519
+is this really solid motivator
+
+35:48.520 --> 35:50.839
+in terms of how people perceive
+
+35:50.840 --> 35:53.959
+the merits of their efforts
+
+35:53.960 --> 35:56.479
+and how that lights a fire under them
+
+35:56.480 --> 35:58.999
+to continue and keep going and dig deep
+
+35:59.000 --> 36:00.559
+when things get frustrating.
+
+36:00.560 --> 36:02.799
+When you have a personal stake
+
+36:02.800 --> 36:03.399
+in your project,
+
+36:03.400 --> 36:06.479
+I think that that's a really excellent time
+
+36:06.480 --> 36:08.599
+to really push and move forward on it.
+
+36:08.600 --> 36:10.559
+And people having ownership
+
+36:10.560 --> 36:12.719
+over this idea of their specific tapa
+
+36:12.720 --> 36:14.999
+could be a really cool way to do that
+
+36:15.000 --> 36:15.759
+in a team setting.
+
+36:15.760 --> 36:19.999
+But I pivoted off a little bit.
+
+36:20.000 --> 36:24.559
+So yes, but I absolutely did that.
+
+36:24.560 --> 36:28.599
+You know, that having a simplistic format
+
+36:28.600 --> 36:29.999
+for your information
+
+36:30.000 --> 36:33.319
+is a really solid way to have
+
+36:33.320 --> 36:36.319
+collaboration be frictionless.
+
+36:36.320 --> 36:38.719
+You have one source of information
+
+36:38.720 --> 36:40.799
+and you don't have to drown in your tooling.
+
+36:40.800 --> 36:51.839
+All right, I think you've addressed
+
+36:51.840 --> 36:54.919
+all the questions on the etherpad.
+
+36:54.920 --> 36:56.799
+And as you said, people can email you,
+
+36:56.800 --> 36:58.439
+even though the website looks like
+
+36:58.440 --> 37:00.479
+it's still not quite there yet,
+
+37:00.480 --> 37:03.719
+people can email you or ask questions
+
+37:03.720 --> 37:05.039
+to the etherpad afterwards.
+
+37:05.040 --> 37:07.439
+Is there anything else that
+
+37:07.440 --> 37:11.039
+you'd like to share or shall I wrap up,
+
+37:11.040 --> 37:13.279
+introduce myself doing the closing remarks
+
+37:13.280 --> 37:16.959
+and then try to do the closing remarks?
+
+37:16.960 --> 37:18.839
+Yes, so I have two last thoughts.
+
+37:18.840 --> 37:21.439
+Yes, no, I did just want to confirm
+
+37:21.440 --> 37:24.319
+that my email is completely working.
+
+37:24.320 --> 37:27.199
+If you want to keep up to date
+
+37:27.200 --> 37:29.399
+with the stuff that I'm working on,
+
+37:29.400 --> 37:35.239
+please shoot and I will, you know, at your request,
+
+37:35.240 --> 37:38.119
+I will add you to a mailing list.
+
+37:38.120 --> 37:40.479
+which will have intermittent updates.
+
+37:40.480 --> 37:42.919
+I'm not going to send you spam,
+
+37:42.920 --> 37:47.279
+but it will have updates for what I'm working on,
+
+37:47.280 --> 37:48.599
+what this all looks like,
+
+37:48.600 --> 37:52.359
+and just context for the different things
+
+37:52.360 --> 37:53.119
+that I'm working on.
+
+37:53.120 --> 37:56.999
+My website will be going up soon enough.
+
+37:57.000 --> 38:01.119
+I just got a little distracted because I'm like,
+
+38:01.120 --> 38:05.239
+oh, I'm just gonna spin up a Gux server
+
+38:05.240 --> 38:06.999
+and I'm gonna make it super cool
+
+38:07.000 --> 38:09.119
+when really I just need just
+
+38:09.120 --> 38:12.439
+Debian and Apache real quick, just something.
+
+38:12.440 --> 38:16.679
+So the website will be going up. It's just not up yet.
+
+38:16.680 --> 38:19.959
+And the very last thing is that
+
+38:19.960 --> 38:22.959
+I would really like to thank everyone
+
+38:22.960 --> 38:27.199
+that helped me to get here. I would like to thank you know,
+
+38:27.200 --> 38:32.319
+all of my, you know, I would like to thank my fiance.
+
+38:32.320 --> 38:34.519
+I would like to thank all of my friends.
+
+38:34.520 --> 38:39.359
+I would like to thank my, you know,
+
+38:39.360 --> 38:42.119
+my mentor and business partner, Sharon.
+
+38:42.120 --> 38:45.119
+I would like to thank Tracy, my therapist.
+
+38:45.120 --> 38:48.279
+I would like to thank my parents.
+
+38:48.280 --> 38:53.279
+I invited people to come watch this thing,
+
+38:53.280 --> 38:55.279
+and I would like to thank all of them.
+
+38:55.280 --> 38:57.919
+I would like to thank everyone
+
+38:57.920 --> 39:02.439
+who was planning on coming to this event anyway.
+
+39:02.440 --> 39:06.359
+The Emacs community is incredible, incredibly encouraging,
+
+39:06.360 --> 39:09.399
+incredibly kind, incredibly smart and talented.
+
+39:09.400 --> 39:13.719
+Y'all make Emacs what it is, and it is so cool.
+
+39:13.720 --> 39:15.919
+I would like to thank you, Satya.
+
+39:15.920 --> 39:19.559
+I would like to thank all of the organizers
+
+39:19.560 --> 39:20.879
+that made this possible.
+
+39:20.880 --> 39:25.719
+This thing is the coolest and it was, this was so cool.
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..95b452d8
--- /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 less friction
+
+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--answers.vtt b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers.vtt
new file mode 100644
index 00000000..2ebd9ecf
--- /dev/null
+++ b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers.vtt
@@ -0,0 +1,1068 @@
+WEBVTT
+
+NOTE Opening
+
+00:00:00.000 --> 00:00:04.599
+Recording started.
+
+00:00:04.600 --> 00:00:07.199
+Great. All right, you are live in Common Lisp on dev.
+
+00:00:07.200 --> 00:00:14.399
+This is Corwin back and I've got screwlisp with me,
+
+00:00:14.400 --> 00:00:18.759
+the host of the Lispy Gopher... Climate, I like to say.
+
+00:00:18.760 --> 00:00:20.319
+It used to be show.
+
+00:00:20.320 --> 00:00:24.679
+The Lispy Gopher show or the Lispy Gopher Climate.
+
+00:00:24.680 --> 00:00:31.119
+Thank you so much for joining us. Minutes.
+
+00:00:31.120 --> 00:00:33.639
+Yeah, we're just, we've got already
+
+00:00:33.640 --> 00:00:35.359
+a whole pad full of questions
+
+00:00:35.360 --> 00:00:38.039
+and we have a unique opportunity if you,
+
+00:00:38.040 --> 00:00:39.159
+if you check out the etherpad,
+
+00:00:39.160 --> 00:00:42.239
+you'll see some instructions there to join on Lambda Moo,
+
+00:00:42.240 --> 00:00:43.039
+with screwlisp,
+
+00:00:43.040 --> 00:00:46.319
+but I'm hoping you will talk to us a little bit about that
+
+00:00:46.320 --> 00:00:48.879
+as well as your, your very cool project.
+
+00:00:48.880 --> 00:00:52.839
+Oh yeah, so I main on Lambda, as Corwin is saying.
+
+00:00:52.840 --> 00:00:55.639
+And Corwin was pretending not to know the name of the show,
+
+00:00:55.640 --> 00:00:59.399
+but he has in fact appeared on an episode of it
+
+00:00:59.400 --> 00:01:00.879
+in January this year, I think.
+
+00:01:00.880 --> 00:01:04.919
+So he was just pretending there. I'm screwlisp of this.
+
+00:01:04.920 --> 00:01:06.919
+What's happening?
+
+00:01:06.920 --> 00:01:13.439
+10 minutes or less before we started going live here,
+
+00:01:13.440 --> 00:01:16.159
+they were like, remember how you said you fixed that bug?
+
+00:01:16.160 --> 00:01:21.479
+And then I had to quickly recapitulate my whole talk.
+
+00:01:21.480 --> 00:01:23.719
+And I introduced some new bugs while that was happening.
+
+00:01:23.720 --> 00:01:26.199
+But let's go through some of these questions.
+
+00:01:26.200 --> 00:01:29.479
+We're all hanging out in LambdaMoo.
+
+00:01:29.480 --> 00:01:37.639
+So if you mx telnet over to lambda.moo.mud.org port 8888.
+
+00:01:37.640 --> 00:01:40.279
+This is where we're talking at the moment
+
+00:01:40.280 --> 00:01:45.399
+with people like Ed Swarthout, DM, and yduJ,
+
+00:01:45.400 --> 00:01:47.559
+who I gossiped about in the show,
+
+00:01:47.560 --> 00:01:50.519
+and Sacha, and people were there a little bit as well.
+
+00:01:50.520 --> 00:01:53.359
+I'm just going to read some of the questions
+
+00:01:53.360 --> 00:01:59.759
+that ggxx in LambdaMOO has been relaying to me there,
+
+00:01:59.760 --> 00:02:08.239
+though I hear that there are a whole bunch of them now.
+
+NOTE Q: What do you mean by "the agent is running slowly"?
+
+00:02:08.240 --> 00:02:09.759
+Someone asks on the Etherpad,
+
+00:02:09.760 --> 00:02:13.199
+what do you mean when I say the agent is running slowly?
+
+00:02:13.200 --> 00:02:17.119
+Yeah, so if you saw in the talk,
+
+00:02:17.120 --> 00:02:19.639
+I was having the agent only attempt
+
+00:02:19.640 --> 00:02:21.959
+to act every 20 seconds.
+
+00:02:21.960 --> 00:02:25.399
+This is what I mean by the agent is acting slowly.
+
+00:02:25.400 --> 00:02:26.599
+So this is quite different
+
+00:02:26.600 --> 00:02:28.599
+to what people might expect within AI
+
+00:02:28.600 --> 00:02:30.679
+if people are talking about, like the graphics card ones
+
+00:02:30.680 --> 00:02:33.599
+where you try and crunch as fast as you can,
+
+00:02:33.600 --> 00:02:36.399
+for as few seconds as you can, and then you stop.
+
+00:02:36.400 --> 00:02:39.399
+In contrast, my agent is just trying to do
+
+00:02:39.400 --> 00:02:42.279
+a simple action every 20 seconds.
+
+00:02:42.280 --> 00:02:45.119
+But if you keep going continuously
+
+00:02:45.120 --> 00:02:47.919
+at a simple action every 20 seconds
+
+00:02:47.920 --> 00:02:49.959
+without sleeping for days,
+
+00:02:49.960 --> 00:02:51.239
+it still adds up to a lot.
+
+00:02:51.240 --> 00:02:57.039
+So that was the significance of it running slowly.
+
+00:02:57.040 --> 00:03:00.639
+What else are people saying? ggxx to screwtape.
+
+NOTE Q: Do you think that it would be too hard to add a second way to send commands from Common Lisp to Emacs?
+
+00:03:00.640 --> 00:03:02.519
+Someone asked on the Etherpad,
+
+00:03:02.520 --> 00:03:04.759
+do you think that it would be too hard
+
+00:03:04.760 --> 00:03:06.439
+to add a second way
+
+00:03:06.440 --> 00:03:09.959
+to send commands from Common Lisps to Emacs?
+
+00:03:09.960 --> 00:03:12.919
+No, I put three of them together
+
+00:03:12.920 --> 00:03:14.559
+and I didn't talk about it
+
+00:03:14.560 --> 00:03:17.239
+because this is a kind of affected choice.
+
+00:03:17.240 --> 00:03:20.039
+Right now you're using emacsclient for that.
+
+00:03:20.040 --> 00:03:22.039
+That is the simplest way to implement.
+
+00:03:22.040 --> 00:03:24.039
+How about using the slime protocol?
+
+00:03:24.040 --> 00:03:28.799
+Elsewhere, I am just using the SLIME protocol.
+
+00:03:28.800 --> 00:03:31.639
+So, in everyone that's SLIME-connected.
+
+00:03:31.640 --> 00:03:33.399
+So, earlier on, you saw somebody
+
+00:03:33.400 --> 00:03:35.399
+running a swank server in Python.
+
+00:03:35.400 --> 00:03:38.439
+Normally, you run a swank server in Common Lisp.
+
+00:03:38.440 --> 00:03:41.599
+And a swank server is what Emacs SLIME,
+
+00:03:41.600 --> 00:03:45.039
+Superior Lisp Interaction Mode for Emacs, connects to.
+
+00:03:45.040 --> 00:03:49.039
+And then Swank comes with swank-eval in Emacs.
+
+00:03:49.040 --> 00:03:50.959
+So after you've been slime connected,
+
+00:03:50.960 --> 00:03:55.039
+you can trivially send Emacs Lisp forms to Emacs
+
+00:03:55.040 --> 00:03:57.319
+using swank-eval and Emacs.
+
+00:03:57.320 --> 00:04:00.679
+The reason that I chose to use
+
+00:04:00.680 --> 00:04:05.199
+Emacs server and Emacs client
+
+00:04:05.200 --> 00:04:14.039
+was that I was letting the Leonardo agent
+
+00:04:14.040 --> 00:04:18.799
+talk to Emacs using Swank, Eval, and Emacs.
+
+00:04:18.800 --> 00:04:21.599
+And I wanted my ECL image to be using
+
+00:04:21.600 --> 00:04:23.119
+a different notion of a server.
+
+00:04:23.120 --> 00:04:27.039
+So the ECL image, just because
+
+00:04:27.040 --> 00:04:28.959
+I chose to do it like this,
+
+00:04:28.960 --> 00:04:33.279
+is using Emacs client and Emacs server going via,
+
+00:04:33.280 --> 00:04:35.239
+I guess it's executing a program
+
+00:04:35.240 --> 00:04:36.439
+rather than using a shell.
+
+00:04:36.440 --> 00:04:40.639
+And yeah, I was letting somebody else
+
+00:04:40.640 --> 00:04:42.439
+use Slime eval in Emacs.
+
+00:04:42.440 --> 00:04:45.039
+It would have been simpler
+
+00:04:45.040 --> 00:04:48.319
+if everybody just used Slime eval in Emacs.
+
+00:04:48.320 --> 00:04:50.919
+I thought I was getting something
+
+00:04:50.920 --> 00:04:56.079
+out of adding Emacs server into the mix.
+
+00:04:56.080 --> 00:04:57.319
+What's somebody saying?
+
+00:04:57.320 --> 00:05:00.319
+yduJ is weirded out by doing get foo bar
+
+00:05:00.320 --> 00:05:02.439
+instead of get foo quote bar.
+
+00:05:02.440 --> 00:05:04.359
+Yeah, that was Sandewall's choice.
+
+00:05:04.360 --> 00:05:06.679
+He was trying to pitch Lisp
+
+00:05:06.680 --> 00:05:09.159
+to logic notation people,
+
+00:05:09.160 --> 00:05:12.319
+so he lets people put commas in
+
+00:05:12.320 --> 00:05:15.559
+and then ignores them in certain expressions,
+
+00:05:15.560 --> 00:05:18.679
+and he doesn't have these Lisp-style quotes.
+
+00:05:18.680 --> 00:05:22.439
+yduJ is obviously from like Schlumberger
+
+00:05:22.440 --> 00:05:24.879
+and wherever else she was at in
+
+00:05:24.880 --> 00:05:28.039
+in the kind of list of traditions.
+
+00:05:28.040 --> 00:05:30.359
+Full of Spain is saying good observation.
+
+00:05:30.360 --> 00:05:33.839
+yduJ is shocked that she's being mentioned.
+
+00:05:33.840 --> 00:05:40.519
+Interestingly Nosredna yduJ capitalizes Nosredna at the front,
+
+00:05:40.520 --> 00:05:45.079
+but she capitalizes yduJ at the back, just for clarity.
+
+00:05:45.080 --> 00:05:49.199
+You should read her Stanford page or her recipe site
+
+00:05:49.200 --> 00:05:57.999
+or anything if you're not clear on who yduJ is.
+
+00:05:58.000 --> 00:06:00.679
+Sacha, you're looking for the word ??.
+
+00:06:00.680 --> 00:06:03.559
+I think she ?? yduJ,
+
+00:06:03.560 --> 00:06:06.119
+I think is the English phrase that you're looking for.
+
+00:06:06.120 --> 00:06:08.839
+yduJ is saying she would not,
+
+00:06:08.840 --> 00:06:10.519
+no matter what I say,
+
+00:06:10.520 --> 00:06:13.039
+she's not going to hug my software agent
+
+00:06:13.040 --> 00:06:20.719
+like she would hug a grandchild. Eyes me warily.
+
+00:06:20.720 --> 00:06:22.119
+And Sacha is not going to...
+
+00:06:22.120 --> 00:06:24.759
+totally training a general intelligence
+
+00:06:24.760 --> 00:06:26.199
+who requires a lot of data
+
+00:06:26.200 --> 00:06:28.959
+and also cuddles. Okay, so everybody who has children
+
+00:06:28.960 --> 00:06:31.599
+is disagreeing with me quoting Sandewall,
+
+00:06:31.600 --> 00:06:33.319
+who did have children and grandchildren,
+
+00:06:33.320 --> 00:06:36.119
+saying that he wanted machine intelligences
+
+00:06:36.120 --> 00:06:37.759
+to be like his grandchild.
+
+NOTE Q: What is the leonardo system?
+
+00:06:37.760 --> 00:06:40.839
+GGXX is saying somebody on Etherpad
+
+00:06:40.840 --> 00:06:43.119
+is asking what the Leonardo system is.
+
+00:06:43.120 --> 00:06:46.599
+Sandewall is a LISP scientist
+
+00:06:46.600 --> 00:06:51.159
+from the 60s, 70s, 80s, 90s, 90s, 10s.
+
+00:06:51.160 --> 00:06:55.599
+with things like bronze statues of him in Sweden.
+
+00:06:55.600 --> 00:06:59.599
+People outside of the Swedish-speaking sphere of science
+
+00:06:59.600 --> 00:07:01.119
+are less familiar with him.
+
+00:07:01.120 --> 00:07:04.119
+I guess he famously taught Robert Strand
+
+00:07:04.120 --> 00:07:08.319
+how to program in LISP, if that places him for you.
+
+00:07:08.320 --> 00:07:10.199
+What else did he do?
+
+00:07:10.200 --> 00:07:15.599
+Yeah, so he was on a kind of long trajectory of AI,
+
+00:07:15.600 --> 00:07:18.039
+which would now be called good old-fashioned AI.
+
+00:07:18.040 --> 00:07:22.639
+And he was coming from the situation calculus,
+
+00:07:22.640 --> 00:07:26.559
+then activity calculus kind of direction,
+
+00:07:26.560 --> 00:07:28.759
+which are extended first order logics
+
+00:07:28.760 --> 00:07:31.559
+for reasoning about change over time.
+
+00:07:31.560 --> 00:07:35.759
+And his last program he contributed to the world was this.
+
+00:07:35.760 --> 00:07:39.319
+From 2005 to 2014, he worked on
+
+00:07:39.320 --> 00:07:43.479
+this Leonardo system for his master's program.
+
+00:07:43.480 --> 00:07:45.279
+He was teaching at that time
+
+00:07:45.280 --> 00:07:48.519
+at the University of Linköping in Sweden.
+
+00:07:48.520 --> 00:07:53.199
+And... Then he just kind of gradually faded from view
+
+00:07:53.200 --> 00:07:55.519
+while he wrote his unpublished books
+
+00:07:55.520 --> 00:08:01.639
+on reasoning and change, I guess, between 2010 and 2014.
+
+00:08:01.640 --> 00:08:03.959
+And then I just kind of noticed this eventually.
+
+00:08:03.960 --> 00:08:07.839
+And I brought that software back. And that's what this is.
+
+00:08:07.840 --> 00:08:09.999
+And that's why it kind of weirdly exists.
+
+00:08:10.000 --> 00:08:15.479
+Welcome to Khaki Guest. Magenta Guest is gone.
+
+00:08:15.480 --> 00:08:16.759
+Pink Guest is gone.
+
+00:08:16.760 --> 00:08:23.639
+Blue Guest has arrived. Great. Somebody order six.
+
+00:08:23.640 --> 00:08:26.239
+Everybody orders sake from Emily.
+
+00:08:26.240 --> 00:08:29.599
+We're hanging out in Jay Lamott's sushi bar in Lambda,
+
+00:08:29.600 --> 00:08:31.639
+which is on the model railway
+
+00:08:31.640 --> 00:08:35.599
+on the table in the second guest bedroom in Lambda House
+
+00:08:35.600 --> 00:08:36.639
+where we're all hanging out.
+
+00:08:36.640 --> 00:08:43.559
+Oh, I think GGXX is ordering people up things.
+
+00:08:43.560 --> 00:08:49.539
+You know, just teach people about this.
+
+00:08:49.540 --> 00:08:50.958
+All right, I'm going to try looking
+
+00:08:50.959 --> 00:08:54.129
+at the etherpad manually.
+
+00:08:54.130 --> 00:08:55.519
+[Corwin]: Sorry, I can read you.
+
+00:08:55.520 --> 00:08:57.319
+So the next question you have,
+
+00:08:57.320 --> 00:09:00.479
+somebody says, I found Eduardo's blog.
+
+00:09:00.480 --> 00:09:03.199
+OK, you just got through that.
+
+00:09:03.200 --> 00:09:06.199
+And then we were also, a question you answered
+
+00:09:06.200 --> 00:09:10.799
+is the other one that I see here, just about Lambda Moo.
+
+00:09:10.800 --> 00:09:14.199
+And I think you started to answer in the pad.
+
+00:09:14.200 --> 00:09:16.079
+But if you want to kind of read that out.
+
+00:09:16.080 --> 00:09:19.119
+[screwlisp]: I definitely haven't written anything in the pad.
+
+00:09:19.120 --> 00:09:23.719
+I'm going to just talk to Khaki Guest in Lambda.
+
+00:09:23.720 --> 00:09:25.879
+Sure, so why don't you do a little bit
+
+00:09:25.880 --> 00:09:27.279
+and just read this question.
+
+NOTE Q: What is LambdaMOO, and how do we use it?
+
+00:09:27.280 --> 00:09:31.279
+The question was, what is LambdaMOO and how do we use it?
+
+00:09:31.280 --> 00:09:33.399
+LambdaMOO is a module introduction,
+
+00:09:33.400 --> 00:09:35.319
+and you can tell that to it.
+
+00:09:35.320 --> 00:09:36.799
+There's instructions in the pad.
+
+00:09:36.800 --> 00:09:40.039
+I'll go ahead and drop that in the gen channel
+
+00:09:40.040 --> 00:09:42.599
+or in the dev channel chat right now.
+
+00:09:42.600 --> 00:09:46.919
+And I see it is already in there.
+
+00:09:46.920 --> 00:09:49.559
+But down at the bottom
+
+00:09:49.560 --> 00:09:53.439
+of the discussion links feedback area,
+
+00:09:53.440 --> 00:09:55.679
+you'll see a set of detailed instructions
+
+00:09:55.680 --> 00:09:58.519
+that screwlisp has provided us to get in there.
+
+00:09:58.520 --> 00:10:01.159
+I think that was actually GGXX
+
+00:10:01.160 --> 00:10:03.959
+who might have written that for us.
+
+00:10:03.960 --> 00:10:08.039
+Several changes evolved in the last 10 minutes
+
+00:10:08.040 --> 00:10:09.679
+before we went live here.
+
+00:10:09.680 --> 00:10:12.839
+But yeah, so LambdaMOO is
+
+00:10:12.840 --> 00:10:14.879
+the world's longest-running virtual reality.
+
+00:10:14.880 --> 00:10:19.119
+I guess it started in the end of October in 1990
+
+00:10:19.120 --> 00:10:21.759
+and has run continuously to today.
+
+00:10:21.760 --> 00:10:24.599
+You can get there, ideally, with a MUD client.
+
+00:10:24.600 --> 00:10:27.479
+Technically, it's a MUD, comma, object-oriented.
+
+00:10:27.480 --> 00:10:30.199
+This is just where I hang out some degree of the week.
+
+00:10:30.200 --> 00:10:36.799
+yduJ is the wizard yduJ, or sorry,
+
+00:10:36.800 --> 00:10:40.919
+yduJ is also the wizard Nosredna of Lambdomoo, for example.
+
+00:10:40.920 --> 00:10:44.479
+It kind of fits into quite less history.
+
+00:10:44.480 --> 00:10:47.679
+I guess Pavel Curtis would have started in 1990
+
+00:10:47.680 --> 00:10:52.799
+for Xerox PARC, originally. Just to go to what Khaki Guest
+
+00:10:52.800 --> 00:10:54.839
+has been continuing to talk about.
+
+00:10:54.840 --> 00:11:01.339
+Welcome to Brown Guest as well, I guess.
+
+NOTE Q: It seems like you're trying to build a more restrictive Turing test using the input / output logs of an emacs conversation. Is that accurate?
+
+00:11:01.340 --> 00:11:03.399
+Aki Guest says, to Screwtape,
+
+00:11:03.400 --> 00:11:04.959
+it seems like you're trying to build
+
+00:11:04.960 --> 00:11:07.279
+a more restrictive Turing test
+
+00:11:07.280 --> 00:11:11.159
+using the input output logs of an Emacs conversation.
+
+00:11:11.160 --> 00:11:12.159
+Is that accurate?
+
+00:11:12.160 --> 00:11:15.079
+Can you explain this idea of if it is intelligent,
+
+00:11:15.080 --> 00:11:17.239
+I'd like it to be like me?
+
+00:11:17.240 --> 00:11:20.039
+Otherwise, I don't know what intelligence is.
+
+00:11:20.040 --> 00:11:21.959
+Doesn't that seem a little egocentric?
+
+00:11:21.960 --> 00:11:25.399
+Is that a joke or a genuine definition of intelligence?
+
+00:11:25.400 --> 00:11:27.439
+Why do you think the link between
+
+00:11:27.440 --> 00:11:30.519
+input-output of Emacs human input-output
+
+00:11:30.520 --> 00:11:33.919
+is stronger than other forms of Turing tests?
+
+00:11:33.920 --> 00:11:36.319
+So I'm going to misread Turing tests
+
+00:11:36.320 --> 00:11:37.839
+for a moment as Turing-complete.
+
+00:11:37.840 --> 00:11:40.279
+And Sandewall's system is very specifically
+
+00:11:40.280 --> 00:11:45.519
+Our first-order logic, if we don't extend it,
+
+00:11:45.520 --> 00:11:49.239
+is not Turing-complete, for starters.
+
+00:11:49.240 --> 00:11:51.959
+And things like situation calculus,
+
+00:11:51.960 --> 00:11:53.839
+McCarthy's situation calculus,
+
+00:11:53.840 --> 00:11:55.239
+which I guess is prior to
+
+00:11:55.240 --> 00:11:58.439
+Sandewall's Leonardo's calculus,
+
+00:11:58.440 --> 00:12:02.319
+are extended first-order logics
+
+00:12:02.320 --> 00:12:03.959
+for reasoning about change.
+
+00:12:03.960 --> 00:12:05.519
+And so they're slightly
+
+00:12:05.520 --> 00:12:07.639
+more restricted than conventional,
+
+00:12:07.640 --> 00:12:10.239
+than general-purpose computer programs.
+
+00:12:10.240 --> 00:12:14.639
+And then what you're saying is, if it's intelligent,
+
+00:12:14.640 --> 00:12:16.119
+I'd expect it to be like me.
+
+00:12:16.120 --> 00:12:19.799
+I'm really just paraphrasing what Sandewall says about,
+
+00:12:19.800 --> 00:12:23.319
+well, he thinks his grandchildren are intelligent.
+
+00:12:23.320 --> 00:12:24.759
+So if a computer is intelligent,
+
+00:12:24.760 --> 00:12:26.239
+he thinks the computer will have to be
+
+00:12:26.240 --> 00:12:28.039
+similar to his grandchildren.
+
+00:12:28.040 --> 00:12:32.279
+This is in contrast to people
+
+00:12:32.280 --> 00:12:33.839
+who are using the terms AI
+
+00:12:33.840 --> 00:12:37.319
+to mean something a graphics card does
+
+00:12:37.320 --> 00:12:41.319
+with extremely specialized bulk matrix multiplication
+
+00:12:41.320 --> 00:12:43.919
+for a very short period of time
+
+00:12:43.920 --> 00:12:47.519
+on absolutely gigantic electrical
+
+00:12:47.520 --> 00:12:50.159
+and kind of memory and computing resources,
+
+00:12:50.160 --> 00:12:51.519
+which doesn't look at all like what
+
+00:12:51.520 --> 00:12:54.999
+Sandewall's grandchildren were doing.
+
+00:12:55.000 --> 00:12:56.399
+And this is why I'm kind of saying,
+
+00:12:56.400 --> 00:12:57.559
+well, if I have an agent,
+
+00:12:57.560 --> 00:13:00.839
+And my agent is quite simple.
+
+00:13:00.840 --> 00:13:04.519
+It uses Emacs server and Emacs client
+
+00:13:04.520 --> 00:13:07.559
+to send lines of basically extended
+
+00:13:07.560 --> 00:13:09.199
+first-order logic to the agent,
+
+00:13:09.200 --> 00:13:12.959
+and the agent then takes a kind of
+
+00:13:12.960 --> 00:13:15.399
+first-order logic-y action.
+
+00:13:15.400 --> 00:13:21.079
+And I was making the point
+
+00:13:21.080 --> 00:13:23.479
+that this looks more like me computing
+
+00:13:23.480 --> 00:13:27.519
+using of REPL-driven development like EEV,
+
+00:13:27.520 --> 00:13:30.479
+where in EEV, I have basically a log
+
+00:13:30.480 --> 00:13:32.119
+of something I've previously done,
+
+00:13:32.120 --> 00:13:34.239
+and I can tap F8 and execute
+
+00:13:34.240 --> 00:13:36.479
+line after line after line.
+
+00:13:36.480 --> 00:13:38.839
+And I think if I see an agent doing that,
+
+00:13:38.840 --> 00:13:40.399
+I can clearly understand
+
+00:13:40.400 --> 00:13:43.639
+and relate to what the agent is doing.
+
+00:13:43.640 --> 00:13:45.519
+And so I'm not classifying
+
+00:13:45.520 --> 00:13:49.399
+Like, I never do gigabytes and gigabytes
+
+00:13:49.400 --> 00:13:52.279
+and gigabytes of matrix multiplications,
+
+00:13:52.280 --> 00:13:54.959
+so I can't relate to this as an idea of intelligence.
+
+00:13:54.960 --> 00:13:57.919
+Sorry. Welcome to GreenGuest teleporting in.
+
+00:13:57.920 --> 00:14:02.759
+FullSpain is saying, no one truly knows what intelligence is.
+
+00:14:02.760 --> 00:14:10.759
+All right. I kind of wished that this was working,
+
+00:14:10.760 --> 00:14:13.199
+because just before we went live, they said,
+
+00:14:13.200 --> 00:14:15.919
+hey, just have your example working quickly.
+
+00:14:15.920 --> 00:14:18.999
+Then I downloaded my example from my blog,
+
+00:14:19.000 --> 00:14:22.479
+and I'd double escaped some characters
+
+00:14:22.480 --> 00:14:26.799
+so that the escaped characters would show up in my blog.
+
+00:14:26.800 --> 00:14:29.759
+And I caused a lot of rampant chaos.
+
+00:14:29.760 --> 00:14:32.319
+If anyone else has a question.
+
+00:14:32.320 --> 00:14:40.759
+Guest has said, but. So. Great.
+
+00:14:40.760 --> 00:14:47.279
+I guess I could go back and try it.
+
+00:14:47.280 --> 00:14:50.399
+I probably should have jumped in a couple of minutes ago
+
+00:14:50.400 --> 00:14:53.279
+and just said the live stream did cut over,
+
+00:14:53.280 --> 00:14:54.919
+but we're continuing to record this
+
+00:14:54.920 --> 00:14:57.119
+and the whole session will be published
+
+00:14:57.120 --> 00:14:58.399
+along with the video on the website.
+
+00:14:58.400 --> 00:15:04.079
+Oh, well. Sorry about that. I tried that.
+
+00:15:04.080 --> 00:15:06.799
+I just lost a couple of minutes there
+
+00:15:06.800 --> 00:15:08.879
+and failed to give you the smooth warning.
+
+00:15:08.880 --> 00:15:14.199
+Oh, no, no. That's fine. I was just kind of rambling.
+
+00:15:14.200 --> 00:15:16.959
+Listen. Don't download a web page
+
+00:15:16.960 --> 00:15:19.799
+and try and convert it to an org file on the fly
+
+00:15:19.800 --> 00:15:21.959
+and just before you go live somewhere
+
+00:15:21.960 --> 00:15:23.319
+is the kind of moral here.
+
+00:15:23.320 --> 00:15:27.799
+You know, just saying that's pretty graphics, but it's long.
+
+00:15:27.800 --> 00:15:29.399
+She's dropping. See you later. Yeah.
+
+00:15:29.400 --> 00:15:31.239
+Let's, let's, let's all get out of here.
+
+00:15:31.240 --> 00:15:32.399
+Basically. I'm going to go see
+
+00:15:32.400 --> 00:15:36.159
+if I can look at this ether pad one last time
+
+00:15:36.160 --> 00:15:37.639
+and see if there are any questions
+
+00:15:37.640 --> 00:15:39.359
+just to not leave anyone else.
+
+00:15:39.360 --> 00:15:43.559
+Anyone out much to their chagrin possibly.
+
+00:15:43.560 --> 00:15:47.639
+Um, how to connect to LambdaMOO, seems great.
+
+00:15:47.640 --> 00:15:52.159
+Oh, interesting guides, somebody wrote that.
+
+NOTE Q: What do you mean by slowly?
+
+00:15:52.160 --> 00:15:55.439
+What do you mean by slowly? Yeah, so I'm saying taking
+
+00:15:55.440 --> 00:15:57.279
+a simple action every 20 seconds,
+
+00:15:57.280 --> 00:15:59.079
+this still adds up to a lot over time.
+
+00:15:59.080 --> 00:16:01.599
+Question, do you think that it would be,
+
+00:16:01.600 --> 00:16:04.079
+yeah, well, if you've used Slime,
+
+00:16:04.080 --> 00:16:05.959
+and hence you're using Swank,
+
+00:16:05.960 --> 00:16:07.239
+you can just Swank, Eval,
+
+00:16:07.240 --> 00:16:08.839
+and Emacs would be the more trivial way.
+
+00:16:08.840 --> 00:16:10.719
+I felt like I was getting something bonus
+
+00:16:10.720 --> 00:16:13.959
+by using, um, Emacs server.
+
+00:16:13.960 --> 00:16:17.359
+Somebody has a link to Eduardo's blog,
+
+00:16:17.360 --> 00:16:19.839
+which I think has been misspelled.
+
+00:16:19.840 --> 00:16:23.079
+It should be anggtwu with no dot there,
+
+00:16:23.080 --> 00:16:27.199
+dot net, sharp sign EEV. (https://anggtwu.net/#eev)
+
+00:16:27.200 --> 00:16:31.519
+So, Eduardo is the author of EEV mode.
+
+00:16:31.520 --> 00:16:33.079
+I found Eduardo's thing.
+
+00:16:33.080 --> 00:16:36.199
+Oh, this was the question, what is the Leonardo system,
+
+00:16:36.200 --> 00:16:38.479
+which I just answered.
+
+00:16:38.480 --> 00:16:42.959
+What is LambdaMOO? How do you use it?
+
+00:16:42.960 --> 00:16:45.559
+It's a mud, comma, object-oriented.
+
+00:16:45.560 --> 00:16:49.319
+So it's a multi-user dungeon kind of classical video game,
+
+00:16:49.320 --> 00:16:52.799
+still popular, but with extended object-oriented facilities.
+
+00:16:52.800 --> 00:16:57.359
+Companies like Harlequin, which yduJ
+
+00:16:57.360 --> 00:17:00.319
+and Ken Pitman, for example, were at, I think, in the 90s.
+
+00:17:00.320 --> 00:17:05.319
+Instead of modernly, you'd have Slack web apps or something.
+
+00:17:05.320 --> 00:17:08.079
+People used to have these MOOs and things.
+
+00:17:08.080 --> 00:17:15.519
+Okay, the music that's replaced me is evidently quite nice.
+
+00:17:15.520 --> 00:17:22.119
+Yes, get the hints. Thanks for being here.
+
+00:17:22.120 --> 00:17:29.359
+Well, let's continue this diatribe
+
+00:17:29.360 --> 00:17:33.639
+possibly on the Mastodon or something like that.
+
+00:17:33.640 --> 00:17:35.999
+We'll do some kind of...
+
+00:17:36.000 --> 00:17:40.519
+Let me thank you one more time for preparing this talk
+
+00:17:40.520 --> 00:17:44.359
+and for all that you do for the Free Software community
+
+00:17:44.360 --> 00:17:47.879
+and especially for Emacs. particularly appreciate you.
+
+00:17:47.880 --> 00:17:50.439
+Thank you for all you do for the Free Software community
+
+00:17:50.440 --> 00:17:53.319
+and particularly Emacs, Corwin and Bruce.
+
+00:17:53.320 --> 00:17:56.079
+I'm still waiting for a working demo of Dungeon Mode.
+
+00:17:56.080 --> 00:17:58.559
+My joke that I was setting up and never had a chance for
+
+00:17:58.560 --> 00:17:59.959
+was that I was going to say
+
+00:17:59.960 --> 00:18:03.599
+I wanted my agent to be using Dungeon Mode in Emacs.
+
+00:18:03.600 --> 00:18:05.999
+How's that? Okay, well, we'll work on that.
+
+00:18:06.000 --> 00:18:10.119
+That could be a project for the two of us in our copious free time.
+
+00:18:10.120 --> 00:18:13.559
+Definitely. Yeah. Okay. I'll let you go.
+
+00:18:13.560 --> 00:18:14.679
+I'm gonna abandon this stream.
+
+00:18:14.680 --> 00:18:17.039
+All right. I'll end out the recording
+
+00:18:17.040 --> 00:18:24.560
+and thanks to all who participated. Okay. See you later.
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-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt
new file mode 100644
index 00000000..9d9dc2ba
--- /dev/null
+++ b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:52.515
+Introduction
+
+00:00:52.516 --> 00:03:29.119
+Motivation
+
+00:03:29.120 --> 00:04:37.599
+My requirements
+
+00:04:37.600 --> 00:05:02.959
+Basic setup: corfu + eglot
+
+00:05:02.960 --> 00:06:44.879
+Looking at completion-at-point functions
+
+00:06:44.880 --> 00:08:10.899
+Making my own (basic) c-a-p-f for yasnippet: the completion properties
+
+00:08:10.900 --> 00:09:18.879
+Getting yas-kw-list right: What do I want?
+
+00:09:18.880 --> 00:11:33.840
+Diving in yasnippet
+
+00:11:33.840 --> 00:13:03.803
+Fine-tuning: adding cape
+
+00:13:03.804 --> 00:14:05.359
+Automatic snippet expansion
+
+00:14:05.360 --> 00:14:58.319
+Themes
+
+00:14:58.320 --> 00:15:48.583
+My check-list
+
+00:15:48.584 --> 00:16:58.039
+Takeaways
+
+00:16:58.040 --> 00:18:54.999
+Requests (to whom it may concern)
+
+00:18:55.000 --> 00:19:40.159
+Q: Did you try yasnippet-capf? If so, what did you miss from it that this approach has? Thanks! https://github.com/elken/yasnippet-capf
+
+00:19:40.160 --> 00:24:51.879
+A small demo
+
+00:24:51.880 --> 00:32:32.119
+Q: Do special characters in yasnippets work well too? example &lt;FD ?
+
+00:32:32.120 --> 00:35:44.920
+Emacs Lisp
diff --git a/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt
new file mode 100644
index 00000000..ba28468e
--- /dev/null
+++ b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt
@@ -0,0 +1,1507 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:02.319
+Nice to have you here on this talk.
+
+00:00:02.320 --> 00:00:04.519
+This is my second talk this year.
+
+00:00:04.520 --> 00:00:09.919
+First one was on things that I've done to Org Mode.
+
+00:00:09.920 --> 00:00:13.799
+Just as a side note, this presentation
+
+00:00:13.800 --> 00:00:16.279
+that I'm going to share with you
+
+00:00:16.280 --> 00:00:19.879
+about my work on Corfu and Yasnippet.
+
+00:00:19.880 --> 00:00:21.839
+I've prepared that on Org Mode
+
+00:00:21.840 --> 00:00:25.079
+and exported that with a work I've been doing
+
+00:00:25.080 --> 00:00:26.839
+to the latest exporter.
+
+00:00:26.840 --> 00:00:31.959
+Anyhow, what is my talk going to be about?
+
+00:00:31.960 --> 00:00:34.599
+It's going to be about Corfu and Yasnippet,
+
+00:00:34.600 --> 00:00:36.599
+which I thought would be difficult to integrate,
+
+00:00:36.600 --> 00:00:42.799
+and it was much easier than I thought.
+
+00:00:42.800 --> 00:00:46.959
+So just a short outline, my motivation,
+
+00:00:46.960 --> 00:00:49.959
+step-by-step of the things that I've been investigating,
+
+00:00:49.960 --> 00:00:52.515
+and some takeaways.
+
+NOTE Motivation
+
+00:00:52.516 --> 00:00:55.919
+So my motivation, yasnippet is old.
+
+00:00:55.920 --> 00:00:59.599
+So I've tried another. I've tried Tempel
+
+00:00:59.600 --> 00:01:02.519
+and other template management packages,
+
+00:01:02.520 --> 00:01:08.159
+but it was really not my cup of tea. So mainly why?
+
+00:01:08.160 --> 00:01:10.919
+Mainly because I have a nice base of yasnippets
+
+00:01:10.920 --> 00:01:14.479
+I have generated for my needs.
+
+00:01:14.480 --> 00:01:17.799
+So it's not that I've been importing snippets
+
+00:01:17.800 --> 00:01:20.359
+from packages which are out there.
+
+00:01:20.360 --> 00:01:23.599
+No, they are my snippets. I'm used to them.
+
+00:01:23.600 --> 00:01:26.559
+And of course, migration counts as a cost.
+
+00:01:26.560 --> 00:01:32.639
+I've been using Company as my completion point function GUI for years,
+
+00:01:32.640 --> 00:01:38.167
+but with the time coming in features and so on,
+
+00:01:38.168 --> 00:01:44.359
+it was not as easy to set up as I wanted for my needs.
+
+00:01:44.360 --> 00:01:47.181
+So I had been working,
+
+00:01:47.182 --> 00:01:49.839
+I've been playing with Eglot already some time
+
+00:01:49.840 --> 00:01:53.119
+for a language server protocol.
+
+00:01:53.120 --> 00:01:57.039
+I had read about how easy it was to integrate with Corfu,
+
+00:01:57.040 --> 00:02:02.839
+which was really nice, and I had given it a try,
+
+00:02:02.840 --> 00:02:10.250
+but I'm using both graphical user interface mode in Emacs
+
+00:02:10.251 --> 00:02:11.000
+and text mode,
+
+00:02:11.001 --> 00:02:13.042
+and for text mode you need corfu-terminal,
+
+00:02:13.043 --> 00:02:16.399
+which was yet another package that I didn't download.
+
+00:02:16.400 --> 00:02:21.479
+Well, and I didn't really find a quick way
+
+00:02:21.480 --> 00:02:24.479
+to get rid of company to get yasnippet.
+
+00:02:24.480 --> 00:02:26.679
+So at the end, when, at the beginning,
+
+00:02:26.680 --> 00:02:30.107
+when I was using Corfu and Eglot,
+
+00:02:30.108 --> 00:02:33.959
+I also needed to load company
+
+00:02:33.960 --> 00:02:35.759
+to have yasnippet support,
+
+00:02:35.760 --> 00:02:37.639
+which was really like sort of weird
+
+00:02:37.640 --> 00:02:40.559
+because I wanted to get rid of yasnippet.
+
+00:02:40.560 --> 00:02:47.199
+Anyhow, while I try now, I'm following the mailing list,
+
+00:02:47.200 --> 00:02:48.559
+the development mailing list,
+
+00:02:48.560 --> 00:02:51.799
+and I got interested when I heard something about
+
+00:02:51.800 --> 00:02:57.119
+TTY child frames being announced for master.
+
+00:02:57.120 --> 00:02:59.599
+That would mean less packages to download
+
+00:02:59.600 --> 00:03:04.159
+because I thought I could get rid of Corfu,
+
+00:03:04.160 --> 00:03:07.359
+and I wanted to try if I could get rid of corfu-terminal
+
+00:03:07.360 --> 00:03:11.199
+and run Corfu without that.
+
+00:03:11.200 --> 00:03:18.799
+So, there were some hints there in that mailing list
+
+00:03:18.800 --> 00:03:21.879
+that made it interesting for me.
+
+00:03:21.880 --> 00:03:26.639
+And at the end, I'm also like a "why not try"ing man,
+
+00:03:26.640 --> 00:03:29.119
+so I said, let's give it a try.
+
+NOTE My requirements
+
+00:03:29.120 --> 00:03:33.479
+My requirements, I'm working always on a new Emacs,
+
+00:03:33.480 --> 00:03:36.759
+a decently new Emacs, normally from master, vanilla,
+
+00:03:36.760 --> 00:03:41.209
+completely vanilla, and I don't have any extras
+
+00:03:41.210 --> 00:03:42.559
+like Doom or things like that.
+
+00:03:42.560 --> 00:03:45.519
+So I'm only vanilla. And one of the things
+
+00:03:45.520 --> 00:03:50.279
+that I don't want is that on this vanilla recent Emacs,
+
+00:03:50.280 --> 00:03:55.719
+I don't want a corfu-terminal. I need yasnippet.
+
+00:03:55.720 --> 00:03:57.359
+I'm basically an old man.
+
+00:03:57.360 --> 00:04:02.479
+Old dog doesn't do new tricks and snippets must,
+
+00:04:02.480 --> 00:04:06.239
+in my way of working, must be easy and quick to configure,
+
+00:04:06.240 --> 00:04:10.479
+and tempel or others that I've seen are not.
+
+00:04:10.480 --> 00:04:13.919
+I don't want any reminiscence of company in my setup.
+
+00:04:13.920 --> 00:04:18.679
+And of course, don't forget that I've embraced
+
+00:04:18.680 --> 00:04:24.119
+the language protocol implementations and basically Eglot.
+
+00:04:24.120 --> 00:04:28.159
+My main focus now is Python and LaTeX,
+
+00:04:28.160 --> 00:04:31.719
+and I have pylsp and texlab.
+
+00:04:31.720 --> 00:04:37.599
+I don't want to have to stop using them.
+
+NOTE Basic setup: corfu + eglot
+
+00:04:37.600 --> 00:04:40.479
+So basic setup for Corfu and Eglot.
+
+00:04:40.480 --> 00:04:43.439
+You can find it everywhere you look for it.
+
+00:04:43.440 --> 00:04:46.559
+It's really easy.
+
+00:04:46.560 --> 00:04:51.119
+And actually, I also do something somehow naughty,
+
+00:04:51.120 --> 00:04:53.079
+which is to set this variable,
+
+00:04:53.080 --> 00:04:55.519
+the corfu-auto variable to true,
+
+00:04:55.520 --> 00:04:58.399
+although I know it's not recommended, blah, blah, blah.
+
+00:04:58.400 --> 00:05:02.959
+But I use that because I'm a bit lazy in that.
+
+NOTE Looking at completion-at-point functions
+
+00:05:02.960 --> 00:05:07.239
+So next step was looking at completion at point functions.
+
+00:05:07.240 --> 00:05:10.479
+So the information there, if you go through, is scattered
+
+00:05:10.480 --> 00:05:13.739
+and sometimes a bit cryptic.
+
+00:05:13.740 --> 00:05:16.599
+At the end I came up with something like the thing
+
+00:05:16.600 --> 00:05:18.399
+that you see there on the screen.
+
+00:05:18.400 --> 00:05:21.879
+It's a function for yas-completion-at-point.
+
+00:05:21.880 --> 00:05:24.639
+I need my list of keywords,
+
+00:05:24.640 --> 00:05:30.039
+so that I'm going to be talking later,
+
+00:05:30.040 --> 00:05:34.399
+and I have my bounds, which is normally a word,
+
+00:05:34.400 --> 00:05:37.119
+and from that, I get the start and the end
+
+00:05:37.120 --> 00:05:40.879
+of the thing that I want to
+
+00:05:40.880 --> 00:05:47.319
+be my seed for looking and bringing up Corfu,
+
+00:05:47.320 --> 00:05:52.599
+and of course, I need some completion properties here.
+
+00:05:52.600 --> 00:05:55.719
+This looked like this is what you need to do,
+
+00:05:55.720 --> 00:05:57.519
+but I had to dig quite deep
+
+00:05:57.520 --> 00:06:01.319
+to create a yasnippet keyword test
+
+00:06:01.320 --> 00:06:04.759
+and to understand the completion props.
+
+00:06:04.760 --> 00:06:11.759
+And as an update of what I've been doing in the last weeks,
+
+00:06:11.760 --> 00:06:17.606
+I've created a bound of things at point for me
+
+00:06:17.607 --> 00:06:18.679
+with a different thing
+
+00:06:18.680 --> 00:06:22.039
+that doesn't skip over non-blank characters,
+
+00:06:22.040 --> 00:06:25.039
+that only skips over non-blank characters.
+
+00:06:25.040 --> 00:06:28.999
+Why? Because 'word was confusing LaTeX,
+
+00:06:29.000 --> 00:06:30.759
+because the backslash,
+
+00:06:30.760 --> 00:06:34.999
+like in the example for the teletype text,
+
+00:06:35.000 --> 00:06:37.999
+was not taken into account by 'word.
+
+00:06:38.000 --> 00:06:39.959
+So I had to create my own one,
+
+00:06:39.960 --> 00:06:42.119
+which was a bounds-of-thing-at-point,
+
+00:06:42.120 --> 00:06:44.879
+and then my thing is non-blanks.
+
+NOTE Making my own (basic) c-a-p-f for yasnippet: the completion properties
+
+00:06:44.880 --> 00:06:51.179
+Completion at point properties, what are they?
+
+00:06:51.180 --> 00:06:56.039
+They allow Emacs to know how to handle the information
+
+00:06:56.040 --> 00:06:58.899
+for a specific completion time.
+
+00:06:58.900 --> 00:07:03.239
+So you normally will have an annotation,
+
+00:07:03.240 --> 00:07:08.519
+which then can disappear if you use nerd-icons-corfu,
+
+00:07:08.520 --> 00:07:11.839
+which is what I'm doing currently,
+
+00:07:11.840 --> 00:07:17.900
+but I keep it commented just in case I get tired of Corfu
+
+00:07:17.901 --> 00:07:20.000
+and I want to have my completion function.
+
+00:07:20.001 --> 00:07:24.959
+Then the :company-kind is actually not something
+
+00:07:24.960 --> 00:07:30.999
+that comes from the company package, but does not require.
+
+00:07:31.000 --> 00:07:39.439
+And that's going to allow nerd-icons-corfu to identify
+
+00:07:39.440 --> 00:07:44.839
+and put the right icon there in the completion list,
+
+00:07:44.840 --> 00:07:47.159
+as you will see in a couple of minutes.
+
+00:07:47.160 --> 00:07:50.439
+So it's a snippet key.
+
+00:07:50.440 --> 00:07:52.599
+So basically what this is telling you
+
+00:07:52.600 --> 00:07:54.319
+is that this is a snippet keyword.
+
+00:07:54.320 --> 00:07:56.799
+These two lines, either line,
+
+00:07:56.800 --> 00:07:59.999
+tell you that this is a snippet keyword,
+
+00:08:00.000 --> 00:08:05.279
+and that it should be added to the other completions
+
+00:08:05.280 --> 00:08:10.899
+that you already have in your list.
+
+NOTE Getting yas-kw-list right: What do I want?
+
+00:08:10.900 --> 00:08:15.479
+Problems. Looking... Now, next step,
+
+00:08:15.480 --> 00:08:18.479
+once I had the completion props
+
+00:08:18.480 --> 00:08:21.439
+which was relatively easy was to go
+
+00:08:21.440 --> 00:08:24.399
+and get the keyword list right.
+
+00:08:24.400 --> 00:08:27.199
+I've been looking at pre-existing solutions
+
+00:08:27.200 --> 00:08:29.319
+like, for example, how the menu
+
+00:08:29.320 --> 00:08:32.539
+is built in by yasnippet
+
+00:08:32.540 --> 00:08:34.399
+and it looked a bit like Mission Impossible,
+
+00:08:34.400 --> 00:08:40.439
+because the approach by all the things
+
+00:08:40.440 --> 00:08:43.199
+that I have seen and I have examined
+
+00:08:43.200 --> 00:08:48.659
+is to get the keys and the names
+
+00:08:48.660 --> 00:08:50.799
+and then further process them.
+
+00:08:50.800 --> 00:08:55.279
+My take was, do I really need both?
+
+00:08:55.280 --> 00:08:58.159
+At the end, if I use my own snippets,
+
+00:08:58.160 --> 00:09:00.439
+I'm going to be using something
+
+00:09:00.440 --> 00:09:02.559
+I would call meaningful keys for them,
+
+00:09:02.560 --> 00:09:06.359
+or at least meaningful for... These keys are meaningful for me,
+
+00:09:06.360 --> 00:09:07.679
+and I try not to repeat them,
+
+00:09:07.680 --> 00:09:09.959
+because it makes little sense to repeat a keyword.
+
+00:09:09.960 --> 00:09:13.919
+So why not center everything around the keys only,
+
+00:09:13.920 --> 00:09:18.879
+and can that help simplify my code?
+
+NOTE Diving in yasnippet
+
+00:09:18.880 --> 00:09:23.639
+So I started to dive into yasnippet
+
+00:09:23.640 --> 00:09:27.319
+and I found a lot of useful semi-hidden functions there.
+
+00:09:27.320 --> 00:09:30.679
+I discovered that getting the list,
+
+00:09:30.680 --> 00:09:34.959
+the list of keys for a given mode was not that difficult.
+
+00:09:34.960 --> 00:09:40.079
+And at the end, what I started doing
+
+00:09:40.080 --> 00:09:43.399
+is get all the snippet tables used by a major mode
+
+00:09:43.400 --> 00:09:47.999
+and get the lists of the keys that you have in each table.
+
+00:09:48.000 --> 00:09:50.375
+Sometimes the list is empty
+
+00:09:50.376 --> 00:09:54.319
+so it's going to return a nil and that you have to discard.
+
+00:09:54.320 --> 00:09:57.559
+When you're using structured snippets
+
+00:09:57.560 --> 00:10:02.479
+like snippets and submenus and so on
+
+00:10:02.480 --> 00:10:06.399
+to get a structured menu.
+
+00:10:06.400 --> 00:10:09.834
+You also get some non-strings that you need to filter out
+
+00:10:09.835 --> 00:10:15.039
+in order to get a workable keyword list.
+
+00:10:15.040 --> 00:10:21.799
+At the end of the day, what I had was something like this.
+
+00:10:21.800 --> 00:10:29.519
+I have, for a mode, I went through all modes.
+
+00:10:29.520 --> 00:10:38.799
+through all modes associated to that, and then I went,
+
+00:10:38.800 --> 00:10:42.480
+I got my results from all the tables that I had
+
+00:10:42.520 --> 00:10:45.279
+for a given time, for a given table.
+
+00:10:45.280 --> 00:10:48.079
+So what you do is you get the tables
+
+00:10:48.080 --> 00:10:53.119
+that are associated to a mode, because, surprise, surprise,
+
+00:10:53.120 --> 00:10:55.958
+some modes have more than one table.
+
+00:10:55.959 --> 00:11:00.917
+And then what you do is you filter out all non strings
+
+00:11:00.918 --> 00:11:07.719
+from each of the keys list that you have for each table.
+
+00:11:07.720 --> 00:11:12.379
+So as you see, it's a 1, 2, 3, 4, 5, 6, 7 liner,
+
+00:11:12.380 --> 00:11:14.319
+which was not too much.
+
+00:11:14.320 --> 00:11:20.039
+By the way, if someone from Yasnippet is around,
+
+00:11:20.040 --> 00:11:26.959
+I sent a pull request to include this
+
+00:11:26.960 --> 00:11:28.999
+as a public function in Yasnipit
+
+00:11:29.000 --> 00:11:32.319
+because it might be nice to have it in the package
+
+00:11:32.320 --> 00:11:33.840
+in order to do this kind of things.
+
+NOTE Fine-tuning: adding cape
+
+00:11:33.840 --> 00:11:41.239
+So fine-tuning. Just adding a yas completion
+
+00:11:41.240 --> 00:11:44.719
+to the completion point functions was not enough.
+
+00:11:44.720 --> 00:11:46.799
+I don't really know,
+
+00:11:46.800 --> 00:11:51.199
+but :exclusive no didn't seem to work how I wanted
+
+00:11:51.200 --> 00:11:54.549
+so I needed to escape... Sorry. Yeah.
+
+00:11:54.550 --> 00:11:57.399
+I was saying I was getting rid of packages,
+
+00:11:57.400 --> 00:12:00.279
+and I had to add one package
+
+00:12:00.280 --> 00:12:04.479
+in order to get a function, which is very, very, nice,
+
+00:12:04.480 --> 00:12:08.919
+and which is part of the cape function of the cape package,
+
+00:12:08.920 --> 00:12:12.799
+and that's cape-capf-super.
+
+00:12:12.800 --> 00:12:16.439
+So at the end, using that, you define an alias,
+
+00:12:16.440 --> 00:12:23.199
+which, for that, where you use cape-capf-super
+
+00:12:23.200 --> 00:12:25.799
+to have a list of what you want...
+
+00:12:25.800 --> 00:12:29.079
+So in this case, for example, for the demo
+
+00:12:29.080 --> 00:12:31.419
+I'm going to make, I'm using yas completion
+
+00:12:31.420 --> 00:12:36.172
+and then the elisp-completion-at-point function
+
+00:12:36.173 --> 00:12:37.719
+provided by Emacs.
+
+00:12:37.720 --> 00:12:43.999
+I combine them using cape-capf-super,
+
+00:12:44.000 --> 00:12:47.679
+and with that, I create a completion point,
+
+00:12:47.680 --> 00:12:53.159
+a new completion point function which I call cape-lisp-mode,
+
+00:12:53.160 --> 00:12:58.480
+and then I add this alias to the completion functions list,
+
+00:12:58.520 --> 00:13:03.803
+and with that, it is enough.
+
+NOTE Automatic snippet expansion
+
+00:13:03.804 --> 00:13:05.719
+Snippet expansion.
+
+00:13:05.720 --> 00:13:13.839
+If you want to have your snippets expanded automatically,
+
+00:13:13.840 --> 00:13:27.999
+you have to add an exit function to the, I'm sorry,
+
+00:13:28.000 --> 00:13:30.879
+to the completion properties.
+
+00:13:30.880 --> 00:13:34.119
+Yet another functionality you have to add.
+
+00:13:34.120 --> 00:13:39.199
+And to avoid this automatic selection to be too eager,
+
+00:13:39.200 --> 00:13:47.973
+you need to add this setq corfu-on-exact-match to nil
+
+00:13:47.974 --> 00:13:51.839
+because otherwise, you will always get the snippet expanded,
+
+00:13:51.840 --> 00:13:55.039
+even if you don't want it. Basically, why?
+
+00:13:55.040 --> 00:13:57.639
+Basically, because this would be suboptimal
+
+00:13:57.640 --> 00:14:05.359
+because the key can appear as part of a variable name.
+
+NOTE Themes
+
+00:14:05.360 --> 00:14:10.599
+Another nice thing, I'm also creating my own themes.
+
+00:14:10.600 --> 00:14:13.759
+I'm trying to have very sleek themes
+
+00:14:13.760 --> 00:14:16.839
+that only cover the modes that I use
+
+00:14:16.840 --> 00:14:22.959
+and for that I have my own theme creator fork
+
+00:14:22.960 --> 00:14:26.959
+from the original theme creator.
+
+00:14:26.960 --> 00:14:29.292
+In my personal fork that I'm running at home,
+
+00:14:29.293 --> 00:14:33.859
+I only have the faces for the modes I use.
+
+00:14:33.860 --> 00:14:38.159
+I don't want to overload the thing
+
+00:14:38.160 --> 00:14:41.839
+with too much different things.
+
+00:14:41.840 --> 00:14:45.999
+Looking at this, I really didn't need, as you will see now,
+
+00:14:46.000 --> 00:14:50.079
+I don't need to add anything to my themes,
+
+00:14:50.080 --> 00:14:53.279
+because the default faces for Corfu
+
+00:14:53.280 --> 00:14:58.319
+adapt quite well to most of the themes.
+
+NOTE My check-list
+
+00:14:58.320 --> 00:15:01.478
+So if I go back to my checklist,
+
+00:15:01.479 --> 00:15:02.839
+decently new Emacs, yes,
+
+00:15:02.840 --> 00:15:06.559
+compiled. The one you'll see
+
+00:15:06.560 --> 00:15:09.239
+in the demo I'm doing is a master
+
+00:15:09.240 --> 00:15:11.999
+compiled the day before yesterday
+
+00:15:12.000 --> 00:15:15.199
+and I don't need corfu-terminal there.
+
+00:15:15.200 --> 00:15:16.559
+I need yasnippet,
+
+00:15:16.560 --> 00:15:20.159
+and you're going to see that in a second
+
+00:15:20.160 --> 00:15:24.439
+with a couple of snippets that I can expand here.
+
+00:15:24.440 --> 00:15:27.479
+I don't want any reminiscence of a company in my setup,
+
+00:15:27.480 --> 00:15:32.119
+and there's none. Well, actually, :company-kind is there
+
+00:15:32.120 --> 00:15:33.719
+you see the company there,
+
+00:15:33.720 --> 00:15:39.559
+but it isn't defined by company strictly speaking,
+
+00:15:39.560 --> 00:15:44.679
+and for... I don't want... I need Eglot integration
+
+00:15:44.680 --> 00:15:48.583
+which I will also be showing you.
+
+NOTE Takeaways
+
+00:15:48.584 --> 00:15:50.400
+Takeaways from all this,
+
+00:15:50.440 --> 00:15:55.279
+if you accept the extra burden
+
+00:15:55.280 --> 00:16:02.239
+of corfu-terminal for Emacs 30 or earlier Emacs 30s,
+
+00:16:02.240 --> 00:16:07.559
+it's not too difficult to get this set up running.
+
+00:16:07.560 --> 00:16:11.759
+Corfu was easier to integrate and configure than Company,
+
+00:16:11.760 --> 00:16:13.799
+and it's much lighter in terms
+
+00:16:13.800 --> 00:16:20.039
+of number of lines, et cetera. I learned a lot.
+
+00:16:20.040 --> 00:16:25.159
+Well, actually, yes, with the help of Cape,
+
+00:16:25.160 --> 00:16:27.399
+but it is much lighter and much easier
+
+00:16:27.400 --> 00:16:30.119
+to integrate and configure.
+
+00:16:30.120 --> 00:16:34.879
+I've learned a lot about computational functions in the process,
+
+00:16:34.880 --> 00:16:40.439
+which is, something that is always nice to learn new things
+
+00:16:40.440 --> 00:16:45.039
+and the nerd-icons-corfu makes the...
+
+00:16:45.040 --> 00:16:48.319
+at least, at this point in time... I might get tired of it,
+
+00:16:48.320 --> 00:16:50.399
+but at this point in time, it makes
+
+00:16:50.400 --> 00:16:58.039
+a very nice overall look and feel for Emacs.
+
+NOTE Requests (to whom it may concern)
+
+00:16:58.040 --> 00:17:02.039
+Requests (to whom it may concern): cape has nice features
+
+00:17:02.040 --> 00:17:06.279
+that maybe could make their way into emacs.
+
+00:17:06.280 --> 00:17:08.064
+I'm thinking basically about
+
+00:17:08.065 --> 00:17:12.399
+this super cape functionality
+
+00:17:12.400 --> 00:17:18.799
+which is very nice, and overcomes the problem of linking,
+
+00:17:18.800 --> 00:17:22.239
+and this :exclusive and all this kind of things
+
+00:17:22.240 --> 00:17:26.479
+that we have currently in Corfu
+
+00:17:26.480 --> 00:17:28.439
+with the completion-at-point functions.
+
+00:17:28.440 --> 00:17:32.959
+Corfu is also really nice to have, and it's not too big.
+
+00:17:32.960 --> 00:17:35.559
+So is there any possibility
+
+00:17:35.560 --> 00:17:40.079
+that it makes its way into Emacs?
+
+00:17:40.080 --> 00:17:42.399
+Please keep yasnippet alive.
+
+00:17:42.400 --> 00:17:48.559
+I'm not saying here that my pull request should be there,
+
+00:17:48.560 --> 00:17:51.559
+but it would be nice if someone took a look
+
+00:17:51.560 --> 00:17:57.399
+and made it part of Yasnippet.
+
+00:17:57.400 --> 00:18:01.799
+And P.S., currently on master,
+
+00:18:01.800 --> 00:18:04.292
+there's a lot of semantic highlighting going on,
+
+00:18:04.293 --> 00:18:07.125
+which is very, very nice. No criticism on that.
+
+00:18:07.126 --> 00:18:12.417
+But you may need to add to your snippet hook
+
+00:18:12.418 --> 00:18:25.039
+this simple local value for elisp-fontify-semantically,
+
+00:18:25.040 --> 00:18:30.719
+because at least in my case, I felt that
+
+00:18:30.720 --> 00:18:32.439
+the faces were a bit too pushy,
+
+00:18:32.440 --> 00:18:37.280
+so I had to make the snippet mode
+
+00:18:37.334 --> 00:18:43.579
+use the old Emacs Lisp fontification.
+
+00:18:43.580 --> 00:18:46.279
+This would be my talk.
+
+00:18:46.280 --> 00:18:54.999
+Any initial reactions to this? There's a question here.
+
+NOTE Q: Did you try yasnippet-capf? If so, what did you miss from it that this approach has? Thanks! https://github.com/elken/yasnippet-capf
+
+00:18:55.000 --> 00:18:59.159
+Someone asked, did you try yasnippet-capf?
+
+00:18:59.160 --> 00:19:05.959
+If so, what did you miss from this approach? I tried that.
+
+00:19:05.960 --> 00:19:11.239
+And it's not that I missed anything.
+
+00:19:11.240 --> 00:19:15.839
+It was more or less that I wanted to do it myself.
+
+00:19:15.840 --> 00:19:24.159
+So I wanted to see what was behind it. That's my answer.
+
+00:19:24.160 --> 00:19:26.679
+There are lots of packages there,
+
+00:19:26.680 --> 00:19:31.719
+but I try to keep learning. So, this was a nice objective
+
+00:19:31.720 --> 00:19:40.159
+to learn a bit more about Emacs. And now, just a second.
+
+NOTE A small demo
+
+00:19:40.160 --> 00:19:44.879
+Now, a small demo. This is the interaction.
+
+00:19:44.880 --> 00:19:47.199
+And as you see, I have the snippet there.
+
+00:19:47.200 --> 00:19:52.879
+and I have a couple of snippets.
+
+00:19:52.880 --> 00:19:55.839
+So, for example, if I would like to say
+
+00:19:55.840 --> 00:19:58.879
+I want to define a function, I can go like this.
+
+00:19:58.880 --> 00:20:00.519
+And what you see here is that
+
+00:20:00.520 --> 00:20:04.319
+I have two snippets appearing and then some variables.
+
+00:20:04.320 --> 00:20:09.879
+So, I could go for defun or if I want a key map, for def-keymap,
+
+00:20:09.880 --> 00:20:11.479
+which would be something like this.
+
+00:20:11.480 --> 00:20:18.319
+And then when I press enter, I get directly into the map
+
+00:20:18.320 --> 00:20:26.719
+and I could say like, show off map.
+
+00:20:26.720 --> 00:20:30.079
+Then it sets out directly a :prefix t,
+
+00:20:30.080 --> 00:20:35.039
+which is something that I asked for in Emacs master.
+
+00:20:35.040 --> 00:20:39.479
+So with :prefix t, for those who prefix it true,
+
+00:20:39.480 --> 00:20:41.399
+for those who don't know it,
+
+00:20:41.400 --> 00:20:49.042
+it makes integrating this into keymaps
+
+00:20:49.043 --> 00:20:52.125
+in use-package much easier.
+
+00:20:52.126 --> 00:20:54.167
+So the next thing would be,
+
+00:20:54.168 --> 00:20:56.500
+I would like to write a description,
+
+00:20:56.501 --> 00:21:04.999
+like, for example, a cool show-off keymap,
+
+00:21:05.000 --> 00:21:08.599
+and then my keys are my functions, and that would be it.
+
+00:21:08.600 --> 00:21:15.839
+Of course, you also have like this define function.
+
+00:21:15.840 --> 00:21:21.679
+And of course you can say, that's nice,
+
+00:21:21.680 --> 00:21:23.799
+but you're not showing the integration
+
+00:21:23.800 --> 00:21:25.439
+with Eglot, and you're right.
+
+00:21:25.440 --> 00:21:30.279
+So I'm going just to open up a small program
+
+00:21:30.280 --> 00:21:33.319
+that I'm currently developing in Python.
+
+00:21:33.320 --> 00:21:38.239
+This is a tool to do things in MP3.
+
+00:21:38.240 --> 00:21:42.279
+And here I would have, like, all these things.
+
+00:21:42.280 --> 00:21:45.359
+As you see here in the bottom,
+
+00:21:45.360 --> 00:21:49.079
+server is running, file is local, eglot is active.
+
+00:21:49.080 --> 00:21:57.919
+So I have my eglot stop and then I go down.
+
+00:21:57.920 --> 00:22:00.519
+And I want to add a new argument here.
+
+00:22:00.520 --> 00:22:08.799
+I would go like for it. I would go like add flag.
+
+00:22:08.800 --> 00:22:13.759
+For example, I would add a flag
+
+00:22:13.760 --> 00:22:27.859
+and I would get a new flag to add here.
+
+00:22:27.860 --> 00:22:33.119
+Oops. Of course, this is integrated into Eglot,
+
+00:22:33.120 --> 00:22:42.759
+so I'm getting your information about what I have.
+
+00:22:42.760 --> 00:22:52.359
+I could... I don't have os, so I would need to import here,
+
+00:22:52.360 --> 00:22:59.279
+but I can go up just to see...
+
+00:22:59.280 --> 00:23:01.759
+If I would like to, for example,
+
+00:23:01.760 --> 00:23:11.879
+create a new regular expression,
+
+00:23:11.880 --> 00:23:15.439
+I'm getting this information that you see right now on call.
+
+00:23:15.440 --> 00:23:17.359
+I'm getting that from Eglot.
+
+00:23:17.360 --> 00:23:18.919
+So you see there's the integration
+
+00:23:18.920 --> 00:23:20.839
+with Eglot too in Python.
+
+00:23:20.840 --> 00:23:23.559
+I have Eglot, and as you've seen
+
+00:23:23.560 --> 00:23:30.239
+I also have the... and all these are snippets. Fine.
+
+00:23:30.240 --> 00:23:38.199
+More reactions and questions?
+
+00:23:38.200 --> 00:23:54.239
+Because that would be my show off here.
+
+00:23:54.240 --> 00:24:09.379
+Any questions? Any more questions on the pad?
+
+00:24:09.380 --> 00:24:11.479
+but anyhow I'm going to try,
+
+00:24:11.480 --> 00:24:13.239
+I'm going to try yasnippet too
+
+00:24:13.240 --> 00:24:16.279
+and I'm going to be answering this question more
+
+00:24:16.280 --> 00:24:21.079
+yeah time is good okay fine
+
+00:24:21.080 --> 00:24:30.039
+so I would be done if there's no more reactions...
+
+00:24:30.040 --> 00:24:33.239
+Thank you so much. You're welcome.
+
+00:24:33.240 --> 00:24:34.919
+If you have any other questions, folks,
+
+00:24:34.920 --> 00:24:37.079
+you can always follow up on the pad.
+
+00:24:37.080 --> 00:24:39.639
+That was a great demonstration, and I'm sure lots of people
+
+00:24:39.640 --> 00:24:43.519
+are looking forward to trying it out.
+
+00:24:43.520 --> 00:24:45.239
+Oh, I see some questions coming in now.
+
+00:24:45.240 --> 00:24:46.199
+You may go ahead if you like.
+
+00:24:46.200 --> 00:24:51.879
+Okay, fine. There's someone asking:
+
+NOTE Q: Do special characters in yasnippets work well too? example &lt;FD ?
+
+00:24:51.880 --> 00:24:57.079
+Do special characters in your snippets work well too?
+
+00:24:57.080 --> 00:25:02.479
+what kind of... I don't use special characters in the key name,
+
+00:25:02.480 --> 00:25:05.199
+so in this case everything works quite nicely,
+
+00:25:05.200 --> 00:25:11.359
+and then I'm passing, I'm passing the control to yasnippet,
+
+00:25:11.360 --> 00:25:13.679
+so if there's any problem in yasnippet
+
+00:25:13.680 --> 00:25:15.359
+with special characters,
+
+00:25:15.360 --> 00:25:24.399
+that, I don't know. I don't use that as a key.
+
+00:25:24.400 --> 00:25:30.519
+I'm just using for key names.
+
+00:25:30.520 --> 00:25:38.399
+I normally use a... I only use letters, but that should work.
+
+00:25:38.400 --> 00:25:43.959
+I mean, let's, uh, let's give it a trial.
+
+00:25:43.960 --> 00:25:58.039
+Let's kill here. Yes. I don't want, I don't want to touch this.
+
+00:25:58.040 --> 00:26:01.039
+Ugh. Let's go into this one.
+
+00:26:01.040 --> 00:26:06.920
+Let's say I'm going to define this, for example, like this,
+
+00:26:06.959 --> 00:26:10.919
+and I'm going to create a new snippet.
+
+00:26:10.920 --> 00:26:15.359
+I'm going to create a new snippet
+
+00:26:15.360 --> 00:26:18.119
+and use this. For example, when you look at this,
+
+00:26:18.120 --> 00:26:31.042
+if you have the new way of the new Emacs
+
+00:26:31.043 --> 00:26:37.667
+semantical highlighting working,
+
+00:26:37.668 --> 00:26:40.625
+this would be quite cramped. This is why I'm using,
+
+00:26:40.626 --> 00:26:44.899
+this is why I said the snippet, the...
+
+00:26:44.900 --> 00:26:55.139
+So is this more or less what you're talking about?
+
+00:26:55.140 --> 00:27:12.579
+This is what you're talking about. Snippet. Save the snippet.
+
+00:27:12.580 --> 00:27:15.479
+Snippet, load and put window.
+
+00:27:15.480 --> 00:27:21.279
+Enable interaction mode. Yes, I'm going to save.
+
+00:27:21.280 --> 00:27:31.059
+And I'm going to save that as fd test in the file.
+
+00:27:31.060 --> 00:27:41.479
+No, I'm going to save this. Load. Load input window.
+
+00:27:41.480 --> 00:27:53.679
+I'm going to put this in Emacs Lisp mode. I want to save it. No.
+
+00:27:53.680 --> 00:28:27.359
+I'm going to write that directly into Emacs Lisp mode.
+
+00:28:27.360 --> 00:28:30.639
+Going to go back into scratch buffer,
+
+00:28:30.640 --> 00:28:43.079
+and here I have it. We have it here. But anyhow...
+
+00:28:43.080 --> 00:28:46.934
+And I'm just going to try to see, if I feel like...
+
+00:28:46.935 --> 00:28:52.663
+Empty? Of course, there's only one.
+
+00:28:52.664 --> 00:28:58.839
+It will not show in Corfu.
+
+00:28:58.840 --> 00:29:01.519
+but I mean, I don't have any problems
+
+00:29:01.520 --> 00:29:20.999
+with that, as you see. Was that what you were meaning?
+
+00:29:21.000 --> 00:29:24.839
+Yeah, I guess that works. Fine.
+
+00:29:24.840 --> 00:29:29.039
+All right, shall we wrap up here
+
+00:29:29.040 --> 00:29:31.279
+so that you can have supper
+
+00:29:31.280 --> 00:29:40.919
+and have lunch and other things? Okay, fine for me.
+
+00:29:40.920 --> 00:29:46.319
+I was hoping to see the drop down. Just a second.
+
+00:29:46.320 --> 00:29:49.959
+I think we can do that too. Two seconds.
+
+00:29:49.960 --> 00:29:52.559
+How can we do that with a drop down?
+
+00:29:52.560 --> 00:29:57.719
+Yeah, if I say something like this.
+
+00:29:57.720 --> 00:30:04.919
+And then I go and save it.
+
+00:30:04.920 --> 00:30:08.799
+And I'm going to go and write this
+
+00:30:08.800 --> 00:30:16.719
+into, with a second, fine.
+
+00:30:16.720 --> 00:30:18.179
+And now I need to quit here, sorry.
+
+00:30:18.180 --> 00:30:26.639
+And I'm going to come back in a second with another remark.
+
+00:30:26.640 --> 00:30:31.559
+Well, I'm bringing back and now let's see.
+
+00:30:31.560 --> 00:30:34.839
+Let's see what we have in yasnippet.
+
+00:30:34.840 --> 00:30:44.159
+It's not there. Why not? Just a second. Let's see if I go.
+
+00:30:44.160 --> 00:30:47.839
+I don't know if it matters that the name was
+
+00:30:47.840 --> 00:30:52.599
+that didn't have the characters in the beginning.
+
+00:30:52.600 --> 00:31:05.699
+Just a second. I think I know what is happening here.
+
+00:31:05.700 --> 00:31:21.439
+Do I have them? I'm going to clean.
+
+00:31:21.440 --> 00:31:28.879
+[Sacha]: Oh, you're back in your home directories is why.
+
+00:31:28.880 --> 00:31:35.004
+cd - to get back in.
+
+00:31:35.005 --> 00:31:35.879
+Yeah. That's right.
+
+00:31:35.880 --> 00:31:37.799
+So you see how the name also has...
+
+00:31:37.800 --> 00:31:39.319
+it doesn't have the same as the keys.
+
+00:31:39.320 --> 00:31:41.039
+I don't know if that affects what shows up.
+
+00:31:41.040 --> 00:31:44.880
+[Pedro]: Yeah, we we can try that.
+
+00:31:44.881 --> 00:31:49.999
+That's a quick one. This is my...
+
+00:31:50.000 --> 00:31:51.279
+Fine, now that I have this,
+
+00:31:51.280 --> 00:31:55.359
+which is going to be quicker, we check again.
+
+00:31:55.360 --> 00:31:57.919
+They both seem to be the same now
+
+00:31:57.920 --> 00:32:03.079
+and I don't know if that affects, but anyhow, let's try it.
+
+00:32:03.080 --> 00:32:07.679
+I go and then I look at the yasnippet, if it's there.
+
+00:32:07.680 --> 00:32:09.956
+Yes, it is.
+
+00:32:09.957 --> 00:32:11.879
+[Sacha]: Yeah, it's there.
+
+00:32:11.880 --> 00:32:18.559
+[Pedro]: And then if I say there, there you are. Oh, look at that.
+
+00:32:18.560 --> 00:32:22.167
+It doesn't seem to be affecting.
+
+00:32:22.168 --> 00:32:24.159
+[Sacha]: Fantastic.
+
+00:32:24.160 --> 00:32:32.119
+[Pedro]: And by the way, it is there.
+
+NOTE Emacs Lisp
+
+00:32:32.120 --> 00:32:33.999
+[Sacha]: Yeah, I really should spend time
+
+00:32:34.000 --> 00:32:36.599
+getting more templates set up with yasnippet.
+
+00:32:36.600 --> 00:32:37.639
+I really love the fact that
+
+00:32:37.640 --> 00:32:40.399
+you can evaluate Emacs Lisp in it too.
+
+00:32:40.400 --> 00:32:43.399
+[Pedro]: Yeah, I mean, just to make it bigger,
+
+00:32:43.400 --> 00:32:51.359
+try that because if I go into my, for example,
+
+00:32:51.360 --> 00:32:55.679
+into my org mode stuff
+
+00:32:55.680 --> 00:32:59.439
+and in my org mode, I go to the article,
+
+00:32:59.440 --> 00:33:03.319
+which is one of the big ones.
+
+00:33:03.320 --> 00:33:05.119
+I have things like, for example,
+
+00:33:05.120 --> 00:33:09.199
+I defined a couple of functions here to do if it's empty,
+
+00:33:09.200 --> 00:33:16.399
+if that is empty, just add a white space.
+
+00:33:16.400 --> 00:33:19.599
+If one is empty, add a white space.
+
+00:33:19.600 --> 00:33:23.319
+add a white space here so it becomes a comment.
+
+00:33:23.320 --> 00:33:27.279
+I have functions to do more things on that,
+
+00:33:27.280 --> 00:33:29.799
+and I also have menus to see
+
+00:33:29.800 --> 00:33:31.439
+what language I want to choose for
+
+00:33:31.440 --> 00:33:33.250
+my spell checking and so on.
+
+00:33:33.251 --> 00:33:35.480
+And that's all... As you see,
+
+00:33:35.481 --> 00:33:39.417
+this is Lisp being evaluated.
+
+00:33:39.418 --> 00:33:45.119
+So yes, do. I really encourage you
+
+00:33:45.120 --> 00:33:46.519
+[Sacha]: I've also heard people use it,
+
+00:33:46.520 --> 00:33:47.799
+like, especially if they're working
+
+00:33:47.800 --> 00:33:49.919
+in different programming languages,
+
+00:33:49.920 --> 00:33:52.399
+so they can just have the syntax
+
+00:33:52.400 --> 00:33:54.359
+for the different languages
+
+00:33:54.360 --> 00:33:58.239
+be condensed into a consistent abbreviation.
+
+00:33:58.240 --> 00:34:01.319
+[Pedro]: Yeah. And look, this is my article. I have another.
+
+00:34:01.320 --> 00:34:07.799
+This is when I'm writing articles. I have another one.
+
+00:34:07.800 --> 00:34:10.279
+I have another one for writing letters
+
+00:34:10.280 --> 00:34:14.399
+in org mode and so on. So, it's like letter, block,
+
+00:34:14.400 --> 00:34:16.559
+and you have the complete infrastructure
+
+00:34:16.560 --> 00:34:20.159
+and you don't have to type it by hand.
+
+00:34:20.160 --> 00:34:22.879
+So, it's really, really nice.
+
+00:34:22.880 --> 00:34:25.959
+[Sacha]: Hmm, I think it might be nice to have
+
+00:34:25.960 --> 00:34:28.079
+a future Emacs carnival, you know,
+
+00:34:28.080 --> 00:34:31.239
+shared blogging theme thing be around
+
+00:34:31.240 --> 00:34:33.359
+having people share their snippets.
+
+00:34:33.360 --> 00:34:39.359
+[Pedro]: Yasnippets and other things. Like for example,
+
+00:34:39.360 --> 00:34:41.319
+this is something stupid.
+
+00:34:41.320 --> 00:34:44.519
+I'm switching my themes. All right.
+
+00:34:44.520 --> 00:34:48.639
+And of course, there you see,
+
+00:34:48.640 --> 00:34:51.439
+I have also, this is also with,
+
+00:34:51.440 --> 00:34:55.792
+this is my way of switching buffers,
+
+00:34:55.793 --> 00:34:58.159
+which is with the shift control and tab,
+
+00:34:58.160 --> 00:35:00.559
+I can switch different families
+
+00:35:00.560 --> 00:35:02.519
+and then when I'm in a family,
+
+00:35:02.520 --> 00:35:06.999
+I can go and switch with control tab between the different,
+
+00:35:07.000 --> 00:35:13.659
+I'm using tab line by the way. I'm not using the other one.
+
+00:35:13.660 --> 00:35:20.839
+I'm using the old plain tab line with my themes.
+
+00:35:20.840 --> 00:35:23.519
+So that's more or less everything.
+
+00:35:23.520 --> 00:35:26.519
+[Sacha]: Thank you for the peek into your workflow.
+
+00:35:26.520 --> 00:35:30.759
+I will work on getting the recordings for the live talks
+
+00:35:30.760 --> 00:35:34.458
+sorted out at some point very soon.
+
+00:35:34.459 --> 00:35:37.084
+I might even be able to get them out next week.
+
+00:35:37.085 --> 00:35:43.667
+So thanks again. All right. Have a nice supper.
+
+00:35:43.668 --> 00:35:44.920
+[Pedro]: Same to you.
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--answers.vtt b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.vtt
new file mode 100644
index 00000000..af90fa86
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.vtt
@@ -0,0 +1,463 @@
+WEBVTT
+
+NOTE Feedback: Consider using similar background (dark-only / light-only) throughout to help with eye strain.
+
+00:00:00.000 --> 00:00:02.219
+I first of all want to address the feedback.
+
+00:00:02.220 --> 00:00:06.099
+You're absolutely right. I should have stuck to one theme.
+
+00:00:06.100 --> 00:00:09.099
+Unfortunately, I was using vanilla Emacs
+
+00:00:09.100 --> 00:00:10.299
+and not my own config.
+
+00:00:10.300 --> 00:00:13.459
+So to show that it can work, apologies for that.
+
+00:00:13.460 --> 00:00:18.419
+I will keep that in mind the next time I do such a demo.
+
+00:00:18.420 --> 00:00:21.539
+The first question, I mean, the feedback was considered
+
+00:00:21.540 --> 00:00:23.819
+using similar background, dark only
+
+00:00:23.820 --> 00:00:25.419
+or light only throughout
+
+00:00:25.420 --> 00:00:29.859
+to help with eye strain.
+
+NOTE Q: Should I know all my contact's email addresses by heart? Or is some kind of contact list?
+
+00:00:29.860 --> 00:00:31.819
+The question, the first question is,
+
+00:00:31.820 --> 00:00:35.419
+should I know all my contact email address by heart
+
+00:00:35.420 --> 00:00:38.499
+or is some kind of contact list?
+
+00:00:38.500 --> 00:00:42.019
+Unfortunately, right now, this is just to get started.
+
+00:00:42.020 --> 00:00:45.859
+So it is, you have to know it by heart,
+
+00:00:45.860 --> 00:00:47.619
+but I take this as feedback.
+
+00:00:47.620 --> 00:00:51.339
+I will write this down for myself as a feature request.
+
+00:00:51.340 --> 00:00:53.779
+I will make sure that all contacts
+
+00:00:53.780 --> 00:00:58.419
+or some kind of tab support is present for email addresses.
+
+00:00:58.420 --> 00:01:03.659
+I do not use the Org system for replying so much.
+
+00:01:03.660 --> 00:01:06.259
+I use it for knowing the context.
+
+00:01:06.260 --> 00:01:12.019
+So I don't really reply using the org mode itself to reply.
+
+00:01:12.020 --> 00:01:16.019
+So I did not focus on that feature. But this is doable.
+
+00:01:16.020 --> 00:01:18.739
+We can certainly add a tab support
+
+00:01:18.740 --> 00:01:24.619
+for any contacts that you may have, org-contacts.
+
+00:01:24.620 --> 00:01:28.059
+Or I don't know if there's any other package that does that.
+
+00:01:28.060 --> 00:01:29.699
+So if it is, let me know.
+
+00:01:29.700 --> 00:01:33.899
+Org contacts is what comes to my mind.
+
+NOTE Q: What would it take to use the org pieces of this with, e.g., offlineimap or other non-Gmail mail setups?
+
+00:01:33.900 --> 00:01:36.739
+The second question is: "What would it take
+
+00:01:36.740 --> 00:01:40.139
+to use the Org pieces of this with
+
+00:01:40.140 --> 00:01:45.019
+OfflineIMAP or other non-Gmail mail setups?
+
+00:01:45.020 --> 00:01:46.059
+(I use Fastmail.)"
+
+00:01:46.060 --> 00:01:52.779
+Currently, I use only Gmail because that's my workflow
+
+00:01:52.780 --> 00:01:58.019
+and it works with a Gmail API,
+
+00:01:58.020 --> 00:02:00.859
+which means the Python script that goes along with it
+
+00:02:00.860 --> 00:02:05.179
+only works with Gmail and no other system for now.
+
+00:02:05.180 --> 00:02:06.939
+This is the current package.
+
+00:02:06.940 --> 00:02:09.459
+However, yes, I will note this down.
+
+00:02:09.460 --> 00:02:12.059
+I don't know what it will take
+
+00:02:12.060 --> 00:02:16.379
+to include this OfflineIMAP setup
+
+00:02:16.380 --> 00:02:18.499
+or any other non-Gmail setup.
+
+00:02:18.500 --> 00:02:23.139
+Let me tinker with it and find out what it will involve.
+
+00:02:23.140 --> 00:02:30.019
+So give me some time, maybe I will get to it.
+
+00:02:30.020 --> 00:02:43.739
+Sorry, sorry. Oops. Okay. Okay. May I continue?
+
+00:02:43.740 --> 00:02:46.739
+Hi, Bala. Yes, please. Sorry for the confusion.
+
+00:02:46.740 --> 00:02:50.763
+Hi, Amin. All right.
+
+NOTE Q: Do you worry about sending some info to a wrong person? Due to some unseen technical issues, for example, due to memory overflow.
+
+00:02:50.764 --> 00:02:53.179
+So the next one is,
+
+00:02:53.180 --> 00:02:56.939
+do you worry about sending some info to a wrong person
+
+00:02:56.940 --> 00:02:58.899
+due to some unseen technical issues,
+
+00:02:58.900 --> 00:03:03.299
+for example, due to memory overflow?
+
+00:03:03.300 --> 00:03:05.739
+Again, I have not been focusing
+
+00:03:05.740 --> 00:03:07.139
+on replying from within Emacs.
+
+00:03:07.140 --> 00:03:09.659
+so much, or using my package,
+
+00:03:09.660 --> 00:03:13.019
+I usually do it through the Gmail interface.
+
+00:03:13.020 --> 00:03:18.299
+I usually use this to get the context within the project,
+
+00:03:18.300 --> 00:03:22.059
+download all the emails, make sure that I have acted on emails
+
+00:03:22.060 --> 00:03:23.859
+which Gmail doesn't do so well.
+
+00:03:23.860 --> 00:03:25.099
+I don't know what the action is.
+
+00:03:25.100 --> 00:03:28.499
+I don't want to use Gmail as a to-do list.
+
+00:03:28.500 --> 00:03:30.146
+Org Mode is great at this.
+
+00:03:30.147 --> 00:03:32.646
+Any work I have to do, any reports I have to compile,
+
+00:03:32.647 --> 00:03:39.099
+all of that Org Mode does. I don't use it for replying
+
+00:03:39.100 --> 00:03:43.459
+or doing its actions around the email, which I focus on.
+
+00:03:43.460 --> 00:03:45.859
+But point taken, let me see
+
+00:03:45.860 --> 00:03:47.779
+if there is a like Gmail offers.
+
+00:03:47.780 --> 00:03:52.219
+you know, for 10 seconds or something you can still undo
+
+00:03:52.220 --> 00:03:54.739
+so that it doesn't go out of your email
+
+00:03:54.740 --> 00:03:59.659
+if you made a mistake or if there's a problem with your,
+
+00:03:59.660 --> 00:04:04.619
+you know, Gmail or email sending should sort of stop.
+
+00:04:04.620 --> 00:04:07.019
+Let me think about that.
+
+00:04:07.020 --> 00:04:09.396
+So, I've not paid attention to that,
+
+00:04:09.397 --> 00:04:11.104
+but I'll take your point.
+
+NOTE Comment: You should say what org-gmail is and is not, goals and non goals "which in this case is more helpful" to help people get their head around this.
+
+00:04:11.105 --> 00:04:17.539
+The next one, you should say what org-gmail is
+
+00:04:17.540 --> 00:04:20.219
+and not its goals and non-goals,
+
+00:04:20.220 --> 00:04:22.019
+which in this case is more helpful
+
+00:04:22.020 --> 00:04:24.739
+to help people get their head around this.
+
+00:04:24.740 --> 00:04:26.379
+You had some good ones in your slides,
+
+00:04:26.380 --> 00:04:28.859
+but not your GitHub page. Okay, great.
+
+00:04:28.860 --> 00:04:30.579
+Okay, so I will definitely take
+
+00:04:30.580 --> 00:04:33.779
+the information from the slides
+
+00:04:33.780 --> 00:04:38.499
+and give it to, I mean, put it back into my README.
+
+00:04:38.500 --> 00:04:40.179
+It's been a while since I updated README,
+
+00:04:40.180 --> 00:04:42.179
+and you're absolutely right.
+
+00:04:42.180 --> 00:04:45.779
+It probably doesn't say why you need org email.
+
+00:04:45.780 --> 00:04:49.059
+So that would be definitely something that I can do.
+
+00:04:49.060 --> 00:04:51.659
+Wanting to add the goal is an easier way
+
+00:04:51.660 --> 00:04:53.819
+to add one-off email into org mode
+
+00:04:53.820 --> 00:04:56.419
+and org agenda workflows and first.
+
+00:04:56.420 --> 00:04:57.779
+Love seeing a different way
+
+00:04:57.780 --> 00:04:59.539
+of looking at and working with email.
+
+00:04:59.540 --> 00:05:00.659
+Thank you so much for that.
+
+00:05:00.660 --> 00:05:05.619
+Yes, that's the idea here is if we can integrate email
+
+00:05:05.620 --> 00:05:08.339
+and I think there is memacs, you know,
+
+00:05:08.340 --> 00:05:11.579
+that's one package that I love.
+
+00:05:11.580 --> 00:05:17.099
+It can integrate all of the other stuff into your org mode.
+
+00:05:17.100 --> 00:05:21.539
+That worked, but I like email and dealing with email.
+
+00:05:21.540 --> 00:05:26.099
+That is my single source of truth outside of org mode.
+
+00:05:26.100 --> 00:05:28.819
+So that's the only one I need for now.
+
+00:05:28.820 --> 00:05:32.659
+And I like seeing the action
+
+00:05:32.660 --> 00:05:35.099
+and the history on my org agenda.
+
+00:05:35.100 --> 00:05:37.259
+That's one of the reasons why I built this package.
+
+00:05:37.260 --> 00:05:43.699
+And I hope that answers that.
+
+NOTE Q: How does it handle attachments? If it doesn't, do you have a plan to add this feature?
+
+00:05:43.700 --> 00:05:49.459
+There is one more saying, how does it handle attachments?
+
+00:05:49.460 --> 00:05:52.819
+If it doesn't, do you have a plan to add this feature?
+
+00:05:52.820 --> 00:05:55.859
+Attachments is a bit tricky for me right now
+
+00:05:55.860 --> 00:05:58.619
+because I don't understand org-attach so well.
+
+00:05:58.620 --> 00:06:01.299
+I don't use org-attach, but you're absolutely right.
+
+00:06:01.300 --> 00:06:05.339
+It does make sense to have org-attach also.
+
+00:06:05.340 --> 00:06:08.259
+And it's definitely in my plan to include org-attach.
+
+00:06:08.260 --> 00:06:12.459
+I don't think I talked about it in my talk,
+
+00:06:12.460 --> 00:06:14.739
+but I definitely have that idea.
+
+00:06:14.740 --> 00:06:17.339
+First I have to wrap myself, my head
+
+00:06:17.340 --> 00:06:21.339
+around the idea of org-attach and how it,
+
+00:06:21.340 --> 00:06:26.059
+because I don't like, what I don't like about org-attach,
+
+00:06:26.060 --> 00:06:28.899
+I'll tell you, is default is,
+
+00:06:28.900 --> 00:06:31.699
+it opens a new folder called data
+
+00:06:31.700 --> 00:06:34.379
+and there are, it uses a unique code
+
+00:06:34.380 --> 00:06:37.859
+and there are subfolders in it, which I do not appreciate
+
+00:06:37.860 --> 00:06:43.659
+because I want all those files also to be within the same context.
+
+00:06:43.660 --> 00:06:45.779
+of my project or area.
+
+00:06:45.780 --> 00:06:50.859
+And that's one of the reasons I, and I'm sure you can customize that.
+
+00:06:50.860 --> 00:06:52.099
+There are ways to do that,
+
+00:06:52.100 --> 00:06:55.379
+but I have to pay more attention to this.
+
+00:06:55.380 --> 00:06:58.729
+Right now, all of the attachments are dealt with in Gmail,
+
+00:06:58.730 --> 00:07:01.219
+which is not a good system to handle that
+
+00:07:01.220 --> 00:07:03.579
+because it's so out of context.
+
+00:07:03.580 --> 00:07:06.379
+And there are like 25 contexts in the same inbox,
+
+00:07:06.380 --> 00:07:08.419
+which I do not appreciate.
+
+00:07:08.420 --> 00:07:11.059
+So even the attachments are like that.
+
+00:07:11.060 --> 00:07:13.539
+But Org Mode has a much better way of handling it,
+
+00:07:13.540 --> 00:07:16.099
+or Emacs has a much better way of handling it.
+
+00:07:16.100 --> 00:07:20.339
+I will definitely put my attention
+
+00:07:20.340 --> 00:07:22.219
+to this and get this feature out.
+
+00:07:22.220 --> 00:07:25.299
+This is all customer feedback for me, so to speak.
+
+00:07:25.300 --> 00:07:30.179
+So I would definitely request all of you to try it out.
+
+00:07:30.180 --> 00:07:32.179
+And tell me, you know, good
+
+00:07:32.180 --> 00:07:34.939
+or bad things about the package.
+
+00:07:34.940 --> 00:07:38.619
+And you've been very candid so far. Please be so.
+
+00:07:38.620 --> 00:07:43.539
+So, you know, so be it that be candid with your feedback
+
+00:07:43.540 --> 00:07:46.699
+and I will get to know how to go with this.
+
+00:07:46.700 --> 00:07:49.699
+With so much, I mean, I'm not an expert in Elisp,
+
+00:07:49.700 --> 00:07:57.019
+but I have a workaround, which is I have generative AI support,
+
+00:07:57.020 --> 00:07:58.339
+which has done well with me.
+
+00:07:58.340 --> 00:08:03.659
+I test the software better, so I can use the generative AI
+
+00:08:03.660 --> 00:08:05.139
+to help me with the coding,
+
+00:08:05.140 --> 00:08:08.539
+but I can test it so that it works for me.
+
+00:08:08.540 --> 00:08:10.739
+And I would request your help
+
+00:08:10.740 --> 00:08:13.259
+also in testing this software.
+
+00:08:13.260 --> 00:08:16.179
+So for sure. Thank you so much for your question.
+
+00:08:16.180 --> 00:08:21.271
+If there are any more, I can definitely answer them.
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--answers.vtt b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.vtt
new file mode 100644
index 00000000..aa234934
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.vtt
@@ -0,0 +1,995 @@
+WEBVTT
+
+NOTE Q: I noticed that it took a considerable amount of time to send email. Is it possible to configure gnus to use an external smtp client to send emails?
+
+00:00:00.000 --> 00:00:02.117
+Okay, so first question.
+
+00:00:02.118 --> 00:00:05.037
+I noticed that it took considerable amount of time to send email.
+
+00:00:05.038 --> 00:00:09.637
+Is it possible to configure to use an external SMTP client
+
+00:00:09.638 --> 00:00:14.357
+to send emails? Right, yes, it definitely is possible.
+
+00:00:14.358 --> 00:00:18.957
+In fact, in the past, I've used, I believe, MSMTP,
+
+00:00:18.958 --> 00:00:23.317
+which is a small SMTP implementation
+
+00:00:23.318 --> 00:00:27.437
+that's independent of Emacs. So you can do that.
+
+00:00:27.438 --> 00:00:30.757
+It's also possible to, pointed
+
+00:00:30.758 --> 00:00:34.997
+to have it use the sendmail binary on your system.
+
+00:00:34.998 --> 00:00:41.637
+If you have a local MTA mail transfer agents
+
+00:00:41.638 --> 00:00:46.117
+like Exim or Postfix installed and configure.
+
+00:00:46.118 --> 00:00:50.037
+I believe that should also dispatch
+
+00:00:50.038 --> 00:00:51.997
+and return instantaneously
+
+00:00:51.998 --> 00:00:55.157
+and then have Postfix or Exim
+
+00:00:55.158 --> 00:00:57.997
+deal with sending the message on their terms
+
+00:00:57.998 --> 00:01:02.197
+without blocking Emacs. I don't know, it depends.
+
+00:01:02.198 --> 00:01:04.917
+Normally it's not always that slow. Sometimes it is.
+
+00:01:04.918 --> 00:01:11.917
+I think it also depends on the load on your mail server.
+
+00:01:11.918 --> 00:01:14.917
+Sometimes it's instantaneous, sometimes not.
+
+00:01:14.918 --> 00:01:17.837
+So I hope that helps.
+
+NOTE Q: Is the dovecot workaround actually a solution?
+
+00:01:17.838 --> 00:01:20.597
+Let's see, is the Dovecot workaround
+
+00:01:20.598 --> 00:01:21.917
+actually a solution?
+
+00:01:21.918 --> 00:01:24.437
+I haven't tried it, but if it works smoothly,
+
+00:01:24.438 --> 00:01:27.477
+I'll surely do so. It is, it really is.
+
+00:01:27.478 --> 00:01:31.637
+I've actually been using that setup for many years.
+
+00:01:31.638 --> 00:01:45.837
+I can't remember. Oh, I believe it's Eric Abramson
+
+00:01:45.838 --> 00:01:49.077
+who first shared instructions on how to set this up.
+
+00:01:49.078 --> 00:02:04.037
+Let's see if I can find it. There we go. Yeah, this is it.
+
+00:02:04.038 --> 00:02:06.957
+I'll share this on IRC as well.
+
+00:02:06.958 --> 00:02:15.517
+Yeah, so Dovecot is very, very efficient.
+
+00:02:15.518 --> 00:02:21.557
+It's written in C. And yeah, when you point Gnus
+
+00:02:21.558 --> 00:02:23.237
+to an IMAP server like Dovecot,
+
+00:02:23.238 --> 00:02:25.037
+dealing with email is pretty instantaneous.
+
+00:02:25.038 --> 00:02:29.157
+This article or post by Eric is great.
+
+00:02:29.158 --> 00:02:32.397
+Although I will say that
+
+00:02:32.398 --> 00:02:34.997
+there was a recent major release of Dovecot.
+
+00:02:34.998 --> 00:02:37.877
+I can't remember if it's 2.4 or 2.5.
+
+00:02:37.878 --> 00:02:39.597
+and it's a breaking change.
+
+00:02:39.598 --> 00:02:42.557
+They change a lot of the configuration syntax,
+
+00:02:42.558 --> 00:02:44.077
+so there's a high likelihood
+
+00:02:44.078 --> 00:02:47.477
+that this drop-in configuration won't work,
+
+00:02:47.478 --> 00:02:49.237
+even though that's what I used
+
+00:02:49.238 --> 00:02:51.957
+as my starting point a couple years ago.
+
+00:02:51.958 --> 00:02:56.237
+I will be writing an article on my personal site
+
+00:02:56.238 --> 00:03:02.717
+to go over how to configure recent versions of Dovecot
+
+00:03:02.718 --> 00:03:07.117
+for such a setup, for a local setup.
+
+NOTE Q: Do you have experience with mu4e or Notmuch, and why would you say Gnus is worth using compared to these?
+
+00:03:07.118 --> 00:03:15.957
+Let's see. Do you have experience with Mu4e or not much?
+
+00:03:15.958 --> 00:03:22.397
+And why would you say Gnus is worth using compared to these?
+
+00:03:22.398 --> 00:03:23.837
+I do have experience with these,
+
+00:03:23.838 --> 00:03:25.517
+although it goes back many years,
+
+00:03:25.518 --> 00:03:27.757
+and I'm sure both of these have evolved since,
+
+00:03:27.758 --> 00:03:31.837
+and they're great pieces of software in their own rights.
+
+00:03:31.838 --> 00:03:33.917
+And actually I did use them in that order.
+
+00:03:33.918 --> 00:03:37.397
+Like I first tried Mu4e in Emacs,
+
+00:03:37.398 --> 00:03:40.277
+when I started using email in Emacs,
+
+00:03:40.278 --> 00:03:44.277
+then I tried Notmuch for a while, and then I went to Gnus.
+
+00:03:44.278 --> 00:03:51.157
+They're great. They have like pros and cons.
+
+00:03:51.158 --> 00:03:52.397
+Mu4e, I believe, has
+
+00:03:52.398 --> 00:03:55.357
+excellent maildir handling directly,
+
+00:03:55.358 --> 00:03:58.357
+if I'm not mistaken, unlike Gnus,
+
+00:03:58.358 --> 00:04:00.837
+so you can point it directly
+
+00:04:00.838 --> 00:04:03.637
+to your maildirs locally,
+
+00:04:03.638 --> 00:04:06.157
+and it should work fine,
+
+00:04:06.158 --> 00:04:08.157
+if I'm remembering correctly.
+
+00:04:08.158 --> 00:04:11.477
+NotMuch is also excellent.
+
+00:04:11.478 --> 00:04:12.477
+The thing with Notmuch
+
+00:04:12.478 --> 00:04:13.957
+is that it uses Xapien
+
+00:04:13.958 --> 00:04:17.877
+for indexing and searching email.
+
+00:04:17.878 --> 00:04:20.397
+It's tag-based, so you can tag messages.
+
+00:04:20.398 --> 00:04:24.077
+And then, yeah, it's amazing
+
+00:04:24.078 --> 00:04:26.197
+for tagging and searching capabilities,
+
+00:04:26.198 --> 00:04:28.877
+very powerful search features.
+
+00:04:28.878 --> 00:04:31.677
+And my reason for trying Gnus
+
+00:04:31.678 --> 00:04:33.637
+and then, I don't know, eventually
+
+00:04:33.638 --> 00:04:37.037
+liking it was couple of years ago,
+
+00:04:37.038 --> 00:04:38.437
+I went through this kind of phase
+
+00:04:38.438 --> 00:04:40.597
+of trying and trying to like use
+
+00:04:40.598 --> 00:04:43.357
+and stick with packages
+
+00:04:43.358 --> 00:04:45.317
+that are built into GNU Emacs
+
+00:04:45.318 --> 00:04:47.157
+as much as possible.
+
+00:04:47.158 --> 00:04:51.877
+No particular reason that I would like,
+
+00:04:51.878 --> 00:04:54.197
+you know, recommend people do that per se,
+
+00:04:54.198 --> 00:04:57.037
+but yeah, that's just what I wanted to do.
+
+00:04:57.038 --> 00:05:00.597
+Cause I noticed my configurations
+
+00:05:00.598 --> 00:05:02.277
+were like growing unwieldy.
+
+00:05:02.278 --> 00:05:07.797
+So I, like many others declared, Emacs in its bankruptcy,
+
+00:05:07.798 --> 00:05:11.677
+in its file bankruptcy, and configure things from scratch
+
+00:05:11.678 --> 00:05:15.717
+and try to use whatever that Emacs had to offer
+
+00:05:15.718 --> 00:05:18.797
+built in itself, and then only reach for a couple
+
+00:05:18.798 --> 00:05:20.277
+of external packages here and there.
+
+00:05:20.278 --> 00:05:24.717
+So that's what I went to. That's how I ended up on Gnu's.
+
+00:05:24.718 --> 00:05:26.397
+And it's been very nice.
+
+00:05:26.398 --> 00:05:29.557
+I've tried a few other email clients
+
+00:05:29.558 --> 00:05:31.237
+since then, temporarily,
+
+00:05:31.238 --> 00:05:33.197
+like I tried AERC, A-E-R-C,
+
+00:05:33.198 --> 00:05:36.197
+which is not built into Emacs,
+
+00:05:36.198 --> 00:05:36.797
+but I don't know,
+
+00:05:36.798 --> 00:05:38.197
+I keep coming back to Gnus.
+
+00:05:38.198 --> 00:05:42.757
+It's great to have it all, to be able to do all these things
+
+00:05:42.758 --> 00:05:47.677
+from within GNU Emacs. Let's see, some notes and feedback.
+
+00:05:47.678 --> 00:05:52.557
+Thank you for all the kind words folks, appreciate it.
+
+00:05:52.558 --> 00:05:56.557
+I'm glad that you found the presentation helpful
+
+00:05:56.558 --> 00:05:59.157
+or somewhat useful. Let's see, new question.
+
+00:05:59.158 --> 00:06:05.319
+Oh, and I will check IRC as well.
+
+NOTE Q: At my organization, we're forced to use OAuth with outlook and they've also blacklisted all email clients except thunderbird (but they don't support it, only the webmail or the outlook app). Do you know if this is something that can be circumvented in Gnus?
+
+00:06:05.320 --> 00:06:06.917
+Let's see, at my organization,
+
+00:06:06.918 --> 00:06:09.317
+we're forced to use OAuth with Outlook,
+
+00:06:09.318 --> 00:06:11.157
+and they've also blacklisted
+
+00:06:11.158 --> 00:06:13.517
+all email clients except Thunderbird,
+
+00:06:13.518 --> 00:06:15.237
+but they don't support it,
+
+00:06:15.238 --> 00:06:17.037
+only the Webmail or the Outlook app.
+
+00:06:17.038 --> 00:06:18.517
+Do you know if this is something
+
+00:06:18.518 --> 00:06:23.997
+that can be circumvented in Gnus? Let's see.
+
+00:06:23.998 --> 00:06:29.797
+So if I'm pretty sure, at least with the recent Emacs versions,
+
+00:06:29.798 --> 00:06:37.677
+Gnus does support xOAuth as a backend.
+
+00:06:37.678 --> 00:06:41.557
+So I think you should be able to do that
+
+00:06:41.558 --> 00:06:45.677
+even with just the things, the machinery built into Emacs.
+
+00:06:45.678 --> 00:06:53.917
+Even so, I think there are external packages and programs.
+
+00:06:53.918 --> 00:06:58.717
+One of them I think comes from this Cyrus IMAP world
+
+00:06:58.718 --> 00:07:02.357
+of things that implement like XOAuth.
+
+00:07:02.358 --> 00:07:04.797
+So you should be able to do that.
+
+00:07:04.798 --> 00:07:09.397
+You should be able to use that to get authenticated
+
+00:07:09.398 --> 00:07:12.237
+to your organization's mail server.
+
+00:07:12.238 --> 00:07:15.797
+But I've never tried that myself.
+
+00:07:15.798 --> 00:07:22.837
+In terms of like blacklisting all email clients,
+
+00:07:22.838 --> 00:07:27.637
+I don't know how they would do it outside of, you know,
+
+00:07:27.638 --> 00:07:29.797
+this kind of authentication thingy.
+
+00:07:29.798 --> 00:07:32.317
+If, you know, they check
+
+00:07:32.318 --> 00:07:34.674
+the user agent header or something,
+
+00:07:34.640 --> 00:07:37.279
+that's pretty easy to customize and set.
+
+00:07:37.280 --> 00:07:40.879
+With Gnus, you can set, define a posting style
+
+00:07:40.880 --> 00:07:43.279
+to set a custom user agent.
+
+00:07:43.280 --> 00:07:48.719
+So, yeah, that's as far as I know.
+
+00:07:48.720 --> 00:07:50.079
+Thunderbird is pretty nice too.
+
+00:07:50.080 --> 00:07:54.159
+Like I reach out for it sometimes
+
+00:07:54.160 --> 00:07:55.799
+when I'm in a rush or can't,
+
+00:07:55.800 --> 00:08:00.159
+don't have the time to like set up Gnus with
+
+00:08:00.160 --> 00:08:04.039
+like some new like IMAP server or something.
+
+00:08:04.040 --> 00:08:05.519
+I reach for it sometimes, but yeah,
+
+00:08:05.520 --> 00:08:10.359
+I primarily use Gnus. I see.
+
+00:08:10.360 --> 00:08:11.719
+So the question says they tried it
+
+00:08:11.720 --> 00:08:13.279
+with not much and it never worked.
+
+00:08:13.280 --> 00:08:19.999
+Even KML on Android didn't work.
+
+00:08:20.000 --> 00:08:23.519
+Right. Yeah, I'm not sure.
+
+00:08:23.520 --> 00:08:27.039
+If you can like provide maybe more details
+
+00:08:27.040 --> 00:08:29.319
+as to like what doesn't work
+
+00:08:29.320 --> 00:08:32.079
+or if you get any particular error messages
+
+00:08:32.080 --> 00:08:37.359
+or like how they're trying to like prevent you from using it,
+
+00:08:37.360 --> 00:08:38.439
+then maybe folks could have some ideas
+
+00:08:38.440 --> 00:08:41.999
+of maybe how to get around that.
+
+00:08:42.000 --> 00:08:45.999
+Yeah. Let's see, I'm going to go
+
+00:08:46.000 --> 00:08:59.959
+over and take a look at IRC. Yes, scoring is great.
+
+00:08:59.960 --> 00:09:02.959
+In it for bankruptcy,
+
+00:09:02.960 --> 00:09:06.559
+they have mail to use outlook from Gnus, right?
+
+00:09:06.560 --> 00:09:11.999
+Yeah, there are various like solutions and workarounds.
+
+00:09:12.000 --> 00:09:23.519
+Yeah, let's see. How's the schedule looking?
+
+00:09:23.520 --> 00:09:24.519
+I think the next talk
+
+00:09:24.520 --> 00:09:30.519
+is gonna start pretty soon, if I'm not mistaken.
+
+00:09:30.520 --> 00:09:34.279
+Yeah, so I believe that's about all the time
+
+00:09:34.280 --> 00:09:36.799
+that we have on the stream for the Q&A,
+
+00:09:36.800 --> 00:09:40.759
+but of course I'll hang around here on big blue button
+
+00:09:40.760 --> 00:09:45.279
+and IRC for a while if folks would like to ask more questions.
+
+00:09:45.280 --> 00:09:47.279
+And also feel free to email me,
+
+00:09:47.280 --> 00:09:49.099
+bandali@gnu.org
+
+00:09:49.100 --> 00:10:31.539
+or at kelar.org with any questions.
+
+00:10:31.540 --> 00:10:35.719
+Thanks again for the kind words folks, appreciate it.
+
+00:10:35.720 --> 00:10:38.399
+Yeah, I myself also wish
+
+00:10:38.400 --> 00:10:41.319
+that there were like some tutorials or something
+
+00:10:41.320 --> 00:10:43.679
+when I was getting started with Gnus,
+
+00:10:43.680 --> 00:10:46.119
+but we didn't have that. So, and I've been meaning
+
+00:10:46.120 --> 00:10:49.999
+to like record a talk like this for years for EmacsConf,
+
+00:10:50.000 --> 00:10:53.039
+but yeah, funnily enough, after like 10 years of,
+
+00:10:53.040 --> 00:10:54.919
+at my 10th anniversary
+
+00:10:54.920 --> 00:10:55.879
+of being involved with the conference,
+
+00:10:55.880 --> 00:10:57.999
+I finally put together a talk of my own
+
+00:10:58.000 --> 00:11:08.199
+to talk about configuring Gnus.
+
+00:11:08.200 --> 00:11:25.959
+Let's see. Oh, I see, I see.
+
+00:11:25.960 --> 00:11:29.719
+So the organization is doing some kind of check
+
+00:11:29.720 --> 00:11:41.239
+during setting up of OAuth.
+
+00:11:41.240 --> 00:11:45.639
+So I think how that works is
+
+00:11:45.640 --> 00:11:47.399
+sometimes these email clients,
+
+00:11:47.400 --> 00:11:50.040
+I think at least this is the case for Gmail or something,
+
+00:11:50.118 --> 00:11:55.037
+where a project such as Thunderbird
+
+00:11:55.038 --> 00:12:00.557
+needs to apply for some kind of token
+
+00:12:00.558 --> 00:12:02.517
+to be able to authenticate
+
+00:12:02.518 --> 00:12:05.117
+and connect its users to a mail server.
+
+00:12:05.118 --> 00:12:10.197
+So all I will say is
+
+00:12:10.198 --> 00:12:12.237
+that Thunderbird is free software
+
+00:12:12.238 --> 00:12:13.517
+and the sources are available
+
+00:12:13.518 --> 00:12:15.517
+and you might be able to find
+
+00:12:15.518 --> 00:12:19.637
+the token that they use and yeah.
+
+00:12:19.638 --> 00:13:13.877
+Right, so yeah, I'm just reading this comment here.
+
+00:13:13.878 --> 00:13:16.077
+You're very welcome again.
+
+00:13:16.078 --> 00:13:18.797
+I hope you find it useful in some way.
+
+NOTE Comment: Liked how I started with a clean setup
+
+00:13:18.798 --> 00:13:21.597
+So they say that they like the fact
+
+00:13:21.598 --> 00:13:25.237
+that I started with a clean setup and built from that.
+
+00:13:25.238 --> 00:13:27.117
+Reading and writing emails in Emacs
+
+00:13:27.118 --> 00:13:28.917
+is definitely not straightforward.
+
+00:13:28.918 --> 00:13:30.357
+And I find it frustrating
+
+00:13:30.358 --> 00:13:32.317
+that there are so many pieces to put together
+
+00:13:32.318 --> 00:13:34.397
+and a bunch of documentation to read.
+
+00:13:34.398 --> 00:13:39.317
+And they admit that they find Gnus overwhelming.
+
+00:13:39.318 --> 00:13:42.757
+I sympathize and empathize.
+
+00:13:42.758 --> 00:13:45.317
+I've been in that very same situation.
+
+00:13:45.318 --> 00:13:50.557
+And yeah, it's totally okay to feel like that.
+
+00:13:50.558 --> 00:13:55.437
+I mean, email itself is kind of complex,
+
+00:13:55.438 --> 00:13:57.517
+even on the server side.
+
+00:13:57.518 --> 00:14:00.517
+If you've ever looked or have been interested
+
+00:14:00.518 --> 00:14:02.677
+in self-hosting your email,
+
+00:14:02.678 --> 00:14:06.637
+you know that there are so many moving parts and pieces.
+
+00:14:06.638 --> 00:14:14.397
+So yeah, I hope that this short video
+
+00:14:14.398 --> 00:14:18.277
+can be a useful first step
+
+00:14:18.278 --> 00:14:19.757
+of getting you set up to
+
+00:14:19.758 --> 00:14:22.957
+at least be able to read your emails
+
+00:14:22.958 --> 00:14:26.557
+and compose and send them within Emacs
+
+00:14:26.558 --> 00:14:30.837
+so that you can see that it's possible
+
+00:14:30.838 --> 00:14:34.837
+and get that positive feedback loop going
+
+00:14:34.838 --> 00:14:41.157
+and get the encouragement and then go from there.
+
+00:14:41.158 --> 00:15:06.597
+Yeah, Gnus is most definitely very extensible.
+
+00:15:06.598 --> 00:15:10.157
+It already has a lot of backends built into GNU Emacs,
+
+00:15:10.158 --> 00:15:12.437
+and there are other ones
+
+00:15:12.438 --> 00:15:14.237
+that people have written externally
+
+00:15:14.238 --> 00:15:18.557
+on various code hosting forges
+
+00:15:18.558 --> 00:15:27.877
+that you can download and set up. Yeah, thank you all.
+
+00:15:27.878 --> 00:15:30.717
+It's nice to see that the talk
+
+00:15:30.718 --> 00:15:33.917
+has kind of resonated with so many folks.
+
+00:15:33.918 --> 00:15:41.237
+And, yeah, it is encouragement
+
+00:15:41.238 --> 00:15:44.197
+for me to finally get around to starting
+
+00:15:44.198 --> 00:15:47.997
+perhaps either a tutorial series
+
+00:15:47.998 --> 00:15:50.477
+or like a video series like this
+
+00:15:50.478 --> 00:15:54.117
+concretely showing and walking through
+
+00:15:54.118 --> 00:15:57.917
+how to like set up and configure these different aspects.
+
+00:15:57.918 --> 00:16:00.277
+There were so many other things that I wanted to show,
+
+00:16:00.278 --> 00:16:04.557
+but didn't have the time
+
+00:16:04.558 --> 00:16:06.437
+or couldn't squeeze it into
+
+00:16:06.438 --> 00:16:09.037
+the 15, 20 minute format for the conference.
+
+00:16:09.038 --> 00:17:34.659
+Yeah. I'm going to hang out here for a few more minutes.
+
+NOTE Comment: They would have liked to see a quick demo of Gnus while it is fully configured and tweaked
+
+00:17:34.660 --> 00:17:36.557
+Another comment, they would have liked
+
+00:17:36.558 --> 00:17:38.717
+to see a quick demo of Gnus
+
+00:17:38.718 --> 00:17:41.117
+while it is fully configured and tweaked.
+
+00:17:41.118 --> 00:17:43.357
+That's kind of a teaser.
+
+00:17:43.358 --> 00:17:52.357
+I can definitely do that sometime after the conference.
+
+00:17:52.358 --> 00:17:59.637
+Truth be told, I don't customize the looks of it heavily.
+
+00:17:59.638 --> 00:18:01.757
+I use the default layout
+
+00:18:01.758 --> 00:18:03.957
+for the summary and article buffers.
+
+00:18:03.958 --> 00:18:12.557
+With Gnus, you can even reconfigure that
+
+00:18:12.558 --> 00:18:15.637
+to arrange these in your preferred location or layout.
+
+00:18:15.638 --> 00:18:18.717
+I don't really do any of that.
+
+00:18:18.718 --> 00:18:22.797
+For the most part, my setup is pretty simple.
+
+NOTE My init file
+
+00:18:22.798 --> 00:18:27.757
+I can actually maybe show my init file here. Let's see.
+
+00:18:27.758 --> 00:18:58.717
+Yeah, so this is, I guess, part of my Gnus configuration.
+
+00:18:58.718 --> 00:19:01.437
+I configure a couple of mail servers,
+
+00:19:01.438 --> 00:19:04.637
+set up these expiry targets
+
+00:19:04.638 --> 00:19:07.597
+so that I can hit capital E on a message
+
+00:19:07.598 --> 00:19:12.437
+and then have it be archived. You can have it be immediate.
+
+00:19:12.438 --> 00:19:15.477
+I do that for work messages
+
+00:19:15.478 --> 00:19:17.677
+or you can use the default seven day,
+
+00:19:17.678 --> 00:19:21.797
+where if a message is older than seven days,
+
+00:19:21.798 --> 00:19:23.317
+like once it reaches that age
+
+00:19:23.318 --> 00:19:26.357
+and it's been marked as expired and it'll be moved into,
+
+00:19:26.358 --> 00:19:29.597
+like for example, this yearly archive directory,
+
+00:19:29.598 --> 00:19:34.079
+like archive. For example, 2025.
+
+NOTE Mail splitting
+
+00:19:34.080 --> 00:19:35.317
+Yeah, you can do like mail splitting,
+
+00:19:35.318 --> 00:19:38.557
+automatically filing email.
+
+00:19:38.558 --> 00:19:44.037
+The fancy splitting is the more powerful variant.
+
+00:19:44.038 --> 00:19:46.917
+You can use like all kinds of regular expressions
+
+00:19:46.918 --> 00:19:48.917
+and move email around depending on
+
+00:19:48.918 --> 00:19:50.877
+what field or what header
+
+00:19:50.878 --> 00:19:52.637
+matches what regular expression.
+
+NOTE Gnus parameters
+
+00:19:52.638 --> 00:20:00.397
+What else? Gnus has things,
+
+00:20:00.398 --> 00:20:03.477
+has a facility like Gnus parameters
+
+00:20:03.478 --> 00:20:07.237
+for configuring individual groups or directories.
+
+00:20:07.238 --> 00:20:11.477
+Like if you file all the mailing or the mails
+
+00:20:11.478 --> 00:20:15.797
+for a particular mailing list into a certain group.
+
+00:20:15.798 --> 00:20:20.237
+And for example, if they add
+
+00:20:20.238 --> 00:20:22.917
+the name of the mailing list
+
+00:20:22.918 --> 00:20:26.437
+to the, subject header.
+
+00:20:26.438 --> 00:20:28.957
+They prefix the subject header with the name of the list.
+
+00:20:28.958 --> 00:20:30.637
+You can set that here
+
+00:20:30.638 --> 00:20:32.877
+and Gnus will automatically
+
+00:20:32.878 --> 00:20:39.117
+hide that for you. So, let's see.
+
+00:20:39.118 --> 00:20:54.637
+There's a news agent,
+
+00:20:54.638 --> 00:20:58.917
+which I won't even get into because it's a rabbit hole.
+
+00:20:58.918 --> 00:21:01.877
+It's pretty cool. Definitely check it out.
+
+00:21:01.878 --> 00:21:07.517
+You can define what MIME parts should be buttonized
+
+00:21:07.518 --> 00:21:09.277
+so that you can like easily toggle them
+
+00:21:09.278 --> 00:21:11.077
+when displaying the article.
+
+00:21:11.078 --> 00:21:14.837
+Yeah, you can customize the list
+
+00:21:14.838 --> 00:21:17.597
+of the headers that are displayed and the order of them.
+
+00:21:17.598 --> 00:21:22.997
+Like I showed in the sample init file that I provided.
+
+00:21:22.998 --> 00:21:31.019
+Gnus can integrate with Dired.
+
+NOTE Custom signatures
+
+00:21:31.020 --> 00:21:35.957
+You can set like custom signatures like here.
+
+00:21:35.958 --> 00:21:37.877
+I might define something
+
+00:21:37.878 --> 00:21:44.797
+and then I use it later in the posting,
+
+00:21:44.798 --> 00:21:48.517
+in the posting, the news posting styles variable.
+
+00:21:48.518 --> 00:22:05.019
+I set a signature to that. Yeah.
+
+NOTE Other customizations
+
+00:22:05.020 --> 00:22:09.997
+You can write custom like functions to move email around.
+
+00:22:09.998 --> 00:22:13.919
+So I have this like Gnus chunk article function
+
+00:22:13.920 --> 00:22:19.117
+that I bind to v s,
+
+00:22:19.118 --> 00:22:22.317
+so v is the prefix came up that I defined,
+
+00:22:22.318 --> 00:22:29.757
+and then s, so you can do things like that.
+
+00:22:29.758 --> 00:22:34.197
+You can customize the format of the topic lines,
+
+00:22:34.198 --> 00:22:39.557
+so if I actually launch Gnus with my own configuration,
+
+00:22:39.558 --> 00:22:43.397
+this is how it might look like, so.
+
+00:22:43.398 --> 00:22:58.437
+You can define archive decoders
+
+00:22:58.438 --> 00:23:02.317
+to let you like automatically decode
+
+00:23:02.318 --> 00:23:04.957
+inside the Gnus article buffer,
+
+00:23:04.958 --> 00:23:10.157
+how to extract certain archive formats.
+
+00:23:10.158 --> 00:23:13.037
+Like for example, I defined this one for Gzip.
+
+00:23:13.038 --> 00:23:18.637
+You can set like discouraged alternatives
+
+00:23:18.638 --> 00:23:22.077
+to like, for example, hide HTML email by default,
+
+00:23:22.078 --> 00:23:26.997
+especially if there is a plain text version. I do that.
+
+00:23:26.998 --> 00:23:34.997
+GNU says machinery around like encrypting emails.
+
+00:23:34.998 --> 00:23:41.759
+It has a bunch of customizations.
+
+00:23:41.760 --> 00:23:44.797
+that you can configure and have Gnus behave a certain way.
+
+00:23:44.798 --> 00:23:48.637
+For example, when replying to signed or encrypted emails.
+
+00:23:48.638 --> 00:24:01.957
+And yeah. Anyway. That's about it.
+
+00:24:01.958 --> 00:24:04.557
+So yeah, thanks again for hanging out with me, folks.
+
+00:24:04.558 --> 00:24:08.877
+I appreciate all the kind words.
+
+00:24:08.878 --> 00:24:13.117
+comments and yeah, I'm also
+
+00:24:13.118 --> 00:24:17.037
+looking forward to trying and putting together
+
+00:24:17.038 --> 00:24:21.997
+more videos or articles about Gnus.
+
+00:24:21.998 --> 00:24:28.117
+Definitely one about configuring Dovecot for local mail.
+
+00:24:28.118 --> 00:24:31.157
+And yeah, take it from there. Thanks again.
+
+00:24:31.158 --> 00:24:33.688
+Hope you enjoy the rest of the conference.
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..f922227a
--- /dev/null
+++ b/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt
@@ -0,0 +1,75 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:04.999
+[ This video has no narration. ]
+
+NOTE space box intro (elisp model matrix pipeline c dynamic module)
+
+00:00:05.000 --> 00:01:58.999
+space box intro (elisp model matrix pipeline c dynamic module)
+
+NOTE parallel (sdl/linux multicore pthreads)
+
+00:01:59.000 --> 00:02:03.999
+parallel (sdl/linux multicore pthreads)
+
+
+NOTE bad snake (oop eieio)
+
+00:02:04.000 --> 00:03:29.999
+bad snake (oop eieio)
+
+NOTE solar (ecs)
+
+00:03:30.000 --> 00:04:31.999
+solar (ecs)
+
+NOTE 60 fps 1 (opengl cpu)
+
+00:04:32.000 --> 00:05:35.999
+60 fps 1 (opengl cpu)
+
+NOTE earth (grid ascii)
+
+00:05:36.000 --> 00:06:01.999
+earth (grid ascii)
+
+NOTE studio (image unicode)
+
+00:06:02.000 --> 00:09:31.999
+studio (image unicode)
+
+NOTE 60 fps 2 (gpu)
+
+00:09:32.000 --> 00:11:56.999
+60 fps 2 (gpu)
+
+NOTE rgb triangle (glsl vertex/fragment shaders)
+
+00:11:57.000 --> 00:13:08.999
+rgb triangle (glsl vertex/fragment shaders)
+
+NOTE ansi cube (software functional shader)
+
+00:13:09.000 --> 00:13:32.999
+ansi cube (software functional shader)
+
+NOTE horizon (gradient)
+
+00:13:33.000 --> 00:15:15.999
+horizon (gradient)
+
+NOTE shell color table (zsh)
+
+00:15:16.000 --> 00:16:12.999
+shell color table (zsh)
+
+NOTE luki-lisp (macros)
+
+00:16:13.000 --> 00:18:24.999
+luki-lisp (macros)
+
+NOTE incal & rave dave outro (debug text triangles)
+
+00:18:25.000 --> 00:22:15.777
+incal & rave dave outro (debug text triangles)
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-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main--chapters.vtt b/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main--chapters.vtt
new file mode 100644
index 00000000..a84c5035
--- /dev/null
+++ b/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main--chapters.vtt
@@ -0,0 +1,62 @@
+WEBVTT
+
+
+00:00:15.640 --> 00:02:54.199
+Q: I'm excited to know opinion on current state of using MCP and AI for PKM and PIEs. Since they do carry lot of burden out of us and ease lot of process. How does hyperbole stand with coming days?
+
+00:02:54.200 --> 00:05:13.639
+Q: As a normal user who codes and takes notes, I really want to deep-dive and learn Hyperbole, but always end up winding back up to embark and org-mode being the better system. For me hyperbole looks like over-engineered (or over-configured) system which other individual packages do well. And outside emacs there is no system supporting hyperbole nor any usability.
+
+00:05:13.640 --> 00:06:43.839
+Implicit buttons
+
+00:06:43.840 --> 00:09:12.079
+Getting help
+
+00:09:12.080 --> 00:09:42.959
+Explicit buttons
+
+00:09:42.960 --> 00:11:41.539
+Homepage
+
+00:11:41.540 --> 00:14:07.119
+Q: I've been using "activities.el" and "Bufferlo" to save dedicated workspaces (open buffers, window positions) in tabs and frames for tasks/projects across Emacs sessions. Could I do something similar with Hyperbole?
+
+00:14:07.120 --> 00:16:16.399
+Q: How well do Hyperbole and org-mode work together? Is there any kind of integration?
+
+00:16:16.400 --> 00:22:06.439
+Hywiki
+
+00:22:06.440 --> 00:26:05.839
+Q: Are there any talks from this year's emacsconf that discussed things that would work well with Hyperbole?
+
+00:26:05.840 --> 00:28:51.399
+Interesting, but the many different link formats makes reading and analyzing my notes much harder and less usable outside Emacs.
+
+00:28:51.400 --> 00:33:02.839
+Koutliner
+
+00:33:02.840 --> 00:34:43.279
+Org tables
+
+00:34:43.280 --> 00:36:43.079
+Selecting between delimiters
+
+00:36:43.080 --> 00:38:01.199
+Ace-window
+
+00:38:01.200 --> 00:38:42.239
+Dired
+
+00:38:42.240 --> 00:40:04.959
+Controlling windows or frames
+
+00:40:04.960 --> 00:40:41.519
+Documentation
+
+00:40:41.520 --> 00:42:09.039
+Videos
+
+00:42:09.040 --> 00:47:09.279
+Manual
diff --git a/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt b/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt
new file mode 100644
index 00000000..94baf853
--- /dev/null
+++ b/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt
@@ -0,0 +1,2309 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:12.239
+All right, you're good to go. Are people here?
+
+00:00:12.240 --> 00:00:15.639
+Let me read the first question to you since I'm here.
+
+NOTE Q: I'm excited to know opinion on current state of using MCP and AI for PKM and PIEs. Since they do carry lot of burden out of us and ease lot of process. How does hyperbole stand with coming days?
+
+00:00:15.640 --> 00:00:17.639
+The first question here is,
+
+00:00:17.640 --> 00:00:20.599
+I'm excited to know opinion and current state
+
+00:00:20.600 --> 00:00:23.799
+of using MCP and AI for PKMs and PIEs.
+
+00:00:23.800 --> 00:00:28.639
+Since they do carry a lot of burden out of us, it means a lot of process.
+
+00:00:28.640 --> 00:00:33.439
+How does our pipeline stand with the coming days?
+
+00:00:33.440 --> 00:00:35.119
+Thanks for the question.
+
+00:00:35.120 --> 00:00:40.239
+AI is obviously on everybody's mind.
+
+00:00:40.240 --> 00:00:43.719
+We haven't done a lot of integration
+
+00:00:43.720 --> 00:00:47.199
+with any of the popular AI engines,
+
+00:00:47.200 --> 00:00:50.519
+but I think as you'll see through this Q&A session,
+
+00:00:50.520 --> 00:00:54.559
+Hyperbole's function is really to interlink
+
+00:00:54.560 --> 00:00:57.959
+your information everywhere throughout Emacs.
+
+00:00:57.960 --> 00:01:02.279
+And so, whether you're using a chatbot
+
+00:01:02.280 --> 00:01:04.919
+in a specific buffer,
+
+00:01:04.920 --> 00:01:11.359
+you can use hyperbole implicit links, implicit buttons
+
+00:01:11.360 --> 00:01:17.039
+to activate different actions there as well.
+
+00:01:17.040 --> 00:01:20.399
+So sometimes it takes a bit of customization,
+
+00:01:20.400 --> 00:01:25.999
+a small amount of two to seven lines of code to do that.
+
+00:01:26.000 --> 00:01:30.839
+As we get to working with more of these engines,
+
+00:01:30.840 --> 00:01:34.119
+we'll build that into the core part of Hyperbole.
+
+00:01:34.120 --> 00:01:40.039
+But right now, that's left as an extension
+
+00:01:40.040 --> 00:01:43.359
+for users who are heavily using MCP
+
+00:01:43.360 --> 00:01:45.879
+or other protocols right now.
+
+00:01:45.880 --> 00:01:50.239
+We have, for example, integrated
+
+00:01:50.240 --> 00:01:57.559
+with LSPs, you know, for coding and have that interface through xref
+
+00:01:57.560 --> 00:02:01.199
+and basically using the single key, the action key,
+
+00:02:01.200 --> 00:02:02.719
+which is made a return.
+
+00:02:02.720 --> 00:02:07.599
+You can jump around to any of your source definitions
+
+00:02:07.600 --> 00:02:10.999
+from any reference in almost any language
+
+00:02:11.000 --> 00:02:14.875
+that anybody uses today. So you can extrapolate from that
+
+00:02:14.876 --> 00:02:17.119
+how that might work with AI as well.
+
+00:02:17.120 --> 00:02:22.999
+And I think you'll see later when we talk about HyWiki
+
+00:02:23.000 --> 00:02:26.719
+that we're now enabling just just wiki words
+
+00:02:26.720 --> 00:02:30.079
+to be buttons in hyperbole.
+
+00:02:30.080 --> 00:02:33.999
+So those could be part of your chat with an AI
+
+00:02:34.000 --> 00:02:37.519
+and you just click on it and you jump right to all your references
+
+00:02:37.520 --> 00:02:49.119
+associated with that terminology. Thanks for the question.
+
+00:02:49.120 --> 00:02:51.839
+Should I just go through the second question?
+
+00:02:51.840 --> 00:02:54.199
+I thought people would be glad.
+
+NOTE Q: As a normal user who codes and takes notes, I really want to deep-dive and learn Hyperbole, but always end up winding back up to embark and org-mode being the better system. For me hyperbole looks like over-engineered (or over-configured) system which other individual packages do well. And outside emacs there is no system supporting hyperbole nor any usability.
+
+00:02:54.200 --> 00:02:56.559
+As a normal user who codes and takes notes,
+
+00:02:56.560 --> 00:02:58.759
+I really want to deep dive and learn Hyperbole,
+
+00:02:58.760 --> 00:03:02.079
+but always end up winding back up to Embark
+
+00:03:02.080 --> 00:03:04.399
+and Org Mode being the better system.
+
+00:03:04.400 --> 00:03:06.479
+For me, Hyperbole looks over engineering
+
+00:03:06.480 --> 00:03:08.079
+or over the peer system,
+
+00:03:08.080 --> 00:03:10.119
+which other individual packages do well.
+
+00:03:10.120 --> 00:03:15.399
+And outside Emacs, there's no system supporting Hyperbole or any usability.
+
+00:03:15.400 --> 00:03:17.519
+And I think you've cited answering
+
+00:03:17.520 --> 00:03:21.159
+that already, so go ahead.
+
+00:03:21.160 --> 00:03:26.919
+Right, Hyperbole is large, but there's reasons behind that.
+
+00:03:26.920 --> 00:03:30.599
+We're just trying to link all your information in Emacs.
+
+00:03:30.600 --> 00:03:38.079
+So I think you can see my screen here in Emacs.
+
+00:03:38.080 --> 00:03:45.439
+So for example, you can take any Lisp expression,
+
+00:03:45.440 --> 00:03:49.239
+even a variable like here we have in Hyperbole,
+
+00:03:49.240 --> 00:03:50.959
+hyperb:dir variable,
+
+00:03:50.960 --> 00:03:53.519
+and I just hit the action key M-RET,
+
+00:03:53.520 --> 00:03:57.759
+and in my minibuffer, I see the value of that variable,
+
+00:03:57.760 --> 00:04:01.599
+but I could just as well take any other expression
+
+00:04:01.600 --> 00:04:03.919
+and take the outer parens off
+
+00:04:03.920 --> 00:04:05.679
+and change them to angle brackets
+
+00:04:05.680 --> 00:04:08.239
+and now that's a live hyperbutton.
+
+00:04:08.240 --> 00:04:12.079
+Could be in a comment in a programming buffer in this case.
+
+00:04:12.080 --> 00:04:15.679
+It's in Koutliner buffer,
+
+00:04:15.680 --> 00:04:19.159
+which is a an auto-numbered outliner part of hyperbole.
+
+00:04:19.160 --> 00:04:23.599
+So let's just try this and say M-RET.
+
+00:04:23.600 --> 00:04:28.719
+I pressed and it ran occur and found all the occurrences of buttons.
+
+00:04:28.720 --> 00:04:31.919
+And similarly in here, I could just jump and go
+
+00:04:31.920 --> 00:04:35.519
+to any of these lines directly
+
+00:04:35.520 --> 00:04:37.919
+by hitting M-RET in that buffer as well.
+
+00:04:37.920 --> 00:04:40.760
+So all your text, all your sort of
+
+00:04:40.761 --> 00:04:44.879
+what we call implicit links become live in Hyperbole.
+
+00:04:44.880 --> 00:04:46.519
+And you didn't have to learn much.
+
+00:04:46.520 --> 00:04:48.559
+You just learn, you know, if you know a little Lisp
+
+00:04:48.560 --> 00:04:50.279
+or how to type any expression,
+
+00:04:50.280 --> 00:04:52.879
+then you just change the outer brackets.
+
+00:04:52.880 --> 00:04:55.079
+And all of a sudden, you have hyperbuttons.
+
+00:04:55.080 --> 00:05:01.079
+So Hyperbole, you can learn a little bit at a time.
+
+00:05:01.080 --> 00:05:04.479
+And although it seems daunting at first
+
+00:05:04.480 --> 00:05:06.879
+because it has so much functionality,
+
+00:05:06.880 --> 00:05:09.679
+very large and rich architecture.
+
+00:05:09.680 --> 00:05:13.639
+But what we do is teach people one piece at a time.
+
+NOTE Implicit buttons
+
+00:05:13.640 --> 00:05:17.919
+So just to continue on that a little bit,
+
+00:05:17.920 --> 00:05:19.639
+implicit buttons are buttons
+
+00:05:19.640 --> 00:05:23.359
+that exist just from the text pattern in the buffer.
+
+00:05:23.360 --> 00:05:28.279
+So you saw an example of changing Lisp into implicit buttons right there.
+
+00:05:28.280 --> 00:05:30.959
+I could do keystrokes.
+
+00:05:30.960 --> 00:05:33.119
+I can just type them out in my buffer
+
+00:05:33.120 --> 00:05:34.879
+and surround them with braces.
+
+00:05:34.880 --> 00:05:37.439
+So here's something, let's see,
+
+00:05:37.440 --> 00:05:41.079
+this is actually a command in the Koutliner
+
+00:05:41.080 --> 00:05:45.799
+to jump to the cell numbered four. So let's just do that.
+
+00:05:45.800 --> 00:05:47.599
+And it took me right there, right?
+
+00:05:47.600 --> 00:05:51.759
+So I'm just pressing M-RET to activate these buttons.
+
+00:05:51.760 --> 00:05:56.279
+Similarly, any sort of, this is a complex example,
+
+00:05:56.280 --> 00:05:59.479
+but any path name I can surround with double quotes,
+
+00:05:59.480 --> 00:06:01.079
+and it's a live hyperbutton.
+
+00:06:01.080 --> 00:06:05.479
+In this case, I want to jump to a path name called readme.md,
+
+00:06:05.480 --> 00:06:08.359
+but it's in a directory that's specified
+
+00:06:08.360 --> 00:06:13.519
+by an actual list variable. And then I want to go directly
+
+00:06:13.520 --> 00:06:17.479
+to a headline within that file called Hyperbole manual.
+
+00:06:17.480 --> 00:06:19.759
+And within that headline, I wanna go
+
+00:06:19.760 --> 00:06:22.719
+to the eighth line relative to that.
+
+00:06:22.720 --> 00:06:24.879
+So all I have to do, M-RET again,
+
+00:06:24.880 --> 00:06:28.959
+and boom, I'm in that, I'm directly linked to that.
+
+00:06:28.960 --> 00:06:33.799
+And Hyperbole has ways that you can just split your windows like this
+
+00:06:33.800 --> 00:06:38.079
+and create that reference in the source buffer right there.
+
+00:06:38.080 --> 00:06:41.999
+You just press a few keys and it'll embed that link.
+
+00:06:42.000 --> 00:06:43.839
+We'll see that a little later.
+
+NOTE Getting help
+
+00:06:43.840 --> 00:06:47.319
+Another example, so all of these buttons,
+
+00:06:47.320 --> 00:06:49.599
+if I just show you here,
+
+00:06:49.600 --> 00:06:52.279
+you can press C-h A anytime.
+
+00:06:52.280 --> 00:06:54.319
+and it will show you exactly
+
+00:06:54.320 --> 00:06:56.559
+what M-RET will do in that context.
+
+00:06:56.560 --> 00:06:59.479
+In this case, it's an implicit button,
+
+00:06:59.480 --> 00:07:03.119
+and it shows you even where the button starts and ends,
+
+00:07:03.120 --> 00:07:06.679
+what type of action it will run,
+
+00:07:06.680 --> 00:07:08.039
+it's a link to a file line,
+
+00:07:08.040 --> 00:07:09.999
+and then what arguments it takes.
+
+00:07:10.000 --> 00:07:13.999
+So Hyperbole extracts all this meta information
+
+00:07:14.000 --> 00:07:16.679
+just from the text in your buffer
+
+00:07:16.680 --> 00:07:19.119
+and displays it to you conveniently
+
+00:07:19.120 --> 00:07:22.319
+so you can know before you ever touch a hyper button
+
+00:07:22.320 --> 00:07:24.479
+if it will do something that you want it to do.
+
+00:07:24.480 --> 00:07:28.559
+Here we have a fairly advanced button
+
+00:07:28.560 --> 00:07:31.519
+that's very simple to do. You just specify a bug in Emacs
+
+00:07:31.520 --> 00:07:34.279
+that you want to reference to.
+
+00:07:34.280 --> 00:07:40.039
+Notice no delimiters, just bug pound, whatever, M-RET.
+
+00:07:40.040 --> 00:07:45.479
+And I'm in Gnus reading the conversation for that bug.
+
+00:07:45.480 --> 00:07:48.719
+And I can just, you know, move
+
+00:07:48.720 --> 00:07:50.919
+through all the conversation.
+
+00:07:50.920 --> 00:07:56.039
+I can quit out of there and go back to where I was.
+
+00:07:56.040 --> 00:07:59.599
+So very, very easy to use these implicit buttons
+
+00:07:59.600 --> 00:08:00.879
+because they're already there
+
+00:08:00.880 --> 00:08:03.679
+throughout your Emacs buffers.
+
+00:08:03.680 --> 00:08:06.119
+I described the C-h A, what that does.
+
+00:08:06.120 --> 00:08:09.359
+And there's other types of buttons
+
+00:08:09.360 --> 00:08:11.559
+that we can get into as questions go on,
+
+00:08:11.560 --> 00:08:14.719
+but you can create your own explicit buttons
+
+00:08:14.720 --> 00:08:18.719
+that have a little slightly different delimiter than you see
+
+00:08:18.720 --> 00:08:19.799
+in the implicit buttons.
+
+00:08:19.800 --> 00:08:24.759
+And this one I just put in here to show you that
+
+00:08:24.760 --> 00:08:30.439
+If you use it and you go, this is the hyperbole to do list,
+
+00:08:30.440 --> 00:08:31.879
+which is an org buffer.
+
+00:08:31.880 --> 00:08:35.079
+But I wanted to show in here that similarly,
+
+00:08:35.080 --> 00:08:37.799
+we have implicit buttons for TODOs in the work.
+
+00:08:37.800 --> 00:08:39.679
+And when we hit M-RET,
+
+00:08:39.680 --> 00:08:42.679
+it just changes the state of that to do.
+
+00:08:42.680 --> 00:08:44.919
+And I can cycle through those
+
+00:08:44.920 --> 00:08:47.399
+but even better with the prefix argument
+
+00:08:47.400 --> 00:08:50.399
+if I have multiple sequences of TODOs
+
+00:08:50.400 --> 00:08:53.519
+because there's Bob and Mats that maintain hyperbole
+
+00:08:53.520 --> 00:08:55.999
+so I can shift to Bob's TODOs
+
+00:08:56.000 --> 00:08:57.759
+with C-u M-RET
+
+00:08:57.760 --> 00:09:00.079
+and then cycle through the states for me
+
+00:09:00.080 --> 00:09:05.039
+So very very easy to use,
+
+00:09:05.040 --> 00:09:08.319
+you know something that's a little bit more difficult to do
+
+00:09:08.320 --> 00:09:12.079
+I think in org without it.
+
+NOTE Explicit buttons
+
+00:09:12.080 --> 00:09:16.239
+So that's an explicit button
+
+00:09:16.240 --> 00:09:19.479
+where I had to actually say I want to create this button,
+
+00:09:19.480 --> 00:09:21.599
+and I had to specify what type it is.
+
+00:09:21.600 --> 00:09:23.759
+If I show you the information there again,
+
+00:09:23.760 --> 00:09:25.879
+you see it has a little different type
+
+00:09:25.880 --> 00:09:29.679
+called a keyboard key, which runs just the key sequence.
+
+00:09:29.680 --> 00:09:34.759
+So you're starting to see already
+
+00:09:34.760 --> 00:09:36.839
+that explicit buttons have a type
+
+00:09:36.840 --> 00:09:38.159
+that's connected to an action
+
+00:09:38.160 --> 00:09:41.199
+that an implicit button can do as well.
+
+00:09:41.200 --> 00:09:42.959
+So all of this ties back together.
+
+NOTE Homepage
+
+00:09:42.960 --> 00:09:47.079
+And finally, there's a homepage that Hyperbole has,
+
+00:09:47.080 --> 00:09:49.159
+a personal homepage that you have.
+
+00:09:49.160 --> 00:09:52.999
+You hit C-h h, which is our mini-buffer menu,
+
+00:09:53.000 --> 00:09:58.319
+and then you hit what is it, b for button file
+
+00:09:58.320 --> 00:10:01.439
+and then p for personal file.
+
+00:10:01.440 --> 00:10:05.239
+And that just brings you to basically a set of links
+
+00:10:05.240 --> 00:10:10.199
+that you can create buttons in any format you want.
+
+00:10:10.200 --> 00:10:12.479
+There's no structure that you see here.
+
+00:10:12.480 --> 00:10:18.759
+But the nice thing is that all of these buttons that have these names, as we call them,
+
+00:10:18.760 --> 00:10:20.279
+with the delimiters here,
+
+00:10:20.280 --> 00:10:23.799
+can be referenced now as what we call global buttons
+
+00:10:23.800 --> 00:10:28.239
+wherever you are in Emacs. So I'm in a separate buffer here
+
+00:10:28.240 --> 00:10:30.719
+and say I want to jump to that to-do button
+
+00:10:30.720 --> 00:10:33.279
+that's labeled td on line 10 down there.
+
+00:10:33.280 --> 00:10:35.519
+No matter what I have on screen,
+
+00:10:35.520 --> 00:10:39.199
+I can hit C-h h g for global button,
+
+00:10:39.200 --> 00:10:43.719
+a for activate, and then it gives me a list of those.
+
+00:10:43.720 --> 00:10:47.119
+So I know it's td, I just put td in.
+
+00:10:47.120 --> 00:10:52.159
+Okay, that's a path link problem I have,
+
+00:10:52.160 --> 00:10:56.359
+but when I fix the link, it would go to it.
+
+00:10:56.360 --> 00:10:58.239
+So you can create buttons
+
+00:10:58.240 --> 00:11:01.639
+that you can access in any mode, anywhere,
+
+00:11:01.640 --> 00:11:05.799
+and just give them quick names, and it's very easy.
+
+00:11:05.800 --> 00:11:08.559
+So that kind of gives you an idea
+
+00:11:08.560 --> 00:11:11.719
+of how you can get very productive
+
+00:11:11.720 --> 00:11:14.999
+with hyperbole with just a few simple techniques.
+
+00:11:15.000 --> 00:11:30.439
+You still there Sacha? Yep, I'm still here.
+
+00:11:30.440 --> 00:11:41.539
+I have too many tabs.
+
+NOTE Q: I've been using "activities.el" and "Bufferlo" to save dedicated workspaces (open buffers, window positions) in tabs and frames for tasks/projects across Emacs sessions. Could I do something similar with Hyperbole?
+
+00:11:41.540 --> 00:11:46.199
+So the question is, I've been using activities.el
+
+00:11:46.200 --> 00:11:48.879
+and bufferlo to save dedicated workplaces,
+
+00:11:48.880 --> 00:11:52.159
+open buffers, and decisions in tabs and frames
+
+00:11:52.160 --> 00:11:54.599
+for tasks and projects across the next sessions.
+
+00:11:54.600 --> 00:12:00.119
+Can I do something similar with Hyperbole? Yes, you can.
+
+00:12:00.120 --> 00:12:03.719
+And activities is a nice package from alphapapa.
+
+00:12:03.720 --> 00:12:07.399
+We've actually been working with it lately.
+
+00:12:07.400 --> 00:12:11.159
+So we're probably in the next month or so
+
+00:12:11.160 --> 00:12:13.479
+we'll have a specific integration
+
+00:12:13.480 --> 00:12:15.999
+to activities built into Hyperbole.
+
+00:12:16.000 --> 00:12:21.519
+But right now, we don't. But of course, you can call
+
+00:12:21.520 --> 00:12:23.279
+any of its functions or key bindings
+
+00:12:23.280 --> 00:12:26.079
+using the techniques that I just showed you earlier.
+
+00:12:26.080 --> 00:12:33.599
+But what we do have built in if you go to the menu again.
+
+00:12:33.600 --> 00:12:35.959
+and you see C-h h,
+
+00:12:35.960 --> 00:12:43.039
+and then there's a w, Windows, WinConfig menu,
+
+00:12:43.040 --> 00:12:48.399
+and there's two types of window configurations that you can save here.
+
+00:12:48.400 --> 00:12:52.599
+They are, right now, they're per Emacs session.
+
+00:12:52.600 --> 00:12:55.759
+They're not stored beyond that,
+
+00:12:55.760 --> 00:12:58.519
+but we'll probably add that in as well,
+
+00:12:58.520 --> 00:12:59.879
+or we'll use activities for that.
+
+00:12:59.880 --> 00:13:03.165
+so the two types are you can either
+
+00:13:03.166 --> 00:13:07.199
+just save a window configuration in a frame...
+
+00:13:07.200 --> 00:13:10.319
+Actually, it stores the frame configuration
+
+00:13:10.320 --> 00:13:13.359
+to a ring just like the kill ring.
+
+00:13:13.360 --> 00:13:16.119
+So you have the three commands at the right.
+
+00:13:16.120 --> 00:13:21.239
+you can save with an s, you can pop one off the ring with p,
+
+00:13:21.240 --> 00:13:25.959
+or you can just yank and keep cycling through with a y
+
+00:13:25.960 --> 00:13:31.119
+and it will restore the frame configuration that you saved.
+
+00:13:31.120 --> 00:13:35.079
+Similarly, you can just do it by name,
+
+00:13:35.080 --> 00:13:36.839
+and you can say "I want to add a name"
+
+00:13:36.840 --> 00:13:43.667
+and then just give it a name again, winc,
+
+00:13:43.668 --> 00:13:45.799
+and store it and it stores it there
+
+00:13:45.800 --> 00:13:48.559
+and then you can get back to it by name as well.
+
+00:13:48.560 --> 00:13:51.319
+So fairly easy to use as well
+
+00:13:51.320 --> 00:13:54.999
+and again integrated in the same simple menu system.
+
+00:13:55.000 --> 00:13:57.079
+So thanks for that question.
+
+00:14:05.020 --> 00:14:07.119
+Should I just go to the next question?
+
+NOTE Q: How well do Hyperbole and org-mode work together? Is there any kind of integration?
+
+00:14:07.120 --> 00:14:10.079
+How well do hyperbole and org mode work together?
+
+00:14:10.080 --> 00:14:12.759
+Is there any kind of integration?
+
+00:14:12.760 --> 00:14:18.079
+Yes, in fact, that's really good.
+
+00:14:18.080 --> 00:14:22.359
+I'll just mention something. Let me go back to my homepage.
+
+00:14:22.360 --> 00:14:26.679
+I just stored that here. So we gave a talk at an earlier
+
+00:14:26.680 --> 00:14:31.559
+Emacs conference right here on org
+
+00:14:31.560 --> 00:14:33.199
+and hyperbole integration.
+
+00:14:33.200 --> 00:14:35.919
+So that's a good one to go back to.
+
+00:14:35.920 --> 00:14:39.479
+And I believe it's in this files
+
+00:14:39.480 --> 00:14:41.599
+included with hyperbole as well.
+
+00:14:41.600 --> 00:14:45.079
+So you can learn various techniques
+
+00:14:45.080 --> 00:14:48.199
+of how the action key helps you in org.
+
+00:14:48.200 --> 00:14:51.679
+It does special things in tables.
+
+00:14:51.680 --> 00:15:00.239
+And there's some nice support for, for example, working with code blocks.
+
+00:15:00.240 --> 00:15:02.639
+Let me see where that is. Okay, so right back here.
+
+00:15:02.640 --> 00:15:09.759
+So you can run them with the action key.
+
+00:15:09.760 --> 00:15:15.039
+You can refresh the output and do things like that.
+
+00:15:15.040 --> 00:15:17.559
+So again, if I just hit C-h A,
+
+00:15:17.560 --> 00:15:20.439
+it'll tell me that it's in smart org,
+
+00:15:20.440 --> 00:15:22.928
+and it'll give me all the different contexts
+
+00:15:22.929 --> 00:15:24.359
+that that operates within.
+
+00:15:24.360 --> 00:15:26.559
+So there's a lot that it does in here.
+
+00:15:26.560 --> 00:15:28.173
+And you can see it would point
+
+00:15:28.174 --> 00:15:30.479
+on the dir value of a code block definition
+
+00:15:30.480 --> 00:15:33.559
+that will actually display a summary
+
+00:15:33.560 --> 00:15:35.199
+and all sorts of functionality.
+
+00:15:35.200 --> 00:15:37.439
+So the integration is quite tight.
+
+00:15:37.440 --> 00:15:39.679
+And one of the things we do
+
+00:15:39.680 --> 00:15:41.799
+since M-RET is used in org,
+
+00:15:41.800 --> 00:15:44.719
+we have a customization setting, c then o.
+
+00:15:44.720 --> 00:15:48.239
+And you have these three settings where you can say,
+
+00:15:48.240 --> 00:15:53.359
+I want M-RET to... I want hyperbole to control that
+
+00:15:53.360 --> 00:15:57.279
+and everything that the action key does I want to happen,
+
+00:15:57.280 --> 00:16:00.479
+or I only want hyperbole to control
+
+00:16:00.480 --> 00:16:03.239
+when I'm over a hyperbole implicit/explicit button,
+
+00:16:03.240 --> 00:16:09.159
+or I want org to control that key and never use hyperbole.
+
+00:16:09.160 --> 00:16:10.799
+So you just set that once,
+
+00:16:10.800 --> 00:16:13.919
+it's persistent across sessions and you're good to go.
+
+00:16:13.920 --> 00:16:16.399
+And again, it's built right into the menus.
+
+NOTE Hywiki
+
+00:16:16.400 --> 00:16:23.919
+But even following that we've the latest addition to hyperbole is something,
+
+00:16:23.920 --> 00:16:25.799
+and this is the first time
+
+00:16:25.800 --> 00:16:29.799
+we're really showing it publicly, is the Hywiki,
+
+00:16:29.800 --> 00:16:33.559
+which is a new subsystem as we call it,
+
+00:16:33.560 --> 00:16:39.163
+and this is I think the best wiki capability in Emacs.
+
+00:16:39.164 --> 00:16:44.719
+Now what it does is it automatically highlights...
+
+00:16:44.720 --> 00:16:48.119
+Let me turn it on. I have to turn on hywiki mode.
+
+00:16:48.120 --> 00:16:52.758
+And you see those wiki words now got highlighted,
+
+00:16:52.759 --> 00:16:54.679
+so any any wiki word
+
+00:16:54.680 --> 00:16:58.839
+which is the capitalized alpha word you know,
+
+00:16:58.840 --> 00:17:01.439
+so you can have multiple capitals in there
+
+00:17:01.440 --> 00:17:06.039
+and it'll get recognized, can be used as a wiki word.
+
+00:17:06.040 --> 00:17:09.519
+So for example when I just type HyWiki here,
+
+00:17:09.520 --> 00:17:11.750
+it automatically recognizes it,
+
+00:17:11.751 --> 00:17:14.239
+and you see it turned it into a hyperlink button,
+
+00:17:14.240 --> 00:17:18.159
+which again, C-h a will tell me exactly what it does there.
+
+00:17:18.160 --> 00:17:21.599
+But I can just hit the action key, M-RET,
+
+00:17:21.600 --> 00:17:26.879
+and it'll display my hywiki.org file.
+
+00:17:26.880 --> 00:17:30.559
+All wiki pages are org files.
+
+00:17:30.560 --> 00:17:35.679
+So we're using that for the wikis, and you have
+
+00:17:35.680 --> 00:17:40.359
+You can export an entire wiki
+
+00:17:40.360 --> 00:17:43.159
+using essentially the org export capability
+
+00:17:43.160 --> 00:17:47.539
+with a little extra set of features that we've added in,
+
+00:17:47.540 --> 00:17:50.083
+but let's say, even better. You see
+
+00:17:50.084 --> 00:17:54.119
+I have this heading here, so let me just change this.
+
+00:17:54.120 --> 00:17:59.239
+You go back here, and I'll say go to heading,
+
+00:17:59.240 --> 00:18:01.039
+so you just put a pound on it,
+
+00:18:01.040 --> 00:18:05.679
+and now that whole thing is a reference to a specific org section.
+
+00:18:05.680 --> 00:18:08.439
+Notice there's no org IDs here.
+
+00:18:08.440 --> 00:18:11.639
+There's nothing other than the text that you're seeing.
+
+00:18:11.640 --> 00:18:13.439
+There's not even a delimiter.
+
+00:18:13.440 --> 00:18:17.839
+So we have automatic implicit hyper buttons
+
+00:18:17.840 --> 00:18:20.679
+being added in any buffer.
+
+00:18:20.680 --> 00:18:23.959
+Could be a comment in a programming buffer with all you
+
+00:18:23.960 --> 00:18:26.599
+You don't have to add anything.
+
+00:18:26.600 --> 00:18:31.999
+I'll show you how to create a new page in a minute.
+
+00:18:32.000 --> 00:18:35.959
+But you see I can link to any org section without any IDs.
+
+00:18:35.960 --> 00:18:38.799
+And then I can also do like org-roam does,
+
+00:18:38.800 --> 00:18:42.039
+but without the indexing or database that it requires.
+
+00:18:42.040 --> 00:18:46.839
+I can scan over all of my wiki files and headings.
+
+00:18:46.840 --> 00:18:48.759
+find a match really quickly.
+
+00:18:48.760 --> 00:18:53.279
+So we can get into some of that a little later as well.
+
+00:18:53.280 --> 00:18:55.759
+But, you know, very convenient.
+
+00:18:55.760 --> 00:18:58.439
+There's nothing that you change on org to do this.
+
+00:18:58.440 --> 00:19:00.879
+So how do I create a wiki word?
+
+00:19:00.880 --> 00:19:07.359
+Well, let's say I wanted, you know, wiki word for me.
+
+00:19:07.360 --> 00:19:09.999
+So that's already, that was a wiki word,
+
+00:19:10.000 --> 00:19:12.959
+but now this is a new one. So you see it doesn't highlight
+
+00:19:12.960 --> 00:19:16.559
+because I haven't created a wiki page yet.
+
+00:19:16.560 --> 00:19:20.319
+So all I hit is the action key, and boom.
+
+00:19:20.320 --> 00:19:23.519
+Now it created it as a new wiki word.
+
+00:19:23.520 --> 00:19:24.879
+It created the .org file.
+
+00:19:24.880 --> 00:19:28.279
+If I don't edit this file, it won't save it,
+
+00:19:28.280 --> 00:19:32.359
+and it'll not become a word in case you made an accident.
+
+00:19:32.360 --> 00:19:34.319
+But let's just say I want to say it.
+
+00:19:34.320 --> 00:19:39.159
+So, you know, heading. That's it. I'm just in org mode.
+
+00:19:39.160 --> 00:19:42.879
+Now anytime that hywiki mode is active,
+
+00:19:42.880 --> 00:19:46.239
+in any buffer essentially,
+
+00:19:46.240 --> 00:19:50.279
+I can type that out and it'll recognize it.
+
+00:19:50.280 --> 00:19:53.039
+Notice so that's not a wiki word.
+
+00:19:53.040 --> 00:19:55.279
+So it's highlighting and it's unhighlighting
+
+00:19:55.280 --> 00:19:56.599
+right as I type.
+
+00:19:56.600 --> 00:20:03.199
+So, again, you can embed these as org links in org.
+
+00:20:03.200 --> 00:20:09.439
+There's a special format like this, HyWiki word
+
+00:20:09.440 --> 00:20:11.239
+that you can make an org link
+
+00:20:11.240 --> 00:20:13.479
+if I was in org mode, just like that.
+
+00:20:13.480 --> 00:20:16.599
+So there's all sorts of compatibility,
+
+00:20:16.600 --> 00:20:18.319
+but basically it's just words,
+
+00:20:18.320 --> 00:20:21.119
+and HyWiki takes care of the rest for you.
+
+00:20:21.120 --> 00:20:26.679
+So there's a directory where all these, it's HyWiki,
+
+00:20:26.680 --> 00:20:31.206
+hywiki, ~/hywiki is the default place
+
+00:20:31.207 --> 00:20:32.719
+where all these would be found,
+
+00:20:32.720 --> 00:20:36.359
+and there's a menu now in hyperbole for hywiki, h,
+
+00:20:36.360 --> 00:20:40.639
+and you can see, it has a lot of capabilities.
+
+00:20:40.640 --> 00:20:44.359
+But I can say, b, go into the directory of all the files,
+
+00:20:44.360 --> 00:20:47.799
+just pull them up, and any of these you'll see...
+
+00:20:47.800 --> 00:20:56.589
+Let me give you one like this.
+
+00:20:56.590 --> 00:20:58.473
+Okay. So you can see the other wiki words
+
+00:20:58.474 --> 00:20:59.959
+being highlighted in here.
+
+00:20:59.960 --> 00:21:04.039
+It's very fast too. There's almost no delay for anything,
+
+00:21:04.040 --> 00:21:07.129
+and yet very flexible,
+
+00:21:07.130 --> 00:21:09.915
+and you have this ability
+
+00:21:09.916 --> 00:21:14.679
+where you could type emacs#section-1-2
+
+00:21:14.680 --> 00:21:16.759
+and if you didn't have delimiters around it,
+
+00:21:16.760 --> 00:21:18.479
+but you can put any delimiters
+
+00:21:18.480 --> 00:21:20.839
+like double quotes or parentheses,
+
+00:21:20.840 --> 00:21:23.502
+and then it'll match without you
+
+00:21:23.503 --> 00:21:25.159
+having to change the header at all
+
+00:21:25.160 --> 00:21:28.439
+with the spaces included, and all of those
+
+00:21:28.440 --> 00:21:31.919
+will get recognized.
+
+00:21:31.920 --> 00:21:35.599
+I don't know if the section exists right there.
+
+00:21:35.600 --> 00:21:40.454
+So anyway a lot of capability you can see that here
+
+00:21:40.455 --> 00:21:41.959
+where I did the hy...
+
+00:21:41.960 --> 00:21:45.519
+it actually highlights as an org link
+
+00:21:45.520 --> 00:21:46.839
+because it is an org link,
+
+00:21:46.840 --> 00:21:50.319
+and it'll operate just like any other org link
+
+00:21:50.320 --> 00:21:54.279
+even though it's a hywiki word link as well.
+
+00:21:54.280 --> 00:21:55.759
+So very powerful stuff
+
+00:21:55.760 --> 00:22:00.959
+and totally integrated with Org Mode throughout.
+
+00:22:00.960 --> 00:22:06.439
+Great. There's another question.
+
+NOTE Q: Are there any talks from this year's emacsconf that discussed things that would work well with Hyperbole?
+
+00:22:06.440 --> 00:22:09.039
+Are there any talks from this year's Emacs Conf
+
+00:22:09.040 --> 00:22:12.599
+that discuss things that would work well with Hyperbole?
+
+00:22:12.600 --> 00:22:19.279
+No. Unfortunately, I had to work yesterday, so I haven't
+
+00:22:19.280 --> 00:22:22.639
+been following the conference as much as I do.
+
+00:22:22.640 --> 00:22:25.559
+Maybe somebody else could comment on that.
+
+00:22:25.560 --> 00:22:29.519
+But I think, you know, again,
+
+00:22:29.520 --> 00:22:31.879
+it's like pick your favorite mode,
+
+00:22:31.880 --> 00:22:34.719
+pick your favorite type of information.
+
+00:22:34.720 --> 00:22:36.839
+Can hyperbole work with that?
+
+00:22:36.840 --> 00:22:39.999
+You know, the answer is almost always yes.
+
+00:22:40.000 --> 00:22:44.959
+So, you know, if I show you just a little bit,
+
+00:22:44.960 --> 00:22:48.679
+if I show you some of these implicit button types,
+
+00:22:48.680 --> 00:22:50.799
+just so you know the amount of code
+
+00:22:50.800 --> 00:22:53.708
+involved to create a type.
+
+00:22:53.709 --> 00:22:59.679
+So here's like a mail, recognizing
+
+00:22:59.680 --> 00:23:01.639
+an email address as a button.
+
+00:23:01.640 --> 00:23:05.519
+It's a little long, so that it creates a lot of things,
+
+00:23:05.520 --> 00:23:09.199
+but you know it's less than 15 lines of code for that.
+
+00:23:09.200 --> 00:23:12.199
+Path names are complicated, so that's a longer one,
+
+00:23:12.200 --> 00:23:14.299
+but let's look at...
+
+00:23:14.300 --> 00:23:18.799
+So here's one recognizing a bibliography entry.
+
+00:23:18.800 --> 00:23:24.879
+So it can be between two and 20 lines of code
+
+00:23:24.880 --> 00:23:27.519
+to create an entirely new button type.
+
+00:23:27.520 --> 00:23:29.818
+And you create it once,
+
+00:23:29.819 --> 00:23:32.159
+and you just add it to the set of types,
+
+00:23:32.160 --> 00:23:33.922
+just like at the fun,
+
+00:23:33.923 --> 00:23:35.479
+except it's done with this macro
+
+00:23:35.480 --> 00:23:39.479
+called def implicit button type, and defib.
+
+00:23:39.480 --> 00:23:45.559
+And it's part of your hyperlinking system forever then.
+
+00:23:45.560 --> 00:23:49.799
+So say you got dumped with 5,000 documents
+
+00:23:49.800 --> 00:23:51.519
+that were in this weird text format,
+
+00:23:51.520 --> 00:23:54.119
+and they all had cross-references among them,
+
+00:23:54.120 --> 00:23:56.792
+but it was, again, using a weird format.
+
+00:23:56.760 --> 00:23:59.919
+You could just write your own little type for that,
+
+00:23:59.920 --> 00:24:04.319
+and then those 5,000 documents are hyperlinked for you
+
+00:24:04.320 --> 00:24:08.759
+every time you're browsing them in Emacs automatically.
+
+00:24:08.760 --> 00:24:11.959
+So we do that all the time, create small things,
+
+00:24:11.960 --> 00:24:15.159
+but all of these are built into Hyperbole.
+
+00:24:15.160 --> 00:24:20.199
+Markdown links, texinfo links, all of that's automatic.
+
+00:24:20.200 --> 00:24:26.199
+I could even be in a shell mode, and I just say ls,
+
+00:24:26.200 --> 00:24:30.519
+and these are hyperlinks that Hyperbole understands, right?
+
+00:24:30.520 --> 00:24:33.125
+It just jumps right to the file.
+
+00:24:33.126 --> 00:24:36.999
+So grep -n, you know, looking at any line numbers,
+
+00:24:37.000 --> 00:24:39.839
+you don't have to remember
+
+00:24:39.840 --> 00:24:41.959
+all these different commands anymore.
+
+00:24:41.960 --> 00:24:44.319
+You just hit M-RET,
+
+00:24:44.320 --> 00:24:46.599
+and Hyperbole does the right thing
+
+00:24:46.600 --> 00:24:48.359
+in all these different contexts,
+
+00:24:48.360 --> 00:24:52.639
+including following cross-references in code.
+
+00:24:52.640 --> 00:24:56.079
+So I would say that's your answer.
+
+00:24:56.080 --> 00:24:58.399
+Most things that people are talking about,
+
+00:24:58.400 --> 00:25:02.199
+we've already probably integrated with Hyperbole
+
+00:25:02.200 --> 00:25:04.639
+or with a little bit of custom coding.
+
+00:25:04.640 --> 00:25:08.402
+You can do it.
+
+00:25:08.403 --> 00:25:11.199
+I think that's the end of the etherpad questions for now,
+
+00:25:11.200 --> 00:25:12.919
+but I see a number of people in the room,
+
+00:25:12.920 --> 00:25:15.439
+so you can continue the conversation.
+
+00:25:15.440 --> 00:25:18.719
+We'll be on the stream for another five minutes or so,
+
+00:25:18.720 --> 00:25:22.319
+but yes, please go ahead. Great. Yeah.
+
+00:25:22.320 --> 00:25:27.639
+I mean, people, does everybody have, can talk on the conference?
+
+00:25:27.640 --> 00:25:31.439
+I was expecting to just talk with people here.
+
+00:25:31.440 --> 00:25:40.799
+Let's see. Yeah. Can anybody say anything here?
+
+00:25:40.800 --> 00:25:52.039
+Hi, Bob. I can say something. Hey, Matt. Hi. Yeah.
+
+00:25:52.040 --> 00:25:55.199
+Maybe you want to bring up a topic.
+
+00:25:55.200 --> 00:25:56.839
+I think I... Yes. Sorry, Bob.
+
+00:25:56.840 --> 00:26:05.839
+I think I saw a question here on IRC. It was like this.
+
+NOTE Interesting, but the many different link formats makes reading and analyzing my notes much harder and less usable outside Emacs.
+
+00:26:05.840 --> 00:26:08.599
+Interesting, but the many different link formats
+
+00:26:08.600 --> 00:26:11.279
+makes reading and analyzing my notes
+
+00:26:11.280 --> 00:26:14.959
+much harder and less usable outside Emacs.
+
+00:26:14.960 --> 00:26:18.759
+I don't know if you have some comment on that.
+
+00:26:18.760 --> 00:26:22.319
+Well, I mean, the different formats that you're saying,
+
+00:26:22.320 --> 00:26:24.839
+like angle brackets or curly braces,
+
+00:26:24.840 --> 00:26:31.319
+are just so that you can utilize many different types.
+
+00:26:31.320 --> 00:26:35.599
+of buttons, but if you just want to use key sequences,
+
+00:26:35.600 --> 00:26:37.759
+there's only one markup format.
+
+00:26:37.760 --> 00:26:41.599
+With org, you've got the square brackets,
+
+00:26:41.600 --> 00:26:44.919
+which are consistent, but in order to have different types,
+
+00:26:44.920 --> 00:26:47.279
+you have to type a prefix name,
+
+00:26:47.280 --> 00:26:53.279
+like you see the HY for the HyWiki buttons in org mode.
+
+00:26:53.280 --> 00:26:56.999
+So I think the trade-off is pretty much the same,
+
+00:26:57.000 --> 00:27:02.239
+but Hyperbole always, always works
+
+00:27:02.240 --> 00:27:04.559
+to minimize the amount of markup.
+
+00:27:04.560 --> 00:27:07.439
+Markdown is pretty simple. A lot of people like that.
+
+00:27:07.440 --> 00:27:10.759
+But I think you'll find in hyperbole texts,
+
+00:27:10.760 --> 00:27:15.479
+they read just like regular language.
+
+00:27:15.480 --> 00:27:19.599
+I mean, the delimiters are fairly invisible.
+
+00:27:19.600 --> 00:27:23.039
+So I'm not sure what the issue is there.
+
+00:27:23.040 --> 00:27:24.919
+And again, you can choose your own.
+
+00:27:24.920 --> 00:27:27.639
+You can make your own types with your own delimiters.
+
+00:27:27.640 --> 00:27:31.359
+There's even a custom macro
+
+00:27:31.360 --> 00:27:33.399
+that instead of using that defib
+
+00:27:33.400 --> 00:27:35.559
+where you have to type out Lisp code,
+
+00:27:35.560 --> 00:27:37.519
+you can use regular expressions.
+
+00:27:37.520 --> 00:27:41.239
+And in one line, you can define your own type of button
+
+00:27:41.240 --> 00:27:42.919
+with its own delimiters.
+
+00:27:42.920 --> 00:27:47.879
+So, you know, depending on what works well for your eyes,
+
+00:27:47.880 --> 00:27:51.359
+you can make Hyperbole adapt quite well to that.
+
+00:27:51.360 --> 00:27:54.319
+And again, if you start using the HyWiki,
+
+00:27:54.320 --> 00:27:57.479
+there's literally zero markup on that.
+
+00:27:57.480 --> 00:27:59.599
+So you're just reading text,
+
+00:27:59.600 --> 00:28:01.759
+and when you want something hyperlinked,
+
+00:28:01.760 --> 00:28:04.599
+it's like a glossary or a dictionary entry.
+
+00:28:04.600 --> 00:28:09.599
+It's just there, and it's just highlighted in the text.
+
+00:28:09.600 --> 00:28:17.479
+So I don't see much barrier to using it with many different types of documents.
+
+00:28:17.480 --> 00:28:23.319
+Let me go back to the Emacs here.
+
+00:28:23.320 --> 00:28:27.039
+If there are any other questions.
+
+00:28:27.040 --> 00:28:36.639
+Let me see. Let me go back to that. This Koutline here.
+
+00:28:36.640 --> 00:28:38.719
+So we covered HyWiki.
+
+00:28:38.720 --> 00:28:42.999
+We're in the... I'll just show you some things
+
+00:28:43.000 --> 00:28:44.039
+that we wanted to highlight
+
+00:28:44.040 --> 00:28:46.279
+if people didn't have specific questions.
+
+00:28:46.280 --> 00:28:48.879
+But feel free to jump in anytime
+
+00:28:48.880 --> 00:28:51.399
+if you want to ask something.
+
+NOTE Koutliner
+
+00:28:51.400 --> 00:28:57.039
+So what we're looking at here is a Koutliner document.
+
+00:28:57.040 --> 00:29:00.399
+There's, you know, hyperbole is pretty well documented.
+
+00:29:00.400 --> 00:29:04.719
+There's a large manual. There's interactive
+
+00:29:04.720 --> 00:29:09.319
+demos of it, and there are videos as well.
+
+00:29:09.320 --> 00:29:12.079
+But the Koutliner is unique in Emacs,
+
+00:29:12.080 --> 00:29:17.258
+because it can do like full legal auto numbering.
+
+00:29:17.259 --> 00:29:21.399
+You just say, I want to create a new headline,
+
+00:29:21.400 --> 00:29:23.919
+and you can see. Or I could create four,
+
+00:29:23.920 --> 00:29:26.679
+I could say I want to create three more of these,
+
+00:29:26.680 --> 00:29:29.239
+and I can do it all at once with one key.
+
+00:29:29.240 --> 00:29:33.679
+I can then just tab to make sublevels here.
+
+00:29:33.680 --> 00:29:40.319
+And you see this is using a specific outline format that we have
+
+00:29:40.320 --> 00:29:43.919
+but if we do . in the view specs here,
+
+00:29:43.920 --> 00:29:48.239
+it changes to legal outlining. So it's really that simple.
+
+00:29:48.240 --> 00:29:51.399
+All of these numbers are automatically maintained.
+
+00:29:51.400 --> 00:29:56.639
+As I move stuff around, I can use Org mode alt arrow keys
+
+00:29:56.640 --> 00:30:00.119
+to move things up and down, right?
+
+00:30:00.120 --> 00:30:00.839
+And just move them around.
+
+00:30:00.840 --> 00:30:04.719
+And when I run out, you know, when it can't go any higher,
+
+00:30:04.720 --> 00:30:06.039
+it gives me an error.
+
+00:30:06.040 --> 00:30:11.079
+And then it's just fre- form typing here with auto-wrapping.
+
+00:30:11.080 --> 00:30:13.759
+The nice thing is that
+
+00:30:13.760 --> 00:30:17.359
+there's actually these hidden,
+
+00:30:17.360 --> 00:30:22.519
+let's get, hidden what are called ID stamps.
+
+00:30:22.520 --> 00:30:24.919
+So these are permanent hyperlink anchors
+
+00:30:24.920 --> 00:30:26.719
+that are assigned to each cell.
+
+00:30:26.720 --> 00:30:29.679
+So as this cell moves in the outline,
+
+00:30:29.680 --> 00:30:32.679
+you notice that this 29 didn't change.
+
+00:30:32.680 --> 00:30:37.439
+So you can move and all those other auto numbers shift
+
+00:30:37.440 --> 00:30:40.359
+to represent the actual outline structure.
+
+00:30:40.360 --> 00:30:44.079
+But this ID stamp of 29 stays the same.
+
+00:30:44.080 --> 00:30:47.679
+So you can embed that in links and say,
+
+00:30:47.680 --> 00:30:51.719
+I want to link to cell 29.
+
+00:30:51.720 --> 00:30:55.999
+If I go, let me just go to the Koutliner example.
+
+00:30:56.000 --> 00:30:59.039
+And I'll show you one of those, which is really cool.
+
+00:30:59.040 --> 00:31:02.599
+Because what you can do is say, I want to link
+
+00:31:02.600 --> 00:31:06.999
+Let me find that. It's down here somewhere.
+
+00:31:07.000 --> 00:31:12.199
+I think there's 3A. Where was it? Yeah, okay.
+
+00:31:12.200 --> 00:31:16.479
+So see right here, this is an internal link
+
+00:31:16.480 --> 00:31:21.200
+with just the pound and then the relative ID, as we call it, 3B.
+
+00:31:21.200 --> 00:31:25.719
+But of course, somebody may have moved 3B in the outline.
+
+00:31:25.720 --> 00:31:27.919
+So when Hyperbole inserts a link,
+
+00:31:27.920 --> 00:31:32.039
+it puts this equal with the ID stamp in it automatically.
+
+00:31:32.040 --> 00:31:35.839
+So if... What'll happen is when I reference this,
+
+00:31:35.840 --> 00:31:37.639
+okay, it's still the same.
+
+00:31:37.640 --> 00:31:40.959
+But if it had changed, it would update this link
+
+00:31:40.960 --> 00:31:44.759
+and would change the 3B to say it was 3D now
+
+00:31:44.760 --> 00:31:50.519
+based on this permalink, the 08 that's hidden away in here.
+
+00:31:50.520 --> 00:31:52.439
+So you don't have to do anything.
+
+00:31:52.440 --> 00:31:56.599
+It's just that you have these automatic hyperlink anchors
+
+00:31:56.600 --> 00:31:58.959
+that are embedded in your outlines again.
+
+00:31:58.960 --> 00:32:04.519
+sort of like org IDs, but you have to manually place those in org.
+
+00:32:04.520 --> 00:32:09.039
+And it just makes linking much simpler.
+
+00:32:09.040 --> 00:32:10.359
+And you can reference this.
+
+00:32:10.360 --> 00:32:13.799
+You can reference the file and the cell number.
+
+00:32:13.800 --> 00:32:15.487
+And again, you don't put this...
+
+00:32:15.488 --> 00:32:17.679
+Hyperbole will put this in.
+
+00:32:17.680 --> 00:32:20.719
+And then you can even have these view specs, which say,
+
+00:32:20.720 --> 00:32:25.919
+I want to clip the display to one line,
+
+00:32:25.920 --> 00:32:27.399
+and I want to delete ellipses.
+
+00:32:27.400 --> 00:32:31.079
+So here we see a view over the same outline
+
+00:32:31.080 --> 00:32:37.319
+that's all in one mode. So it's just incredibly capable.
+
+00:32:37.320 --> 00:32:40.079
+So here we've said, you know,
+
+00:32:40.080 --> 00:32:42.879
+there's no blank lines between cells.
+
+00:32:42.880 --> 00:32:46.719
+Now I change the view spec and put a blank line in there,
+
+00:32:46.720 --> 00:32:51.879
+and it's all changed. So lots of consistency that you get.
+
+00:32:51.880 --> 00:32:55.599
+When you change a node in the outline,
+
+00:32:55.600 --> 00:32:58.799
+the whole tree shifts, and all of this is maintained,
+
+00:32:58.800 --> 00:33:02.839
+all of the structure is maintained automatically by Hyperbole.
+
+NOTE Org tables
+
+00:33:02.840 --> 00:33:09.479
+You can embed Org tables in here as well.
+
+00:33:09.480 --> 00:33:17.079
+So if I just press M-RET action key again on this... Org disabled.
+
+00:33:17.080 --> 00:33:21.799
+Okay. So now I enabled Org mode here,
+
+00:33:21.800 --> 00:33:25.340
+and where you see, like, tab here shifts a cell.
+
+00:33:25.341 --> 00:33:27.606
+When I'm inside the table,
+
+00:33:27.607 --> 00:33:31.719
+tab just operates like normal Org tables.
+
+00:33:31.720 --> 00:33:33.519
+So I can do all of the things
+
+00:33:33.520 --> 00:33:40.839
+that I can do in org table mode as well within this koutline.
+
+00:33:40.840 --> 00:33:43.399
+So it seems pretty useful to me,
+
+00:33:43.400 --> 00:33:48.519
+but of course, I helped write it.
+
+00:33:48.520 --> 00:33:51.279
+But I think you see some of the benefits
+
+00:33:51.280 --> 00:33:53.959
+that can accrue by using that format.
+
+00:33:53.960 --> 00:33:57.839
+But this is just one piece of Hyperbole,
+
+00:33:57.840 --> 00:34:02.179
+a major mode that you can choose to use or ignore entirely,
+
+00:34:02.180 --> 00:34:04.039
+you know, dependent on your needs.
+
+00:34:04.040 --> 00:34:06.399
+If you're writing requirements, documents,
+
+00:34:06.400 --> 00:34:08.879
+or anything that needs structure,
+
+00:34:08.880 --> 00:34:12.079
+I think that's where this is really ideal.
+
+00:34:12.080 --> 00:34:14.279
+You can write a legal document,
+
+00:34:14.280 --> 00:34:16.159
+and you've got auto-numbering,
+
+00:34:16.160 --> 00:34:18.679
+which is always, if you've ever used Word
+
+00:34:18.680 --> 00:34:21.039
+or any of those word processors,
+
+00:34:21.040 --> 00:34:24.589
+it's really a pain to maintain those hierarchies
+
+00:34:24.590 --> 00:34:26.479
+in those compared to here.
+
+00:34:26.480 --> 00:34:32.239
+Okay, so that was just showing you the Koutliner.
+
+00:34:32.240 --> 00:34:35.279
+Does anybody have any questions
+
+00:34:35.280 --> 00:34:43.279
+or I'll just continue down a bit?
+
+NOTE Selecting between delimiters
+
+00:34:43.280 --> 00:34:47.999
+Okay, so some other capabilities
+
+00:34:48.000 --> 00:34:49.959
+that we've fairly recently put in.
+
+00:34:49.960 --> 00:34:52.799
+Well, this has been here for a long time.
+
+00:34:52.800 --> 00:34:58.719
+You can, I think the binding I use is C-c m.
+
+00:34:58.720 --> 00:35:00.159
+I forget what it is.
+
+00:35:00.160 --> 00:35:07.159
+No, sorry, that's C-c C-m.
+
+00:35:07.160 --> 00:35:14.319
+Now let's C-c \.
+
+00:35:14.320 --> 00:35:21.719
+Okay, so what I wanted to show you here is that the action key
+
+00:35:21.720 --> 00:35:26.679
+on any double quote, single quote, usually,
+
+00:35:26.680 --> 00:35:30.079
+or paired delimiters will select that whole thing.
+
+00:35:30.080 --> 00:35:33.239
+There is this capability, and I probably just select bigger
+
+00:35:33.240 --> 00:35:35.119
+and bigger chunks of text,
+
+00:35:35.120 --> 00:35:39.319
+but this is really nice that you can just go anywhere
+
+00:35:39.320 --> 00:35:42.479
+in pretty much any mode and hit M-RET.
+
+00:35:42.480 --> 00:35:46.559
+And so in Lisp, you can be on the trailing paren
+
+00:35:46.560 --> 00:35:50.599
+and it will select the whole expression, or the opening
+
+00:35:50.600 --> 00:35:52.879
+and it'll select just that piece,
+
+00:35:52.880 --> 00:35:56.159
+but even better when you're copying, pasting,
+
+00:35:56.160 --> 00:36:02.039
+I can... Now if there's no region selected, C-w, M-w,
+
+00:36:02.040 --> 00:36:05.679
+will act on the structured entity
+
+00:36:05.680 --> 00:36:09.359
+that you're at the beginning or ending delimiter for
+
+00:36:09.360 --> 00:36:12.199
+without you having to highlight the region
+
+00:36:12.200 --> 00:36:14.719
+So if I hit M-RET, it would highlight it,
+
+00:36:14.720 --> 00:36:19.085
+but let's just do M-w to cut that
+
+00:36:19.086 --> 00:36:20.917
+and then I'll yank it here.
+
+00:36:20.918 --> 00:36:23.599
+And you see it grabbed the whole expression
+
+00:36:23.600 --> 00:36:25.599
+and just let you yank it.
+
+00:36:25.600 --> 00:36:29.679
+So it's a nice add on to the basic Emacs commands
+
+00:36:29.680 --> 00:36:33.159
+that just let you operate a lot more efficiently.
+
+00:36:33.160 --> 00:36:35.359
+You can do something similar in C mode.
+
+00:36:35.360 --> 00:36:39.439
+You know, on the braces, you can select the whole function
+
+00:36:39.440 --> 00:36:40.439
+with one key press,
+
+00:36:40.440 --> 00:36:43.079
+M-RET, and then copy it somewhere.
+
+NOTE Ace-window
+
+00:36:43.080 --> 00:36:50.559
+And Hyperbole integrates with Ace Window if you use that.
+
+00:36:50.560 --> 00:36:56.799
+So let me split this a few ways. And let's do it over here.
+
+00:36:56.800 --> 00:37:06.799
+We'll just go to scratch. Okay. And then I can go,
+
+00:37:06.800 --> 00:37:08.119
+it's sort of interesting,
+
+00:37:08.120 --> 00:37:11.120
+it works with Dired as well.
+
+00:37:11.120 --> 00:37:16.519
+So I can go here and say, I want to... So if I do M-o,
+
+00:37:16.520 --> 00:37:22.159
+Ace-window will show me the labels to use, a, d, or s, to do something.
+
+00:37:22.160 --> 00:37:24.559
+Like I can move to any of those windows.
+
+00:37:24.560 --> 00:37:27.959
+But what Hyperbole lets you do
+
+00:37:27.960 --> 00:37:30.759
+is say I want to throw with t,
+
+00:37:30.760 --> 00:37:36.399
+like this glass.org file over to the bottom window.
+
+00:37:36.400 --> 00:37:42.479
+So I go M-o to invoke it. I say I want a t to throw it.
+
+00:37:42.480 --> 00:37:46.399
+Then where do I want to throw it to? s, the window, and
+
+00:37:46.400 --> 00:37:49.879
+then you see it's now displaying glass.org.
+
+00:37:49.880 --> 00:37:55.763
+So I can do that with files. I can do it with regions of text.
+
+00:37:55.764 --> 00:37:58.719
+You can replace things in a buffer,
+
+00:37:58.720 --> 00:38:01.199
+or throw the whole thing to the window.
+
+NOTE Dired
+
+00:38:01.200 --> 00:38:02.759
+So a couple extra commands
+
+00:38:02.760 --> 00:38:05.034
+that it extends ace window with...
+
+00:38:05.035 --> 00:38:12.159
+you can even, I think, well, we also have this command,
+
+00:38:12.160 --> 00:38:16.799
+I think it's C-c @, yeah.
+
+00:38:16.800 --> 00:38:21.719
+So what it did there was it just selected the files
+
+00:38:21.720 --> 00:38:22.799
+that I had marked in Dired,
+
+00:38:22.800 --> 00:38:26.839
+it selected and created a window grid out of all of them.
+
+00:38:26.840 --> 00:38:29.559
+You know, so I hit like three keystrokes.
+
+00:38:29.560 --> 00:38:35.159
+That's kind of convenient if you want to see
+
+00:38:35.160 --> 00:38:38.159
+a lot of information all at once.
+
+00:38:38.160 --> 00:38:42.239
+And so we covered all that. I won't go into it too much,
+
+NOTE Controlling windows or frames
+
+00:38:42.240 --> 00:38:46.639
+but there's a whole 'nother window and frame control system
+
+00:38:46.640 --> 00:38:50.799
+under the screen menu here if you type C-h h s.
+
+00:38:50.800 --> 00:38:54.479
+then you can select either controlling windows or frames.
+
+00:38:54.480 --> 00:38:56.119
+Let's do windows.
+
+00:38:56.120 --> 00:39:00.479
+And it has this menu where it's just sort of showing you.
+
+00:39:00.480 --> 00:39:07.839
+I can like split my windows vertically or horizontally.
+
+00:39:07.840 --> 00:39:13.759
+I can widen by a pixel or I can say, or character.
+
+00:39:13.760 --> 00:39:18.319
+I can say, use my prefix argument to change that to 10.
+
+00:39:18.320 --> 00:39:22.479
+And then when I shrink it, shrinks it up by 10
+
+00:39:22.480 --> 00:39:27.319
+or it narrows it width by 10 or it widens it by 10.
+
+00:39:27.320 --> 00:39:33.679
+So it has this concept of prefix arguments that persist
+
+00:39:33.680 --> 00:39:35.719
+and you just type in the number
+
+00:39:35.720 --> 00:39:38.359
+and then you can issue any number of the commands.
+
+00:39:38.360 --> 00:39:41.679
+So you could move windows or frames
+
+00:39:41.680 --> 00:39:44.919
+or create them, delete them, cycle through them,
+
+00:39:44.920 --> 00:39:48.279
+all sorts of things, including relative to movement,
+
+00:39:48.280 --> 00:39:50.719
+relative to the edges of your screens.
+
+00:39:50.720 --> 00:39:52.559
+So if you have multiple screens
+
+00:39:52.560 --> 00:39:54.479
+and many frames that you use,
+
+00:39:54.480 --> 00:39:59.639
+it just makes management very convenient.
+
+00:39:59.640 --> 00:40:02.439
+And then you just q to quit out of there
+
+00:40:02.440 --> 00:40:04.959
+and you're back wherever you were.
+
+NOTE Documentation
+
+00:40:04.960 --> 00:40:10.439
+So, finally, we have a lot of documentation.
+
+00:40:10.440 --> 00:40:12.599
+This is just a link to the videos,
+
+00:40:12.600 --> 00:40:16.239
+which is in the readme and in the manuals.
+
+00:40:16.240 --> 00:40:21.399
+There's two demos or tutorials. One to get you started.
+
+00:40:21.400 --> 00:40:24.719
+Notice I'm using these implicit buttons, so keystrokes,
+
+00:40:24.720 --> 00:40:26.879
+and I can just M-RET on that.
+
+00:40:26.880 --> 00:40:30.519
+And that takes me to, here's all the videos.
+
+00:40:30.520 --> 00:40:34.239
+And you can get started with that
+
+00:40:34.240 --> 00:40:38.279
+or just interact with this demo that we have.
+
+00:40:38.280 --> 00:40:41.519
+And there's one for the Koutliner as well.
+
+NOTE Videos
+
+00:40:41.520 --> 00:40:45.399
+One of the things that... If you're into videos
+
+00:40:45.400 --> 00:40:46.919
+and you need to link to them,
+
+00:40:46.920 --> 00:40:50.519
+notice what you're seeing here. This is a hyperbole feature
+
+00:40:50.520 --> 00:40:54.919
+which is very difficult to achieve any other way that I've seen
+
+00:40:54.920 --> 00:40:59.279
+where you want a specific start and stop time
+
+00:40:59.280 --> 00:41:01.039
+in a video that you want to play.
+
+00:41:01.040 --> 00:41:05.639
+Hyperbole has a built-in link type for that.
+
+00:41:05.640 --> 00:41:08.760
+as you see here. So this is the name of the link
+
+00:41:08.760 --> 00:41:10.919
+that you can reference it by,
+
+00:41:10.920 --> 00:41:14.279
+and then this is the actual link expression.
+
+00:41:14.280 --> 00:41:17.479
+So I could just go and play a video right here,
+
+00:41:17.480 --> 00:41:22.079
+and this is from one long intro to hyperbole that we did.
+
+00:41:22.080 --> 00:41:25.759
+So it's just linking to the specific sections.
+
+00:41:25.760 --> 00:41:27.439
+But that's something, again,
+
+00:41:27.440 --> 00:41:29.519
+this could be embedded anywhere.
+
+00:41:29.520 --> 00:41:33.759
+in any file and it would start to play.
+
+00:41:33.760 --> 00:41:36.559
+Uh, I guess I could try YouTube.
+
+00:41:36.560 --> 00:41:43.239
+Well, I don't want to. Yeah. Okay. It's on my other screen.
+
+00:41:43.240 --> 00:41:48.199
+So, but it did, it did, uh, link to it.
+
+00:41:48.200 --> 00:41:53.319
+So, um, yeah, just, you know, tremendous capability
+
+00:41:53.320 --> 00:41:56.919
+to interlink your information that way.
+
+00:41:56.920 --> 00:42:00.359
+And, uh, You know, again, you learn it bit by bit.
+
+00:42:00.360 --> 00:42:04.279
+You can study one particular section right here.
+
+00:42:04.280 --> 00:42:09.039
+Just jump directly to that if you want to know about it.
+
+NOTE Manual
+
+00:42:09.040 --> 00:42:13.319
+The manual is interlinked, has an extensive glossary,
+
+00:42:13.320 --> 00:42:16.119
+cross-references of sections.
+
+00:42:16.120 --> 00:42:23.119
+And if you go in there, this is the hyperlinked manual.
+
+00:42:23.120 --> 00:42:25.119
+So this is the structure of it
+
+00:42:25.120 --> 00:42:27.799
+with all the subsystems documented.
+
+00:42:27.800 --> 00:42:31.519
+But one of the sections we've added
+
+00:42:31.520 --> 00:42:33.559
+is developing with hyperbole.
+
+00:42:33.560 --> 00:42:37.319
+So if you are or you want to create your own button types,
+
+00:42:37.320 --> 00:42:38.919
+this explains how to do it.
+
+00:42:38.920 --> 00:42:42.959
+Creating types, you can create your own action
+
+00:42:42.960 --> 00:42:44.999
+and implicit button types.
+
+00:42:45.000 --> 00:42:48.359
+And if you look in here, there are three ways
+
+00:42:48.360 --> 00:42:55.039
+to create implicit button types from simpler to harder.
+
+00:42:55.040 --> 00:42:59.079
+So like, here's an example
+
+00:42:59.080 --> 00:43:03.679
+where pressing C-x after this expression
+
+00:43:03.680 --> 00:43:07.199
+defines a new action button link type called pilot.
+
+00:43:07.200 --> 00:43:13.359
+So let's say, I don't know if I have this set up, but we can try it.
+
+00:43:13.360 --> 00:43:21.999
+Yeah, I don't have the variable setup,
+
+00:43:22.000 --> 00:43:25.759
+but basically, you know, it can get you.
+
+00:43:25.760 --> 00:43:31.359
+This is a one line definition of a new action type.
+
+00:43:31.360 --> 00:43:36.399
+that can get you to a Python file
+
+00:43:36.400 --> 00:43:39.639
+based on whatever your Python path is set to
+
+00:43:39.640 --> 00:43:42.919
+with this simple syntax right here.
+
+00:43:42.920 --> 00:43:45.199
+And here we're going to the file.
+
+00:43:45.200 --> 00:43:48.399
+So we have no idea where this is on the file system.
+
+00:43:48.400 --> 00:43:54.959
+And the same way like if you use man path, Python path,
+
+00:43:54.960 --> 00:44:08.599
+you can embed buttons. Let's just go to scratch buffer.
+
+00:44:08.600 --> 00:44:17.919
+My first read-only. It doesn't want me to go.
+
+00:44:17.920 --> 00:44:24.999
+It must be kind of strange.
+
+00:44:25.000 --> 00:44:32.559
+Something with this key window that I have over here.
+
+00:44:32.560 --> 00:44:35.679
+Let me just move off there. Look at that.
+
+00:44:35.680 --> 00:44:38.319
+Maybe it's just activating that.
+
+00:44:38.320 --> 00:44:46.319
+Yeah, it keeps jumping back there.
+
+00:44:46.320 --> 00:44:49.542
+I don't know. I have to get this straight.
+
+00:44:49.543 --> 00:44:53.958
+Yeah, it's not letting me type the buttons.
+
+00:44:53.959 --> 00:44:57.875
+Let me see if I can turn off the key casting.
+
+00:44:57.876 --> 00:45:23.999
+Yeah, maybe that'll help. I don't know, that put me in some strange...
+
+00:45:24.000 --> 00:45:30.719
+Just going to exit out of here if I can.
+
+00:45:30.720 --> 00:45:32.960
+Does anybody have any questions they want to cover?
+
+00:45:33.000 --> 00:45:39.079
+I was just gonna show you yeah a little more on type definitions
+
+00:45:39.080 --> 00:45:53.119
+if there was any interest OK, there's nobody piping up.
+
+00:45:53.120 --> 00:45:56.999
+Let me see if there's any other questions.
+
+00:45:57.000 --> 00:46:04.439
+Hi, Bob. I haven't seen any more questions.
+
+00:46:04.440 --> 00:46:10.839
+Yeah, so maybe it's you, me, and someone called Max is here in the channel.
+
+00:46:10.840 --> 00:46:19.479
+OK. Okay, so if Max doesn't have any questions
+
+00:46:19.480 --> 00:46:24.839
+and there aren't other people, we can just end it there.
+
+00:46:24.840 --> 00:46:34.479
+I don't want to have an audience of zero or talk to that.
+
+00:46:34.480 --> 00:46:37.919
+So, but I think that was a good overview, Max, right?
+
+00:46:37.920 --> 00:46:45.479
+Yes, definitely covered a lot in a short time.
+
+00:46:45.480 --> 00:46:48.639
+And hopefully, you know, just try it out.
+
+00:46:48.640 --> 00:46:52.399
+At the top here, it shows you how to install it.
+
+00:46:52.400 --> 00:46:56.559
+It's pretty simple, basic package and installation.
+
+00:46:56.560 --> 00:47:02.719
+And we're happy to help anybody get started if they need to.
+
+00:47:02.720 --> 00:47:05.199
+So thanks, everyone.
+
+00:47:05.200 --> 00:47:09.279
+And we'll answer any further questions on the Etherpad after this.
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-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main--chapters.vtt b/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main--chapters.vtt
new file mode 100644
index 00000000..8b89b14a
--- /dev/null
+++ b/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:41.399
+Introduction
+
+00:00:41.400 --> 00:02:53.359
+Motivation
+
+00:02:53.360 --> 00:06:02.479
+Evolution
+
+00:06:02.480 --> 00:08:47.279
+What do you get from the feature branch?
+
+00:08:47.280 --> 00:11:59.079
+Behind the scenes: .dir-locals.el
+
+00:11:59.080 --> 00:15:21.079
+When fontspec is not enough
+
+00:15:21.080 --> 00:18:34.479
+Rationale behind my take at LaTeX font management
+
+00:18:34.480 --> 00:22:57.474
+Demonstrations
+
+00:22:57.475 --> 00:23:33.179
+Demo: Emoji
+
+00:23:33.180 --> 00:25:44.399
+Demo: Letter
+
+00:25:44.400 --> 00:28:12.599
+Demo: Side by side
+
+00:28:12.600 --> 00:29:47.119
+Thanks
+
+00:29:47.120 --> 00:32:34.599
+Q: What about video (mp4) support for ox-latex?
diff --git a/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt b/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt
new file mode 100644
index 00000000..5a734387
--- /dev/null
+++ b/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt
@@ -0,0 +1,1437 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.140 --> 00:00:04.456
+Okay. Good afternoon, morning or evening,
+
+00:00:04.457 --> 00:00:06.519
+whatever it is in your time zone.
+
+00:00:06.520 --> 00:00:10.959
+I'm Pedro Aranda and I'm going to be talking about
+
+00:00:10.960 --> 00:00:12.959
+what I've been doing
+
+00:00:12.960 --> 00:00:16.999
+with the latest backend in Org Mode
+
+00:00:17.000 --> 00:00:24.719
+and the different... Sorry... and the way it treats fonts.
+
+00:00:24.720 --> 00:00:28.279
+Just a couple of words before
+
+00:00:28.280 --> 00:00:30.359
+I am going to go through motivation,
+
+00:00:30.360 --> 00:00:35.279
+the evolution and get you an idea of what you can get
+
+00:00:35.280 --> 00:00:38.079
+from the feature branch that I have started
+
+00:00:38.080 --> 00:00:41.399
+and give a couple of demos.
+
+NOTE Motivation
+
+00:00:41.400 --> 00:00:47.779
+Actually, my motivation is I was using ox-latex currently
+
+00:00:47.780 --> 00:00:51.439
+and ox-beamer for as a foundation for my activities,
+
+00:00:51.440 --> 00:00:54.399
+mainly for lecture notes and lecture slides
+
+00:00:54.400 --> 00:01:01.359
+so I came from pure LaTeX and beamers
+
+00:01:01.360 --> 00:01:04.519
+and for me the real cool use case,
+
+00:01:04.520 --> 00:01:05.959
+or I would say this was
+
+00:01:05.960 --> 00:01:07.959
+the killer use case for me was
+
+00:01:07.960 --> 00:01:09.239
+I have a programming lecture,
+
+00:01:09.240 --> 00:01:12.199
+which is sort of a Python 101,
+
+00:01:12.200 --> 00:01:14.199
+and when I'm live in the lecture,
+
+00:01:14.200 --> 00:01:18.279
+I can go, and if the pupils ask me, I can modify code,
+
+00:01:18.280 --> 00:01:21.079
+show modified code and results on the fly,
+
+00:01:21.080 --> 00:01:25.119
+and that's something that really impresses the kids
+
+00:01:25.120 --> 00:01:30.159
+and makes them understand what we are talking about.
+
+00:01:30.160 --> 00:01:34.399
+From my pro... subjective point of view, in some,
+
+00:01:34.400 --> 00:01:38.159
+mainly in ox-beamer, some of the things that I was missing
+
+00:01:38.160 --> 00:01:41.879
+is that emojis would really break the monotony
+
+00:01:41.880 --> 00:01:47.679
+and I missed the support for emojis and stock Beamer themes.
+
+00:01:47.680 --> 00:01:52.159
+And some fonts I also found were suboptimal
+
+00:01:52.160 --> 00:01:56.639
+or difficult to adapt in case they need an adaptation.
+
+00:01:56.640 --> 00:02:01.799
+So, for example, people who need special fonts
+
+00:02:01.800 --> 00:02:05.799
+because of their special capabilities,
+
+00:02:05.800 --> 00:02:11.159
+it's difficult to get those fonts from the stock themes
+
+00:02:11.160 --> 00:02:17.359
+and from the stock font implementations you have there.
+
+00:02:17.360 --> 00:02:21.479
+So, requirements from the Emacs side to do this is none,
+
+00:02:21.480 --> 00:02:24.999
+because basically, okay, the only thing I want
+
+00:02:25.000 --> 00:02:27.159
+is to work on a vanilla Emacs,
+
+00:02:27.160 --> 00:02:28.399
+which is more or less recent,
+
+00:02:28.400 --> 00:02:30.119
+because yes, I'm a bit of a freak
+
+00:02:30.120 --> 00:02:32.479
+and I compile it every two, three...
+
+00:02:32.480 --> 00:02:36.839
+I get it from master and compile it every two, three days.
+
+00:02:36.840 --> 00:02:40.599
+And yahoo, I had to change to a new Mac,
+
+00:02:40.600 --> 00:02:47.359
+and I'm able now to get my vanilla Emacs within four.
+
+00:02:47.360 --> 00:02:53.359
+So that was a big accomplishment in these last days.
+
+NOTE Evolution
+
+00:02:53.360 --> 00:02:55.119
+What is the evolution?
+
+00:02:55.120 --> 00:03:00.719
+I mean my personal evolution and my take of ox-latex
+
+00:03:00.720 --> 00:03:05.919
+was I put everything in a in a LaTeX file
+
+00:03:05.920 --> 00:03:09.959
+and I input it through the LaTeX header, and that's it.
+
+00:03:09.960 --> 00:03:12.319
+But that was not very beginner-friendly,
+
+00:03:12.320 --> 00:03:15.719
+and once I had some people interested in this,
+
+00:03:15.720 --> 00:03:19.159
+"oh wow, I can modify the code on the fly
+
+00:03:19.160 --> 00:03:21.119
+and see the results on the fly,"
+
+00:03:21.120 --> 00:03:26.719
+it was more difficult for them to give it a go.
+
+00:03:26.720 --> 00:03:32.359
+So I just... Because they,
+
+00:03:32.360 --> 00:03:36.919
+there are people who have not that big,
+
+00:03:36.920 --> 00:03:41.159
+that much experience with LaTeX
+
+00:03:41.160 --> 00:03:44.919
+and it can even be a bridge to introduce people into LaTeX.
+
+00:03:44.920 --> 00:03:48.959
+So, in any case, it was not very beginner-friendly
+
+00:03:48.960 --> 00:03:52.799
+and I had complaints on that.
+
+00:03:52.800 --> 00:03:57.159
+So, what I think was, we can do better.
+
+00:03:57.160 --> 00:04:00.399
+My first attempt was something that was completely neutral
+
+00:04:00.400 --> 00:04:02.879
+to Babel or Polyglossia.
+
+00:04:02.880 --> 00:04:06.199
+and it was made basically for font LaTeX
+
+00:04:06.200 --> 00:04:08.839
+although some of the things can... for lualatex
+
+00:04:08.840 --> 00:04:14.279
+and some of the things can also be used with xelatex.
+
+00:04:14.280 --> 00:04:16.519
+So overriding template fonts
+
+00:04:16.520 --> 00:04:21.279
+and taking into account fallback fonts
+
+00:04:21.280 --> 00:04:23.839
+was something that I learned
+
+00:04:23.840 --> 00:04:27.959
+when we started this conversation,
+
+00:04:27.960 --> 00:04:29.839
+and the only problem with this
+
+00:04:29.840 --> 00:04:34.407
+is that fallback fonts only work for lualatex
+
+00:04:34.408 --> 00:04:36.307
+because xelatex doesn't support them.
+
+00:04:36.308 --> 00:04:40.540
+Actually, fallback fonts is a lua feature.
+
+00:04:40.541 --> 00:04:45.319
+There was already something in the list
+
+00:04:45.320 --> 00:04:48.399
+regarding script detection which helped me a lot.
+
+00:04:48.400 --> 00:04:52.399
+So big recognition to Juan M. Macias for that,
+
+00:04:52.400 --> 00:04:57.679
+and for his publishing the algorithm or the script
+
+00:04:57.680 --> 00:05:04.399
+in the org mode mailing list.
+
+00:05:04.400 --> 00:05:11.319
+And then came my sort of little nightmare,
+
+00:05:11.320 --> 00:05:14.174
+which was when we started talking
+
+00:05:14.175 --> 00:05:19.039
+about internationalization or localization.
+
+00:05:19.040 --> 00:05:21.599
+Looking back, I have a very strange feeling
+
+00:05:21.600 --> 00:05:22.919
+about a blurring target there.
+
+00:05:22.920 --> 00:05:29.679
+Because the reality, being very, very frank, did I need it?
+
+00:05:29.680 --> 00:05:34.919
+Really no, because I just needed
+
+00:05:34.920 --> 00:05:39.999
+to add Spanish with Babel and that was it.
+
+00:05:40.000 --> 00:05:43.199
+Well actually for me it still is
+
+00:05:43.200 --> 00:05:46.519
+and you can put the British, German or Italian
+
+00:05:46.520 --> 00:05:48.359
+it continues to be true for me,
+
+00:05:48.360 --> 00:05:51.839
+so I had personally, I had little interest in doing that,
+
+00:05:51.840 --> 00:05:55.319
+but I took it as a challenge
+
+00:05:55.320 --> 00:06:02.479
+which has shown to be really tough.
+
+NOTE What do you get from the feature branch?
+
+00:06:02.480 --> 00:06:04.955
+What do you get from the feature branch?
+
+00:06:04.956 --> 00:06:08.999
+The feature branch adds font management for fontspec,
+
+00:06:09.000 --> 00:06:10.839
+which is not strictly needed
+
+00:06:10.840 --> 00:06:14.919
+when you are on Latin, Cyrillic, and Greek scripts
+
+00:06:14.920 --> 00:06:18.579
+as long as the fonts in your template support them.
+
+00:06:18.580 --> 00:06:28.799
+But again, it's a nice way to get better support here.
+
+00:06:28.800 --> 00:06:33.039
+You don't need it if you're happy with the fonts you get
+
+00:06:33.040 --> 00:06:38.439
+from the templates that you use both for Beamer
+
+00:06:38.440 --> 00:06:40.359
+and the document classes in LaTeX.
+
+00:06:40.360 --> 00:06:43.639
+If you don't want to use alternative fonts,
+
+00:06:43.640 --> 00:06:47.999
+you don't need it, but you would need it.
+
+00:06:48.000 --> 00:06:50.639
+Of course, if you don't want things like,
+
+00:06:50.640 --> 00:06:55.719
+for example, emojis or need emojis,
+
+00:06:55.720 --> 00:06:59.359
+you really don't need fallback fonts.
+
+00:06:59.360 --> 00:07:05.319
+So my idea is that the next thing that you can add
+
+00:07:05.320 --> 00:07:07.319
+is Babel and Polyglossia here
+
+00:07:07.320 --> 00:07:13.079
+for enhanced localization and multilingual documents there.
+
+00:07:13.080 --> 00:07:17.799
+And at the end, my vision was that the keywords involved
+
+00:07:17.800 --> 00:07:19.799
+would be language, the main language.
+
+00:07:19.800 --> 00:07:23.039
+And then a nice idea from Ihor
+
+00:07:23.040 --> 00:07:27.199
+was to put all the secondary languages there too.
+
+00:07:27.200 --> 00:07:30.559
+Then specify the LaTeX compiler.
+
+00:07:30.560 --> 00:07:32.639
+Then what I've added is a keyword
+
+00:07:32.640 --> 00:07:34.279
+which is `#+LATEX_MULTI_LANG:`
+
+00:07:34.280 --> 00:07:37.879
+which can be fontspec or babel or polyglossia
+
+00:07:37.880 --> 00:07:40.319
+for localized documents.
+
+00:07:40.320 --> 00:07:45.359
+By default, this thing is nil and when it is nil,
+
+00:07:45.360 --> 00:07:51.719
+you get the behavior from Org Mode
+
+00:07:51.720 --> 00:07:56.559
+that you already are used to if you don't want to switch.
+
+00:07:56.560 --> 00:08:00.559
+Jing Huang was there and I was really,
+
+00:08:00.560 --> 00:08:03.479
+was chirped into the conversation
+
+00:08:03.480 --> 00:08:06.799
+and really helpful and a big thanks to him
+
+00:08:06.800 --> 00:08:10.974
+because he also had an easy idea
+
+00:08:10.975 --> 00:08:13.079
+to support Chinese and Japanese documents,
+
+00:08:13.080 --> 00:08:17.239
+so that the only thing that you need is to add the language
+
+00:08:17.240 --> 00:08:21.859
+that you're going to write your document in.
+
+00:08:21.860 --> 00:08:23.639
+Very, very big thank you for that,
+
+00:08:23.640 --> 00:08:25.399
+because that was really a challenge
+
+00:08:25.400 --> 00:08:29.279
+not being able to decipher
+
+00:08:29.280 --> 00:08:32.639
+what I was what I was coding there
+
+00:08:32.640 --> 00:08:34.439
+in terms of: I have a document,
+
+00:08:34.440 --> 00:08:37.519
+I copy and paste it from some place,
+
+00:08:37.520 --> 00:08:40.039
+and from there, I get my answer, I get my PDF,
+
+00:08:40.040 --> 00:08:47.279
+and I compare whether it is correct or not.
+
+NOTE Behind the scenes: .dir-locals.el
+
+00:08:47.280 --> 00:08:50.239
+So what is behind the scenes?
+
+00:08:50.240 --> 00:08:52.959
+I've always suggested that in order
+
+00:08:52.960 --> 00:08:55.239
+to use the feature branch efficiently,
+
+00:08:55.240 --> 00:08:59.919
+you create a file with the default values
+
+00:08:59.920 --> 00:09:02.439
+you need for your variables,
+
+00:09:02.440 --> 00:09:06.199
+and that's this famous .dir-locals.el files.
+
+00:09:06.200 --> 00:09:10.239
+What I do is, I have a generic one
+
+00:09:10.240 --> 00:09:12.079
+in my home documents directory,
+
+00:09:12.080 --> 00:09:16.599
+and this is used for all the org documents
+
+00:09:16.600 --> 00:09:20.559
+that are in subdirectories from there.
+
+00:09:20.560 --> 00:09:24.039
+Why? Because normally you will not be
+
+00:09:24.040 --> 00:09:26.599
+changing your fonts that often,
+
+00:09:26.600 --> 00:09:29.599
+and if you need, you can always go
+
+00:09:29.600 --> 00:09:33.479
+and have your configuration locally.
+
+00:09:33.480 --> 00:09:38.639
+So it's this point where I'm collecting
+
+00:09:38.640 --> 00:09:40.759
+my font configuration and
+
+00:09:40.760 --> 00:09:47.519
+for me, this gives me a very, very nice quick start
+
+00:09:47.520 --> 00:09:49.639
+for new documents and presentations.
+
+00:09:49.640 --> 00:09:54.239
+And there you can even configure a lot of compiler
+
+00:09:54.240 --> 00:09:56.839
+and font language management too,
+
+00:09:56.840 --> 00:10:00.919
+so you have everything in a file.
+
+00:10:00.920 --> 00:10:04.759
+And the other nice thing for that
+
+00:10:04.760 --> 00:10:08.479
+is that you can also include that in a subdirectory.
+
+00:10:08.480 --> 00:10:13.199
+And if this subdirectory is something that you're sharing
+
+00:10:13.200 --> 00:10:14.479
+in a project with other people,
+
+00:10:14.480 --> 00:10:17.759
+you are already configuring the, say,
+
+00:10:17.760 --> 00:10:23.559
+quote, unquote, corporate look and feel for your documents
+
+00:10:23.560 --> 00:10:26.079
+in that project for everyone
+
+00:10:26.080 --> 00:10:28.919
+and no one else has to care about
+
+00:10:28.920 --> 00:10:35.119
+how this document has to be configured.
+
+00:10:35.120 --> 00:10:38.679
+One of the things that I really like in this approach
+
+00:10:38.680 --> 00:10:40.439
+is that it is a grow-as-you-go.
+
+00:10:40.440 --> 00:10:44.079
+So, for example, you can start with something like that,
+
+00:10:44.080 --> 00:10:48.439
+which is I have my fonts, my basic fonts for main,
+
+00:10:48.440 --> 00:10:51.479
+which is the serif font, for sans,
+
+00:10:51.480 --> 00:10:54.079
+which is the sans serif font, for maths,
+
+00:10:54.080 --> 00:10:58.639
+and for the mono, with some features like to make them scale.
+
+00:10:58.640 --> 00:11:03.739
+This is something that is provided by you
+
+00:11:03.740 --> 00:11:05.359
+through the fontspec package,
+
+00:11:05.360 --> 00:11:08.959
+and you're happy with it, and you work with it,
+
+00:11:08.960 --> 00:11:11.919
+and in a given moment,
+
+00:11:11.920 --> 00:11:14.439
+you go and you have your own problems
+
+00:11:14.440 --> 00:11:15.779
+or your own challenge,
+
+00:11:15.780 --> 00:11:20.279
+and you need to have, for example, emojis for one of the fonts,
+
+00:11:20.280 --> 00:11:24.959
+and what you do is, in this case, you just add the emojis
+
+00:11:24.960 --> 00:11:31.239
+as a fallback font in the font that where you want to replace this.
+
+00:11:31.240 --> 00:11:37.339
+This is what I'm doing right now for this presentation, and you will see...
+
+00:11:37.340 --> 00:11:39.119
+You can always, as I've said,
+
+00:11:39.120 --> 00:11:42.359
+you can always have your dir-locals,
+
+00:11:42.360 --> 00:11:46.319
+and you can copy that into a working directory
+
+00:11:46.320 --> 00:11:49.439
+which needs special adaptations or has special needs,
+
+00:11:49.440 --> 00:11:54.119
+and from there, you have that directory
+
+00:11:54.120 --> 00:11:59.079
+with your modified or customized dir-locals.el file.
+
+NOTE When fontspec is not enough
+
+00:11:59.080 --> 00:12:05.439
+So, fontspec is normally enough,
+
+00:12:05.440 --> 00:12:09.379
+but sometimes, you can't control all the fonts
+
+00:12:09.380 --> 00:12:15.479
+with fontspec only, and there you have a polyglot here
+
+00:12:15.480 --> 00:12:19.319
+and babel coming to your help.
+
+00:12:19.320 --> 00:12:21.359
+This may also be the case
+
+00:12:21.360 --> 00:12:25.119
+that you are working in an intended language,
+
+00:12:25.120 --> 00:12:28.959
+I don't know which, but an intended language, and you found,
+
+00:12:28.960 --> 00:12:31.279
+and you wanted to see how that was configured,
+
+00:12:31.280 --> 00:12:34.999
+and you found the latest example
+
+00:12:35.000 --> 00:12:38.639
+that used Babel or Polyglossia.
+
+00:12:38.640 --> 00:12:42.559
+The exporter provides you variables
+
+00:12:42.560 --> 00:12:48.679
+to configure both fontspec, Polyglossia and Babel.
+
+00:12:48.680 --> 00:12:56.799
+So just as an example of how I picture this is,
+
+00:12:56.800 --> 00:12:59.359
+uh, you find it in the Internet,
+
+00:12:59.360 --> 00:13:01.679
+something like that, uh, something like this,
+
+00:13:01.680 --> 00:13:05.599
+because you have your document and you need Thai.
+
+00:13:05.600 --> 00:13:09.999
+So, and I found an example in the internet
+
+00:13:10.000 --> 00:13:13.359
+that tells me that I'm going to be using Babel.
+
+00:13:13.360 --> 00:13:15.079
+Main is going to be English.
+
+00:13:15.080 --> 00:13:20.339
+And I'm also going to have Thai.
+
+00:13:20.340 --> 00:13:23.840
+And then they tell me that, for English,
+
+00:13:23.841 --> 00:13:26.639
+I'm going to be using Noto Serif for the main,
+
+00:13:26.640 --> 00:13:30.082
+for the main of the serif font,
+
+00:13:30.083 --> 00:13:31.759
+Noto Sans for the sans font,
+
+00:13:31.760 --> 00:13:35.799
+and then when I'm writing things in Thai,
+
+00:13:35.800 --> 00:13:41.106
+I'm going to be using Noto Serif Thai and Noto Sans Thai.
+
+00:13:41.107 --> 00:13:42.399
+That's what I see in the Internet.
+
+00:13:42.400 --> 00:13:47.159
+So what you can always do, what you would do in this case,
+
+00:13:47.160 --> 00:13:54.279
+is I'm going to get and map the font configurations
+
+00:13:54.280 --> 00:13:59.239
+from the latest into this variable.
+
+00:13:59.240 --> 00:14:03.479
+Things that you have to take into account here
+
+00:14:03.480 --> 00:14:05.107
+is, for example, the language.
+
+00:14:05.108 --> 00:14:07.774
+The language here is Thai. You have the language
+
+00:14:07.775 --> 00:14:10.559
+that you're intending this font for is Thai.
+
+00:14:10.560 --> 00:14:16.319
+So this appears here. In case you don't have any language,
+
+00:14:16.320 --> 00:14:19.439
+like in the first two lines,
+
+00:14:19.440 --> 00:14:21.039
+you just say that the language is nil,
+
+00:14:21.040 --> 00:14:23.959
+which is the language for the default language.
+
+00:14:23.960 --> 00:14:26.799
+The other thing is in my example,
+
+00:14:26.800 --> 00:14:29.374
+in this example that I found in the Internet,
+
+00:14:29.375 --> 00:14:40.174
+I have my properties for the fonts in this part in LaTeX,
+
+00:14:40.175 --> 00:14:43.907
+and I put them as properties here.
+
+00:14:43.908 --> 00:14:53.519
+That's the whole idea behind the feature branch.
+
+00:14:53.520 --> 00:15:01.640
+The babelprovide part is generated or is also integrated
+
+00:15:01.641 --> 00:15:11.319
+from the Org header, mainly from the language line.
+
+00:15:11.320 --> 00:15:14.600
+We have a variable in case you need to tweak it,
+
+00:15:14.640 --> 00:15:21.079
+but normally the defaults provided by Org are good enough.
+
+NOTE Rationale behind my take at LaTeX font management
+
+00:15:21.080 --> 00:15:27.679
+So what is the rationale behind my take at LaTeX font management?
+
+00:15:27.680 --> 00:15:31.359
+That's something that might be something very personal.
+
+00:15:31.360 --> 00:15:33.759
+When am I using fontspec?
+
+00:15:33.760 --> 00:15:37.239
+I'm using fontspec when I'm with Lua- or xelatex,
+
+00:15:37.240 --> 00:15:40.279
+and I want fonts that are different
+
+00:15:40.280 --> 00:15:42.439
+from those specified in the LaTeX class.
+
+00:15:42.440 --> 00:15:49.279
+That's point number one. I will also go for fontspec
+
+00:15:49.280 --> 00:15:52.599
+when I need to support scripts,
+
+00:15:52.600 --> 00:15:54.559
+but I'm missing in the fonts I use,
+
+00:15:54.560 --> 00:15:59.479
+and I can use fallback fonts for that. I have two.
+
+00:15:59.480 --> 00:16:05.239
+The only limitation I have here is the following:
+
+00:16:05.240 --> 00:16:09.039
+all languages must be left to right.
+
+00:16:09.040 --> 00:16:12.799
+And if you don't say anything at all,
+
+00:16:12.800 --> 00:16:16.519
+the LaTeX backend assumes that you want the dates,
+
+00:16:16.520 --> 00:16:18.599
+standard names for the abstract and so on
+
+00:16:18.600 --> 00:16:21.039
+in American English, if you're using them.
+
+00:16:21.040 --> 00:16:24.759
+In many cases, you're not using any sort of
+
+00:16:24.760 --> 00:16:26.274
+abstract, table of contents, and so on,
+
+00:16:26.275 --> 00:16:27.879
+and you don't need that.
+
+00:16:27.880 --> 00:16:34.119
+The important thing is maybe date management.
+
+00:16:34.120 --> 00:16:36.199
+If you need dates, headings
+
+00:16:36.200 --> 00:16:40.359
+or anything in any other language or locale,
+
+00:16:40.360 --> 00:16:46.199
+then yes, then you need to use Babel or Polyglossia.
+
+00:16:46.200 --> 00:16:52.959
+Choice, Depends. Can use polyglossia here,
+
+00:16:52.960 --> 00:16:56.039
+or you can use Babel, whatever you want.
+
+00:16:56.040 --> 00:16:58.599
+Also, in some cases, it will depend
+
+00:16:58.600 --> 00:17:00.399
+if you've been researching a bit
+
+00:17:00.400 --> 00:17:02.439
+of how this is done with pure LaTeX,
+
+00:17:02.440 --> 00:17:05.639
+it will be also depending on, uh,
+
+00:17:05.640 --> 00:17:07.799
+on the examples that you get.
+
+00:17:07.800 --> 00:17:10.999
+So, what can you, when you are using
+
+00:17:11.000 --> 00:17:12.639
+Babel or Polyglossia here, what do you have?
+
+00:17:12.640 --> 00:17:16.919
+You have your dates, your headings, and so on.
+
+00:17:16.920 --> 00:17:20.999
+You might need to control the text
+
+00:17:21.000 --> 00:17:22.919
+in the sense that what passage
+
+00:17:22.920 --> 00:17:24.519
+is written in what language.
+
+00:17:24.520 --> 00:17:29.159
+For example, for things like hyphenation
+
+00:17:29.160 --> 00:17:37.119
+and some ways of writing the hyphens in a
+
+00:17:37.120 --> 00:17:42.519
+and direct speech and things like that.
+
+00:17:42.520 --> 00:17:45.519
+And the other place where you need
+
+00:17:45.520 --> 00:17:47.279
+other Babel or Polyglossia here,
+
+00:17:47.280 --> 00:17:50.439
+and you will see that, because all examples
+
+00:17:50.440 --> 00:17:53.319
+that you can get for later, in this case,
+
+00:17:53.320 --> 00:17:56.140
+is when you have a language
+
+00:17:56.141 --> 00:17:59.407
+that uses right to left alignment
+
+00:17:59.408 --> 00:18:06.439
+like Arabic, Hebrew and others.
+
+00:18:06.440 --> 00:18:14.479
+So one note of, I would say, care is you always use the,
+
+00:18:14.480 --> 00:18:16.639
+if you use Unicode fonts
+
+00:18:16.640 --> 00:18:19.719
+that includes the scripts as you need,
+
+00:18:19.720 --> 00:18:28.239
+you will have done, that will be a great leap for you
+
+00:18:28.240 --> 00:18:34.479
+because that simplifies the configuration a lot.
+
+NOTE Demonstrations
+
+00:18:34.480 --> 00:18:36.839
+Now, a couple of demos.
+
+00:18:36.840 --> 00:18:39.319
+I don't know if you've noticed
+
+00:18:39.320 --> 00:18:43.199
+first demo is that I'm using
+
+00:18:43.200 --> 00:18:47.519
+fonts that are not the official fonts
+
+00:18:47.520 --> 00:18:48.959
+in this Beamer template,
+
+00:18:48.960 --> 00:18:51.399
+which is by the way Boadilla.
+
+00:18:51.400 --> 00:18:53.959
+This would be the first thing.
+
+00:18:53.960 --> 00:18:56.599
+So I've been using other fonts,
+
+00:18:56.600 --> 00:19:01.679
+and they are, at least from what I get in class,
+
+00:19:01.680 --> 00:19:03.759
+they are more readable than the official...
+
+00:19:03.760 --> 00:19:06.279
+than the default fonts in Polyglossia,
+
+00:19:06.280 --> 00:19:12.239
+that you get in Babel for the Boadilla theme.
+
+00:19:12.240 --> 00:19:14.319
+Another thing is what I've told you,
+
+00:19:14.320 --> 00:19:18.959
+I have my own things like emojis.
+
+00:19:18.960 --> 00:19:22.799
+Now, if you allow me for a second,
+
+00:19:22.800 --> 00:19:26.999
+I'm going to switch to the Emacs
+
+00:19:27.000 --> 00:19:36.759
+which is running behind the scenes to show you what.
+
+00:19:36.760 --> 00:19:42.119
+Okay, fine. So, this is the presentation.
+
+00:19:42.120 --> 00:19:44.799
+that I have here, and as you see,
+
+00:19:44.800 --> 00:19:54.839
+I'm using Lua LaTeX and just fontspec,
+
+00:19:54.840 --> 00:19:59.440
+given I don't know why I would need this,
+
+00:19:59.480 --> 00:20:01.079
+this is an English presentation,
+
+00:20:01.080 --> 00:20:03.039
+but just to show you what you can do,
+
+00:20:03.040 --> 00:20:09.359
+if I go back here, and I go to the beginning of the presentation,
+
+00:20:09.360 --> 00:20:11.171
+and now what...
+
+00:20:11.172 --> 00:20:12.940
+[Ihor]: I don't think you're showing anything
+
+00:20:12.941 --> 00:20:18.479
+[Pedro]: Oh, thank you.
+
+00:20:18.480 --> 00:20:21.399
+Okay, this is the presentation, right?
+
+00:20:21.400 --> 00:20:23.540
+So what I'm going to do is, I'm going to go back
+
+00:20:23.541 --> 00:20:31.200
+and I'm going to show the full screen.
+
+00:20:31.201 --> 00:20:32.639
+And in this full screen,
+
+00:20:32.640 --> 00:20:34.759
+you see the presentation on one side
+
+00:20:34.760 --> 00:20:40.599
+and you see Emacs on the other side. Oh, still nothing.
+
+00:20:40.600 --> 00:20:44.319
+Yeah, we're not seeing your screen at the moment, sorry.
+
+00:20:44.320 --> 00:20:47.719
+Oh, thank you. Thank you for that.
+
+00:20:47.720 --> 00:20:52.879
+Now it's starting to come. Okay. Yay! Fine.
+
+00:20:52.880 --> 00:21:00.399
+So this presentation, I've done it with Lua LaTeX,
+
+00:21:00.400 --> 00:21:06.439
+and what I add here is fontspec and English language.
+
+00:21:06.440 --> 00:21:10.240
+Just to show you, but with the same configuration,
+
+00:21:10.280 --> 00:21:11.839
+with the same fontspec configuration,
+
+00:21:11.840 --> 00:21:20.473
+but adding Polyglossia.
+
+00:21:20.474 --> 00:21:23.159
+I just have enough with adding Polyglossia
+
+00:21:23.160 --> 00:21:28.799
+with the Spanish language to get my dates correctly,
+
+00:21:28.800 --> 00:21:32.559
+and this is something... I'm going to see the date in English,
+
+00:21:32.560 --> 00:21:46.719
+and if I now go and recompile it, in a couple of seconds,
+
+00:21:46.720 --> 00:21:48.999
+you will see that the date is in Spanish.
+
+00:21:49.000 --> 00:21:53.879
+We are using the same... Which I can show, by the way.
+
+00:21:53.880 --> 00:21:58.079
+I see just by adding polyglossia here,
+
+00:21:58.080 --> 00:22:02.339
+I can get my dates in Spanish.
+
+00:22:02.340 --> 00:22:09.559
+What... I have included the dir-locals
+
+00:22:09.560 --> 00:22:16.959
+in these lines, but just to discuss it a bit more.
+
+00:22:16.960 --> 00:22:19.439
+I have it for all the presentations.
+
+00:22:19.440 --> 00:22:24.319
+I think it was here. No. For the demo,
+
+00:22:24.320 --> 00:22:28.799
+for the presentations I use for Emacs conferences,
+
+00:22:28.800 --> 00:22:33.959
+I have it, and it's something like this.
+
+00:22:33.960 --> 00:22:37.359
+Actually, you don't need a fallback
+
+00:22:37.360 --> 00:22:40.107
+for the main font here
+
+00:22:40.108 --> 00:22:44.607
+because the presentations are done with the sans font,
+
+00:22:44.608 --> 00:22:46.559
+so the only thing that I would really need
+
+00:22:46.560 --> 00:22:48.199
+would be something like this.
+
+00:22:48.200 --> 00:22:53.919
+This can be commented, and the same happens here
+
+00:22:53.920 --> 00:22:57.474
+with the mono. This can be also commented.
+
+NOTE Demo: Emoji
+
+00:22:57.475 --> 00:23:00.399
+The only thing where I would really need
+
+00:23:00.400 --> 00:23:02.119
+a fallback font is here,
+
+00:23:02.120 --> 00:23:04.319
+and what this is telling me is that
+
+00:23:04.320 --> 00:23:07.079
+you have a fallback for the emoji,
+
+00:23:07.080 --> 00:23:09.799
+for the emoji script,
+
+00:23:09.800 --> 00:23:14.740
+and you need to use the Apple Color Emoji font
+
+00:23:14.741 --> 00:23:15.399
+with a modifier,
+
+00:23:15.400 --> 00:23:18.759
+which in this case is that you need
+
+00:23:18.760 --> 00:23:22.874
+to have the Harfbuzz renderer.
+
+00:23:22.875 --> 00:23:24.599
+That's the only thing that you really need.
+
+00:23:24.600 --> 00:23:26.679
+Where do I get all these things from?
+
+00:23:26.680 --> 00:23:29.039
+All these things I get from the different parts
+
+00:23:29.040 --> 00:23:33.179
+and from different scripts in the Internet.
+
+NOTE Demo: Letter
+
+00:23:33.180 --> 00:23:38.039
+I also have a couple of other things to show.
+
+00:23:38.040 --> 00:23:42.919
+For example, first of all, I do not need this.
+
+00:23:42.920 --> 00:23:44.749
+This is a letter that I've been writing this morning
+
+00:23:44.750 --> 00:23:55.640
+and I'm not using the feature branches at all,
+
+00:23:55.641 --> 00:23:58.119
+because I just needed a sans font,
+
+00:23:58.120 --> 00:24:02.119
+and it's going to be a letter that I'm writing in
+
+00:24:02.120 --> 00:24:06.119
+with the sans font, and the only thing I need
+
+00:24:06.120 --> 00:24:08.679
+was Spanish polyglossia for the date.
+
+00:24:08.680 --> 00:24:14.719
+Anyhow, how did... What was my first thing that I did
+
+00:24:14.720 --> 00:24:19.639
+with the back end? Back in I think it was April,
+
+00:24:19.640 --> 00:24:23.079
+we had a... this comes from the mailing list,
+
+00:24:23.080 --> 00:24:26.759
+we had someone who had this problem right,
+
+00:24:26.760 --> 00:24:29.559
+and he wanted to add emojis,
+
+00:24:29.560 --> 00:24:33.039
+and he had problems with the verbatim font,
+
+00:24:33.040 --> 00:24:35.279
+and that's how everything got started.
+
+00:24:35.280 --> 00:24:43.859
+If you now go and I get my LaTeX for that running.
+
+00:24:43.860 --> 00:24:50.559
+Well, I actually, all my LaTeX is supported for that.
+
+00:24:50.560 --> 00:24:58.119
+And this was what I showed in one of the Emacs, Org Mode meetups.
+
+00:24:58.120 --> 00:25:00.079
+And there you see that we have the emojis.
+
+00:25:00.080 --> 00:25:06.879
+We had the fonts for the different things. We had maps.
+
+00:25:06.880 --> 00:25:13.799
+And you could even go and add scripts
+
+00:25:13.800 --> 00:25:16.319
+and little passages and different scripts.
+
+00:25:16.320 --> 00:25:22.359
+And this was done with the same principles that I want.
+
+00:25:22.360 --> 00:25:25.439
+I have my main font. I have the emojis.
+
+00:25:25.440 --> 00:25:30.559
+and I want, I have my son's phone and I have the emojis,
+
+00:25:30.560 --> 00:25:32.959
+the Han for Japanese and the Kana for Japanese,
+
+00:25:32.960 --> 00:25:36.799
+so that these characters here,
+
+00:25:36.800 --> 00:25:40.679
+both in the sons and in the serif passages
+
+00:25:40.680 --> 00:25:44.399
+are included correctly in the PDF.
+
+NOTE Demo: Side by side
+
+00:25:44.400 --> 00:25:49.999
+And a third thing of what you can do...
+
+00:25:50.000 --> 00:25:53.439
+I've also shown this, so this is more
+
+00:25:53.440 --> 00:25:55.799
+for people who have not seen it.
+
+00:25:55.800 --> 00:26:01.399
+This is a side-by-side passage of...
+
+00:26:01.400 --> 00:26:04.919
+well, actually, the beginning of the analysis by Xenophon
+
+00:26:04.920 --> 00:26:12.919
+both in in Greek and in German, with some comments.
+
+00:26:12.920 --> 00:26:18.679
+And if I go... This is done with Polyglossia.
+
+00:26:18.680 --> 00:26:24.240
+If I go once again and produce
+
+00:26:24.241 --> 00:26:37.999
+the PDF for this... Just a second...
+
+00:26:38.000 --> 00:26:41.119
+Come on. There you are. You get this.
+
+00:26:41.120 --> 00:26:46.399
+And there you see different fonts.
+
+00:26:46.400 --> 00:26:48.239
+Which fonts am I using for this?
+
+00:26:48.240 --> 00:26:53.879
+I'm using for the main font for me is FreeSerif.
+
+00:26:53.880 --> 00:27:01.479
+This listing is produced with DejaVu Sans Mono.
+
+00:27:01.480 --> 00:27:12.899
+And using Polyglossia here, I'm able to go and define
+
+00:27:12.900 --> 00:27:15.799
+the Greek polyton for the variant,
+
+00:27:15.800 --> 00:27:18.799
+for the serif variant with the Noto Serif font,
+
+00:27:18.800 --> 00:27:26.199
+just to differentiate it from the German text.
+
+00:27:26.200 --> 00:27:30.279
+And nice thing is that both in the German text
+
+00:27:30.280 --> 00:27:37.359
+you see for example here, and with the Greek text,
+
+00:27:37.360 --> 00:27:40.879
+everything is scaled to match
+
+00:27:40.880 --> 00:27:44.119
+the lower case of the main font, which is FreeSerif.
+
+00:27:44.120 --> 00:27:45.879
+So that everything looks
+
+00:27:45.880 --> 00:27:49.359
+extremely uniform and nice to read.
+
+00:27:49.360 --> 00:27:53.759
+So that's what you want to do.
+
+00:27:53.760 --> 00:27:56.519
+That's what you can do with this.
+
+00:27:56.520 --> 00:28:12.599
+Just a couple of final words on this.
+
+NOTE Thanks
+
+00:28:12.600 --> 00:28:16.839
+I want to thank once again Juan Manuel Macias and Jing Huang
+
+00:28:16.840 --> 00:28:19.919
+for what they have shared.
+
+00:28:19.920 --> 00:28:24.079
+And I also want to thank everybody
+
+00:28:24.080 --> 00:28:26.479
+for productive contributions to the discussion.
+
+00:28:26.480 --> 00:28:32.159
+I'm saying this because I think I need a longer rest
+
+00:28:32.160 --> 00:28:37.039
+and I'm going to be leaving
+
+00:28:37.040 --> 00:28:39.607
+the feature font untouched for a couple of months
+
+00:28:39.608 --> 00:28:42.220
+so that people can take... the feature branch
+
+00:28:42.221 --> 00:28:43.519
+untouched for a couple of months
+
+00:28:43.520 --> 00:28:47.599
+to see if people want to use it, and how they want to use it,
+
+00:28:47.600 --> 00:28:49.919
+and then maybe in the future, we can discuss
+
+00:28:49.920 --> 00:28:52.559
+if we want to integrate it or not,
+
+00:28:52.560 --> 00:29:24.839
+or if people need it and all that. Now questions, comments?
+
+00:29:24.840 --> 00:29:39.240
+[Ihor]: I think there was one question on Etherpad for...
+
+00:29:39.241 --> 00:29:47.119
+[Pedro]: Beautiful. I think that goes beyond fonts right.
+
+NOTE Q: What about video (mp4) support for ox-latex?
+
+00:29:47.120 --> 00:29:52.839
+Someone is asking what about how is about video
+
+00:29:52.840 --> 00:29:56.319
+mainly MP4 support on ox-latex.
+
+00:29:56.320 --> 00:29:58.799
+"I started the presentations with many videos.
+
+00:29:58.800 --> 00:30:14.739
+This is something that really pushed me back using ox-latex."
+
+00:30:14.740 --> 00:30:18.799
+What I would say to this is, I mean this goes beyond
+
+00:30:18.800 --> 00:30:24.319
+what we're discussing here with fonts.
+
+00:30:24.320 --> 00:30:29.319
+I would advise you to go and get the same
+
+00:30:29.320 --> 00:30:35.239
+or have the same thing that I did,
+
+00:30:35.240 --> 00:30:42.279
+which was, first of all, try to write it in LaTeX,
+
+00:30:42.280 --> 00:30:49.599
+and then, once you have the minimal working examples,
+
+00:30:49.600 --> 00:30:53.159
+you can get the LaTeX parts
+
+00:30:53.160 --> 00:31:00.319
+integrated into your own presentation.
+
+00:31:00.320 --> 00:31:01.319
+That's what I've been doing.
+
+00:31:01.320 --> 00:31:04.519
+By the way, I still do it, for example, not in this,
+
+00:31:04.520 --> 00:31:06.079
+but for my lectures,
+
+00:31:06.080 --> 00:31:09.119
+I have a lot of... I'm using a lot of ticks
+
+00:31:09.120 --> 00:31:12.479
+to do graphs and animated graphs.
+
+00:31:12.480 --> 00:31:18.319
+And that's `#+begin_export latex` `#+end_export` LaTeX.
+
+00:31:18.320 --> 00:31:24.279
+That's what I'm doing.
+
+00:31:24.280 --> 00:31:27.274
+[Ihor]: Videos are generally a bit tricky because you cannot...
+
+00:31:27.275 --> 00:31:31.119
+Not every viewer will play them.
+
+00:31:31.120 --> 00:31:35.119
+so I think there is something called pdfpc that can,
+
+00:31:35.120 --> 00:31:37.399
+this provides a LaTeX package
+
+00:31:37.400 --> 00:31:39.079
+where you can include videos,
+
+00:31:39.080 --> 00:31:44.399
+and then they can be played through that specific program.
+
+00:31:44.400 --> 00:31:46.239
+And JavaScript embedding,
+
+00:31:46.240 --> 00:31:49.999
+that can only be done through Acrobat Reader,
+
+00:31:50.000 --> 00:31:54.519
+which is like also finicky. Sure, yes.
+
+00:31:54.520 --> 00:32:03.999
+[Pedro]: As you said, there are many things that need to be changed.
+
+00:32:04.000 --> 00:32:07.199
+But I mean it's always a thing of taking it
+
+00:32:07.200 --> 00:32:11.359
+and trying to see what you can do
+
+00:32:11.360 --> 00:32:13.319
+and what the specifics are.
+
+00:32:13.320 --> 00:32:17.079
+Maybe this can be done with Acrobat
+
+00:32:17.080 --> 00:32:23.959
+and with a couple of extra packages and who knows.
+
+00:32:23.960 --> 00:32:26.359
+And you can always keep it as as LaTeX
+
+00:32:26.360 --> 00:32:34.599
+as fragments inside Org, I think. Any other questions?
diff --git a/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt
new file mode 100644
index 00000000..849f7619
--- /dev/null
+++ b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt
@@ -0,0 +1,1619 @@
+WEBVTT
+
+NOTE Q: My biggest question with AI code editors trying to integrate with Emacs is -- are the AI code editors able to read unsaved buffers and not just saved files?
+
+00:00:00.000 --> 00:00:01.759
+So let's, I'm just going to answer
+
+00:00:01.760 --> 00:00:04.399
+the questions as I see them on the pad.
+
+00:00:04.400 --> 00:00:07.079
+So yeah, this first question is really good.
+
+00:00:07.080 --> 00:00:09.919
+And I think it's actually this great thing
+
+00:00:09.920 --> 00:00:12.719
+that I did not mention is that like,
+
+00:00:12.720 --> 00:00:14.119
+if you have unsaved buffers,
+
+00:00:14.120 --> 00:00:17.679
+which is, you know, when you're actually doing editing,
+
+00:00:17.680 --> 00:00:21.999
+most buffers are unsaved.
+
+00:00:22.000 --> 00:00:25.959
+really you need something tightly integrated with Emacs
+
+00:00:25.960 --> 00:00:27.479
+to deal with that.
+
+00:00:27.480 --> 00:00:29.039
+So things like, you know,
+
+00:00:29.040 --> 00:00:30.239
+I demonstrated Copilot,
+
+00:00:30.240 --> 00:00:32.519
+I demonstrated Gptel,
+
+00:00:32.520 --> 00:00:35.439
+things like those things, things like Ellama,
+
+00:00:35.440 --> 00:00:38.719
+these things will all work with unsaved buffers
+
+00:00:38.720 --> 00:00:43.959
+because they work via, you know, the input is the buffer.
+
+00:00:43.960 --> 00:00:45.199
+as opposed to a file.
+
+00:00:45.200 --> 00:00:48.519
+Things like Claude Code, Gemini Code, et cetera,
+
+00:00:48.520 --> 00:00:49.519
+those are working with files.
+
+00:00:49.520 --> 00:00:51.639
+They have no idea what is going on with your buffers.
+
+00:00:51.640 --> 00:00:55.119
+And it could be that you can solve this problem
+
+00:00:55.120 --> 00:00:56.799
+by using this thing called MCP,
+
+00:00:56.800 --> 00:01:02.839
+which kind of gives the coding agent
+
+00:01:02.840 --> 00:01:05.119
+a way to see anything in particular.
+
+00:01:05.120 --> 00:01:06.799
+In this case, it would be Emacs
+
+00:01:06.800 --> 00:01:07.799
+and the state of your buffers.
+
+00:01:07.800 --> 00:01:11.319
+But I think that's not a particularly great solution
+
+00:01:11.320 --> 00:01:13.839
+if that's how you want to work.
+
+00:01:13.840 --> 00:01:15.719
+But I think that's kind of like
+
+00:01:15.720 --> 00:01:17.359
+if you're in the Claude Code
+
+00:01:17.360 --> 00:01:19.759
+that kind of world where you know things are happening,
+
+00:01:19.760 --> 00:01:24.679
+basically through a terminal.
+
+00:01:24.680 --> 00:01:26.399
+It's okay, like you typically
+
+00:01:26.400 --> 00:01:28.639
+would not be doing a mix of things.
+
+00:01:28.640 --> 00:01:30.119
+You would just be doing things either
+
+00:01:30.120 --> 00:01:32.399
+in one place or the other place.
+
+00:01:32.400 --> 00:01:33.599
+You know, it could be that you switch off
+
+00:01:33.600 --> 00:01:34.359
+from one place to another,
+
+00:01:34.360 --> 00:01:36.399
+but you wouldn't be doing both at the same time.
+
+00:01:36.400 --> 00:01:40.279
+And it's kind of a, you tend to just fall into one,
+
+00:01:40.280 --> 00:01:41.679
+you know,
+
+00:01:41.680 --> 00:01:44.759
+editing outside the editor or editing inside the editor.
+
+00:01:44.760 --> 00:01:47.039
+And I find myself switching between the two
+
+00:01:47.040 --> 00:01:48.959
+when I use those kinds of tools.
+
+00:01:48.960 --> 00:01:51.439
+So David, let me interrupt you for just one moment.
+
+00:01:51.440 --> 00:01:53.519
+I want to just take care to read out
+
+00:01:53.520 --> 00:01:55.079
+the question that we're answering.
+
+00:01:55.080 --> 00:01:58.999
+The question was, my biggest question with AI code editors
+
+00:01:59.000 --> 00:02:00.999
+trying to integrate with Emacs is,
+
+00:02:01.000 --> 00:02:04.599
+are the AI code editors able to read unsaved buffers
+
+00:02:04.600 --> 00:02:06.319
+and not just saved files?
+
+00:02:06.320 --> 00:02:11.719
+Sorry. Yes. Yeah. Thank you for reminding me to.
+
+00:02:11.720 --> 00:02:13.519
+I will read the questions from now on.
+
+00:02:13.520 --> 00:02:16.599
+But yes, that's what I think about.
+
+00:02:16.600 --> 00:02:20.319
+that interesting questions about unsaved buffers.
+
+NOTE Q: Personally I don't agree with the comment you made about VS Code usage dying out because I see companies/products pushing for tightly-integrated VS-Code agents/products like Windsurf. Thoughts?
+
+00:02:20.320 --> 00:02:22.239
+The next question is,
+
+00:02:22.240 --> 00:02:23.799
+I don't agree with the comment you made
+
+00:02:23.800 --> 00:02:25.199
+about VS Code usage dying out
+
+00:02:25.200 --> 00:02:26.719
+because I see companies and products
+
+00:02:26.720 --> 00:02:28.879
+pushing for tightly integrated agent
+
+00:02:28.880 --> 00:02:31.319
+and products like Windsurf.
+
+00:02:31.320 --> 00:02:33.239
+So thoughts on that?
+
+00:02:33.240 --> 00:02:35.879
+Yeah, I mean, it's really hard
+
+00:02:35.880 --> 00:02:36.999
+to be certain of anything,
+
+00:02:37.000 --> 00:02:38.439
+like things are changing very fast
+
+00:02:38.440 --> 00:02:40.639
+and it's very hard to predict the future.
+
+00:02:40.640 --> 00:02:47.839
+But the trend I see is that um,
+
+00:02:47.840 --> 00:02:50.919
+the sort of outside editing experience
+
+00:02:50.920 --> 00:02:53.519
+where you just kind of instruct a model,
+
+00:02:53.520 --> 00:02:56.759
+what to do is getting better.
+
+00:02:56.760 --> 00:02:58.679
+And as long as that keeps getting better,
+
+00:02:58.680 --> 00:03:00.839
+I think that's going to lessen the demand
+
+00:03:00.840 --> 00:03:04.879
+for these tightly integrated editing experiences.
+
+00:03:04.880 --> 00:03:10.839
+So it could be that, um, a lot of people,
+
+00:03:10.840 --> 00:03:12.839
+especially in, you know, corporate environments
+
+00:03:12.840 --> 00:03:14.279
+just start using,
+
+00:03:14.280 --> 00:03:15.599
+they're going to use whatever is
+
+00:03:15.600 --> 00:03:17.959
+going to make the most productive.
+
+00:03:17.960 --> 00:03:22.399
+And I think right now, it's not clear that that will be,
+
+00:03:22.400 --> 00:03:25.079
+you know, the very agent-based, you know,
+
+00:03:25.080 --> 00:03:27.359
+command line-centric way of doing things.
+
+00:03:27.360 --> 00:03:31.239
+But it certainly, the trend is, if that continues,
+
+00:03:31.240 --> 00:03:33.319
+I think it probably will be like that.
+
+00:03:33.320 --> 00:03:35.479
+So I think we'll have to see.
+
+00:03:35.480 --> 00:03:37.679
+I don't think your opinion is unreasonable.
+
+00:03:37.680 --> 00:03:40.319
+I guess I'm kind of cautiously saying
+
+00:03:40.320 --> 00:03:43.199
+I think it's gonna be the opposite, but I guess we'll see.
+
+00:03:43.200 --> 00:03:47.759
+Like, let's reconvene in a year and see what happens.
+
+NOTE Q: Do you have any thoughts about the environmental cost of using LLMs - either the training of models we can download and use locally, or the larger, commercial models used from the cloud?
+
+00:03:47.760 --> 00:03:49.159
+Uh, the 3rd question answer,
+
+00:03:49.160 --> 00:03:55.319
+do you have any thoughts about the environmental costs
+
+00:03:55.320 --> 00:03:57.079
+of using either the training
+
+00:03:57.080 --> 00:03:59.799
+of the models are we can download or use locally
+
+00:03:59.800 --> 00:04:02.359
+or the larger commercial models used from the cloud.
+
+00:04:02.360 --> 00:04:09.839
+Um, I think. The, you know, I'm on social media,
+
+00:04:09.840 --> 00:04:13.039
+probably a little bit more than I should be.
+
+00:04:13.040 --> 00:04:15.719
+And I do see a lot of discussion there
+
+00:04:15.720 --> 00:04:18.639
+and a lot of concern about the environmental costs of using LLMs.
+
+00:04:18.640 --> 00:04:22.799
+I've looked into this as I'm also concerned
+
+00:04:22.800 --> 00:04:27.199
+about keeping my environmental footprint personally down.
+
+00:04:27.200 --> 00:04:29.199
+And I do this in many ways,
+
+00:04:29.200 --> 00:04:31.319
+but I certainly don't want to kind of like blow that all the water
+
+00:04:31.320 --> 00:04:35.039
+because I'm using LLMs so much.
+
+00:04:35.040 --> 00:04:38.359
+I think that the concerns are mostly overblown.
+
+00:04:38.360 --> 00:04:41.839
+There's a concern that, well, it uses a lot of energy.
+
+00:04:41.840 --> 00:04:46.599
+In aggregate, the total amount of energy
+
+00:04:46.600 --> 00:04:50.559
+used by the data centers in the US is a few percent.
+
+00:04:50.560 --> 00:04:53.839
+And this is a fraction. I think this is like LM's account
+
+00:04:53.840 --> 00:04:56.719
+for something like 20% now
+
+00:04:56.720 --> 00:05:02.479
+of all data center usage, which is a lot.
+
+00:05:02.480 --> 00:05:03.959
+But Those data centers are doing lots of things.
+
+00:05:03.960 --> 00:05:05.239
+They all need to be water cooled.
+
+00:05:05.240 --> 00:05:08.679
+Um, if you like per LLM prompt,
+
+00:05:08.680 --> 00:05:11.399
+the costs are relatively small
+
+00:05:11.400 --> 00:05:13.239
+and by relatively small, I mean,
+
+00:05:13.240 --> 00:05:14.999
+you know, people have said online,
+
+00:05:15.000 --> 00:05:17.879
+well, it's like a few bottles of water per prompt.
+
+00:05:17.880 --> 00:05:20.119
+That, that is not true. It is much, much less than that.
+
+00:05:20.120 --> 00:05:21.359
+It's a fraction of that.
+
+00:05:21.360 --> 00:05:25.119
+So, uh, I don't think the answer is nothing,
+
+00:05:25.120 --> 00:05:28.759
+but I would say it's, I would say you probably,
+
+00:05:28.760 --> 00:05:30.799
+if you want the most bang for your environmental buck,
+
+00:05:30.800 --> 00:05:32.879
+probably the best thing for you to do
+
+00:05:32.880 --> 00:05:35.799
+is take less flights and things like that.
+
+00:05:35.800 --> 00:05:37.319
+Like, yes, you can cut down on this,
+
+00:05:37.320 --> 00:05:40.559
+but I think it's pretty marginal at the moment.
+
+00:05:40.560 --> 00:05:43.079
+We do probably need to think about the total costs
+
+00:05:43.080 --> 00:05:44.599
+like of humanity using all of this.
+
+00:05:44.600 --> 00:05:46.519
+Like a lot of stuff you'll see
+
+00:05:46.520 --> 00:05:48.759
+corporations are using a lot of these things.
+
+00:05:48.760 --> 00:05:52.079
+And so like, just like if you look
+
+00:05:52.080 --> 00:05:54.359
+at water usage or energy uses in total,
+
+00:05:54.360 --> 00:05:56.639
+it's like really corporations that are using this.
+
+00:05:56.640 --> 00:05:58.519
+So there might, there's a lot of leverage there
+
+00:05:58.520 --> 00:06:01.399
+to make things more efficient as opposed to personal use.
+
+00:06:01.400 --> 00:06:06.119
+So I think it's wise to be cautious,
+
+00:06:06.120 --> 00:06:09.079
+but I think it's okay, I think, at least for personal use.
+
+NOTE Q: I must say, I liked your conclusion, but I differ insofar as you said that VS Code differ from Emacs because the former is not as easy to adapt as the latter. Why should Microsoft not adapt VS Code as we adapt Emacs for the new era of coding? And why would VS Code be harder hit? Could you please elaborate on this point?
+
+00:06:09.080 --> 00:06:13.159
+The next question is another,
+
+00:06:13.160 --> 00:06:20.959
+yeah, this is also disagreeing with me about VS Code,
+
+00:06:20.960 --> 00:06:23.839
+but it says, I must say I liked your conclusion,
+
+00:06:23.840 --> 00:06:26.719
+but I differ insofar as you said that VS Code differs from Emacs
+
+00:06:26.720 --> 00:06:30.479
+because the former is not as easy to adapt as the latter.
+
+00:06:30.480 --> 00:06:33.559
+But why should Microsoft not adapt VS Code
+
+00:06:33.560 --> 00:06:35.759
+as we adapt Emacs for the new era of coding?
+
+00:06:35.760 --> 00:06:38.159
+And why would VS Code be harder hit?
+
+00:06:38.160 --> 00:06:43.599
+Could you please elaborate on this point? Yeah, thanks.
+
+00:06:43.600 --> 00:06:46.279
+This is a good question.
+
+00:06:46.280 --> 00:06:50.399
+I think maybe I wasn't as sharp on my point as I could be.
+
+00:06:50.400 --> 00:06:51.239
+Because I think the core
+
+00:06:51.240 --> 00:06:56.479
+of what I'm saying is like, there is a going to be a trend.
+
+00:06:56.480 --> 00:06:58.679
+I believe there will be a trend away from editing.
+
+00:06:58.680 --> 00:07:01.039
+And if we are going to be editing less,
+
+00:07:01.040 --> 00:07:04.559
+I think VS Code, like people will be in editors less.
+
+00:07:04.560 --> 00:07:06.919
+And that means people will be in VS Code less,
+
+00:07:06.920 --> 00:07:09.759
+people will probably be in Emacs less.
+
+00:07:09.760 --> 00:07:13.719
+And yes, I think you can, VS Code
+
+00:07:13.720 --> 00:07:15.399
+is to some degree extensible.
+
+00:07:15.400 --> 00:07:21.559
+but I think there's less of a community, or that is,
+
+00:07:21.560 --> 00:07:23.399
+I think the people using Emacs
+
+00:07:23.400 --> 00:07:25.319
+have used Emacs for a long time.
+
+00:07:25.320 --> 00:07:27.119
+They're going to continue to use Emacs.
+
+00:07:27.120 --> 00:07:28.279
+I speak for myself, but I know
+
+00:07:28.280 --> 00:07:30.119
+a lot of people here are kind of like this,
+
+00:07:30.120 --> 00:07:33.279
+and they're going to just, like,
+
+00:07:33.280 --> 00:07:37.759
+we have a lot of momentum to keep doing things in Emacs,
+
+00:07:37.760 --> 00:07:41.079
+and especially because we have a lot of things
+
+00:07:41.080 --> 00:07:42.799
+that we already do in Emacs.
+
+00:07:42.800 --> 00:07:45.079
+We do to-do lists and, you know, with org mode
+
+00:07:45.080 --> 00:07:47.479
+and some people read email
+
+00:07:47.480 --> 00:07:49.039
+and some people are using
+
+00:07:49.040 --> 00:07:50.959
+shells in Emacs and all these things,
+
+00:07:50.960 --> 00:07:53.959
+I think will make Emacs
+
+00:07:53.960 --> 00:07:55.559
+kind of a better environment
+
+00:07:55.560 --> 00:07:59.599
+if you want to do various editing like things in Emacs.
+
+00:07:59.600 --> 00:08:05.359
+In, you know, in an editing environment,
+
+00:08:05.360 --> 00:08:07.119
+because I think just emails can edit
+
+00:08:07.120 --> 00:08:09.239
+more types of things I think will naturally
+
+00:08:09.240 --> 00:08:10.959
+be a bit more useful than VS code,
+
+00:08:10.960 --> 00:08:14.079
+which people are really just using to edit code
+
+00:08:14.080 --> 00:08:16.799
+and if people find it less useful to edit code.
+
+00:08:16.800 --> 00:08:20.919
+I think it's VS Code will be harder hit than emails
+
+00:08:20.920 --> 00:08:24.239
+because that's its whole, like, that's in the name,
+
+00:08:24.240 --> 00:08:25.559
+like the whole reason for it
+
+00:08:25.560 --> 00:08:27.359
+to be doing things as to edit code.
+
+00:08:27.360 --> 00:08:30.839
+So I think that it's it's vulnerable
+
+00:08:30.840 --> 00:08:31.959
+in a way that Emacs isn't
+
+00:08:31.960 --> 00:08:34.519
+just because Emacs is so very...
+
+00:08:34.520 --> 00:08:40.119
+you know, it's, it could do so many things
+
+00:08:40.120 --> 00:08:42.719
+and and people use it for so many different kinds of things
+
+00:08:42.720 --> 00:08:46.079
+that it's I think it's going to be
+
+00:08:46.080 --> 00:08:46.999
+a little bit more resilient.
+
+00:08:47.000 --> 00:08:48.879
+But as I said with the present.
+
+00:08:48.880 --> 00:08:52.639
+For those of us that are using Emacs,
+
+00:08:52.640 --> 00:08:55.159
+it's everywhere for us.
+
+00:08:55.160 --> 00:08:58.359
+Not necessarily everyone is an I live in Emacs person,
+
+00:08:58.360 --> 00:09:00.279
+but whatever you're using Emacs for,
+
+00:09:00.280 --> 00:09:02.999
+it is the thing you reach for to do that thing.
+
+00:09:03.000 --> 00:09:06.639
+Is that touching on the point?
+
+00:09:06.640 --> 00:09:09.079
+Yeah, that's a great way to say it.
+
+00:09:09.080 --> 00:09:12.439
+Thank you. Thank you, Corwin. Yeah.
+
+00:09:12.440 --> 00:09:14.039
+Thank you. Thank you for that question.
+
+NOTE Q: Do you think that we are falling behind in productivity as Emacs users? Compared to all these VSCode forks that have 1000 buttons and textboxes everywhere (i.e. much richer UIs which are basically webpages).
+
+00:09:14.040 --> 00:09:18.759
+Do you think we're falling behind in productivity as Emacs users
+
+00:09:18.760 --> 00:09:19.959
+compared to all these VS code forks
+
+00:09:19.960 --> 00:09:21.799
+that have a thousand button and text boxes everywhere,
+
+00:09:21.800 --> 00:09:24.319
+which are basically much richer UIs,
+
+00:09:24.320 --> 00:09:25.719
+which are basically web pages?
+
+00:09:25.720 --> 00:09:28.799
+I do think Emacs is falling behind in some ways.
+
+00:09:28.800 --> 00:09:32.519
+I mean, it's definitely showing its age a little bit,
+
+00:09:32.520 --> 00:09:35.079
+especially you mentioned richer UIs
+
+00:09:35.080 --> 00:09:36.519
+that are basically web pages.
+
+00:09:36.520 --> 00:09:41.159
+I mean, this I think is one of the big problems Emacs has
+
+00:09:41.160 --> 00:09:46.479
+is that it uses a very, you know, a much more ancient way
+
+00:09:46.480 --> 00:09:49.799
+of kind of doing UIs that is not particularly flexible
+
+00:09:49.800 --> 00:09:55.959
+and not particularly comfortable for any modern UI coder.
+
+00:09:55.960 --> 00:09:58.639
+And I think if you look at the Emacs stuff out there,
+
+00:09:58.640 --> 00:10:01.959
+like, yes, you can do a few things with UIs.
+
+00:10:01.960 --> 00:10:04.759
+You can have some amount of UI richness,
+
+00:10:04.760 --> 00:10:06.279
+but it's pretty limited.
+
+00:10:06.280 --> 00:10:07.839
+And I kind of, if there's one thing
+
+00:10:07.840 --> 00:10:09.079
+I could wish for in Emacs,
+
+00:10:09.080 --> 00:10:12.519
+it's sort of like, I kind of wish Emacs could be on a,
+
+00:10:12.520 --> 00:10:18.199
+could be built on top of basically like Atom or something like that,
+
+00:10:18.200 --> 00:10:20.399
+where it's like a web framework
+
+00:10:20.400 --> 00:10:24.639
+that allows us to write actual rich pages,
+
+00:10:24.640 --> 00:10:29.639
+rich UIs in a modern style using things like CSS
+
+00:10:29.640 --> 00:10:33.599
+instead of the kinds of things Emacs lets you do.
+
+00:10:33.600 --> 00:10:37.199
+But that said, that is an advantage
+
+00:10:37.200 --> 00:10:38.959
+of VS Code and other editors like that.
+
+00:10:38.960 --> 00:10:45.079
+I think that Emacs does a good job
+
+00:10:45.080 --> 00:10:46.719
+of eventually catching up
+
+00:10:46.720 --> 00:10:49.759
+to all sorts of things people are doing in other editors.
+
+00:10:49.760 --> 00:10:52.599
+It's often that other editors get there first,
+
+00:10:52.600 --> 00:10:55.479
+but there's a lot of momentum
+
+00:10:55.480 --> 00:10:57.839
+to kind of keep Emacs fresh, keep it modern.
+
+00:10:57.840 --> 00:11:00.119
+And it's pretty easy to- I love that.
+
+00:11:00.120 --> 00:11:05.679
+I forgot about the lag. We do have a little bit of lag,
+
+00:11:05.680 --> 00:11:07.999
+but I just, I find that very captivating.
+
+00:11:08.000 --> 00:11:10.359
+We have with technologies
+
+00:11:10.360 --> 00:11:12.399
+like Apache Cassandra in the database world,
+
+00:11:12.400 --> 00:11:14.879
+we have this idea of eventual concurrency.
+
+00:11:14.880 --> 00:11:17.559
+And you make me think with Emacs,
+
+00:11:17.560 --> 00:11:21.279
+we have this idea of eventual feature parity, right?
+
+00:11:21.280 --> 00:11:23.919
+If a feature stays desirable long enough,
+
+00:11:23.920 --> 00:11:25.879
+Emacs will eventually grow it.
+
+00:11:25.880 --> 00:11:32.159
+I think that's a very contagious idea. Yeah, yeah, thanks.
+
+00:11:32.160 --> 00:11:35.839
+I hope that idea makes sense. And I hope it's correct,
+
+00:11:35.840 --> 00:11:39.919
+because I think that I do want Emacs to continue to succeed.
+
+00:11:39.920 --> 00:11:43.439
+And I personally, using Emacs,
+
+00:11:43.440 --> 00:11:46.479
+do not feel myself falling behind in productivity.
+
+00:11:46.480 --> 00:11:51.759
+That said, there's a lot of ways that Emacs can improve
+
+00:11:51.760 --> 00:11:53.519
+and should improve on this front.
+
+00:11:53.520 --> 00:11:56.599
+And a lot of these ways are pretty fundamental.
+
+00:11:56.600 --> 00:11:59.719
+So I kind of hope people pay a lot of attention
+
+00:11:59.720 --> 00:12:02.439
+to some of these more fundamental lower-level Emacs things
+
+00:12:02.440 --> 00:12:04.879
+that really allows the packages
+
+00:12:04.880 --> 00:12:07.599
+to do more richer and better things.
+
+00:12:07.600 --> 00:12:10.359
+Sorry, you have a ton of questions.
+
+00:12:10.360 --> 00:12:12.279
+I shouldn't be doing so much active listening.
+
+00:12:12.280 --> 00:12:17.479
+No, no, I appreciate your input.
+
+NOTE Q: I've been using Claude Code extensively. I recently switched to Agent Shell with Claude Code. Have you tried it, what are your thoughts?
+
+00:12:17.480 --> 00:12:23.079
+OK, next is I've been using Claude Code extensively.
+
+00:12:23.080 --> 00:12:25.519
+I recently switched to Agent Shell with Claude Code.
+
+00:12:25.520 --> 00:12:28.039
+Have you tried it? And what are your thoughts?
+
+00:12:28.040 --> 00:12:30.279
+I actually have tried Agent Shell.
+
+00:12:30.280 --> 00:12:34.719
+And currently, I recorded this video like three months ago.
+
+00:12:34.720 --> 00:12:38.119
+So Agent Shell did not exist then.
+
+00:12:38.120 --> 00:12:39.719
+If Agent Shell did exist,
+
+00:12:39.720 --> 00:12:41.239
+I probably would have demoed it as well.
+
+00:12:41.240 --> 00:12:45.359
+Agent shell is great in the sense of it's...
+
+00:12:45.360 --> 00:12:53.719
+It does use comint, which is the way that I think all Emacs users
+
+00:12:53.720 --> 00:12:57.039
+would prefer to interact with something like Claude Code,
+
+00:12:57.040 --> 00:13:00.199
+or any of those types of tools, which is like, I don't.
+
+00:13:00.200 --> 00:13:02.719
+Um, the other,
+
+00:13:02.720 --> 00:13:05.159
+but it's a trade-off it uses like on the back
+
+00:13:05.160 --> 00:13:06.959
+and it's, it has a common buffer.
+
+00:13:06.960 --> 00:13:08.759
+And then on the back end, it's using a protocol
+
+00:13:08.760 --> 00:13:11.759
+to talk to agent, uh, to Claude Code and other things.
+
+00:13:11.760 --> 00:13:15.399
+The problem is this has a lot of problems.
+
+00:13:15.400 --> 00:13:16.799
+For example, like you don't have
+
+00:13:16.800 --> 00:13:18.319
+completion of slash commands.
+
+00:13:18.320 --> 00:13:22.119
+You don't have, um, if you ask to see the, in Claude Code,
+
+00:13:22.120 --> 00:13:24.319
+you can get a visual representation of. the context window.
+
+00:13:24.320 --> 00:13:30.239
+But you can't do this. I mean, last time I tried,
+
+00:13:30.240 --> 00:13:31.719
+I couldn't do this in agent shell.
+
+00:13:31.720 --> 00:13:33.399
+It's progressing rapidly.
+
+00:13:33.400 --> 00:13:37.479
+But it's not as rich in functionality
+
+00:13:37.480 --> 00:13:40.119
+as using Claude Code directly.
+
+00:13:40.120 --> 00:13:44.839
+On the other hand, because it's letting Emacs be Emacs
+
+00:13:44.840 --> 00:13:49.239
+and using comint, it's a much better experience
+
+00:13:49.240 --> 00:13:50.919
+to actually give instructions.
+
+00:13:50.920 --> 00:13:56.519
+I think the maximum power, though, is, to me,
+
+00:13:56.520 --> 00:13:58.479
+the best way is still like, you know,
+
+00:13:58.480 --> 00:13:59.399
+do your editing in org mode,
+
+00:13:59.400 --> 00:14:02.359
+and then just tell, you could have,
+
+00:14:02.360 --> 00:14:06.959
+you know, the richer experience of using
+
+00:14:06.960 --> 00:14:13.639
+of using Claude Code in, in it's more like shell like form
+
+00:14:13.640 --> 00:14:15.559
+where everything is, it's much, you know,
+
+00:14:15.560 --> 00:14:17.079
+designed to be used in the terminal,
+
+00:14:17.080 --> 00:14:18.759
+but you don't have to type in that much
+
+00:14:18.760 --> 00:14:20.039
+because you're really doing your typing
+
+00:14:20.040 --> 00:14:21.439
+in order to me, I think there's
+
+00:14:21.440 --> 00:14:23.519
+kind of the sweet spot that I like.
+
+00:14:23.520 --> 00:14:26.639
+Um, but agent-shell is a great step forward
+
+00:14:26.640 --> 00:14:29.879
+and I think it's, uh, it's quite good to use.
+
+00:14:29.880 --> 00:14:32.119
+And I, I personally use it a lot.
+
+NOTE Q: In terms of agent selection, what has your experience been with different agents, and have you had any success with hosting your own models and using open weights?
+
+00:14:32.120 --> 00:14:40.479
+Um, OK, so in terms of, next question,
+
+00:14:40.480 --> 00:14:41.839
+in terms of agent selection,
+
+00:14:41.840 --> 00:14:44.639
+what has been your experience with different agents?
+
+00:14:44.640 --> 00:14:48.079
+And have you had any success with hosting your own models
+
+00:14:48.080 --> 00:14:49.439
+and using open weights?
+
+00:14:49.440 --> 00:14:54.159
+I think there's, you know, many people
+
+00:14:54.160 --> 00:14:56.519
+have many different opinions on this.
+
+00:14:56.520 --> 00:15:00.839
+I think Claude Code is, most people I know
+
+00:15:00.840 --> 00:15:03.479
+would say Claude Code is probably,
+
+00:15:03.480 --> 00:15:07.479
+sorry, Claude is probably the best for coding right now.
+
+00:15:07.480 --> 00:15:09.919
+Gemini can be very hit and miss even with 3.0,
+
+00:15:09.920 --> 00:15:12.519
+but Claude is quite good.
+
+00:15:12.520 --> 00:15:16.119
+4.5 Opus is actually relatively cheap
+
+00:15:16.120 --> 00:15:21.119
+compared to the previous version of 4.1 Opus.
+
+00:15:21.120 --> 00:15:24.239
+There's other models out there,
+
+00:15:24.240 --> 00:15:29.159
+but I think most people just stick with Claude
+
+00:15:29.160 --> 00:15:33.999
+because it's very reliable, it's very good,
+
+00:15:34.000 --> 00:15:36.479
+and nothing is obviously better than that.
+
+00:15:36.480 --> 00:15:41.039
+And as far as DeepSeek is pretty good as well,
+
+00:15:41.040 --> 00:15:42.079
+and then much cheaper.
+
+00:15:42.080 --> 00:15:46.839
+I've had some good luck using that locally,
+
+00:15:46.840 --> 00:15:50.159
+but actually the problem is for my day-to-day machine,
+
+00:15:50.160 --> 00:15:53.079
+like my personal machine,
+
+00:15:53.080 --> 00:15:55.679
+it's not powerful enough to run anything locally.
+
+00:15:55.680 --> 00:15:58.479
+And my work machine, it is powerful enough,
+
+00:15:58.480 --> 00:16:02.079
+but I can spend my company's money at will
+
+00:16:02.080 --> 00:16:03.759
+on more powerful models.
+
+00:16:03.760 --> 00:16:05.519
+So there's really not a lot of incentive
+
+00:16:05.520 --> 00:16:06.439
+for me to run locally.
+
+00:16:06.440 --> 00:16:12.199
+I think, as far as I know, I haven't heard
+
+00:16:12.200 --> 00:16:14.359
+of local models being incredible,
+
+00:16:14.360 --> 00:16:16.879
+but I think you can get reasonable quality with them.
+
+00:16:16.880 --> 00:16:19.159
+That is, especially if you're doing
+
+00:16:19.160 --> 00:16:20.279
+relatively simple things,
+
+00:16:20.280 --> 00:16:25.679
+I think it's pretty reasonable to be using those.
+
+00:16:25.680 --> 00:16:29.959
+Also, they tend to be slower
+
+00:16:29.960 --> 00:16:33.279
+than the models that are elsewhere
+
+00:16:33.280 --> 00:16:36.319
+just because they just have more horsepower,
+
+00:16:36.320 --> 00:16:38.679
+they can churn through those tokens a little quicker.
+
+00:16:38.680 --> 00:16:44.719
+[Corwin]: So, I'll just break in here to say,
+
+00:16:44.720 --> 00:16:46.239
+we've got about 7 minutes left
+
+00:16:46.240 --> 00:16:49.239
+before we're cutting over this great discussion so far.
+
+00:16:49.240 --> 00:16:50.839
+I'm very happy to keep going.
+
+00:16:50.840 --> 00:16:55.399
+There's no time limit, but at a certain point,
+
+00:16:55.400 --> 00:16:56.479
+I may have to leave
+
+00:16:56.480 --> 00:16:58.679
+to jump in and prep with the next speaker,
+
+00:16:58.680 --> 00:17:00.359
+but you'll be able to keep going
+
+00:17:00.360 --> 00:17:04.119
+as long as you have the steam for it.
+
+00:17:04.120 --> 00:17:06.159
+[Andrew]: Yeah, I think we have 3 questions. Yeah, thanks.
+
+00:17:06.160 --> 00:17:08.239
+I think we have 3 questions.
+
+00:17:08.240 --> 00:17:09.719
+Let's see if we can get through them
+
+00:17:09.720 --> 00:17:13.267
+all in that time period.
+
+00:17:13.268 --> 00:17:17.359
+OK, this one is interesting talk.
+
+00:17:17.360 --> 00:17:20.439
+I'll start by asking it for everything, but is it editing?
+
+00:17:20.440 --> 00:17:23.239
+I think there's more of a comment than a question.
+
+00:17:23.240 --> 00:17:29.719
+So yes, let us all ask, but is it editing?
+
+00:17:29.720 --> 00:17:33.439
+All right. I can move on to the comment area.
+
+NOTE Q: I'm reading angst in your thinking about AI/editing. What are you excited about?
+
+00:17:33.440 --> 00:17:40.319
+I'm reading angst in your thinking about AI editing.
+
+00:17:40.320 --> 00:17:41.839
+I think that's true.
+
+00:17:41.840 --> 00:17:44.119
+It says, and the question continues with,
+
+00:17:44.120 --> 00:17:45.159
+what are you excited about?
+
+00:17:45.160 --> 00:17:48.719
+Wow, that's an interesting question.
+
+00:17:48.720 --> 00:17:53.799
+I mean, I think there are possibilities.
+
+00:17:53.800 --> 00:17:58.719
+Like, yes, people are going in sort of a relatively obvious direction
+
+00:17:58.720 --> 00:18:01.439
+with LLMs right now.
+
+00:18:01.440 --> 00:18:04.599
+And I think there's lots of opportunities,
+
+00:18:04.600 --> 00:18:07.839
+clever opportunities to do things
+
+00:18:07.840 --> 00:18:11.079
+we couldn't have thought of... Things that are useful,
+
+00:18:11.080 --> 00:18:14.919
+but in ways that are not super obvious to us,
+
+00:18:14.920 --> 00:18:17.019
+and I think I'm still excited
+
+00:18:17.020 --> 00:18:22.939
+about the possibilities of using them in ways that are super helpful
+
+00:18:22.940 --> 00:18:29.319
+and different than normal. I'll give you an example.
+
+00:18:29.320 --> 00:18:33.199
+This is something that I intend to, I think,
+
+00:18:33.200 --> 00:18:36.479
+post on Reddit in a few days,
+
+00:18:36.480 --> 00:18:39.399
+but I have a extension to eshell
+
+00:18:39.400 --> 00:18:43.439
+where you can prefix a command with at,
+
+00:18:43.440 --> 00:18:45.199
+and then just tell it what you want to do,
+
+00:18:45.200 --> 00:18:46.919
+and it will substitute the command
+
+00:18:46.920 --> 00:18:51.919
+that you are thinking of. Because often, I do not remember.
+
+00:18:51.920 --> 00:18:56.919
+I never remember, like, how do you find a file in a directory tree,
+
+00:18:56.920 --> 00:19:00.159
+you know, recursing? Who can remember how to do that?
+
+00:19:00.160 --> 00:19:04.799
+It's like a find, and there's like a dash print there somewhere.
+
+00:19:04.800 --> 00:19:10.159
+Yes. There are some smart people who remember this
+
+00:19:10.160 --> 00:19:11.199
+but I am not one of them.
+
+00:19:11.200 --> 00:19:13.639
+And so I think, like, something like this is like, you just type out,
+
+00:19:13.640 --> 00:19:17.279
+find me this file, and it will substitute
+
+00:19:17.280 --> 00:19:18.879
+the correct command.
+
+00:19:18.880 --> 00:19:20.999
+I think this is, there's a lot of little,
+
+00:19:21.000 --> 00:19:24.319
+little tweaks you could do like, you know, if you want the AI,
+
+00:19:24.320 --> 00:19:26.679
+it could be there for you, and it will help you.
+
+00:19:26.680 --> 00:19:27.559
+And if you don't want it,
+
+00:19:27.560 --> 00:19:28.919
+it's not going to get in your way.
+
+00:19:28.920 --> 00:19:30.639
+And I think this is where Emacs can really shine.
+
+00:19:30.640 --> 00:19:33.079
+It can really take advantage of LLMs,
+
+00:19:33.080 --> 00:19:35.799
+but still remain true to its kind of editing experience,
+
+00:19:35.800 --> 00:19:39.319
+because it's not forcing you to use LLMs all the time.
+
+00:19:39.320 --> 00:19:43.919
+So thank you for that great question.
+
+00:19:43.920 --> 00:19:47.919
+And then the final question. Yep.
+
+NOTE Q: Why does it matter to have a richer UI? All that is left is basically writing and getting the results.
+
+00:19:47.920 --> 00:19:50.839
+This final question is, why does it matter to have a richer UI?
+
+00:19:50.840 --> 00:19:53.439
+All this left is basically running and getting the results.
+
+00:19:53.440 --> 00:19:56.119
+I think maybe this is a response to me complaining
+
+00:19:56.120 --> 00:19:58.479
+about Emacs not having a richer UI before,
+
+00:19:58.480 --> 00:20:03.159
+but I think it does matter a lot for all sorts of things.
+
+00:20:03.160 --> 00:20:07.159
+It's hard to kind of explain succinctly,
+
+00:20:07.160 --> 00:20:08.519
+because I'm talking about UI
+
+00:20:08.520 --> 00:20:09.759
+and I'd have to show you things.
+
+00:20:09.760 --> 00:20:14.599
+But it should be just something like, oh I have an error,
+
+00:20:14.600 --> 00:20:15.799
+and I'm using flymake and I'm,
+
+00:20:15.800 --> 00:20:17.759
+I'm using the... I have options
+
+00:20:17.760 --> 00:20:19.839
+where it'll show me the error in line
+
+00:20:19.840 --> 00:20:22.639
+by underlining things and having a little message,
+
+00:20:22.640 --> 00:20:24.079
+but like, you know what, that message
+
+00:20:24.080 --> 00:20:26.399
+doesn't appear quite right a lot of the times.
+
+00:20:26.400 --> 00:20:30.159
+Or here's another one like. I program in Python a lot.
+
+00:20:30.160 --> 00:20:33.479
+And Python, it's super hard to program in
+
+00:20:33.480 --> 00:20:35.279
+unless you have these little vertical lines
+
+00:20:35.280 --> 00:20:37.599
+that shows you what the indents are. At least I find it.
+
+00:20:37.600 --> 00:20:40.479
+There are two packages that do that.
+
+00:20:40.480 --> 00:20:43.039
+None of them do it particularly well,
+
+00:20:43.040 --> 00:20:44.599
+just because Emacs at its base
+
+00:20:44.600 --> 00:20:45.919
+does not allow you to do this.
+
+00:20:45.920 --> 00:20:47.759
+And so you kind of have to hack it in.
+
+00:20:47.760 --> 00:20:49.479
+And there's lots of ways to mess it up.
+
+00:20:49.480 --> 00:20:52.156
+And when editing, you'll find yourself
+
+00:20:52.157 --> 00:20:55.260
+messing this thing up regularly.
+
+00:20:55.261 --> 00:20:57.159
+So it doesn't look quite clean.
+
+00:20:57.160 --> 00:20:59.079
+And like, there's little artifacts,
+
+00:20:59.080 --> 00:21:01.039
+or, you know, there's little ways that it,
+
+00:21:01.040 --> 00:21:02.359
+it kind of gets things wrong,
+
+00:21:02.360 --> 00:21:03.939
+or you can get things wrong with it.
+
+00:21:03.940 --> 00:21:07.519
+So I think that, like,
+
+00:21:07.520 --> 00:21:13.619
+there's a lot of issues with that sort of thing.
+
+00:21:13.620 --> 00:21:15.759
+And also, like, you know,
+
+00:21:15.760 --> 00:21:17.719
+what if you want to do something like play a video inline,
+
+00:21:17.720 --> 00:21:19.559
+like, I don't know, you might should be able to do that,
+
+00:21:19.560 --> 00:21:21.599
+you might should be able to do anything.
+
+00:21:21.600 --> 00:21:23.799
+But right now, it just can't. I think
+
+00:21:23.800 --> 00:21:24.999
+a lot of the reason as well...
+
+00:21:25.000 --> 00:21:26.519
+you know, we wanted to be compatible
+
+00:21:26.520 --> 00:21:29.919
+with TRS 80 machines or something like that.
+
+00:21:29.920 --> 00:21:33.159
+This is important, this really is important,
+
+00:21:33.160 --> 00:21:34.719
+but I hope there's some way
+
+00:21:34.720 --> 00:21:36.079
+that we can kind of eventually figure out
+
+00:21:36.080 --> 00:21:39.279
+how to get the best of both compatibility and
+
+00:21:39.280 --> 00:21:44.879
+more modern UIs. So, you know, we can have more modern UIs
+
+00:21:44.880 --> 00:21:49.839
+for people that have modern machines and other people
+
+00:21:49.840 --> 00:21:51.959
+either do without that functionality
+
+00:21:51.960 --> 00:21:54.319
+or sort of fall back to some reasonable default.
+
+00:21:54.320 --> 00:21:59.079
+So we have about 30 seconds or a minute.
+
+00:21:59.080 --> 00:22:00.679
+I know there's one more question.
+
+00:22:00.680 --> 00:22:01.559
+I'd love for you to get to it.
+
+00:22:01.560 --> 00:22:02.839
+I just want to make sure that
+
+00:22:02.840 --> 00:22:04.239
+while we're still live on stream,
+
+00:22:04.240 --> 00:22:05.519
+you get a chance to share
+
+00:22:05.520 --> 00:22:06.799
+any closing remarks you might have.
+
+00:22:06.800 --> 00:22:10.879
+Thank you for that. Um, yes.
+
+00:22:10.880 --> 00:22:14.519
+So first of all, I want to thank everyone involved for listening.
+
+00:22:14.520 --> 00:22:18.919
+And I want to thank the core when I think thanks for moderating this.
+
+00:22:18.920 --> 00:22:21.279
+And Sacha, thank you for putting that together.
+
+00:22:21.280 --> 00:22:21.919
+And I know there's more people
+
+00:22:21.920 --> 00:22:23.319
+that are working behind the scenes.
+
+00:22:23.320 --> 00:22:25.079
+So thank you all for putting this together.
+
+NOTE Wrapping up
+
+00:22:25.080 --> 00:22:29.199
+I'm so happy that we all are here. We care about Emacs.
+
+00:22:29.200 --> 00:22:31.199
+We're pushing Emacs forward.
+
+00:22:31.200 --> 00:22:35.959
+We are I think Emacs remains
+
+00:22:35.960 --> 00:22:37.279
+this really remarkable achievement.
+
+00:22:37.280 --> 00:22:41.799
+Like it's amazing that it exists. It continues to exist.
+
+00:22:41.800 --> 00:22:42.999
+It hasn't got... It's hard.
+
+00:22:43.000 --> 00:22:45.159
+It's like, really, there's a lot of work to go into it.
+
+00:22:45.160 --> 00:22:47.559
+So I think let's all just appreciate everyone
+
+00:22:47.560 --> 00:22:50.679
+who contributes and makes all of this possible.
+
+00:22:50.680 --> 00:22:52.159
+Cause it's, if you ever read
+
+00:22:52.160 --> 00:22:53.279
+the emacs-devel mailing list,
+
+00:22:53.280 --> 00:22:55.479
+it's a lot of work, a lot of deep thinking,
+
+00:22:55.480 --> 00:22:56.679
+a lot of careful thinking.
+
+00:22:56.680 --> 00:22:58.599
+And I think this is really important.
+
+00:22:58.600 --> 00:23:02.039
+So thank you, especially to the maintainers of Emacs
+
+00:23:02.040 --> 00:23:04.199
+and everyone who's contributing to the core experience,
+
+00:23:04.200 --> 00:23:07.759
+all the libraries, all the LLM stuff we mentioned before.
+
+00:23:07.760 --> 00:23:09.839
+You're all doing such a fantastic job.
+
+00:23:09.840 --> 00:23:12.323
+It's exciting to be here.
+
+00:23:12.324 --> 00:23:13.799
+[Corwin]: Thank you for your talk, Andrew.
+
+00:23:13.800 --> 00:23:16.159
+It's been just fascinating.
+
+00:23:16.160 --> 00:23:19.759
+If you don't mind, I'd love to jump
+
+00:23:19.760 --> 00:23:23.879
+right over to the last question. OK, let's do that.
+
+NOTE Q: I have 45+ years editing, programming. I'm not sure I can think about things without thinking of buffers, editors etc. Is this a handicap/should we just have people with no experience with code learn to prompt?
+
+00:23:23.880 --> 00:23:27.599
+It says, I have 45 plus years editing programming.
+
+00:23:27.600 --> 00:23:29.239
+I'm not sure I can think about things
+
+00:23:29.240 --> 00:23:31.039
+without thinking of buffers, editors, et cetera.
+
+00:23:31.040 --> 00:23:31.959
+Is this the handicap?
+
+00:23:31.960 --> 00:23:34.239
+Should we have people with no experience
+
+00:23:34.240 --> 00:23:35.319
+with code learning to prompt?
+
+00:23:35.320 --> 00:23:38.799
+[Andrew]: Well, this is something I do have a strong opinion about.
+
+00:23:38.800 --> 00:23:42.159
+I feel like I do not want to see people that have no experience
+
+00:23:42.160 --> 00:23:44.119
+with code learning to prompt. I think it's very limited
+
+00:23:44.120 --> 00:23:46.039
+what you could do right now with that.
+
+00:23:46.040 --> 00:23:48.439
+Like you could do, if you could sort of one-shot it,
+
+00:23:48.440 --> 00:23:51.999
+that is like, I have something that's relatively easy,
+
+00:23:52.000 --> 00:23:54.879
+And it could do it, and I'm going to tell it to do it,
+
+00:23:54.880 --> 00:23:56.039
+and then I'm going to give feedback.
+
+00:23:56.040 --> 00:24:00.039
+OK, as long as this is for relatively short-lived things,
+
+00:24:00.040 --> 00:24:02.599
+I think that works well. But for people who really care
+
+00:24:02.600 --> 00:24:04.279
+about the longevity of their code,
+
+00:24:04.280 --> 00:24:06.599
+really care about software engineering,
+
+00:24:06.600 --> 00:24:09.879
+which is software engineering is very different than just writing code.
+
+00:24:09.880 --> 00:24:11.879
+Software engineering is about maintainability.
+
+00:24:11.880 --> 00:24:15.119
+Software engineering is making sure everything is scalable
+
+00:24:15.120 --> 00:24:19.599
+and all sorts of things that it's unlikely,
+
+00:24:19.600 --> 00:24:21.759
+I think, that an LLM is going to get right.
+
+00:24:21.760 --> 00:24:25.279
+And I've seen a lot of bad cases
+
+00:24:25.280 --> 00:24:27.199
+where people who don't understand code
+
+00:24:27.200 --> 00:24:31.159
+are doing things and it's not working well,
+
+00:24:31.160 --> 00:24:33.239
+because they don't understand
+
+00:24:33.240 --> 00:24:35.279
+some of the complexities
+
+00:24:35.280 --> 00:24:36.959
+or some of the concerns that that you might have
+
+00:24:36.960 --> 00:24:43.279
+in maintaining a piece of code.
+
+00:24:43.280 --> 00:24:45.759
+So I think those people who have lots of experience
+
+00:24:45.760 --> 00:24:46.959
+are the best people to use this.
+
+00:24:46.960 --> 00:24:48.119
+And I think that's what we're seeing
+
+00:24:48.120 --> 00:24:49.079
+in the industry as well,
+
+00:24:49.080 --> 00:24:51.639
+where more senior people are doing quite well
+
+00:24:51.640 --> 00:24:54.599
+because they're able to use LLMs
+
+00:24:54.600 --> 00:24:56.559
+more effectively than junior people.
+
+00:24:56.560 --> 00:25:00.999
+That may all even out because LLMs get even better,
+
+00:25:01.000 --> 00:25:03.079
+but for now hasn't happened.
+
+00:25:03.080 --> 00:25:06.319
+So I think, you know, I also have a ton of experience,
+
+00:25:06.320 --> 00:25:13.079
+not 45 years, but a lot. And, and I think that it's those,
+
+00:25:13.080 --> 00:25:14.839
+those years of experience will only help you.
+
+00:25:14.840 --> 00:25:19.639
+And I think it's great to dip your toes in the water
+
+00:25:19.640 --> 00:25:20.732
+and see what you can do.
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--chapters.vtt b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main--chapters.vtt
new file mode 100644
index 00000000..ac961f9a
--- /dev/null
+++ b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main--chapters.vtt
@@ -0,0 +1,29 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:55.059
+New title page (EmacsConf, dec/2025)
+
+00:00:55.000 --> 00:01:05.000
+Old title page (march/2025)
+
+00:01:05.000 --> 00:06:41.000
+1. The main themes of this video
+
+00:06:41.000 --> 00:07:39.000
+2. Anyone can learn Lisp in one day
+
+00:07:39.000 --> 00:09:20.000
+3. Lambdas for beginners
+
+00:09:20.000 --> 00:10:58.000
+4. Lambdas for beginners broken
+
+00:10:58.000 --> 00:12:54.000
+5. Lambdas for beginners broken (2)
+
+00:12:54.000 --> 00:22:36.159
+A quick demo (version for the EmacsConf 2025)
+
+00:22:36.160 --> 00:25:22.520
+Mr. Jingles: My working memory is small
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..1dd7803d
--- /dev/null
+++ b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt
@@ -0,0 +1,1410 @@
+WEBVTT captioned by edrx
+Kind: captions
+Language: en-GB
+
+NOTE New title page (EmacsConf, dec/2025)
+
+00:00:00.000 --> 00:00:02.359
+Hi, my name is Eduardo Ochs,
+
+00:00:02.360 --> 00:00:06.639
+and this is my video for the EmacsConf 2025.
+
+00:00:06.640 --> 00:00:09.799
+Its title is Some Problems of Modernizing Emacs,
+
+00:00:09.800 --> 00:00:12.839
+and that is the same title as a video
+
+00:00:12.840 --> 00:00:16.199
+that I tried to record in March.
+
+00:00:16.200 --> 00:00:19.879
+But my video from March had a good "beginning" and a bad "rest",
+
+00:00:19.880 --> 00:00:23.759
+and I thought, I can't release that because the rest is very bad.
+
+00:00:23.760 --> 00:00:27.919
+I need to replace... to re-record the last part of the video.
+
+00:00:27.920 --> 00:00:29.759
+But I never did that.
+
+00:00:29.760 --> 00:00:33.199
+So this video is going to be the first 12 minutes
+
+00:00:33.200 --> 00:00:37.959
+of that other video, with another ending.
+
+00:00:37.960 --> 00:00:41.439
+And in this other ending, I'm going to show some things
+
+00:00:41.440 --> 00:00:46.639
+that are very easy to test. And, if people are interested,
+
+00:00:46.640 --> 00:00:51.799
+then the rest of the old video will make more sense.
+
+00:00:51.800 --> 00:00:55.059
+Anyway, let me start.
+
+NOTE Old title page (march/2025)
+
+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".
+
+NOTE 1. The main themes of this video
+
+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 deleted some line breaks here.
+
+00:05:30.000 --> 00:05:33.000
+And another thing that I want 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...
+
+NOTE 2. Anyone can learn Lisp in one day
+
+00:06:41.000 --> 00:06:43.000
+One of my slogans in this video
+
+00:06:43.000 --> 00:06:44.540
+is going to be this one:
+
+00:06:44.541 --> 00:06:46.674
+"Anyone can learn Lisp in one day".
+
+00:06:46.675 --> 00:06:50.420
+this is a part of a bigger quote
+
+00:06:50.421 --> 00:06:53.040
+that I took from a keynote presentation
+
+00:06:53.041 --> 00:06:54.720
+by Abelson and Sussman, who
+
+00:06:54.721 --> 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.
+
+NOTE 3. Lambdas for beginners
+
+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.774
+this expression here the result
+
+00:08:30.775 --> 00:08:32.574
+would be 42,
+
+00:08:32.575 --> 00:08:35.000
+because of this line here, and if we
+
+00:08:35.000 --> 00:08:37.840
+ran this line here the result would be
+
+00:08:37.841 --> 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:50.999
+vector-like lambda here - but that doesn't
+
+00:08:51.000 --> 00:08:53.279
+matter much now...
+
+00:08:53.280 --> 00:08:57.599
+So, until some time ago
+
+00:08:57.600 --> 00:09:00.839
+if we did that and if we ran
+
+00:09:00.840 --> 00:09:02.839
+this expression here, (foo foo)...
+
+00:09:02.840 --> 00:09:04.599
+Emacs would do this: it would
+
+00:09:04.600 --> 00:09:06.000
+replace the first `foo` by this
+
+00:09:06.001 --> 00:09:09.000
+anonymous function here, it would replace
+
+00:09:09.000 --> 00:09:12.040
+the second `foo` by the value of `foo` as a
+
+00:09:12.041 --> 00:09:14.459
+variable, that is 42,
+
+00:09:14.460 --> 00:09:16.774
+and it would evaluate this, and the
+
+00:09:16.775 --> 00:09:20.000
+result would be 420.
+
+NOTE 4. Lambdas for beginners broken
+
+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:46.474
+in the old style, in old Emacses,
+
+00:09:46.475 --> 00:09:49.279
+the result of (symbol-function 'foo)
+
+00:09:49.280 --> 00:09:52.279
+would be this anonymous function here...
+
+00:09:52.280 --> 00:09:56.319
+and now we get this strange thing here.
+
+00:09:56.320 --> 00:10:00.159
+So, this is an "old-style lambda",
+
+00:10:00.160 --> 00:10:03.999
+this is a "vector-like lambda",
+
+00:10:04.000 --> 00:10:07.599
+and until the middle of 2024
+
+00:10:07.600 --> 00:10:09.399
+beginners could learn a lot of Lisp
+
+00:10:09.400 --> 00:10:11.359
+by thinking only in terms of
+
+00:10:11.360 --> 00:10:12.960
+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:26.339
+they would think on lists as
+
+00:10:26.340 --> 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.239
+to appear in many places... and if we use
+
+00:10:43.240 --> 00:10:46.474
+"vector-like lambdas" in a wide sense,
+
+00:10:46.475 --> 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.
+
+NOTE 5. Lambdas for beginners broken (2)
+
+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.674
+Now what they get - what they see -
+
+00:11:33.675 --> 00:11:37.040
+is a tiny part of a very complex structure
+
+00:11:37.041 --> 00:11:39.640
+that is very powerful but that is
+
+00:11:39.641 --> 00:11:41.000
+very difficult to understand...
+
+00:11:41.000 --> 00:11:44.919
+and now our beginners are overwhelmed
+
+00:11:44.920 --> 00:11:51.339
+instead of mind-blown. Note that I said "black box" here.
+
+00:11:51.340 --> 00:11:53.400
+Let me explain the term.
+
+00:11:53.401 --> 00:11:57.539
+We can open what's inside of `foo`...
+
+00:11:57.540 --> 00:12:00.140
+we can open `foo` to see the contents of
+
+00:12:00.141 --> 00:12:03.007
+the symbol `foo`, and we can try to see
+
+00:12:03.008 --> 00:12:06.620
+what's in the function cell of the
+
+00:12:06.621 --> 00:12:08.000
+symbol `foo`...
+
+00:12:08.000 --> 00:12:10.940
+so we can open the box, but what we get
+
+00:12:10.941 --> 00:12:13.374
+is something very difficult to understand,
+
+00:12:13.375 --> 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:24.579
+It is not totally black - we can open open it -
+
+00:12:24.580 --> 00:12:27.374
+but we don't understand what is going on there,
+
+00:12:27.375 --> 00:12:30.000
+so we declare that that is black.
+
+00:12:30.000 --> 00:12:36.574
+And... when these things started to happen
+
+00:12:36.575 --> 00:12:38.974
+_I_ was overwhelmed -
+
+00:12:38.975 --> 00:12:41.974
+and in this video I'm going to pretend
+
+00:12:41.975 --> 00:12:44.000
+that I was not the only person
+
+00:12:44.000 --> 00:12:47.007
+that was overwhelmed
+
+00:12:47.008 --> 00:12:51.240
+by these new structures
+
+00:12:51.241 --> 00:12:52.000
+that are not so elegant
+
+00:12:52.000 --> 00:12:54.000
+as the ones that we had before.
+
+NOTE A quick demo (version for the EmacsConf 2025)
+
+00:12:54.000 --> 00:13:00.599
+Anyway... In the beginning of the video,
+
+00:13:00.600 --> 00:13:02.879
+I said that I was going to replace
+
+00:13:02.880 --> 00:13:06.359
+the second part of my video from March
+
+00:13:06.360 --> 00:13:08.799
+by something that was very easy to test.
+
+00:13:08.800 --> 00:13:11.839
+So this is a quick demo for the _very_ impatient.
+
+00:13:11.840 --> 00:13:16.919
+I'm recording this in December for the EmacsConf 2025.
+
+00:13:16.920 --> 00:13:18.999
+This is the demo that I'm going to present.
+
+00:13:19.000 --> 00:13:21.759
+The idea is that people can run the demo a first time
+
+00:13:21.760 --> 00:13:24.399
+just to check that everything works
+
+00:13:24.400 --> 00:13:27.559
+and to have a notion of how things look like,
+
+00:13:27.560 --> 00:13:29.239
+and then, in a second moment,
+
+00:13:29.240 --> 00:13:32.279
+they can rerun the demo more slowly
+
+00:13:32.280 --> 00:13:34.879
+to understand what each step does.
+
+00:13:34.880 --> 00:13:38.799
+So... we are in a file called "00-try-this"...
+
+00:13:38.800 --> 00:13:42.199
+and the idea is that we can execute most of this file
+
+00:13:42.200 --> 00:13:45.359
+just by typing `f8`​s in the right places.
+
+00:13:45.360 --> 00:13:47.479
+Remember that when we type `f8`
+
+00:13:47.480 --> 00:13:49.839
+on a line that starts with two red stars,
+
+00:13:49.840 --> 00:13:53.199
+eev treats that line as a comment.
+
+00:13:53.200 --> 00:13:58.007
+So I'm going to start here... Note that it says in the bottom
+
+00:13:58.008 --> 00:13:59.740
+of the screen that this is a comment.
+
+00:13:59.741 --> 00:14:09.879
+We are going to run this to download some files...
+
+00:14:09.880 --> 00:14:12.959
+Now the files are there...
+
+00:14:12.960 --> 00:14:17.319
+This `find-2a` here shows a certain file
+
+00:14:17.320 --> 00:14:19.159
+at the window at the right,
+
+00:14:19.160 --> 00:14:22.479
+but we don't need to pay attention to that.
+
+00:14:22.480 --> 00:14:24.199
+And this thing `load`​s that file.
+
+00:14:24.200 --> 00:14:27.519
+So when we load that file, it defines some functions here
+
+00:14:27.520 --> 00:14:29.799
+that are going to be used by the rest of the examples.
+
+00:14:29.800 --> 00:14:34.019
+Now we can run this thing here... Note that
+
+00:14:34.020 --> 00:14:34.879
+we just defined some functions
+
+00:14:34.880 --> 00:14:39.359
+and then we ran these functions here... `find-eoutput-2a`...
+
+00:14:39.360 --> 00:14:42.679
+and they show some things in the window at the right.
+
+00:14:42.680 --> 00:14:45.679
+These things are boring.
+
+00:14:45.680 --> 00:14:49.679
+When we run `adt-insert` with argument 42,
+
+00:14:49.680 --> 00:14:52.399
+it just shows a 42, in this way...
+
+00:14:52.400 --> 00:14:55.639
+The other ones show other numbers... and so on.
+
+00:14:55.640 --> 00:14:59.479
+And... what happens when we modify
+
+00:14:59.480 --> 00:15:02.359
+this function here, `adt-2`,
+
+00:15:02.360 --> 00:15:05.199
+by adding and removing advices to it?
+
+00:15:05.200 --> 00:15:06.919
+The idea is that people can run
+
+00:15:06.920 --> 00:15:08.679
+this thing here several times,
+
+00:15:08.680 --> 00:15:10.799
+watching the window at the right,
+
+00:15:10.800 --> 00:15:14.719
+because the results are going to be shown there.
+
+00:15:14.720 --> 00:15:17.799
+So, in the first moment, when we run...
+
+00:15:17.800 --> 00:15:21.679
+no, no, sorry, sorry, let me run it again.
+
+00:15:21.680 --> 00:15:24.039
+In the first moment when we run `adt-2`
+
+00:15:24.040 --> 00:15:28.239
+it just shows a 2, and then we modify it in a certain way,
+
+00:15:28.240 --> 00:15:29.479
+and we run it again,
+
+00:15:29.480 --> 00:15:33.799
+and now before showing the 2 it shows a 1, mysteriously,
+
+00:15:33.800 --> 00:15:37.119
+and then we add something to be run after the 2,
+
+00:15:37.120 --> 00:15:38.479
+And we run it again,
+
+00:15:38.480 --> 00:15:41.839
+and now `adt-2` shows these three things.
+
+00:15:41.840 --> 00:15:43.959
+And then we remove the advices,
+
+00:15:43.960 --> 00:15:45.159
+we remove these other things,
+
+00:15:45.160 --> 00:15:49.079
+and when we run `adt-2` again, it shows only `;; --&gt; 2`.
+
+00:15:49.080 --> 00:15:51.879
+It's impossible to understand that in the first time,
+
+00:15:51.880 --> 00:15:57.879
+so we can run that several times... to see how things work.
+
+00:15:57.880 --> 00:16:02.279
+And now we want to understand
+
+00:16:02.280 --> 00:16:04.959
+what changes in the function `adt-2`...
+
+00:16:04.960 --> 00:16:08.639
+how it is modified internally.
+
+00:16:08.640 --> 00:16:11.479
+I'm calling that the internal view of the function,
+
+00:16:11.480 --> 00:16:13.599
+and we are going to compare
+
+00:16:13.600 --> 00:16:16.679
+several internal views of the function `adt-2`.
+
+00:16:16.680 --> 00:16:19.999
+I'm going to reset the function `adt-2`
+
+00:16:20.000 --> 00:16:25.679
+by removing the advices and placing the advices on it again...
+
+00:16:25.680 --> 00:16:28.507
+and if we just pretty-print this function here,
+
+00:16:28.508 --> 00:16:36.319
+the symbol... the value of this symbol here as a function,
+
+00:16:36.320 --> 00:16:38.639
+it is something very ugly.
+
+00:16:38.640 --> 00:16:43.839
+But if we print it in another way, with `cl-prin1`,
+
+00:16:43.840 --> 00:16:47.239
+then we get something that is much nicer...
+
+00:16:47.240 --> 00:16:51.159
+but that is not indented. And if we use this thing here,
+
+00:16:51.160 --> 00:16:55.839
+`cl-prin2` instead of `cl-prin1`, it becomes indented.
+
+00:16:55.840 --> 00:17:00.839
+So let's try it again.
+
+00:17:00.840 --> 00:17:06.799
+Here is the current view of what is `adt-2`.
+
+00:17:06.800 --> 00:17:09.999
+So, the original `adt-insert` is here...
+
+00:17:10.000 --> 00:17:11.839
+and here are some modifications
+
+00:17:11.840 --> 00:17:13.519
+that were added by the advices.
+
+00:17:13.520 --> 00:17:16.759
+And we can run these things many times
+
+00:17:16.760 --> 00:17:19.239
+to understand what each step does.
+
+00:17:19.240 --> 00:17:21.239
+But my suggestion is: in the first time
+
+00:17:21.240 --> 00:17:23.879
+just run everything very quickly...
+
+00:17:23.880 --> 00:17:25.199
+and then you run it again,
+
+00:17:25.200 --> 00:17:29.119
+paying attention to the parts that look more interesting.
+
+00:17:29.120 --> 00:17:37.373
+Now, I'm going to... Remember that here
+
+00:17:37.374 --> 00:17:42.559
+I printed the contents of `adt-2` in several different ways,
+
+00:17:42.560 --> 00:17:47.119
+and now I'm going to show how we can do the same idea
+
+00:17:47.120 --> 00:17:51.599
+of printing something in different ways for lambdas...
+
+00:17:51.600 --> 00:17:52.919
+that is something that I explained
+
+00:17:52.920 --> 00:17:54.639
+in the first part of the video.
+
+00:17:54.640 --> 00:18:00.639
+In this part of the demo we define a function `foo`...
+
+00:18:00.640 --> 00:18:06.360
+this `setq` here defines `o` as
+
+00:18:06.361 --> 00:18:08.959
+the contents of the function cell of `foo`...
+
+00:18:08.960 --> 00:18:12.999
+And now we are going to print
+
+00:18:13.000 --> 00:18:15.399
+that `o` in several different ways.
+
+00:18:15.400 --> 00:18:19.199
+The default way is this one, it's very ugly,
+
+00:18:19.200 --> 00:18:22.239
+but we can redefine how these things are printed
+
+00:18:22.240 --> 00:18:24.559
+by just running these lines...
+
+00:18:24.560 --> 00:18:28.719
+and if we pay attention at what's happening
+
+00:18:28.720 --> 00:18:30.519
+at the window at the right,
+
+00:18:30.520 --> 00:18:33.559
+we can see that we have several different
+
+00:18:33.560 --> 00:18:35.759
+printed representations for the same thing...
+
+00:18:35.760 --> 00:18:36.879
+and then at the last step,
+
+00:18:36.880 --> 00:18:41.079
+we reset the printer to the default representation.
+
+00:18:41.080 --> 00:18:43.279
+And the details are here.
+
+00:18:43.280 --> 00:18:44.999
+If we run these lines here,
+
+00:18:45.000 --> 00:18:48.759
+they show the definitions at the window at the right.
+
+00:18:48.760 --> 00:18:53.879
+And this... now comes the difficult part,
+
+00:18:53.880 --> 00:18:56.679
+in which we have to do something
+
+00:18:56.680 --> 00:19:02.079
+besides just running things with F8. We need
+
+00:19:02.080 --> 00:19:04.919
+a help buffer with buttons...
+
+00:19:04.920 --> 00:19:08.919
+buttons in the traditional sense,
+
+00:19:08.920 --> 00:19:11.559
+and we need to choose a certain button there,
+
+00:19:11.560 --> 00:19:13.439
+or any button there,
+
+00:19:13.440 --> 00:19:17.940
+and run `M-x ee-set-button` on that button.
+
+00:19:17.941 --> 00:19:24.719
+So, let me define a `struct` here,
+
+00:19:24.720 --> 00:19:29.359
+and this is some help on what is that structure.
+
+00:19:29.360 --> 00:19:33.599
+I'm going to choose this button here
+
+00:19:33.600 --> 00:19:40.159
+and I'm going to type `M-x ee-set-button`.
+
+00:19:40.160 --> 00:19:43.559
+The message is a bit obscure.
+
+00:19:43.560 --> 00:19:47.959
+And now we have something that displays
+
+00:19:47.960 --> 00:19:51.079
+a lot of information about that button...
+
+00:19:51.080 --> 00:19:53.919
+And we can also run that with just `F8`s.
+
+00:19:53.920 --> 00:20:00.279
+By the way, if we want to understand
+
+00:20:00.280 --> 00:20:02.319
+the code that's behind these things,
+
+00:20:02.320 --> 00:20:04.839
+we can run this sexp here.
+
+00:20:04.840 --> 00:20:07.219
+It is going to show the code here at the right.
+
+00:20:07.220 --> 00:20:10.759
+But anyway, these first lines here...
+
+00:20:10.760 --> 00:20:15.479
+they display the output in the echo area... Let's try...
+
+00:20:15.480 --> 00:20:20.559
+And each one of them extracts a different part
+
+00:20:20.560 --> 00:20:22.559
+of the information on that button.
+
+00:20:22.560 --> 00:20:26.039
+And these other lines here create a three-window setting
+
+00:20:26.040 --> 00:20:29.639
+in which the help buffer is shown here,
+
+00:20:29.640 --> 00:20:33.119
+and the result of some other thing
+
+00:20:33.120 --> 00:20:39.979
+is shown in the third window. Let's try...
+
+00:20:39.980 --> 00:20:46.107
+So now that we have... well... I said
+
+00:20:46.108 --> 00:20:48.407
+that we needed to choose a certain button
+
+00:20:48.408 --> 00:20:53.439
+and run `M-x ee-set-button` there. We have done that...
+
+00:20:53.440 --> 00:20:55.919
+so now this variable `ee-button`
+
+00:20:55.920 --> 00:20:58.439
+contains information about the button...
+
+00:20:58.440 --> 00:21:01.119
+And now we can run this part here
+
+00:21:01.120 --> 00:21:03.479
+as many times as we want to...
+
+00:21:03.480 --> 00:21:07.479
+try to understand what are the values of these things here...
+
+00:21:07.480 --> 00:21:11.679
+and how some things start with a value that is very complex
+
+00:21:11.680 --> 00:21:13.839
+and very difficult to understand,
+
+00:21:13.840 --> 00:21:16.839
+and then we extract the more interesting parts.
+
+00:21:16.840 --> 00:21:22.279
+And the details, as I said, are here.
+
+00:21:22.280 --> 00:21:26.759
+That was the end of the demo, and my question is,
+
+00:21:26.760 --> 00:21:28.559
+what was your reaction to that?
+
+00:21:28.560 --> 00:21:32.679
+If your reaction was more like "wow" than like "blergh"
+
+00:21:32.680 --> 00:21:37.039
+then you might like the last part of the video that I recorded in March,
+
+00:21:37.040 --> 00:21:38.399
+that was very technical...
+
+00:21:38.400 --> 00:21:42.719
+When I recorded it, I thought, oh my god, this video is very bad...
+
+00:21:42.720 --> 00:21:47.279
+only the hardcore eev users are going to like that,
+
+00:21:47.280 --> 00:21:51.039
+and there are less than five hardcore
+
+00:21:51.040 --> 00:21:52.839
+eev users in the world...
+
+00:21:52.840 --> 00:21:56.639
+But anyway, if you saw that introduction
+
+00:21:56.640 --> 00:21:59.079
+and you think that these things are interesting,
+
+00:21:59.080 --> 00:22:02.999
+you can execute any one of these S-expressions here
+
+00:22:03.000 --> 00:22:05.999
+and take a look at the final part of that video
+
+00:22:06.000 --> 00:22:09.559
+that describes how I wrote some functions
+
+00:22:09.560 --> 00:22:14.239
+for exploring buttons. If you execute this sexp here,
+
+00:22:14.240 --> 00:22:19.559
+it plays a part of the video starting from that position.
+
+00:22:19.560 --> 00:22:26.919
+If you execute this one, you go to the subtitles in HTML...
+
+00:22:26.920 --> 00:22:30.559
+and if you run this one, you go
+
+00:22:30.560 --> 00:22:36.159
+to the subtitles in another format. And... that's it!
+
+NOTE Mr. Jingles: My working memory is small
+
+00:22:36.160 --> 00:22:40.119
+No, no, sorry, I said "that's it",
+
+00:22:40.120 --> 00:22:42.159
+but I forgot a very important part...
+
+00:22:42.160 --> 00:22:45.159
+I had prepared this slide here
+
+00:22:45.160 --> 00:22:48.507
+to explain some design decisions behind eev
+
+00:22:48.508 --> 00:22:53.679
+and why there are so few users of eev... and let me do that.
+
+00:22:53.680 --> 00:22:57.919
+The thing is that my working memory is very small,
+
+00:22:57.920 --> 00:23:01.279
+and I need examples that are easy to visualize...
+
+00:23:01.280 --> 00:23:04.959
+ideally, examples that are easy to run
+
+00:23:04.960 --> 00:23:10.307
+and that I can compare the outputs
+
+00:23:10.308 --> 00:23:12.159
+of different ways of running them.
+
+00:23:12.160 --> 00:23:16.359
+For me, understanding specifications
+
+00:23:16.360 --> 00:23:20.679
+in an API is not enough... examples work much better for me.
+
+00:23:20.680 --> 00:23:24.439
+Also, I make lots of mistakes when I type...
+
+00:23:24.440 --> 00:23:28.399
+so I need ways to run my executable notes
+
+00:23:28.400 --> 00:23:31.879
+by just typing `f8` and `M-e`...
+
+00:23:31.880 --> 00:23:37.039
+and... most people in the #emacs channel and in other places
+
+00:23:37.040 --> 00:23:44.519
+recommend executing sexps by typing `M-:`, like this...
+
+00:23:44.520 --> 00:23:49.239
+But I hate that... I think that `M-:` and IELM are
+
+00:23:49.240 --> 00:23:54.559
+for people who type well, so not me...
+
+00:23:54.560 --> 00:23:58.839
+And also, 99% of what I do is scratch code.
+
+00:23:58.840 --> 00:24:01.639
+Very few things that I do go
+
+00:24:01.640 --> 00:24:05.799
+into "production" - between quotes.
+
+00:24:05.800 --> 00:24:10.199
+So most of my tests are not automated tests.
+
+00:24:10.200 --> 00:24:12.439
+They are just things that I run with F8,
+
+00:24:12.440 --> 00:24:15.879
+and they don't include the expected result.
+
+00:24:15.880 --> 00:24:19.159
+Many people feel that this is very, very, very wrong.
+
+00:24:19.160 --> 00:24:23.279
+Tests MUST MEAN automated tests.
+
+00:24:23.280 --> 00:24:25.639
+Also, and this is very frustrating,
+
+00:24:25.640 --> 00:24:28.399
+eev has lots of "non-users",
+
+00:24:28.400 --> 00:24:31.519
+I mean, people who have tried to use it,
+
+00:24:31.520 --> 00:24:34.759
+but they said that they couldn't figure out how to use it.
+
+00:24:34.760 --> 00:24:36.159
+They couldn't understand
+
+00:24:36.160 --> 00:24:38.079
+what would be the workflows for eev.
+
+00:24:38.080 --> 00:24:43.679
+And that's the same that happens with me with code blocks in Org...
+
+00:24:43.680 --> 00:24:48.759
+I'm still at the point in which code blocks in Org just feel wrong.
+
+00:24:48.760 --> 00:24:55.199
+I still don't understand how to organize my workflows around code blocks.
+
+00:24:55.200 --> 00:24:58.999
+I said that eev has very few users,
+
+00:24:59.000 --> 00:25:02.239
+and they are all very weird and very busy,
+
+00:25:02.240 --> 00:25:06.359
+and I decided that all my blog-ish posts about eev
+
+00:25:06.360 --> 00:25:09.719
+would be things that they can run in a few minutes...
+
+00:25:09.720 --> 00:25:13.039
+just like the demo that I showed a few minutes ago.
+
+00:25:13.040 --> 00:25:16.119
+I said "like the examples in the rest of the video",
+
+00:25:16.120 --> 00:25:17.399
+but I forgot this slide,
+
+00:25:17.400 --> 00:25:19.639
+and I'm recording this after the demo.
+
+00:25:19.640 --> 00:25:22.520
+So... that's it. Thanks!
diff --git a/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt b/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt
new file mode 100644
index 00000000..04d1a62b
--- /dev/null
+++ b/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt
@@ -0,0 +1,3058 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.599
+All right, so yes, we have a little bit of time
+
+00:00:03.600 --> 00:00:05.719
+while we are waiting for the dev track to finish,
+
+00:00:05.720 --> 00:00:08.319
+and we could just declare this as a break,
+
+00:00:08.320 --> 00:00:12.039
+or if anyone's got any interesting last-minute stuff,
+
+00:00:12.040 --> 00:00:17.239
+you can come and share it here,
+
+00:00:17.240 --> 00:00:20.879
+where Karthik is also hanging out.
+
+00:00:20.880 --> 00:00:23.279
+I think every time I read one of your long blog posts,
+
+00:00:23.280 --> 00:00:25.559
+Karthik, I'm like, mm, life goals.
+
+00:00:25.560 --> 00:00:28.399
+Someday I want to write something with nice diagrams
+
+00:00:28.400 --> 00:00:31.279
+and, you know, deep Emacs interestingness.
+
+00:00:31.280 --> 00:00:34.919
+I have not yet gotten the hang of even using avy
+
+00:00:34.920 --> 00:00:38.119
+to nearly the extent that you do.
+
+00:00:38.120 --> 00:00:40.119
+But yes, I have, I have always looked
+
+00:00:40.120 --> 00:00:42.319
+at your diagrams very longingly
+
+00:00:42.320 --> 00:00:44.679
+and wondered how you make them.
+
+00:00:44.680 --> 00:00:51.239
+With a lot of sweat and cursing, unfortunately.
+
+00:00:51.240 --> 00:00:54.199
+It's all very nice. Yeah.
+
+00:00:54.200 --> 00:00:58.319
+And I, I, I've seen your interactive SVGs,
+
+00:00:58.320 --> 00:01:02.319
+which is just wizardry. I have no idea how you do that.
+
+00:01:02.320 --> 00:01:06.959
+You can hover over different elements in the SVG
+
+00:01:06.960 --> 00:01:08.759
+and do interesting things.
+
+00:01:08.760 --> 00:01:11.799
+Yeah, so it turns out if you just think of them as XML,
+
+00:01:11.800 --> 00:01:13.079
+which Emacs will let you
+
+00:01:13.080 --> 00:01:15.159
+because you can just control C, control C,
+
+00:01:15.160 --> 00:01:16.759
+and it'll switch back to text mode, right?
+
+00:01:16.760 --> 00:01:19.999
+Then you can be like, oh, yeah, I can work with this
+
+00:01:20.000 --> 00:01:23.559
+using the DOM Emacs list library.
+
+00:01:23.560 --> 00:01:28.479
+And then you can add title elements to it to get the hovers,
+
+00:01:28.480 --> 00:01:31.079
+or you can add hyperlinks.
+
+00:01:31.080 --> 00:01:35.039
+So in fact, the emacs-conf schedule
+
+00:01:35.040 --> 00:01:41.199
+is very naturally generated from emacs-lisp itself,
+
+00:01:41.200 --> 00:01:43.399
+because there was no way I was going to handle
+
+00:01:43.400 --> 00:01:45.719
+two track schedules by hand.
+
+00:01:45.720 --> 00:01:49.799
+And that's just SVG so that you can then have the hovers.
+
+00:01:49.800 --> 00:01:53.119
+The important thing is that when you're exporting it to HTML,
+
+00:01:53.120 --> 00:01:57.919
+it has to be an inline SVG to get the fancy behaviors.
+
+00:01:57.920 --> 00:02:02.799
+If you're linking it in as an image, then it doesn't work.
+
+00:02:02.800 --> 00:02:09.279
+It has to be inline. So for example, for my org mode,
+
+00:02:09.280 --> 00:02:14.079
+I have my exports for images checked first if it's an SVG.
+
+00:02:14.080 --> 00:02:15.959
+And unless I have an attribute
+
+00:02:15.960 --> 00:02:20.359
+on it that says, no, just link to it because it's large and not interactive,
+
+00:02:20.360 --> 00:02:22.759
+it actually inlines all of that markup
+
+00:02:22.760 --> 00:02:26.879
+into the exported HTML, if that makes sense.
+
+00:02:26.880 --> 00:02:34.279
+That does, that does make sense.
+
+00:02:34.280 --> 00:02:36.559
+It's a little less mysterious now.
+
+00:02:36.560 --> 00:02:40.319
+On the plus side, once it is in there as inline HTML,
+
+00:02:40.320 --> 00:02:42.519
+well, inline, you know, it's an inline markup,
+
+00:02:42.520 --> 00:02:44.359
+you can actually play around with it
+
+00:02:44.360 --> 00:03:01.919
+using JavaScript or CSS. That's really neat.
+
+00:03:01.920 --> 00:03:07.679
+I had a question about some other SVG wizardry I've seen you do.
+
+00:03:07.680 --> 00:03:09.759
+You have these SVGs that grow, right?
+
+00:03:09.760 --> 00:03:15.959
+Like they accumulate elements, almost like a slideshow.
+
+00:03:15.960 --> 00:03:20.199
+Am I remembering that correctly? Yeah, yeah, yeah.
+
+00:03:20.200 --> 00:03:22.399
+I started using that for one
+
+00:03:22.400 --> 00:03:24.519
+of the EmacsConf presentations.
+
+00:03:24.520 --> 00:03:26.559
+Well, the one EmacsConf presentation
+
+00:03:26.560 --> 00:03:27.919
+I've done in recent history,
+
+00:03:27.920 --> 00:03:31.639
+because it's nice to be able to add things gradually, right?
+
+00:03:31.640 --> 00:03:35.799
+Especially as you're giving a presentation.
+
+00:03:35.800 --> 00:03:38.719
+And that's also done with Emacs Lisp.
+
+00:03:38.720 --> 00:03:43.599
+What I do is, first I make the image, and then in Inkscape,
+
+00:03:43.600 --> 00:03:46.519
+I can group together the elements
+
+00:03:46.520 --> 00:03:49.639
+that I want to appear at the same time.
+
+00:03:49.640 --> 00:03:54.639
+And then I can use Emacs to, I think I just changed the,
+
+00:03:54.640 --> 00:04:01.039
+I just add some CSS to them to make them dimmer.
+
+00:04:01.040 --> 00:04:04.759
+and you just iterate through the different groups in that level,
+
+00:04:04.760 --> 00:04:09.839
+and you write out the intermediate SVG files,
+
+00:04:09.840 --> 00:04:12.279
+and then you can use Inkscape
+
+00:04:12.280 --> 00:04:14.839
+to convert them into PNGs if you want,
+
+00:04:14.840 --> 00:04:16.079
+like images of each step
+
+00:04:16.080 --> 00:04:18.719
+that are in PNG format instead of SVG.
+
+00:04:18.720 --> 00:04:20.359
+But the basic idea is you group
+
+00:04:20.360 --> 00:04:24.159
+the elements together that you want in one step,
+
+00:04:24.160 --> 00:04:25.879
+and then you can manipulate it
+
+00:04:25.880 --> 00:04:30.159
+using the Emacs DOM.EL library,
+
+00:04:30.160 --> 00:04:32.879
+because it's just an XML document.
+
+00:04:32.880 --> 00:04:38.719
+So you can say, all right, hide everything or have everything visible
+
+00:04:38.720 --> 00:04:43.159
+and then remove the last one or something like that, you know, iterated.
+
+00:04:43.160 --> 00:04:50.679
+Show them one at a time and then write your resulting document object model
+
+00:04:50.680 --> 00:05:05.919
+to a new file each step. Do you have, that makes sense.
+
+00:05:05.920 --> 00:05:09.159
+So do you just write the e-list,
+
+00:05:09.160 --> 00:05:12.079
+like is this on a case-by-case basis?
+
+00:05:12.080 --> 00:05:13.519
+Like every time you need to do this,
+
+00:05:13.520 --> 00:05:18.519
+do you write fresh e-list to step through the SVG this way?
+
+00:05:18.520 --> 00:05:22.479
+Or do you have some kind of package
+
+00:05:22.480 --> 00:05:27.159
+or library to do this more?
+
+00:05:27.160 --> 00:05:32.999
+Let me go see if this is the one.
+
+00:05:33.000 --> 00:05:39.839
+It's probably just buried in my config.
+
+00:05:39.840 --> 00:05:46.719
+If I do it again, I'm sure I will find another thing
+
+00:05:46.720 --> 00:05:51.159
+that I've completely forgotten about
+
+00:05:51.160 --> 00:05:56.399
+and therefore have to recode or fix or whatever.
+
+00:05:56.400 --> 00:06:03.199
+But let me go see. Can you see my screen? Yep. OK.
+
+00:06:03.200 --> 00:06:07.559
+So, oh, yeah, yeah, this one. Nice, I remember that one.
+
+00:06:07.560 --> 00:06:13.719
+OK, so we get this SVG, and then this animateSVGPaths
+
+00:06:13.720 --> 00:06:16.959
+is just a function I have. It takes the file name.
+
+00:06:16.960 --> 00:06:22.039
+It makes an output there. It adds one path back at a time.
+
+00:06:22.040 --> 00:06:25.839
+And it just creates a lot of these numbered frames.
+
+00:06:25.840 --> 00:06:27.639
+So as you can see here,
+
+00:06:27.640 --> 00:06:30.039
+I'm just saying, OK, take the whole thing.
+
+00:06:30.040 --> 00:06:34.479
+And then I think, yeah, maybe I said it like,
+
+00:06:34.480 --> 00:06:36.999
+you know, take the whole thing,
+
+00:06:37.000 --> 00:06:40.199
+make everything transparent,
+
+00:06:40.200 --> 00:06:45.079
+and then one at a time, make them opaque
+
+00:06:45.080 --> 00:06:50.079
+and save that, save that to the frame, to the image.
+
+00:06:50.080 --> 00:06:54.319
+So this theoretically is a somewhat reusable function
+
+00:06:54.320 --> 00:07:01.039
+that takes the SVG and just fills the directory with it.
+
+00:07:01.040 --> 00:07:03.399
+What's the order in which it reveals things?
+
+00:07:03.400 --> 00:07:12.919
+Top to bottom or bottom to top, it's whatever the SVG has.
+
+00:07:12.920 --> 00:07:15.959
+And so if you're grouping things together,
+
+00:07:15.960 --> 00:07:17.599
+you can rearrange things in Inkscape.
+
+00:07:17.600 --> 00:07:22.039
+If you've given them IDs,
+
+00:07:22.040 --> 00:07:25.119
+which I have another function for in Emacs list
+
+00:07:25.120 --> 00:07:26.919
+that just highlights something
+
+00:07:26.920 --> 00:07:28.439
+and lets me put an ID for it,
+
+00:07:28.440 --> 00:07:30.879
+then you can rearrange them yourself
+
+00:07:30.880 --> 00:07:32.319
+by looking at the markup, I guess.
+
+00:07:32.320 --> 00:07:35.319
+Or I think I actually have some code also
+
+00:07:35.320 --> 00:07:37.039
+that will rearrange the path
+
+00:07:37.040 --> 00:07:39.279
+based on a list of IDs that I give it.
+
+00:07:39.280 --> 00:07:42.759
+and sequence so this one is animating
+
+00:07:42.760 --> 00:07:44.319
+one element at a time here
+
+00:07:44.320 --> 00:07:47.319
+um it's kind of like interesting effect
+
+00:07:47.320 --> 00:07:49.039
+but for larger things like for this one
+
+00:07:49.040 --> 00:07:52.039
+i can split this up into groups
+
+00:07:52.040 --> 00:07:59.599
+because i don't want to necessarily animate them letter by letter and that one
+
+00:07:59.600 --> 00:08:03.319
+Oh yes, this is the function that I have
+
+00:08:03.320 --> 00:08:05.319
+for identifying the paths
+
+00:08:05.320 --> 00:08:08.959
+and it highlights it and then it asks me for a name.
+
+00:08:08.960 --> 00:08:11.359
+And this is the one that reorders it.
+
+00:08:11.360 --> 00:08:14.559
+So I can say, this is the sequence
+
+00:08:14.560 --> 00:08:19.279
+that I want it animated in. And it will, yeah, good.
+
+00:08:19.280 --> 00:08:23.399
+So you don't actually need Inkscape at all, right?
+
+00:08:23.400 --> 00:08:24.999
+Because you have an elisp function
+
+00:08:25.000 --> 00:08:28.399
+that will let you assign the order interactively.
+
+00:08:28.400 --> 00:08:34.599
+Yeah, so if you're doing just all the elements one after the other,
+
+00:08:34.600 --> 00:08:39.279
+Inkscape is helpful for combining the different shapes,
+
+00:08:39.280 --> 00:08:41.399
+well, breaking it apart,
+
+00:08:41.400 --> 00:08:44.719
+because when I get the PDF and I convert it,
+
+00:08:44.720 --> 00:08:48.559
+it's like one big element that has a very complex path.
+
+00:08:48.560 --> 00:08:52.479
+And if I want to animate it element by element,
+
+00:08:52.480 --> 00:08:53.959
+I have to break it apart
+
+00:08:53.960 --> 00:08:59.759
+and then recombine it so that, you know, so that this O looks like it's hollow
+
+00:08:59.760 --> 00:09:01.079
+instead of like a circle.
+
+00:09:01.080 --> 00:09:02.959
+So there's a little bit of Inkscape
+
+00:09:02.960 --> 00:09:04.879
+cleaning up before then,
+
+00:09:04.880 --> 00:09:08.439
+but I really dislike the mouse heavy stuff of Inkscape
+
+00:09:08.440 --> 00:09:12.119
+for assigning IDs and things like that.
+
+00:09:12.120 --> 00:09:13.999
+I haven't quite gotten the hang of it.
+
+00:09:14.000 --> 00:09:16.119
+So this is what it looks like
+
+00:09:16.120 --> 00:09:17.919
+before you group the elements together
+
+00:09:17.920 --> 00:09:20.039
+and you combine paths,
+
+00:09:20.040 --> 00:09:22.079
+which is what you have to do Inkscape for,
+
+00:09:22.080 --> 00:09:24.879
+because I can't make sense of the numbers in Emacs someday.
+
+00:09:24.880 --> 00:09:30.319
+So just combine, combine, combine. But once it's there,
+
+00:09:30.320 --> 00:09:32.719
+I don't like having to set the ID in this
+
+00:09:32.720 --> 00:09:34.879
+object properties on the right side,
+
+00:09:34.880 --> 00:09:36.959
+because there's a lot of clicking.
+
+00:09:36.960 --> 00:09:40.559
+press escape and tab and tab, it's not reliable.
+
+00:09:40.560 --> 00:09:42.599
+So that's why I have this function
+
+00:09:42.600 --> 00:09:46.559
+and it lets me identify the paths and animate them
+
+00:09:46.560 --> 00:09:50.999
+from within Emacs, because Emacs is a text editor.
+
+00:09:51.000 --> 00:09:55.279
+Yeah, in name only, but anyway.
+
+00:09:55.280 --> 00:10:02.679
+So the groups, if you've already assigned groups in Inkscape,
+
+00:10:02.680 --> 00:10:06.519
+Then when you run it through this function in Emacs,
+
+00:10:06.520 --> 00:10:09.159
+you can assign an ordering to the groups,
+
+00:10:09.160 --> 00:10:10.599
+the order in which it will be revealed.
+
+00:10:10.600 --> 00:10:15.039
+Yeah. What I did was I gave it all IDs.
+
+00:10:15.040 --> 00:10:17.599
+So I gave each group an ID.
+
+00:10:17.600 --> 00:10:25.999
+And then when I have the ID, I can say, you know, maybe when I group it,
+
+00:10:26.000 --> 00:10:28.319
+I'm doing it in a bit of a haphazard way,
+
+00:10:28.320 --> 00:10:30.279
+not grouping the first thing first,
+
+00:10:30.280 --> 00:10:32.279
+and then the second thing, and the third thing.
+
+00:10:32.280 --> 00:10:34.399
+So it's a bit of a mess.
+
+00:10:34.400 --> 00:10:38.119
+And this one just resorts it by, I think,
+
+00:10:38.120 --> 00:10:41.479
+just looking everything up, storing it,
+
+00:10:41.480 --> 00:10:45.039
+and then putting it back in order.
+
+00:10:45.040 --> 00:10:49.159
+I probably have the code for this somewhere,
+
+00:10:49.160 --> 00:10:52.039
+and if it's not, it's in the source code.
+
+00:10:52.040 --> 00:10:53.039
+There should be a source.
+
+00:10:53.040 --> 00:10:57.599
+Yes, so this is an org source for this post,
+
+00:10:57.600 --> 00:11:01.279
+and if it's not in there, then it should be in my config,
+
+00:11:01.280 --> 00:11:03.679
+the definition of this function.
+
+00:11:03.680 --> 00:11:11.439
+We are to pass. Here we are. Yeah, there you go.
+
+00:11:11.440 --> 00:11:17.639
+So there, it just, it takes it, it looks for it,
+
+00:11:17.640 --> 00:11:19.719
+and it adds it to the first layer.
+
+00:11:19.720 --> 00:11:29.399
+Okay, you've just explained the magic,
+
+00:11:29.400 --> 00:11:31.159
+which makes it less magical,
+
+00:11:31.160 --> 00:11:36.279
+but also something I could try. Yeah, this is interesting.
+
+00:11:36.280 --> 00:11:41.759
+Yeah, S2G is surprisingly powerful. Yeah, I know.
+
+00:11:41.760 --> 00:11:43.679
+I know it can do a lot more
+
+00:11:43.680 --> 00:11:46.559
+than what we typically use it for.
+
+00:11:46.560 --> 00:11:53.039
+So you also had this feature where, I think you used CSS,
+
+00:11:53.040 --> 00:11:56.599
+where if you mouse over something in the SVG,
+
+00:11:56.600 --> 00:11:58.839
+something is highlighted in your webpage.
+
+00:11:58.840 --> 00:12:04.799
+Oh yeah, yeah, yeah. Like in the organizer's notebook.
+
+00:12:04.800 --> 00:12:07.959
+So I have a draft schedule here.
+
+00:12:07.960 --> 00:12:10.679
+Yeah, we've been doing all this stuff live, that schedule,
+
+00:12:10.680 --> 00:12:16.239
+where if you have, let's pick someone's talk.
+
+00:12:16.240 --> 00:12:22.119
+Oh, yeah, highlight.
+
+00:12:22.120 --> 00:12:26.159
+I think, oh, maybe it's the other way around.
+
+00:12:26.160 --> 00:12:30.839
+I need to put this stuff here first. Oh yeah, okay.
+
+00:12:30.840 --> 00:12:33.959
+So you'll notice here how if I add some JavaScript,
+
+00:12:33.960 --> 00:12:35.999
+it takes a look at what's in the URL.
+
+00:12:36.000 --> 00:12:38.439
+And if so, then it can highlight a specific thing
+
+00:12:38.440 --> 00:12:41.679
+using just, maybe CSS might be it.
+
+00:12:41.680 --> 00:12:47.879
+Actually, I think it's JavaScript setting the CSS style on it.
+
+00:12:47.880 --> 00:12:51.279
+But yeah, you can play around with CSS.
+
+00:12:51.280 --> 00:12:53.639
+See, this one has a slightly darker,
+
+00:12:53.640 --> 00:12:59.519
+slightly thicker background. So SVGs are great for that.
+
+00:12:59.520 --> 00:13:01.479
+And if you inspect it,
+
+00:13:01.480 --> 00:13:03.199
+which I don't think I have shared here,
+
+00:13:03.200 --> 00:13:07.559
+but if you inspect it, I will share my inspect.
+
+00:13:07.560 --> 00:13:10.719
+I have too many windows open,
+
+00:13:10.720 --> 00:13:12.079
+so I don't want to share my whole thing.
+
+00:13:12.080 --> 00:13:19.074
+But one of these, oh, I don't even know which, how do I find, okay,
+
+00:13:19.075 --> 00:13:20.366
+it's the developer tools window.
+
+00:13:20.367 --> 00:13:25.324
+Do I even have developer tools? Oh, I can't see it. OK.
+
+00:13:25.325 --> 00:13:29.491
+If you inspect the page on the developer thingy,
+
+00:13:29.492 --> 00:13:38.116
+then it will show the SVG element. Yeah.
+
+00:13:38.117 --> 00:13:41.240
+And unfortunately, I can't share it easily right now.
+
+00:13:41.241 --> 00:13:46.616
+Maybe just say inspect. Oh, this is actually, I think,
+
+00:13:46.617 --> 00:13:55.116
+how also the individual talks have current ones, right?
+
+00:13:55.117 --> 00:14:00.439
+So I just have this image over here,
+
+00:14:00.440 --> 00:14:01.719
+and then you just have that one,
+
+00:14:01.720 --> 00:14:05.999
+that specific talk styled differently.
+
+00:14:06.000 --> 00:14:13.159
+How did you generate this SVG,
+
+00:14:13.160 --> 00:14:14.639
+the one showing the schedule?
+
+00:14:14.640 --> 00:14:24.439
+Oh, okay, okay. Emacs. Book, book, book, book.
+
+00:14:24.440 --> 00:14:29.599
+Emacs publish, I think. Let me share it. Emacs conf pub.
+
+00:14:29.600 --> 00:14:36.119
+One of these windows. Okay, let's see.
+
+00:14:36.120 --> 00:14:39.199
+Slow down, look at all the windows.
+
+00:14:39.200 --> 00:14:40.639
+Okay, I'm just gonna share the whole screen.
+
+00:14:40.640 --> 00:14:50.519
+Screen two, no, screen one. All right, and okay.
+
+00:14:50.520 --> 00:15:05.759
+I think this is the one. Is it sharing my screen?
+
+00:15:05.760 --> 00:15:08.079
+It is not sharing my screen. I'm going to try this again.
+
+00:15:08.080 --> 00:15:23.119
+Okay. All right. So, the schedule. The schedule.
+
+00:15:23.120 --> 00:15:24.559
+This is the actual function
+
+00:15:24.560 --> 00:15:28.319
+that creates the SVG rectangles for the talks.
+
+00:15:28.320 --> 00:15:35.279
+Oops. My screen share ended. Let me do that again.
+
+00:15:35.280 --> 00:15:41.239
+All right, and as you can see,
+
+00:15:41.240 --> 00:15:45.039
+it's just a little bit of math for the X, the Y,
+
+00:15:45.040 --> 00:15:48.199
+we color it differently
+
+00:15:48.200 --> 00:15:52.839
+depending on whether I'm making the schedule for the public view.
+
+00:15:52.840 --> 00:15:58.439
+So we just, you know, do we do developer, development talk
+
+00:15:58.440 --> 00:15:59.919
+or general talk as colors,
+
+00:15:59.920 --> 00:16:02.639
+or if I want to color it for the backstage view,
+
+00:16:02.640 --> 00:16:04.719
+I can keep track of the talk's status.
+
+00:16:04.720 --> 00:16:07.799
+Anyway, so SDG track takes the track
+
+00:16:07.800 --> 00:16:09.239
+and all the talk information,
+
+00:16:09.240 --> 00:16:11.559
+and it makes all the little rectangles.
+
+00:16:11.560 --> 00:16:15.599
+And this is the thing that adds a little hover
+
+00:16:15.600 --> 00:16:17.919
+for the times and titles as well.
+
+00:16:17.920 --> 00:16:22.639
+So, Emacs's API for dealing with this is actually pretty good.
+
+00:16:22.640 --> 00:16:27.559
+Oh, and of course, I have a hook here that modifies it.
+
+00:16:27.560 --> 00:16:30.119
+You can just run through a different function,
+
+00:16:30.120 --> 00:16:32.519
+different functions to tweak it.
+
+00:16:32.520 --> 00:16:36.399
+So I could say, okay, color it in case my time constraints are,
+
+00:16:36.400 --> 00:16:37.839
+you know, not being met.
+
+00:16:37.840 --> 00:16:40.959
+And then I can paint about this somewhere.
+
+00:16:40.960 --> 00:16:51.119
+And the nice thing about this
+
+00:16:51.120 --> 00:17:06.719
+is it's actually, it's, you can, hang on a second, let me do this carefully.
+
+00:17:06.720 --> 00:17:07.999
+All right, here you go.
+
+00:17:08.000 --> 00:17:13.479
+It's super nice to be able to refer to it within Emacs itself
+
+00:17:13.480 --> 00:17:15.839
+because Emacs has SVG support.
+
+00:17:15.840 --> 00:17:19.679
+So this is, for example, the organizer view
+
+00:17:19.680 --> 00:17:24.039
+inside an org mode file. And it just has all those SVGs.
+
+00:17:24.040 --> 00:17:25.599
+It don't have the hover things,
+
+00:17:25.600 --> 00:17:27.399
+because it's just an image in it.
+
+00:17:27.400 --> 00:17:37.759
+But yeah, SVGs, Emacs, awesome. Oh, that's very cool.
+
+00:17:37.760 --> 00:17:40.719
+You're actually drawing the rectangles from scratch.
+
+00:17:40.720 --> 00:17:44.999
+It took a little bit of figuring out,
+
+00:17:45.000 --> 00:17:46.959
+especially since I realized
+
+00:17:46.960 --> 00:17:49.679
+I wanted horizontal on the wiki pages
+
+00:17:49.680 --> 00:17:51.359
+so that it fits on people's screens,
+
+00:17:51.360 --> 00:17:56.039
+but I wanted vertical in my organized review
+
+00:17:56.040 --> 00:18:09.199
+so that I don't have to keep tilting my head sideways.
+
+00:18:09.200 --> 00:18:12.359
+and this is the code for that.
+
+00:18:12.360 --> 00:18:19.439
+See, I'm just directly adding G nodes for groups
+
+00:18:19.440 --> 00:18:23.199
+or A nodes for the hyperlinks and rep as well.
+
+00:18:23.200 --> 00:18:27.319
+I think the SVG library also has functions
+
+00:18:27.320 --> 00:18:31.079
+for adding rectangles and things like that,
+
+00:18:31.080 --> 00:18:32.359
+but sometimes I vaguely remember
+
+00:18:32.360 --> 00:18:34.999
+sometimes you can't return the node that I'm expecting.
+
+00:18:35.000 --> 00:18:40.559
+So, it's okay to just use the DOM functions directly.
+
+00:18:40.560 --> 00:18:46.079
+And then the whole thing gets SVG printed afterwards.
+
+00:18:46.080 --> 00:18:54.079
+So I can just say SVG printed, and then it's good to go.
+
+00:18:54.080 --> 00:18:57.719
+Let me see. Actually, do I have SVG?
+
+00:18:57.720 --> 00:19:05.679
+Let's schedule for track SVG.
+
+00:19:05.680 --> 00:19:08.799
+It's a shame that you can't visually interact
+
+00:19:08.800 --> 00:19:11.559
+with parts of an SVG in Emacs the way you can in Emacs.
+
+00:19:11.560 --> 00:19:16.799
+Oh, some people have some interesting experiments with that.
+
+00:19:16.800 --> 00:19:18.839
+I haven't dug into it much,
+
+00:19:18.840 --> 00:19:21.639
+but people have figured out how to use the mouse events
+
+00:19:21.640 --> 00:19:26.199
+and then figure out what the, like there's LEC draw, right?
+
+00:19:26.200 --> 00:19:30.159
+So lecdraw is a package that lets you draw SVGs
+
+00:19:30.160 --> 00:19:33.039
+and you can drag things and whatever. So that's very cool.
+
+00:19:33.040 --> 00:19:37.159
+And there's also an org related package
+
+00:19:37.160 --> 00:19:43.439
+that lets you visualize your schedule as boxes.
+
+00:19:43.440 --> 00:19:45.639
+I'd like, yeah, that's a thing also.
+
+00:19:45.640 --> 00:19:46.919
+So people have experimented
+
+00:19:46.920 --> 00:19:49.439
+with mouse interaction and it's cool,
+
+00:19:49.440 --> 00:19:51.919
+but I haven't had the brain space to do that yet,
+
+00:19:51.920 --> 00:19:55.479
+but it would be nice. Yeah, you're right.
+
+00:19:55.480 --> 00:19:58.079
+I remember using easy draw
+
+00:19:58.080 --> 00:20:01.999
+and being surprised at what it can do.
+
+00:20:02.000 --> 00:20:05.119
+The only thing I think I discovered
+
+00:20:05.120 --> 00:20:10.279
+is that it ends up creating lots of new SVGs,
+
+00:20:10.280 --> 00:20:13.079
+kind of the way that you do
+
+00:20:13.080 --> 00:20:14.959
+when you show elements one by one,
+
+00:20:14.960 --> 00:20:19.079
+you are essentially creating one SVG for each state,
+
+00:20:19.080 --> 00:20:24.439
+one full SVG for each intermediate state of the presentation, let's say.
+
+00:20:24.440 --> 00:20:26.479
+That's kind of what ELEasyDraw does.
+
+00:20:26.480 --> 00:20:30.839
+And I thought that's not good for performance.
+
+00:20:30.840 --> 00:20:33.039
+And it is kind of on the slow side,
+
+00:20:33.040 --> 00:20:37.359
+if you compare it to like Inkscape or anything else.
+
+00:20:37.360 --> 00:20:40.959
+But yeah, what it can do is pretty amazing.
+
+00:20:40.960 --> 00:20:44.559
+you can dynamically modify an SVG object,
+
+00:20:44.560 --> 00:20:48.399
+and it will automatically get updated in Emacs,
+
+00:20:48.400 --> 00:20:52.519
+which is a technique that I use a lot in FFNS in subbed.
+
+00:20:52.520 --> 00:20:57.559
+So for example, if I have waveform show all in this,
+
+00:20:57.560 --> 00:21:03.239
+it will, like, it's very easy to just move one element, for example,
+
+00:21:03.240 --> 00:21:08.519
+or make an element larger or smaller.
+
+00:21:08.520 --> 00:21:13.279
+And that's the... It might be pretty efficient, I don't know,
+
+00:21:13.280 --> 00:21:20.199
+but I'm certainly not like writing it to disk each time and reloading it.
+
+00:21:20.200 --> 00:21:25.519
+Eric and I demoed in 2020 EmacsConf for Dungeon Mode Works,
+
+00:21:25.520 --> 00:21:29.399
+where we demonstrated, you know, showing parts of the map
+
+00:21:29.400 --> 00:21:31.649
+and then, you know, different characters
+
+00:21:31.650 --> 00:21:33.839
+have different abilities that show,
+
+00:21:33.840 --> 00:21:36.599
+that allow you to see different dungeon features.
+
+00:21:36.600 --> 00:21:38.799
+And then if your last character,
+
+00:21:38.800 --> 00:21:42.719
+you know, of that class or race dies,
+
+00:21:42.720 --> 00:21:44.479
+then you suddenly can't see
+
+00:21:44.480 --> 00:21:46.759
+secret doors or whatever anymore.
+
+00:21:46.760 --> 00:21:48.719
+And so just make that disappear
+
+00:21:48.720 --> 00:21:50.559
+between one turn and the next
+
+00:21:50.560 --> 00:21:54.919
+is just working with just simply update the SVG
+
+00:21:54.920 --> 00:21:57.679
+and there goes the screen. No, no, no bus, no bus.
+
+00:21:57.680 --> 00:22:01.559
+It's pretty awesome. So this is an example
+
+00:22:01.560 --> 00:22:07.159
+of how I'm using it to kind of show where we are in the, in the track.
+
+00:22:07.160 --> 00:22:09.639
+And then here's mouse, mouse interaction, right?
+
+00:22:09.640 --> 00:22:21.359
+I can change my timestamp right from there. Which is fine.
+
+00:22:21.360 --> 00:22:28.079
+So, I'm curious how this works exactly.
+
+00:22:28.080 --> 00:22:31.799
+To effect any kind of change in the SVG,
+
+00:22:31.800 --> 00:22:36.239
+you have to use the DOM library, right? Yes.
+
+00:22:36.240 --> 00:22:39.319
+Okay, so, but that means that it's going to be,
+
+00:22:39.320 --> 00:22:43.639
+anytime you make a change, it's going to read in the XML,
+
+00:22:43.640 --> 00:22:47.999
+convert it to an Elisp DOM, right?
+
+00:22:48.000 --> 00:22:50.919
+And then you modify that tree.
+
+00:22:50.920 --> 00:22:55.839
+Yeah, you keep the DOM, like, well, in this case, for example,
+
+00:22:55.840 --> 00:23:00.879
+I'm actually constructing it using Emacs list objects directly.
+
+00:23:00.880 --> 00:23:02.959
+If you were working with an external SVG,
+
+00:23:02.960 --> 00:23:05.199
+you would parse it first, yes,
+
+00:23:05.200 --> 00:23:07.919
+using XML parse file or something like that.
+
+00:23:07.920 --> 00:23:11.999
+and then you would have it in memory.
+
+00:23:12.000 --> 00:23:14.559
+When you insert the image,
+
+00:23:14.560 --> 00:23:18.519
+you insert the list document object model that you have,
+
+00:23:18.520 --> 00:23:21.199
+and then any changes you make to that document object model
+
+00:23:21.200 --> 00:23:25.519
+automatically get updated in the image somehow.
+
+00:23:25.520 --> 00:23:33.559
+Oh, that's fantastic. Yeah. Yeah. I'll show you the code. Yeah.
+
+00:23:33.560 --> 00:23:38.079
+So I was under the impression
+
+00:23:38.080 --> 00:23:40.096
+that there's a round trip to XML involved
+
+00:23:40.097 --> 00:23:42.298
+to do anything like to go from displayed
+
+00:23:42.299 --> 00:23:46.079
+to in-memory to in-memory modified back
+
+00:23:46.080 --> 00:23:47.839
+to display all around trip.
+
+00:23:47.840 --> 00:23:52.959
+Yeah. So let me see where's my thing that changes it.
+
+00:23:52.960 --> 00:23:59.079
+So when it's the time.
+
+00:23:59.080 --> 00:24:06.999
+It's probably some kind of hook that I'm listening to here.
+
+00:24:07.000 --> 00:24:12.879
+Playback position hook. Oh, it's this update current bar.
+
+00:24:12.880 --> 00:24:15.999
+All right, so what update current bar does
+
+00:24:16.000 --> 00:24:19.319
+is it moves the bar to the right place.
+
+00:24:19.320 --> 00:24:21.159
+And you see here how this SVG,
+
+00:24:21.160 --> 00:24:24.719
+I'm actually just reading it off the text property
+
+00:24:24.720 --> 00:24:28.279
+so that I know which one is the current one in the overlay.
+
+00:24:28.280 --> 00:24:31.399
+I remove the old one, just the element.
+
+00:24:31.400 --> 00:24:34.279
+I don't have to mess around with the image.
+
+00:24:34.280 --> 00:24:35.599
+I removed the old one for some reason,
+
+00:24:35.600 --> 00:24:36.839
+just to make sure, I guess.
+
+00:24:36.840 --> 00:24:38.879
+You can actually just update the attribute on it.
+
+00:24:38.880 --> 00:24:42.919
+Oh, I think this is just so that I don't have to worry
+
+00:24:42.920 --> 00:24:45.519
+about whether there is one or there isn't.
+
+00:24:45.520 --> 00:24:47.959
+And then I add a bar at the right position
+
+00:24:47.960 --> 00:24:52.519
+and then it makes that little animated sweeping thingy.
+
+00:24:52.520 --> 00:24:55.959
+So you see how I'm not recreating the SVG at this point.
+
+00:24:55.960 --> 00:25:02.559
+I'm just getting it from the overlay.
+
+00:25:02.560 --> 00:25:07.479
+Yeah, that's very interesting. I wonder what it's doing.
+
+00:25:07.480 --> 00:25:09.919
+what it's actually doing under the hood when you run SVG removal.
+
+00:25:09.920 --> 00:25:19.439
+Yeah, I don't know, too. I think it's RSVG is tied
+
+00:25:19.440 --> 00:25:32.039
+into the display engine, so to speak. Yeah, that it is.
+
+00:25:32.040 --> 00:25:33.919
+But RSVG, the library,
+
+00:25:33.920 --> 00:25:39.199
+can only deal with actual SVGs, right, like XML SVGs,
+
+00:25:39.200 --> 00:25:43.119
+but we're dealing with the ELISP DOM of an SVG.
+
+00:25:43.120 --> 00:25:47.559
+So the display engine can re-enter the LISP.
+
+00:25:47.560 --> 00:25:49.519
+I do know that the display engine
+
+00:25:49.520 --> 00:25:51.839
+can re-enter the LISP engine,
+
+00:25:51.840 --> 00:25:53.599
+so I think that may be the answer.
+
+00:25:53.600 --> 00:25:58.759
+Yeah, you can just SVG insert image the object itself.
+
+00:25:58.760 --> 00:26:01.879
+So here, for example, SVG create just creates,
+
+00:26:01.880 --> 00:26:04.239
+it actually just creates a DOM model.
+
+00:26:04.240 --> 00:26:06.599
+So this is Lisp, and it's not,
+
+00:26:06.600 --> 00:26:09.079
+it doesn't get printed to string representation or anything.
+
+00:26:09.080 --> 00:26:13.239
+And then you can SVG insert image,
+
+00:26:13.240 --> 00:26:15.159
+or you can set the display and, you know,
+
+00:26:15.160 --> 00:26:20.719
+and use pass it like as an SVG image.
+
+00:26:20.720 --> 00:26:22.599
+SVG image gives you an image object
+
+00:26:22.600 --> 00:26:24.679
+if you want to do the like the regular
+
+00:26:24.680 --> 00:26:31.199
+sort of display thingy. Actually, that one says it turns it
+
+00:26:31.200 --> 00:26:34.399
+into a string representation.
+
+00:26:34.400 --> 00:26:36.719
+Or at least maybe that's just how it gets retrained.
+
+00:26:36.720 --> 00:26:38.559
+Anyhow, some kind of magic happens,
+
+00:26:38.560 --> 00:26:39.919
+but I don't have to worry about it.
+
+00:26:39.920 --> 00:26:44.119
+It just stays on my side. Yeah, but I was thinking about it
+
+00:26:44.120 --> 00:26:49.599
+because I expect that if it's converting to XML all the time, every time you make a change,
+
+00:26:49.600 --> 00:26:52.119
+then that's going to be the bottleneck
+
+00:26:52.120 --> 00:26:58.119
+for any kind of heavy interactive SVG editing or modification in Emacs.
+
+00:26:58.120 --> 00:27:01.199
+The kind that ELEasyDraw does.
+
+00:27:01.200 --> 00:27:03.839
+But maybe if we make it compelling enough,
+
+00:27:03.840 --> 00:27:07.279
+then the folks upstream can say, all right,
+
+00:27:07.280 --> 00:27:10.239
+like the way that JSON got a lot faster.
+
+00:27:10.240 --> 00:27:13.359
+Who knows? Maybe we can get that to be faster too. Yeah.
+
+00:27:13.360 --> 00:27:19.199
+I see a lot of potential for better UIs in Emacs
+
+00:27:19.200 --> 00:27:22.719
+with using SVGs. Yeah.
+
+00:27:22.720 --> 00:27:26.319
+Nicolas Rougier has all those experiments, right?
+
+00:27:26.320 --> 00:27:30.159
+Yeah, but all of those, I think, are bound by the limitations
+
+00:27:30.160 --> 00:27:33.599
+of how deeply SVGs are embedded in the display engine,
+
+00:27:33.600 --> 00:27:36.359
+because that's kind of what we're discussing.
+
+00:27:36.360 --> 00:27:38.479
+We want to avoid going to XML,
+
+00:27:38.480 --> 00:27:41.479
+I mean, going from XML to Elisp DOM
+
+00:27:41.480 --> 00:27:44.839
+to modified Elisp DOM back to XML.
+
+00:27:44.840 --> 00:27:50.079
+We want to avoid that round trip. Yeah, for sure.
+
+00:27:50.080 --> 00:28:04.799
+Or make that as fast as possible, yeah.
+
+00:28:04.800 --> 00:28:11.919
+Does anyone else have anything they want to share?
+
+00:28:11.920 --> 00:28:13.919
+I've always got stuff I can share,
+
+00:28:13.920 --> 00:28:17.639
+but I pretty happily defer. I've already seen what I made.
+
+00:28:17.640 --> 00:28:28.759
+Karthik? Oh, I'm a fly on a wall here. I'm not.
+
+00:28:28.760 --> 00:28:32.199
+Okay. I didn't come in with the intent to share anything.
+
+00:28:32.200 --> 00:28:34.239
+Yeah. How about you, Sacha?
+
+00:28:34.240 --> 00:28:37.999
+Do you have other stuff you haven't shown off recently?
+
+00:28:38.000 --> 00:28:39.839
+Aside from all the panicking
+
+00:28:39.840 --> 00:28:42.599
+about getting EmacsConf together this year?
+
+00:28:42.600 --> 00:28:45.399
+I just wanted to bring it up.
+
+00:28:45.400 --> 00:28:50.359
+Yeah, let's see, what do I have in my recent, like, fiddled with?
+
+00:28:50.360 --> 00:28:53.999
+So I have a project called...
+
+00:28:54.000 --> 00:28:56.879
+I have a project called Ufta, which is a little bit fun.
+
+00:28:56.880 --> 00:29:00.159
+Let me pull it up here before I share.
+
+00:29:00.160 --> 00:29:08.959
+You can see my messy, messy desktop. Okay, there it is.
+
+00:29:08.960 --> 00:29:21.519
+And that's supposed to want a shell. Probably that one.
+
+00:29:21.520 --> 00:29:29.119
+And we'll just bootroot. keeping in mind that graphics
+
+00:29:29.120 --> 00:29:33.399
+is going to end in about five minutes. Ooh, perfect.
+
+00:29:33.400 --> 00:29:38.959
+That'll keep me from from being my normal long-winded self.
+
+00:29:38.960 --> 00:29:47.239
+Have you already made contact with Emmanuel? I was not.
+
+00:29:47.240 --> 00:29:50.159
+Okay, I'm going to quickly do a check in.
+
+00:29:50.160 --> 00:30:00.119
+Okay, sounds good. Did you hear back from him?
+
+00:30:00.120 --> 00:30:01.039
+Assume that's a yes.
+
+00:30:01.040 --> 00:30:04.399
+All right, I'll go ahead and share screen here
+
+00:30:04.400 --> 00:30:08.879
+and just take a look, a very brief look at this.
+
+00:30:08.880 --> 00:30:16.719
+Assuming I can present. I had a question for Sacha.
+
+00:30:16.720 --> 00:30:22.399
+I had a question for Sacha and you, Corbin.
+
+00:30:22.400 --> 00:30:28.759
+Hello. Yeah, you're good. Go for it. Yeah, yeah.
+
+00:30:28.760 --> 00:30:33.319
+So in past years, in the EmacsConf,
+
+00:30:33.320 --> 00:30:36.799
+there was a talk by someone,
+
+00:30:36.800 --> 00:30:40.999
+usually John Wheatley, or I think Philip last year,
+
+00:30:41.000 --> 00:30:44.079
+about new developments in Emacs.
+
+00:30:44.080 --> 00:30:48.679
+Yes, and that is kind of at the whim
+
+00:30:48.680 --> 00:30:50.079
+of the Emacs developers,
+
+00:30:50.080 --> 00:30:56.919
+whether that is included in the in the conference.
+
+00:30:56.920 --> 00:30:59.679
+It's kind of up to the, you know, how busy folks are
+
+00:30:59.680 --> 00:31:02.879
+and whether somebody can follow up the time to prepare it.
+
+00:31:02.880 --> 00:31:07.119
+I see. Yeah, I noticed that there wasn't one for this year.
+
+00:31:07.120 --> 00:31:09.999
+And I know of at least one improvement
+
+00:31:10.000 --> 00:31:12.359
+or one change to Emacs.
+
+00:31:12.360 --> 00:31:17.559
+It's small, but I'm guessing it's very crucial
+
+00:31:17.560 --> 00:31:20.359
+for a certain class of Emacs users.
+
+00:31:20.360 --> 00:31:24.239
+And I can talk about that, just that one thing.
+
+00:31:24.240 --> 00:31:29.719
+But you can, you can, you can go right.
+
+00:31:29.720 --> 00:31:32.599
+So I can't share anything and we've got about one minute.
+
+00:31:32.600 --> 00:31:39.719
+So have that. Okay. Um, so the change is that, uh,
+
+00:31:39.720 --> 00:31:41.919
+in the development version of Emacs,
+
+00:31:41.920 --> 00:31:46.919
+sorry, child frames are now supported
+
+00:31:46.920 --> 00:31:53.679
+in terminal in the terminal.
+
+00:31:53.680 --> 00:31:56.519
+And I suspect that not many people know about it yet,
+
+00:31:56.520 --> 00:32:03.839
+but basically this means something like Corfu is going to work fine
+
+00:32:03.840 --> 00:32:05.479
+when you're running Emacs in a terminal,
+
+00:32:05.480 --> 00:32:14.159
+as well as pause frames or anything that shows like a little pop-up window
+
+00:32:14.160 --> 00:32:19.159
+that previously did not work in Terminal Emacs.
+
+00:32:19.160 --> 00:32:27.519
+That's it. That's the update. Cool.
+
+00:32:27.520 --> 00:32:29.359
+Okay, there I have a share screen button.
+
+00:32:29.360 --> 00:32:31.999
+We'll see if I think we're just about to cut away,
+
+00:32:32.000 --> 00:32:34.919
+but I'll go ahead and see if I can get this going.
+
+00:32:34.920 --> 00:32:36.679
+I'll just share my whole screen
+
+00:32:36.680 --> 00:32:39.599
+and this will be a little ugly as it comes in.
+
+00:32:39.600 --> 00:32:44.359
+So this is a project that I think is a little bit fun.
+
+00:32:44.360 --> 00:32:47.519
+It's called Oopda. And basically what this does,
+
+00:32:47.520 --> 00:32:49.759
+you can see it on my source site,
+
+00:32:49.760 --> 00:32:55.159
+that's sr.ht tilde mplscorewin slash Oopda.
+
+00:32:55.160 --> 00:32:59.599
+O-F-D-A, and this is a very simple approach
+
+00:32:59.600 --> 00:33:04.639
+to using an org file as a replacement for SQLite.
+
+00:33:04.640 --> 00:33:12.239
+It's very simple, but it does support like a dot style path and notation.
+
+00:33:12.240 --> 00:33:16.319
+So you can get at deeply nested data
+
+00:33:16.320 --> 00:33:19.159
+and just gives a little,
+
+00:33:19.160 --> 00:33:24.159
+there's a shell script wrapper that comes with it.
+
+00:33:24.160 --> 00:33:26.319
+All right.
+
+00:33:26.320 --> 00:33:32.759
+Theoretically, this is the Q&A for the graphics talk.
+
+00:33:32.760 --> 00:33:38.079
+Oops, I have to unmute over here. Sorry.
+
+00:33:38.080 --> 00:33:52.999
+All right, I had a little audio bleed through,
+
+00:33:53.000 --> 00:34:02.399
+my apologies, can you still hear me?
+
+00:34:02.400 --> 00:34:03.719
+All right, I'm gonna guess,
+
+00:34:03.720 --> 00:34:05.759
+because I still see us live on the screen
+
+00:34:05.760 --> 00:34:12.839
+that we're still live. All right, so I'll just press on.
+
+00:34:12.840 --> 00:34:18.599
+So what we're looking at here is a project called Upta.
+
+00:34:18.600 --> 00:34:21.239
+Here's the Emacs Lisp source port.
+
+00:34:21.240 --> 00:34:23.199
+You can see it's not real impressive
+
+00:34:23.200 --> 00:34:24.759
+even with all of its boilerplate.
+
+00:34:24.760 --> 00:34:27.399
+It's under 200 lines of code.
+
+00:34:27.400 --> 00:34:30.599
+And this is kind of a proof of concept,
+
+00:34:30.600 --> 00:34:34.999
+giving us the ability to use a org.org file
+
+00:34:35.000 --> 00:34:38.279
+as a flat file database. The intention here is to get
+
+00:34:38.280 --> 00:34:40.439
+a kind of transition from SQLite,
+
+00:34:40.440 --> 00:34:44.239
+which is using a flat text file as a database,
+
+00:34:44.240 --> 00:34:48.879
+to being able to have more of a literate database
+
+00:34:48.880 --> 00:34:52.759
+where we can intermix documentation about the data
+
+00:34:52.760 --> 00:34:54.119
+with the data itself,
+
+00:34:54.120 --> 00:34:57.599
+and then by giving a path on the command line.
+
+00:34:57.600 --> 00:35:02.199
+I'll go back to the README, just take a look at that.
+
+00:35:02.200 --> 00:35:05.239
+And you can see there's a couple of kind of examples here
+
+00:35:05.240 --> 00:35:11.319
+where we're, here we would be querying a path.
+
+00:35:11.320 --> 00:35:15.479
+We can also provide a value
+
+00:35:15.480 --> 00:35:20.039
+and that'll set data into the file.
+
+00:35:20.040 --> 00:35:23.119
+It also has an optional first parameter
+
+00:35:23.120 --> 00:35:26.319
+to specify the specific org file by default.
+
+00:35:26.320 --> 00:35:29.399
+It looks for a file called data.org.
+
+00:35:29.400 --> 00:35:34.279
+And of course that can be used inside Emacs as well,
+
+00:35:34.280 --> 00:35:37.799
+although the value of that may be a little bit limited
+
+00:35:37.800 --> 00:35:39.799
+compared to more sophisticated
+
+00:35:39.800 --> 00:35:41.799
+technologies like org-element.
+
+00:35:41.800 --> 00:35:43.839
+This is not an implementation
+
+00:35:43.840 --> 00:35:47.159
+that mirrors all of org-element
+
+00:35:47.160 --> 00:35:50.079
+or any of the more complex functionality of org.
+
+00:35:50.080 --> 00:35:52.919
+It's really as simple as possible proof of concept
+
+00:35:52.920 --> 00:35:57.679
+to just to be able to kind of work
+
+00:35:57.680 --> 00:35:59.559
+with the data inside an org file
+
+00:35:59.560 --> 00:36:01.679
+and get it back out on the command line.
+
+00:36:01.680 --> 00:36:07.839
+So we'll see if we can make it work here.
+
+00:36:07.840 --> 00:36:13.479
+Corwin, could you increase the font size?
+
+00:36:13.480 --> 00:36:27.199
+I surely will. All right. How's that?
+
+00:36:27.200 --> 00:36:30.999
+That's my picture. Yeah. Okay. Cool.
+
+00:36:31.000 --> 00:36:39.159
+So, let's see if we do have a, well, we can probably make it.
+
+00:36:39.160 --> 00:37:00.839
+Let's do this.
+
+00:37:00.840 --> 00:37:05.159
+All right, and then in theory, this just works.
+
+00:37:05.160 --> 00:37:42.199
+So we'll cut.
+
+00:37:42.200 --> 00:37:45.840
+So we'll just create a data file called data.org.
+
+00:37:45.880 --> 00:37:50.239
+Make sure that works. Looks reasonable.
+
+00:37:50.240 --> 00:38:13.079
+Let's try adding some data to it. Hmm, not so happy.
+
+00:38:13.080 --> 00:38:17.559
+Okay, let's try it the hard way.
+
+00:38:17.560 --> 00:38:21.079
+I'll come back over here to my usage
+
+00:38:21.080 --> 00:38:23.199
+and we'll just try running it.
+
+00:38:23.200 --> 00:38:37.319
+Is Emacs, is finding Emacs really the issue?
+
+00:38:37.320 --> 00:38:41.199
+It seems to me it's not, it's not liking my path.
+
+00:38:41.200 --> 00:38:44.079
+It's not finding out that I do EO and PWD.
+
+00:38:44.080 --> 00:38:49.519
+It wants it to be on the log. I see.
+
+00:38:49.520 --> 00:38:54.119
+So I may have to even mess with that further,
+
+00:38:54.120 --> 00:38:55.359
+but we'll just try it.
+
+00:38:55.360 --> 00:39:04.839
+So this should retrieve the value if it works.
+
+00:39:04.840 --> 00:39:17.119
+Oh, and let's take a take a simple
+
+00:39:17.120 --> 00:39:47.319
+Yeah, add-to-list takes a symbol.
+
+00:39:47.320 --> 00:39:52.639
+We're going to have issues with bash quoting,
+
+00:39:52.640 --> 00:39:58.559
+so you should escape the quoting side.
+
+00:39:58.560 --> 00:40:27.719
+Gotcha. You're kidding.
+
+00:40:27.720 --> 00:40:36.560
+I'm not letting go. Whoa. That might work.
+
+00:40:36.600 --> 00:41:02.159
+I got my parents right. Never demo live. How exciting. OK.
+
+00:41:02.160 --> 00:41:13.079
+Without batch, though, we may not get our output. OK.
+
+00:41:13.080 --> 00:41:20.320
+Well, that's as far as I'm going to take it.
+
+00:41:20.400 --> 00:41:21.959
+I should have prepped a demo environment.
+
+00:41:21.960 --> 00:41:26.879
+I wasn't really prepared to demo. No worries.
+
+00:41:26.880 --> 00:41:30.719
+Couple of questions about this feature.
+
+00:41:30.720 --> 00:41:37.799
+The first question is, do you use it? I do use it, yeah.
+
+00:41:37.800 --> 00:41:41.279
+I should have gotten onto the environment
+
+00:41:41.280 --> 00:41:45.599
+where I'm using it. It's a little messy.
+
+00:41:45.600 --> 00:41:47.079
+It gets into another project
+
+00:41:47.080 --> 00:41:48.839
+that's way too complicated to get into.
+
+00:41:48.840 --> 00:41:53.079
+Yeah, but what kinds of things do you use it for?
+
+00:41:53.080 --> 00:41:56.999
+It's sort of hard to answer
+
+00:41:57.000 --> 00:41:59.159
+that without getting into my other project,
+
+00:41:59.160 --> 00:42:02.919
+but essentially I've got a web development tool chain
+
+00:42:02.920 --> 00:42:05.759
+that is kind of a web-based REPL
+
+00:42:05.760 --> 00:42:10.919
+that is kind of a literate compute environment, if you will,
+
+00:42:10.920 --> 00:42:13.119
+allowing me to use a bunch of virtual machines
+
+00:42:13.120 --> 00:42:19.079
+as one big computer. That project is called Ghost Wheel.
+
+00:42:19.080 --> 00:42:23.719
+And so in order to show off the homepage,
+
+00:42:23.720 --> 00:42:30.359
+So on this page, you can see the list of machines,
+
+00:42:30.360 --> 00:42:34.759
+and then you'll also see there's these state indicators.
+
+00:42:34.760 --> 00:42:38.439
+And right now, as a matter of fact,
+
+00:42:38.440 --> 00:42:41.239
+what I've been hacking on
+
+00:42:41.240 --> 00:42:44.879
+is trying to get support for org tables.
+
+00:42:44.880 --> 00:42:48.759
+Right now, I support only changing all of the data
+
+00:42:48.760 --> 00:42:51.959
+within some heading, subheading, or whatever.
+
+00:42:51.960 --> 00:42:55.079
+What I'd like to be able to do is specify,
+
+00:42:55.080 --> 00:43:01.079
+using org table fm syntax, the particular row column.
+
+00:43:01.080 --> 00:43:03.839
+So find a particular named table,
+
+00:43:03.840 --> 00:43:06.559
+find a particular row, you know,
+
+00:43:06.560 --> 00:43:08.639
+column one, you know, row two, column one,
+
+00:43:08.640 --> 00:43:11.919
+and then set the value from the command.
+
+00:43:11.920 --> 00:43:18.359
+Currently, I just use it for very simple stuff.
+
+00:43:18.360 --> 00:43:20.519
+I don't really want to show that off.
+
+00:43:20.520 --> 00:43:23.599
+I've got another page that lists all of the DNS names
+
+00:43:23.600 --> 00:43:26.159
+that are associated that are hosted on Ghostwheel.
+
+00:43:26.160 --> 00:43:29.319
+And so I use that to add items to the list.
+
+00:43:29.320 --> 00:43:40.439
+Does it make sense? Yeah, it sounds useful.
+
+00:43:40.440 --> 00:43:47.279
+So one thing that I would like,
+
+00:43:47.280 --> 00:43:51.479
+I guess it's easy enough to write,
+
+00:43:51.480 --> 00:43:58.799
+but is a tool exactly like this
+
+00:43:58.800 --> 00:44:03.839
+where I can query my org files from the command line?
+
+00:44:03.840 --> 00:44:06.879
+Yeah, that's exactly what it says.
+
+00:44:06.880 --> 00:44:14.599
+Yeah, but it's going to be more
+
+00:44:14.600 --> 00:44:23.319
+like a database query where, you know, I say select, select all headings where, you know,
+
+00:44:23.320 --> 00:44:27.279
+that contain this string or that have this tag, right?
+
+00:44:27.280 --> 00:44:38.519
+The kinds of things that you can do with org-ql from outside, from inside Emacs, right?
+
+00:44:38.520 --> 00:44:41.119
+To be able to do those from the command line with,
+
+00:44:41.120 --> 00:44:48.279
+I'm going to invoke SQL here, like SQL SELECT statements,
+
+00:44:48.280 --> 00:44:50.519
+but it doesn't have to be that syntax, right?
+
+00:44:50.520 --> 00:44:52.519
+Just that capability.
+
+00:44:52.520 --> 00:44:57.079
+Yeah, I can see that being useful as a command line tool.
+
+00:44:57.080 --> 00:44:59.399
+And I don't even care about write,
+
+00:44:59.400 --> 00:45:02.399
+like the ability to write or manipulate the file.
+
+00:45:02.400 --> 00:45:11.799
+Just query. the command line that sounds yeah yeah exactly
+
+00:45:11.800 --> 00:45:15.159
+to be able to dig a piece of data out of an org file as well
+
+00:45:15.160 --> 00:45:18.359
+for my purpose it's very useful to be able to replace it
+
+00:45:18.360 --> 00:45:20.999
+because then i can deal with submit the form you know
+
+00:45:21.000 --> 00:45:23.999
+and that might be like a sign up form
+
+00:45:24.000 --> 00:45:29.159
+and then i just add the user add up an entry into the org file
+
+00:45:29.160 --> 00:45:35.239
+for that user right what it doesn't do is a relational data
+
+00:45:35.240 --> 00:45:40.559
+So everything, it's essentially a document data store.
+
+00:45:40.560 --> 00:45:53.959
+Like a Mongo kind of. True. So over on IRC, ScrewLisp asks,
+
+00:45:53.960 --> 00:45:57.279
+what does it mean to query an ARC file?
+
+00:45:57.280 --> 00:46:01.679
+Is the data in a table? Is it in an ELISP nested list view
+
+00:46:01.680 --> 00:46:06.559
+of a table that has a name in ARC?
+
+00:46:06.560 --> 00:46:10.639
+And my answer to that is that if you ever used RQL,
+
+00:46:10.640 --> 00:46:14.199
+written by Alpha Papa,
+
+00:46:14.200 --> 00:46:18.039
+then that's the kind of thing I'm talking about.
+
+00:46:18.040 --> 00:46:23.119
+So, you query based on one of a set of attributes.
+
+00:46:23.120 --> 00:46:30.599
+And these attributes are anything that's recognized by ARC.
+
+00:46:30.600 --> 00:46:35.239
+For example, the to-do status, the dates,
+
+00:46:35.240 --> 00:46:40.399
+the outline path, the headings, a full text search.
+
+00:46:40.400 --> 00:46:43.479
+There are several more.
+
+00:46:43.480 --> 00:46:46.079
+The presence or absence of certain properties.
+
+00:46:46.080 --> 00:46:50.879
+using any combination of those if you want to dig down
+
+00:46:50.880 --> 00:46:52.759
+and find some data in an art file.
+
+00:46:52.760 --> 00:46:56.079
+That's the kind of query I'm talking about.
+
+00:46:56.080 --> 00:46:58.239
+It is somewhat equivalent
+
+00:46:58.240 --> 00:47:02.359
+to being able to write SQL queries
+
+00:47:02.360 --> 00:47:09.719
+where you match on things just for your art files.
+
+00:47:09.720 --> 00:47:21.199
+Okay. I think we might have figured out our problem.
+
+00:47:21.200 --> 00:47:38.839
+It was DOS encoding. See if that works.
+
+00:47:38.840 --> 00:47:47.879
+I switched the development track over
+
+00:47:47.880 --> 00:47:53.559
+to just watching the gen track since I couldn't find it.
+
+00:47:53.560 --> 00:47:57.359
+Also, Eludo wants to mention
+
+00:47:57.360 --> 00:48:00.799
+the Emacs Carnival theme for December.
+
+00:48:00.800 --> 00:48:02.359
+Yes, the people of Emacs,
+
+00:48:02.360 --> 00:48:04.119
+of which you are all very awesome.
+
+00:48:04.120 --> 00:48:05.519
+Thank you so much for your patience.
+
+00:48:05.520 --> 00:48:08.159
+Today has been very interesting.
+
+00:48:08.160 --> 00:48:13.359
+But yes, at some point we can show that too.
+
+00:48:13.360 --> 00:48:17.199
+And we can basically wrap up anytime we like
+
+00:48:17.200 --> 00:48:19.279
+or hang out for as much time as we like also.
+
+00:48:19.280 --> 00:48:23.279
+okay so this is okay at least i got
+
+00:48:23.280 --> 00:48:24.519
+as far as a working demo here
+
+00:48:24.520 --> 00:48:26.439
+so now you can kind of see what's going on um
+
+00:48:26.440 --> 00:48:31.599
+and i'll just wrap that into uh
+
+00:48:31.600 --> 00:48:40.959
+into a little prettier output
+
+00:48:40.960 --> 00:48:53.159
+And you can see that it modified the value.
+
+00:48:53.160 --> 00:48:59.479
+So it's pretty darn simple.
+
+00:48:59.480 --> 00:49:06.159
+Again, all it's doing is completely replacing all of this content
+
+00:49:06.160 --> 00:49:11.679
+with whatever new value is given as its final argument
+
+00:49:11.680 --> 00:49:14.879
+after naming the data path.
+
+00:49:14.880 --> 00:49:23.439
+So the one refinement we can do just to get a little more complex example going.
+
+00:49:23.440 --> 00:49:32.759
+We'll deepen our structure a little bit. And try that.
+
+00:49:32.760 --> 00:49:38.799
+So here now we'll say test two.
+
+00:49:38.800 --> 00:49:47.639
+And we can take a look at the data file
+
+00:49:47.640 --> 00:49:51.599
+and see that it has adjusted that
+
+00:49:51.600 --> 00:49:55.959
+because test2 was completely unique, that worked fine.
+
+00:49:55.960 --> 00:50:00.519
+If that were not the case,
+
+00:50:00.520 --> 00:50:02.599
+we would have had to specify the path
+
+00:50:02.600 --> 00:50:17.679
+using dot notation like this. And that's pretty much it.
+
+00:50:17.680 --> 00:50:20.759
+It took me much longer to figure out
+
+00:50:20.760 --> 00:50:23.759
+why it wasn't just working than it did to demo it.
+
+00:50:23.760 --> 00:50:29.239
+And again, what I really like about this program,
+
+00:50:29.240 --> 00:50:31.639
+besides the fact that I find it quite useful
+
+00:50:31.640 --> 00:50:34.639
+to just be able to stuff values into an org file
+
+00:50:34.640 --> 00:50:36.439
+from the command line using shell script,
+
+00:50:36.440 --> 00:50:41.279
+is what I really like about this
+
+00:50:41.280 --> 00:50:45.999
+is that it's a whopping 190 lines of code,
+
+00:50:46.000 --> 00:50:47.919
+including all the boilerplate.
+
+00:50:47.920 --> 00:50:55.759
+And I will share the project into the chat.
+
+00:50:55.760 --> 00:51:02.199
+So, Corwin, you're not using org-element for this, are you?
+
+00:51:02.200 --> 00:51:06.799
+No. Yeah, that's a great question.
+
+00:51:06.800 --> 00:51:10.839
+Let's just dig a little into the code here.
+
+00:51:10.840 --> 00:51:21.039
+Or maybe it would be more fun to actually
+
+00:51:21.040 --> 00:51:26.719
+So the only real requires here, I do use cl-lib mostly.
+
+00:51:26.720 --> 00:51:33.159
+I'm directly using the macros from org.
+
+00:51:33.160 --> 00:51:36.879
+Particularly, I'm extremely fond of this function.
+
+00:51:36.880 --> 00:51:41.279
+I'd love to see this just promoted to promoted
+
+00:51:41.280 --> 00:51:43.559
+somewhere deeper into Emacs proper,
+
+00:51:43.560 --> 00:51:47.639
+so that I don't have to load all of the org macros
+
+00:51:47.640 --> 00:51:50.239
+to get to this particularly useful one,
+
+00:51:50.240 --> 00:51:54.679
+which just tells me whether ignoring whitespace
+
+00:51:54.680 --> 00:51:59.639
+a string has any characters, has greater than zero length.
+
+00:51:59.640 --> 00:52:04.439
+Isn't that just string blank B?
+
+00:52:04.440 --> 00:52:08.999
+So this is a little different.
+
+00:52:09.000 --> 00:52:14.799
+This deals with... I may struggle to remember the details,
+
+00:52:14.800 --> 00:52:20.999
+and it's possible that the non-org specific version
+
+00:52:21.000 --> 00:52:23.519
+has even been improved or I didn't use it correctly,
+
+00:52:23.520 --> 00:52:29.479
+but I believe my experience was it didn't handle new lines, for example, quite the same way.
+
+00:52:29.480 --> 00:52:38.519
+So getting into what this actually does,
+
+00:52:38.520 --> 00:52:43.879
+most of the program is finding the relevant part of the file.
+
+00:52:43.880 --> 00:52:49.079
+You'll see that we start out by doing a depth-based search,
+
+00:52:49.080 --> 00:52:51.959
+capture the value that we're looking for.
+
+00:52:51.960 --> 00:52:58.119
+And then finally, we widen the buffer
+
+00:52:58.120 --> 00:53:01.799
+and keep handling the case where we might be being called
+
+00:53:01.800 --> 00:53:05.839
+from within Emacs in a narrowed buffer.
+
+00:53:05.840 --> 00:53:11.079
+This is another what should be documented at the top.
+
+00:53:11.080 --> 00:53:13.919
+So that is obviously going to load org.
+
+00:53:13.920 --> 00:53:21.399
+Just double-check that. Yeah, it is going to load org.
+
+00:53:21.400 --> 00:53:30.039
+And we can see that because it didn't find the function.
+
+00:53:30.040 --> 00:53:40.399
+until I loaded Org and then it did when I did C-h f
+
+00:53:40.400 --> 00:53:44.999
+to get definition of a function.
+
+00:53:45.000 --> 00:53:51.719
+So, widen the buffer and then I just start looking for the search.
+
+00:53:51.720 --> 00:53:55.399
+You can see I'm doing simple regular expression based searches here.
+
+00:53:55.400 --> 00:54:01.719
+Looking for lines, ultimately, that start with a star.
+
+00:54:01.720 --> 00:54:05.119
+That was a little simpler format
+
+00:54:05.120 --> 00:54:07.759
+that didn't quite work out.
+
+00:54:07.760 --> 00:54:25.719
+So I'm searching for, here this is a little tricky,
+
+00:54:25.720 --> 00:54:28.839
+but I'm searching for a number of stars
+
+00:54:28.840 --> 00:54:30.839
+equal to the depth that I want.
+
+00:54:30.840 --> 00:54:33.439
+The depth that I want being calculated
+
+00:54:33.440 --> 00:54:38.039
+based on the number of dots that were in the query string.
+
+00:54:38.040 --> 00:54:47.159
+from there, you know, kind of skipping some stuff, right?
+
+00:54:47.160 --> 00:54:49.599
+Once we find our starting position,
+
+00:54:49.600 --> 00:54:53.239
+then we're going to have to find the end of that,
+
+00:54:53.240 --> 00:54:57.679
+the section that we're going to read or replace.
+
+00:54:57.680 --> 00:55:12.959
+Text a tiny bit smaller. So I checked org-string nwp,
+
+00:55:12.960 --> 00:55:20.079
+and it's the same as string blank p.
+
+00:55:20.080 --> 00:55:26.319
+exactly the same code or the same result?
+
+00:55:26.320 --> 00:55:30.399
+No, it's the same result. Well, it's the same check,
+
+00:55:30.400 --> 00:55:34.519
+but string blank p will return a match object,
+
+00:55:34.520 --> 00:55:35.999
+like a string match object,
+
+00:55:36.000 --> 00:55:39.119
+whereas the org version will return the string itself
+
+00:55:39.120 --> 00:55:46.159
+if it finds a match, as in if it's blank.
+
+00:55:46.160 --> 00:55:48.319
+I don't remember that.
+
+00:55:48.320 --> 00:55:51.079
+As a Boolean check, they are the same.
+
+00:55:51.080 --> 00:55:54.159
+If you use it as, you know, is it blank or not.
+
+00:55:54.160 --> 00:56:02.679
+So, um, yeah, I've talked for way longer.
+
+00:56:02.680 --> 00:56:04.119
+I thought I literally thought
+
+00:56:04.120 --> 00:56:05.319
+this would be a five minute thing.
+
+00:56:05.320 --> 00:56:08.399
+I'm not sure if there are any questions on it,
+
+00:56:08.400 --> 00:56:10.239
+but just to simply answer your question.
+
+00:56:10.240 --> 00:56:11.719
+No, it doesn't use org element.
+
+00:56:11.720 --> 00:56:23.759
+This is pure regex based work.
+
+00:56:23.760 --> 00:56:26.919
+So, the advantage of not using... Right.
+
+00:56:26.920 --> 00:56:32.679
+So, the advantage of not using arg element
+
+00:56:32.680 --> 00:56:37.439
+is that you don't have to load arg or arg element, right?
+
+00:56:37.440 --> 00:56:39.039
+And so, it's going to be faster.
+
+00:56:39.040 --> 00:56:45.359
+And it's going to be faster both because you don't have to load arg element
+
+00:56:45.360 --> 00:56:51.079
+and because you don't have to run arg element, like the arg parser.
+
+00:56:51.080 --> 00:56:52.879
+But on the other hand,
+
+00:56:52.880 --> 00:56:58.439
+you end up loading all of org anyway.
+
+00:56:58.440 --> 00:57:02.679
+So at that point, it might just be better
+
+00:57:02.680 --> 00:57:05.039
+to use org element because it's more robust.
+
+00:57:05.040 --> 00:57:07.919
+For example, if you have a bunch of leading stars
+
+00:57:07.920 --> 00:57:09.959
+inside a source block or something,
+
+00:57:09.960 --> 00:57:11.599
+you don't want to misclassify that.
+
+00:57:11.600 --> 00:57:16.639
+Matter of fact, I believe I had to do some flossing with it
+
+00:57:16.640 --> 00:57:18.879
+to deal with not just that,
+
+00:57:18.880 --> 00:57:21.439
+but drawers and things like that.
+
+00:57:21.440 --> 00:57:25.879
+right yeah so at the end of the day
+
+00:57:25.880 --> 00:57:28.039
+that was just an extra 10 or 20 characters
+
+00:57:28.040 --> 00:57:31.039
+in the regular expression so i just shrugged and wrote them
+
+00:57:31.040 --> 00:57:36.799
+you can see there are a number of i
+
+00:57:36.800 --> 00:57:40.279
+i happen to like writing regular expressions
+
+00:57:40.280 --> 00:57:42.479
+and find them relatively readable so
+
+00:57:42.480 --> 00:57:46.719
+So it didn't bother me doing that.
+
+00:57:46.720 --> 00:57:49.239
+I've also done a bunch of work with org-element
+
+00:57:49.240 --> 00:57:51.439
+with the dungeon project,
+
+00:57:51.440 --> 00:57:53.759
+which of course uses that extensively
+
+00:57:53.760 --> 00:57:57.079
+to pull data out of tables and so on.
+
+00:57:57.080 --> 00:58:01.319
+And indeed, I think that may ultimately be my solution.
+
+00:58:01.320 --> 00:58:06.199
+I've been kind of distracted on a side quest
+
+00:58:06.200 --> 00:58:09.959
+to improve the org-table-fm parser.
+
+00:58:09.960 --> 00:58:14.279
+There's a post on my blog about the work that I've done there,
+
+00:58:14.280 --> 00:58:19.359
+and recently started talking to Ihor,
+
+00:58:19.360 --> 00:58:20.839
+the new org maintainer,
+
+00:58:20.840 --> 00:58:27.579
+who took over in the last year or so from Bastien.
+
+00:58:27.580 --> 00:58:32.159
+Just about what it would take to pick that up,
+
+00:58:32.160 --> 00:58:34.279
+or at least get it to a point
+
+00:58:34.280 --> 00:58:35.679
+where somebody else could work on it.
+
+00:58:35.680 --> 00:58:39.599
+It's pretty dense right now.
+
+00:58:39.600 --> 00:58:59.919
+So this thing is a bit of a monster,
+
+00:58:59.920 --> 00:59:01.799
+but at the end of the day,
+
+00:59:01.800 --> 00:59:06.919
+our goal is to extend the syntax,
+
+00:59:06.920 --> 00:59:12.519
+is to be able to use this Org Table FM syntax
+
+00:59:12.520 --> 00:59:14.439
+in other contexts.
+
+00:59:14.440 --> 00:59:18.519
+So if you haven't looked at board table FM,
+
+00:59:18.520 --> 00:59:21.399
+these I bar or these I markers
+
+00:59:21.400 --> 00:59:26.039
+are telling us to look for the table separator.
+
+00:59:26.040 --> 00:59:29.759
+So positioning based on the location of a table separator.
+
+00:59:29.760 --> 00:59:34.439
+I find that a little bit brittle
+
+00:59:34.440 --> 00:59:38.679
+just because it's really easy to go in and decide,
+
+00:59:38.680 --> 00:59:42.919
+oh, it'll look better with an additional line separator in there.
+
+00:59:42.920 --> 00:59:48.039
+And then all of these formulas break everywhere.
+
+00:59:48.040 --> 00:59:49.919
+So it would be a little more fun
+
+00:59:49.920 --> 00:59:53.399
+to have at least variables in there.
+
+00:59:53.400 --> 00:59:56.159
+And that's kind of part of the scope.
+
+00:59:56.160 --> 01:00:04.119
+If we look, and here you get kind of a hint
+
+01:00:04.120 --> 01:00:06.639
+of the new syntax I'd like to support,
+
+01:00:06.640 --> 01:00:12.559
+things like $star, $underscore.
+
+01:00:12.560 --> 01:00:17.559
+Keyword it's it's probably a half-hour talk
+
+01:00:17.560 --> 01:00:20.879
+just to get into what every single one of these would do
+
+01:00:20.880 --> 01:00:26.319
+But this post does does give some some context of that
+
+01:00:26.320 --> 01:00:35.679
+And more importantly there is a as a complete test program that
+
+01:00:35.680 --> 01:00:39.159
+Worked the last time I was playing with it
+
+01:00:39.160 --> 01:00:43.959
+And this gives you complete examples
+
+01:00:43.960 --> 01:00:48.479
+of all the syntax that the work in progress does currently support.
+
+01:00:48.480 --> 01:00:52.799
+You'll see some of these items are commented out.
+
+01:00:52.800 --> 01:00:54.359
+Those aren't supported yet
+
+01:00:54.360 --> 01:00:56.119
+and before I would implement them now,
+
+01:00:56.120 --> 01:01:04.359
+especially now that we're talking in terms of trying to take org itself this direction, you know,
+
+01:01:04.360 --> 01:01:13.539
+of kind of beefing up the the TableFM format parsing
+
+01:01:13.540 --> 01:01:16.999
+so that it could be used in other contexts besides
+
+01:01:17.000 --> 01:01:19.640
+specifically within a formula.
+
+01:01:19.640 --> 01:01:26.839
+I wouldn't want to add features
+
+01:01:26.840 --> 01:01:33.399
+to it without discussing those.
+
+01:01:33.400 --> 01:01:37.639
+So this is just a simple, basically a literate test file
+
+01:01:37.640 --> 01:01:40.439
+if you want to call it that.
+
+01:01:40.440 --> 01:01:43.239
+The perhaps key improvement here
+
+01:01:43.240 --> 01:01:49.799
+is naming all of the different capture groups.
+
+01:01:49.800 --> 01:01:52.119
+which just, if you're working
+
+01:01:52.120 --> 01:01:55.919
+with really huge regular expressions, which this is,
+
+01:01:55.920 --> 01:01:58.839
+let me just make sure the whole pagex is right in here
+
+01:01:58.840 --> 01:02:00.599
+so we can see it, yeah.
+
+01:02:00.600 --> 01:02:05.959
+So here's the actual rewrite, scale it a little bit,
+
+01:02:05.960 --> 01:02:14.479
+so you can see it's kind of a monster.
+
+01:02:14.480 --> 01:02:27.639
+And that's all using Rx.
+
+01:02:27.640 --> 01:02:29.519
+So hopefully that looks pretty familiar.
+
+01:02:29.520 --> 01:02:35.039
+Dollars for specifying a column, at sign to specify a row.
+
+01:02:35.040 --> 01:02:43.959
+And we also have the keys.
+
+01:02:43.960 --> 01:02:58.559
+Anybody else want to show and tell?
+
+01:02:58.560 --> 01:03:01.399
+We're going to cut over to the automated introduction
+
+01:03:01.400 --> 01:03:07.799
+for the Saturday closing remarks in like four minutes.
+
+01:03:07.800 --> 01:03:15.599
+Oh, but quick, quick, quick mention of the Emacs Carnival.
+
+01:03:15.600 --> 01:03:20.559
+So the Emacs Carnival is a shared blogging theme.
+
+01:03:20.560 --> 01:03:25.079
+where lots of people write about a specific theme,
+
+01:03:25.080 --> 01:03:26.119
+and then if you write about it,
+
+01:03:26.120 --> 01:03:28.239
+you can send your link to whoever's hosting the carnival.
+
+01:03:28.240 --> 01:03:31.679
+And it's a great way to discover other people's cool stuff.
+
+01:03:31.680 --> 01:03:35.679
+So if I take presenter, hang on a second, take presenter.
+
+01:03:35.680 --> 01:03:39.519
+Oh, actually, haha, I know,
+
+01:03:39.520 --> 01:03:41.959
+I'm going to make Elladom present it.
+
+01:03:41.960 --> 01:03:47.199
+Haha, you are now in charge. Okay, take it away.
+
+01:03:47.200 --> 01:03:49.959
+So I've been using Emacs for like 46 years now,
+
+01:03:49.960 --> 01:03:53.359
+back to TECO Emacs. And as I just said in the chat,
+
+01:03:53.360 --> 01:03:56.319
+I've found that the people who use Emacs
+
+01:03:56.320 --> 01:03:59.400
+tend to be interesting people in many different ways.
+
+01:03:59.440 --> 01:04:03.199
+And so this month, I'm just saying, let's give a shout out
+
+01:04:03.200 --> 01:04:06.399
+to some of the interesting people we've met along the way.
+
+01:04:06.400 --> 01:04:09.239
+And including some of the people
+
+01:04:09.240 --> 01:04:10.159
+that are putting on this conference
+
+01:04:10.160 --> 01:04:11.959
+are some of the most interesting
+
+01:04:11.960 --> 01:04:13.439
+and helpful people I've ever met.
+
+01:04:13.440 --> 01:04:27.919
+So thank you. You're very kind. Thank you.
+
+01:04:27.920 --> 01:04:30.679
+I'll say more than that. Maybe I will.
+
+01:04:30.680 --> 01:04:34.279
+I completely agree with you and I couldn't agree more.
+
+01:04:34.280 --> 01:04:38.839
+I think that's how Sacha and Amin and Leo
+
+01:04:38.840 --> 01:04:40.559
+really dragged me into this,
+
+01:04:40.560 --> 01:04:42.319
+you know, into being a volunteer.
+
+01:04:42.320 --> 01:04:44.599
+And I really, I'm sure we'll talk
+
+01:04:44.600 --> 01:04:46.039
+about this in the closing remarks,
+
+01:04:46.040 --> 01:04:50.199
+but I can't recommend volunteering for this project enough.
+
+01:04:50.200 --> 01:04:54.319
+It's just so fun to talk backstage
+
+01:04:54.320 --> 01:05:00.679
+with the presenters I don't know.
+
+01:05:00.680 --> 01:05:11.439
+It's an extremely engaging community.
+
+01:05:11.440 --> 01:05:12.759
+It's really thoughtful.
+
+01:05:12.760 --> 01:05:15.039
+I like the way y'all are so patient and awesome
+
+01:05:15.040 --> 01:05:19.439
+and I can be just quietly having my little freak out here
+
+01:05:19.440 --> 01:05:20.679
+and everyone's fine
+
+01:05:20.680 --> 01:05:23.879
+and will even help debug things live as needed.
+
+01:05:23.880 --> 01:05:45.499
+So this is all good.
+
+01:05:45.500 --> 01:05:48.119
+Anyway, so if people want to participate,
+
+01:05:48.120 --> 01:05:49.919
+you basically write a blog post.
+
+01:05:49.920 --> 01:05:53.159
+If you don't have a blog yet,
+
+01:05:53.160 --> 01:05:56.959
+there are any number of packages in Emacs,
+
+01:05:56.960 --> 01:05:58.479
+as well as web-based services,
+
+01:05:58.480 --> 01:06:02.039
+but really, you can get something going with Emacs.
+
+01:06:02.040 --> 01:06:05.839
+or exporting to HTML and maybe even figure out RSS,
+
+01:06:05.840 --> 01:06:08.279
+or you can use a static site generator like Hugo,
+
+01:06:08.280 --> 01:06:10.999
+or you can find, if you can set up WordPress,
+
+01:06:11.000 --> 01:06:12.119
+that's another way to do it.
+
+01:06:12.120 --> 01:06:15.079
+Or you can email me your thing and I'll post it on my blog
+
+01:06:15.080 --> 01:06:20.239
+and let me know how you want to be credited for it.
+
+01:06:20.240 --> 01:06:23.559
+Anyway, so you can share your story
+
+01:06:23.560 --> 01:06:26.879
+or share your story about somebody else's story
+
+01:06:26.880 --> 01:06:35.319
+and celebrate Emacs community.
+
+01:06:35.320 --> 01:06:39.079
+And we can send it to George also.
+
+01:06:39.080 --> 01:06:48.399
+We'll then make links in that blog post.
+
+01:06:48.400 --> 01:06:50.199
+And on the subject of community,
+
+01:06:50.200 --> 01:06:53.439
+I also heartily recommend the IRC community on Emacs.
+
+01:06:53.440 --> 01:06:55.919
+Pound Emacs is another one of those things
+
+01:06:55.920 --> 01:06:58.279
+that I just personally can't get enough of,
+
+01:06:58.280 --> 01:07:05.079
+and I hear a lot of stories about just how it's helped people.
+
+01:07:05.080 --> 01:07:09.119
+All right, we are now having the automated introduction
+
+01:07:09.120 --> 01:07:12.759
+and then it's going to rejoin over here very soon.
+
+01:07:12.760 --> 01:07:22.439
+Hang on a second. Wow, that's going.
+
+01:07:22.440 --> 01:07:34.399
+Saturday close and let's arrange our screen nicely.
+
+01:07:34.400 --> 01:07:38.279
+All right, we made it to the end of the first day! Woohoo!
+
+01:07:38.280 --> 01:07:40.399
+Thank you for joining us
+
+01:07:40.400 --> 01:07:42.959
+for the first day of EmacsConf 2025.
+
+01:07:42.960 --> 01:07:44.919
+Feel free to spread the word
+
+01:07:44.920 --> 01:07:48.479
+because there is still another day of fun talks tomorrow.
+
+01:07:48.480 --> 01:07:51.399
+So hashtag EmacsConf and hashtag Emacs.
+
+01:07:51.400 --> 01:07:54.239
+If you do hashtag Emacs on Mastodon
+
+01:07:54.240 --> 01:07:58.239
+or Blue Sky or other places, we'll probably find it.
+
+01:07:58.240 --> 01:08:01.759
+Or if I don't, you can just let me know also.
+
+01:08:01.760 --> 01:08:04.039
+The prerecorded talks should be up
+
+01:08:04.040 --> 01:08:05.639
+on the talk pages already.
+
+01:08:05.640 --> 01:08:09.119
+The live talks, we'll probably actually get them up
+
+01:08:09.120 --> 01:08:11.079
+within the next week or two.
+
+01:08:11.080 --> 01:08:13.359
+I think they've already started processing,
+
+01:08:13.360 --> 01:08:15.479
+so I just had to sit down and then work with
+
+01:08:15.480 --> 01:08:18.399
+our wonderful army of volunteer captioners
+
+01:08:18.400 --> 01:08:20.119
+to get them all nicely captioned.
+
+01:08:20.120 --> 01:08:22.439
+But anyway, so the prerecorded talks
+
+01:08:22.440 --> 01:08:23.759
+are also up on YouTube,
+
+01:08:23.760 --> 01:08:25.719
+and I will eventually also upload them
+
+01:08:25.720 --> 01:08:29.239
+to ToobNix, which is a PeerTube instance.
+
+01:08:29.240 --> 01:08:31.239
+We will work on extracting live talks.
+
+01:08:31.240 --> 01:08:32.119
+If you'd like updates,
+
+01:08:32.120 --> 01:08:35.319
+please subscribe to the EmacsConf Discuss mailing list.
+
+01:08:35.320 --> 01:08:37.279
+If you've got ideas for making things better,
+
+01:08:37.280 --> 01:08:39.479
+we have so many ideas. I always end up with a very long
+
+01:08:39.480 --> 01:08:43.359
+to-do list after these things. Please add them to the pad.
+
+01:08:43.360 --> 01:08:46.919
+I'd love to hear from you on how we can make it even smoother next year.
+
+01:08:46.920 --> 01:08:49.359
+There are about 100 people watching in gen
+
+01:08:49.360 --> 01:08:52.159
+and 100 people watching in devs, which is really awesome.
+
+01:08:52.160 --> 01:08:54.119
+It's amazing to think that we can have
+
+01:08:54.120 --> 01:08:56.959
+an Emacs party for a lot of people.
+
+01:08:56.960 --> 01:09:00.399
+And we can only do this because of all the wonderful speakers,
+
+01:09:00.400 --> 01:09:02.279
+volunteers, participants,
+
+01:09:02.280 --> 01:09:04.359
+and very patient people in our lives
+
+01:09:04.360 --> 01:09:07.079
+who make it possible through all the time and support.
+
+01:09:07.080 --> 01:09:10.039
+So this year, Corwin did most of the hosting.
+
+01:09:10.040 --> 01:09:13.439
+I mean, also dropped by earlier, so that's great.
+
+01:09:13.440 --> 01:09:17.919
+I hope Leo is okay. You know, we managed.
+
+01:09:17.920 --> 01:09:22.439
+And I'm Sasha, by the way. I was running around backstage
+
+01:09:22.440 --> 01:09:26.559
+and occasionally dropping in to go on the stream.
+
+01:09:26.560 --> 01:09:29.359
+There are lots of other volunteers who are not on air.
+
+01:09:29.360 --> 01:09:32.719
+So, for example, during the proposal review process,
+
+01:09:32.720 --> 01:09:34.319
+we got a lot of wonderful comments
+
+01:09:34.320 --> 01:09:37.759
+from J.C. Helary, Triko, and James Endres Howell,
+
+01:09:37.760 --> 01:09:41.039
+captions from Amitav and Rodion and other people
+
+01:09:41.040 --> 01:09:42.879
+have actually started also helping
+
+01:09:42.880 --> 01:09:45.079
+with the captions as well.
+
+01:09:45.080 --> 01:09:49.399
+So jay_bird just sent in some stuff today too.
+
+01:09:49.400 --> 01:09:52.959
+We are slowly working on getting a mirror in the EU set up
+
+01:09:52.960 --> 01:09:55.639
+so it'll be a little faster for people.
+
+01:09:55.640 --> 01:09:58.079
+So thanks to Yang3 for lending us a server.
+
+01:09:58.080 --> 01:10:00.879
+Babin and Michael and Ian and Jamie
+
+01:10:00.880 --> 01:10:06.119
+and Eeyore and Floyd Coulter have also helped out as well.
+
+01:10:06.120 --> 01:10:08.959
+Thanks to the Free Software Foundation
+
+01:10:08.960 --> 01:10:12.679
+for the mailing list, the media server, and of course, GNU Emacs itself,
+
+01:10:12.680 --> 01:10:15.439
+for which an astonishing amount
+
+01:10:15.440 --> 01:10:19.319
+of the scripting is done in Emacs. It's great.
+
+01:10:19.320 --> 01:10:23.279
+Thanks to Ry P for the server that we're using for OBS
+
+01:10:23.280 --> 01:10:27.639
+so that we can just VNC into it and I can manage two tracks
+
+01:10:27.640 --> 01:10:30.799
+without making my computer melt. It's great.
+
+01:10:30.800 --> 01:10:32.879
+And of course, to all the users
+
+01:10:32.880 --> 01:10:33.999
+and contributors and project teams
+
+01:10:34.000 --> 01:10:36.119
+that work on all the free software
+
+01:10:36.120 --> 01:10:37.279
+that this stuff is built on.
+
+01:10:37.280 --> 01:10:43.639
+Emacs, Org Mode, ERC, Tramp, Magit, BigBlueButton,
+
+01:10:43.640 --> 01:10:48.239
+Etherpad, IkiWiki, IceCast, OBS, The Lounge,
+
+01:10:48.240 --> 01:10:52.959
+LiberaChat, FFmpeg, OpenAI Whisper, WhisperX,
+
+01:10:52.960 --> 01:10:55.039
+the Aeneas forced alignment tool,
+
+01:10:55.040 --> 01:11:00.279
+PsiTransfer, SubEd, SubSeg, Mozilla Firefox, MPV, and Tampermonkey,
+
+01:11:00.280 --> 01:11:02.199
+and other things I probably forgot to mention.
+
+01:11:02.200 --> 01:11:04.599
+Thanks to Shoshin for the music,
+
+01:11:04.600 --> 01:11:06.799
+and thanks to people also who've donated
+
+01:11:06.800 --> 01:11:08.679
+through the Working Together program,
+
+01:11:08.680 --> 01:11:12.559
+like Scott and Jonathan and other anonymous donors.
+
+01:11:12.560 --> 01:11:15.919
+So that's a quick thanks. There's more tomorrow,
+
+01:11:15.920 --> 01:11:18.359
+but Corwin, do you have any parting words?
+
+01:11:18.360 --> 01:11:23.559
+You know, my parting words, Sacha are a thanks to you
+
+01:11:23.560 --> 01:11:25.759
+and not just a thanks
+
+01:11:25.760 --> 01:11:27.279
+for the hundreds of hours that you put
+
+01:11:27.280 --> 01:11:29.399
+into preparing this conference,
+
+01:11:29.400 --> 01:11:32.159
+you know, over the years and probably just this year,
+
+01:11:32.160 --> 01:11:35.999
+but also for all that you do for the community you are.
+
+01:11:36.000 --> 01:11:38.759
+You are a real unsung hero,
+
+01:11:38.760 --> 01:11:42.319
+even though I do hear your praises sung.
+
+01:11:42.320 --> 01:11:43.759
+They really can't be sung enough.
+
+01:11:43.760 --> 01:11:45.879
+In fact, I just this last week
+
+01:11:45.880 --> 01:11:48.039
+recommended to two different people your blog
+
+01:11:48.040 --> 01:11:51.599
+as a place to get a first introduction to Emacs.
+
+01:11:51.600 --> 01:11:54.799
+Your Emacs news is an incredible contribution,
+
+01:11:54.800 --> 01:11:57.959
+and just I want you to hear us thanking you.
+
+01:11:57.960 --> 01:12:04.879
+Thank you, Sacha. Emacs is a lot of fun,
+
+01:12:04.880 --> 01:12:07.519
+and Emacs people are a lot of fun,
+
+01:12:07.520 --> 01:12:10.879
+so it's all very wonderful. Yeah, we can wrap up here.
+
+01:12:10.880 --> 01:12:15.079
+People can keep hanging out if they want.
+
+01:12:15.080 --> 01:12:21.119
+I have a kiddo who is probably going to be back home soon
+
+01:12:21.120 --> 01:12:23.559
+and will pounce on me for more hugs,
+
+01:12:23.560 --> 01:12:25.599
+so I will see y'all tomorrow.
+
+01:12:25.600 --> 01:12:29.919
+uh, for more probably the same kind of stuff.
+
+01:12:29.920 --> 01:12:32.679
+Shut it down, save our energy for tomorrow.
+
+01:12:32.680 --> 01:12:36.319
+Uh, we do like to run into like hours long closing tomorrow.
+
+01:12:36.320 --> 01:12:38.319
+So we'll work on resisting that.
+
+01:12:38.320 --> 01:12:41.559
+Um, I suggest we, we look, we go get some rest
+
+01:12:41.560 --> 01:12:43.839
+and come, come back at it fresh tomorrow.
+
+01:12:43.840 --> 01:12:47.799
+Anybody else, any concerns with that or shall we go for it?
+
+01:12:47.800 --> 01:12:50.479
+Sounds good to me.
+
+01:12:50.480 --> 01:12:53.599
+If you've got ideas, pop them into the etherpad.
+
+01:12:53.600 --> 01:12:56.600
+And thank you so much for sharing this time with us.
+
+01:12:56.640 --> 01:13:23.800
+See you tomorrow.
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-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main--chapters.vtt b/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main--chapters.vtt
new file mode 100644
index 00000000..8c9d1e5f
--- /dev/null
+++ b/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main--chapters.vtt
@@ -0,0 +1,98 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:48.179
+Introduction
+
+00:00:48.180 --> 00:01:08.059
+Overview of talk
+
+00:01:08.060 --> 00:03:16.019
+Why private AI?
+
+00:03:16.020 --> 00:05:16.347
+What do I need for private AI?
+
+00:05:16.348 --> 00:06:13.219
+Emacs and private AI
+
+00:06:13.220 --> 00:07:56.339
+Pieces for an AI Emacs solution
+
+00:07:56.340 --> 00:08:52.099
+Config file
+
+00:08:52.100 --> 00:10:21.699
+Demo: Who was David Bowie?
+
+00:10:21.700 --> 00:10:42.179
+Hallucinations
+
+00:10:42.180 --> 00:11:57.179
+Next question: What are sea monkeys?
+
+00:11:57.180 --> 00:12:32.579
+Writing Hello World in Emacs Lisp
+
+00:12:32.580 --> 00:13:36.899
+Pieces for a better solution
+
+00:13:36.900 --> 00:14:56.579
+What about the license?
+
+00:14:56.580 --> 00:15:14.519
+Are there open source data model options?
+
+00:15:14.520 --> 00:20:07.419
+Things to know
+
+00:20:07.420 --> 00:21:30.739
+Q: Why is the David Bowie question a good one for testing a model? e.g. does it fail in interesting ways?
+
+00:21:30.740 --> 00:22:16.879
+Q: What specific tasks do you use local AI for?
+
+00:22:16.880 --> 00:22:46.539
+Q: Have you used any small domain-specific LLMs? What are the kinds of tasks they specialize in, and how do I find and use them?
+
+00:22:46.540 --> 00:23:48.055
+Q: Are the various models updated regularly? Can you add your own data to pre-built models?
+
+00:23:48.056 --> 00:24:38.833
+Q: What is your experience with RAG? Are you using them and how have they helped?
+
+00:24:38.834 --> 00:25:31.077
+Q: Thoughts on running things on AWS/digital ocean instances, etc?
+
+00:25:31.078 --> 00:26:59.659
+Q: What has your experience been using AI for cyber security applications? What do you usually use it for?
+
+00:26:59.660 --> 00:28:14.125
+Q: Is there a disparity where you go to paid models becouse they are better and what problems would those be?
+
+00:28:14.126 --> 00:29:52.379
+Q: What's the largest (in parameter size) local model you've been able to successfully run locally, and do you run into issues with limited context window size?
+
+00:29:52.380 --> 00:31:09.556
+Q: Are there "Free" as in FSF/open source issues with the data?
+
+00:31:09.557 --> 00:32:18.059
+Q: Given that large AI companies are openly stealing IP and copyright, thereby eroding the authority of such law (and eroding truth itself as well), can you see a future where IP & copyright flaw become untenable and what sort of onwards effect might that have?
+
+00:32:18.060 --> 00:34:46.899
+Comment: File size is not going to be the bottleneck, your RAM is.
+
+00:34:46.900 --> 00:35:44.859
+Q: Have you used local models capable of tool-calling?
+
+00:35:44.860 --> 00:36:31.299
+Q: Will the models reach out to the web if they need to for more info?
+
+00:36:31.300 --> 00:37:36.577
+Q: What scares you most about agentic tools? How would you think about putting a sandbox around it if you adopt an agentic workflow?
+
+00:37:36.578 --> 00:38:41.659
+Q: Tool calling can be read-only, such as giving models the ability to search the web before answersing your question. (No write access or execute access) I'm interested to know if local models are any good at calling tools, though.
+
+00:38:41.660 --> 00:39:34.100
+Wrapping up
diff --git a/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt b/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt
new file mode 100644
index 00000000..dc4ba1b1
--- /dev/null
+++ b/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt
@@ -0,0 +1,2675 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.859
+Hey, everybody. Welcome from frigid Omaha, Nebraska.
+
+00:00:04.860 --> 00:00:06.619
+I'm just going to kick off my talk here,
+
+00:00:06.620 --> 00:00:23.899
+and we'll see how it all goes. Thanks for attending.
+
+00:00:23.900 --> 00:00:26.939
+So the slides will be available on my site, https://grothe.us,
+
+00:00:26.940 --> 00:00:29.899
+in the presentation section tonight or tomorrow.
+
+00:00:29.900 --> 00:00:33.099
+This is a quick intro to one way to do private AI in Emacs.
+
+00:00:33.100 --> 00:00:35.299
+There are a lot of other ways to do it.
+
+00:00:35.300 --> 00:00:38.899
+This one is really just more or less the easiest way to do it.
+
+00:00:38.900 --> 00:00:40.379
+It's a minimal viable product
+
+00:00:40.380 --> 00:00:42.379
+to get you an idea of how to get started with it
+
+00:00:42.380 --> 00:00:43.859
+and how to give it a spin.
+
+00:00:43.860 --> 00:00:45.819
+Really hope some of you give it a shot
+
+00:00:45.820 --> 00:00:48.179
+and learn something along the way.
+
+NOTE Overview of talk
+
+00:00:48.180 --> 00:00:50.379
+So the overview of the talk
+
+00:00:50.380 --> 00:00:54.939
+broke down these basic bullet points of why private AI,
+
+00:00:54.940 --> 00:00:58.939
+what do I need to do private AI, Emacs and private AI,
+
+00:00:58.940 --> 00:01:02.739
+pieces for an AI Emacs solution,
+
+00:01:02.740 --> 00:01:08.059
+a demo of a minimal viable product, and the summary.
+
+NOTE Why private AI?
+
+00:01:08.060 --> 00:01:10.779
+Why private AI? This is pretty simple.
+
+00:01:10.780 --> 00:01:12.099
+Just read the terms and conditions
+
+00:01:12.100 --> 00:01:14.819
+for any AI system you're currently using.
+
+00:01:14.820 --> 00:01:17.019
+If you're using the free tiers, your queries,
+
+00:01:17.020 --> 00:01:18.619
+code, uploaded information
+
+00:01:18.620 --> 00:01:20.699
+is being used to train the models.
+
+00:01:20.700 --> 00:01:22.939
+In some cases, you are giving the company
+
+00:01:22.940 --> 00:01:25.419
+a perpetual license to your data.
+
+00:01:25.420 --> 00:01:27.059
+You have no control over this,
+
+00:01:27.060 --> 00:01:29.219
+except for not using the engine.
+
+00:01:29.220 --> 00:01:30.699
+And keep in mind, the terms
+
+00:01:30.700 --> 00:01:32.179
+are changing all the time on that,
+
+00:01:32.180 --> 00:01:34.139
+and they're not normally changing for our benefit.
+
+00:01:34.140 --> 00:01:38.259
+So that's not necessarily a good thing.
+
+00:01:38.260 --> 00:01:40.339
+If you're using the paid tiers,
+
+00:01:40.340 --> 00:01:43.459
+you may be able to opt out of the data collection.
+
+00:01:43.460 --> 00:01:45.539
+But keep in mind, this can change,
+
+00:01:45.540 --> 00:01:48.619
+or they may start charging for that option.
+
+00:01:48.620 --> 00:01:51.419
+Every AI company wants more and more data.
+
+00:01:51.420 --> 00:01:53.779
+They need more and more data to train their models.
+
+00:01:53.780 --> 00:01:56.019
+It is just the way it is.
+
+00:01:56.020 --> 00:01:57.899
+They need more and more information
+
+00:01:57.900 --> 00:02:00.459
+to get it more and more accurate to keep it up to date.
+
+00:02:00.460 --> 00:02:03.219
+There's been a story about Stack Overflow.
+
+00:02:03.220 --> 00:02:05.819
+It has like half the number of queries they had a year ago
+
+00:02:05.820 --> 00:02:07.379
+because people are using AI.
+
+00:02:07.380 --> 00:02:08.579
+The problem with that is now
+
+00:02:08.580 --> 00:02:10.379
+there's less data going to Stack Overflow
+
+00:02:10.380 --> 00:02:12.979
+for the AI to get. Vicious cycle,
+
+00:02:12.980 --> 00:02:14.619
+especially when you start looking at
+
+00:02:14.620 --> 00:02:16.579
+newer language like Ruby and stuff like that.
+
+00:02:16.580 --> 00:02:21.419
+So it comes down to being an interesting time.
+
+00:02:21.420 --> 00:02:24.739
+Another reason why to go private AI is your costs are going to vary.
+
+00:02:24.740 --> 00:02:27.019
+Right now, these services are being heavily subsidized.
+
+00:02:27.020 --> 00:02:29.419
+If you're paying Claude $20 a month,
+
+00:02:29.420 --> 00:02:32.579
+it is not costing Claude, those guys, $20 a month
+
+00:02:32.580 --> 00:02:34.099
+to host all the infrastructure
+
+00:02:34.100 --> 00:02:35.619
+to build all these data centers.
+
+00:02:35.620 --> 00:02:38.779
+They are severely subsidizing that
+
+00:02:38.780 --> 00:02:41.259
+at a very much a loss right now.
+
+00:02:41.260 --> 00:02:43.659
+When they start charging the real costs plus a profit,
+
+00:02:43.660 --> 00:02:45.499
+it's going to change.
+
+00:02:45.500 --> 00:02:48.019
+Right now, I use a bunch of different services.
+
+00:02:48.020 --> 00:02:50.019
+I've played with Grok and a bunch of other ones.
+
+00:02:50.020 --> 00:02:52.459
+But Grok right now is like $30 a month
+
+00:02:52.460 --> 00:02:54.139
+for a regular Super Grok.
+
+00:02:54.140 --> 00:02:56.419
+When they start charging the real cost of that,
+
+00:02:56.420 --> 00:02:59.819
+it's going to go from $30 to something a great deal more,
+
+00:02:59.820 --> 00:03:02.379
+perhaps, I think, $100 or $200
+
+00:03:02.380 --> 00:03:04.459
+or whatever really turns out to be the cost
+
+00:03:04.460 --> 00:03:06.059
+when you figure everything into it.
+
+00:03:06.060 --> 00:03:07.539
+When you start adding that cost into that,
+
+00:03:07.540 --> 00:03:10.179
+a lot of people are using public AI right now
+
+00:03:10.180 --> 00:03:11.899
+are going to have no option but to move to private AI
+
+00:03:11.900 --> 00:03:16.019
+or give up on AI overall.
+
+NOTE What do I need for private AI?
+
+00:03:16.020 --> 00:03:18.659
+What do you need to be able to do private AI?
+
+00:03:18.660 --> 00:03:21.179
+If you're going to run your own AI,
+
+00:03:21.180 --> 00:03:23.579
+you're going to need a system with either some cores,
+
+00:03:23.580 --> 00:03:25.699
+a graphics processor unit,
+
+00:03:25.700 --> 00:03:28.339
+or a neural processing unit, a GPU or an NPU.
+
+00:03:28.340 --> 00:03:29.819
+I currently have four systems
+
+00:03:29.820 --> 00:03:32.979
+I'm experimenting with and playing around with on a daily basis.
+
+00:03:32.980 --> 00:03:37.979
+I have a System76 Pangolin AMD Ryzen 7 78040U
+
+00:03:37.980 --> 00:03:41.099
+with a Radeon 7080M integrated graphics card.
+
+00:03:41.100 --> 00:03:42.539
+It's got 32 gigs of RAM.
+
+00:03:42.540 --> 00:03:45.259
+It's a beautiful piece of hardware. I really do like it.
+
+00:03:45.260 --> 00:03:46.499
+I have my main workstation,
+
+00:03:46.500 --> 00:03:50.579
+it's an HP Z620 with dual Intel Xeons
+
+00:03:50.580 --> 00:03:53.179
+with four NVIDIA K2200 graphics cards in it.
+
+00:03:53.180 --> 00:03:56.699
+Why the four NVIDIA K2200 graphics card on it?
+
+00:03:56.700 --> 00:03:59.739
+Because I could buy four of them on eBay for $100
+
+00:03:59.740 --> 00:04:02.379
+and it was still supported by the NVIDIA drivers for Debian.
+
+00:04:02.380 --> 00:04:08.179
+So that's why that is. A MacBook Air with an M1 processor,
+
+00:04:08.180 --> 00:04:10.939
+a very nice piece of kit I picked up a couple years ago,
+
+00:04:10.940 --> 00:04:14.139
+very cheap, but it runs AI surprisingly well,
+
+00:04:14.140 --> 00:04:18.099
+and an Acer Aspire 1 with an AMD Ryzen 5700H in it.
+
+00:04:18.100 --> 00:04:22.099
+This was my old laptop. It was a sturdy beast.
+
+00:04:22.100 --> 00:04:24.379
+It was able to do enough AI to do demos and stuff,
+
+00:04:24.380 --> 00:04:25.859
+and I liked it quite a bit for that.
+
+00:04:25.860 --> 00:04:28.339
+I'm using the Pangolin for this demonstration
+
+00:04:28.340 --> 00:04:30.979
+because it's just better.
+
+00:04:30.980 --> 00:04:37.219
+Apple's M4 chip has 38 teraflops of MPU performance.
+
+00:04:37.220 --> 00:04:40.099
+The Microsoft co-pilots are now requiring
+
+00:04:40.100 --> 00:04:41.459
+45 teraflops of MPU
+
+00:04:41.460 --> 00:04:43.939
+to be able to have the co-pilot badge on it.
+
+00:04:43.940 --> 00:04:48.299
+And Raspberry Pi's new AI top is about 18 teraflops
+
+00:04:48.300 --> 00:04:51.219
+and is $70 on top of the cost of Raspberry Pi 5.
+
+00:04:51.220 --> 00:04:56.059
+Keep in mind, Raspberry recently
+
+00:04:56.060 --> 00:04:59.499
+raised the cost of their Pi 5s because of RAM pricing,
+
+00:04:59.500 --> 00:05:00.379
+which is going to be affecting
+
+00:05:00.380 --> 00:05:02.459
+a lot of these types of solutions in the near future.
+
+00:05:02.460 --> 00:05:05.299
+But there's going to be a lot of
+
+00:05:05.300 --> 00:05:06.699
+local power available in the future.
+
+00:05:06.700 --> 00:05:08.219
+That's what it really comes down to.
+
+00:05:08.220 --> 00:05:11.179
+A lot of people are going to have PCs on their desks.
+
+00:05:11.180 --> 00:05:13.459
+They're going to run a decent private AI
+
+00:05:13.460 --> 00:05:16.347
+without much issue.
+
+NOTE Emacs and private AI
+
+00:05:16.348 --> 00:05:18.059
+So for Emacs and private AI,
+
+00:05:18.060 --> 00:05:20.139
+there's a couple popular solutions.
+
+00:05:20.140 --> 00:05:22.099
+Gptel, which is the one we're going to talk about.
+
+00:05:22.100 --> 00:05:24.739
+It's a simple interface. It's a minimal interface.
+
+00:05:24.740 --> 00:05:26.579
+It integrates easily into your workflow.
+
+00:05:26.580 --> 00:05:29.019
+It's just, quite honestly, chef's kiss,
+
+00:05:29.020 --> 00:05:31.059
+just a beautifully well-done piece of software.
+
+00:05:31.060 --> 00:05:33.859
+Ollama Buddy has more features,
+
+00:05:33.860 --> 00:05:36.259
+a menu interface, has quick access
+
+00:05:36.260 --> 00:05:37.499
+for things like code refactoring,
+
+00:05:37.500 --> 00:05:38.979
+text-free formatting, et cetera.
+
+00:05:38.980 --> 00:05:41.979
+This is the one that you spend a little more time with,
+
+00:05:41.980 --> 00:05:43.939
+but you also get a little bit more back from it.
+
+00:05:43.940 --> 00:05:49.419
+Ellama is another one, has some really good features to it,
+
+00:05:49.420 --> 00:05:51.059
+more different capabilities,
+
+00:05:51.060 --> 00:05:54.979
+but it's a different set of rules and capabilities to it.
+
+00:05:54.980 --> 00:05:59.179
+Aidermac, which is programming with your AI and Emacs.
+
+00:05:59.180 --> 00:06:01.219
+The closest thing I can come up
+
+00:06:01.220 --> 00:06:04.139
+to comparing this to is Cursor, except it's in Emacs.
+
+00:06:04.140 --> 00:06:05.659
+It's really quite well done.
+
+00:06:05.660 --> 00:06:07.299
+These are all really quite well done.
+
+00:06:07.300 --> 00:06:08.499
+There's a bunch of other projects out there.
+
+00:06:08.500 --> 00:06:10.819
+If you go out to GitHub, type Emacs AI,
+
+00:06:10.820 --> 00:06:13.219
+you'll find a lot of different options.
+
+NOTE Pieces for an AI Emacs solution
+
+00:06:13.220 --> 00:06:18.459
+So what is a minimal viable product that can be done?
+
+00:06:18.460 --> 00:06:23.379
+A minimal viable product to show what an AI Emacs solution is
+
+00:06:23.380 --> 00:06:27.179
+can be done with only needing two pieces of software.
+
+00:06:27.180 --> 00:06:31.179
+Llamafile, this is an amazing piece of software.
+
+00:06:31.180 --> 00:06:32.899
+This is a whole LLM contained in one file.
+
+00:06:32.900 --> 00:06:36.059
+And the same file runs on Mac OS X,
+
+00:06:36.060 --> 00:06:39.379
+Linux, Windows, and the BSDs.
+
+00:06:39.380 --> 00:06:42.179
+It's a wonderful piece of kit
+
+00:06:42.180 --> 00:06:44.179
+based on these people who created
+
+00:06:44.180 --> 00:06:45.899
+this thing called Cosmopolitan
+
+00:06:45.900 --> 00:06:46.779
+that lets you create and execute
+
+00:06:46.780 --> 00:06:48.699
+while it runs on a bunch of different systems.
+
+00:06:48.700 --> 00:06:51.299
+And Gptel, which is an easy plug-in for Emacs,
+
+00:06:51.300 --> 00:06:56.339
+which we talked about in the last slide a bit.
+
+00:06:56.340 --> 00:07:00.179
+So setting up the LLM, you have to just go out
+
+00:07:00.180 --> 00:07:03.542
+and just hit a page for it
+
+00:07:03.543 --> 00:07:05.099
+and go out and do a wget of it.
+
+00:07:05.100 --> 00:07:07.099
+That's all it takes there.
+
+00:07:07.100 --> 00:07:10.259
+Chmodding it so you can actually execute the executable.
+
+00:07:10.260 --> 00:07:12.939
+And then just go ahead and actually running it.
+
+00:07:12.940 --> 00:07:16.939
+And let's go ahead and do that.
+
+00:07:16.940 --> 00:07:18.899
+I've already downloaded it because I don't want to wait.
+
+00:07:18.900 --> 00:07:21.259
+And let's just take a look at it.
+
+00:07:21.260 --> 00:07:22.899
+I've actually downloaded several of them,
+
+00:07:22.900 --> 00:07:25.699
+but let's go ahead and just run llama 3.2-1b
+
+00:07:25.700 --> 00:07:31.179
+with the 3 billion instructions. And that's it firing up.
+
+00:07:31.180 --> 00:07:33.899
+And it is nice enough to actually be listening in port 8080,
+
+00:07:33.900 --> 00:07:35.339
+which we'll need in a minute.
+
+00:07:35.340 --> 00:07:43.139
+So once you do that, you have to install gptel and emacs.
+
+00:07:43.140 --> 00:07:45.659
+That's as simple as firing up emacs,
+
+00:07:45.660 --> 00:07:48.339
+doing the M-x install-package,
+
+00:07:48.340 --> 00:07:49.779
+and then just typing gptel,
+
+00:07:49.780 --> 00:07:51.499
+if you have your repository set up right,
+
+00:07:51.500 --> 00:07:52.299
+which hopefully you do.
+
+00:07:52.300 --> 00:07:56.339
+And then you just go ahead and have it.
+
+NOTE Config file
+
+00:07:56.340 --> 00:07:58.139
+You also have to set up a config file.
+
+00:07:58.140 --> 00:08:01.739
+Here's my example config file as it currently set up,
+
+00:08:01.740 --> 00:08:04.019
+requiring, ensuring Gptel is loaded,
+
+00:08:04.020 --> 00:08:05.899
+defining the Llamafile backend.
+
+00:08:05.900 --> 00:08:07.779
+You can put multiple backends into it,
+
+00:08:07.780 --> 00:08:09.859
+but I just have the one defined on this example.
+
+00:08:09.860 --> 00:08:12.059
+But it's pretty straightforward.
+
+00:08:12.060 --> 00:08:16.739
+Llama local file, name for it, stream, protocol HTTP.
+
+00:08:16.740 --> 00:08:20.859
+If you have HTTPS set up, that's obviously preferable,
+
+00:08:20.860 --> 00:08:22.779
+but a lot of people don't for their home labs.
+
+00:08:22.780 --> 00:08:26.379
+Host is just 127.0.0.1 port 8080.
+
+00:08:26.380 --> 00:08:30.099
+Keep in mind, some of the AIs run on a different port,
+
+00:08:30.100 --> 00:08:31.499
+so you may be 8081
+
+00:08:31.500 --> 00:08:34.619
+if you're running OpenWebView at the same time. The key,
+
+00:08:34.620 --> 00:08:37.019
+we don't need an API key because it's a local server.
+
+00:08:37.020 --> 00:08:40.259
+And the models just, uh, we can put multiple models
+
+00:08:40.260 --> 00:08:41.339
+on there if we want to.
+
+00:08:41.340 --> 00:08:43.699
+So if we create one with additional stuff
+
+00:08:43.700 --> 00:08:45.379
+or like rag and stuff like that,
+
+00:08:45.380 --> 00:08:47.459
+we can actually name those models by their domain,
+
+00:08:47.460 --> 00:08:48.699
+which is really kind of cool.
+
+00:08:48.700 --> 00:08:52.099
+But, uh, that's all that takes.
+
+NOTE Demo: Who was David Bowie?
+
+00:08:52.100 --> 00:09:03.779
+So let's go ahead and go to a quick test of it.
+
+00:09:03.780 --> 00:09:11.019
+Oops. Alt-X, gptel. And we're going to just choose
+
+00:09:11.020 --> 00:09:12.499
+the default buffer to make things easier.
+
+00:09:12.500 --> 00:09:15.339
+Going to resize it up a bit.
+
+00:09:15.340 --> 00:09:19.859
+And usually the go-to question I go to is, who was David Bowie?
+
+00:09:19.860 --> 00:09:24.499
+This one is actually a question
+
+00:09:24.500 --> 00:09:26.219
+that's turned out to be really good
+
+00:09:26.220 --> 00:09:28.019
+for figuring out whether or not AI is complete.
+
+00:09:28.020 --> 00:09:31.139
+This is one that some engines do well on, other ones don't.
+
+00:09:31.140 --> 00:09:33.739
+And we can just do, we can either do
+
+00:09:33.740 --> 00:09:36.059
+the alt X and send the gptel-send,
+
+00:09:36.060 --> 00:09:37.979
+or we can just do C-c and hit enter.
+
+00:09:37.980 --> 00:09:39.139
+We'll just do C-c and enter.
+
+00:09:39.140 --> 00:09:43.659
+And now it's going ahead and hitting our local AI system
+
+00:09:43.660 --> 00:09:46.659
+running on port 8080. And that looks pretty good,
+
+00:09:46.660 --> 00:09:50.739
+but let's go ahead and say, hey, it's set to terse mode right now.
+
+00:09:50.740 --> 00:10:03.859
+Please expand upon this. And there we go.
+
+00:10:03.860 --> 00:10:05.379
+We're getting a full description
+
+00:10:05.380 --> 00:10:08.739
+of the majority of, uh, about David Bowie's life
+
+00:10:08.740 --> 00:10:10.139
+and other information about him.
+
+00:10:10.140 --> 00:10:21.699
+So very, very happy with that.
+
+NOTE Hallucinations
+
+00:10:21.700 --> 00:10:23.539
+One thing to keep in mind is you look at things
+
+00:10:23.540 --> 00:10:24.699
+when you're looking for hallucinations,
+
+00:10:24.700 --> 00:10:26.899
+how accurate AI is, how it's compressed
+
+00:10:26.900 --> 00:10:29.259
+is it will tend to screw up on things like
+
+00:10:29.260 --> 00:10:30.859
+how many children he had and stuff like that.
+
+00:10:30.860 --> 00:10:32.459
+Let me see if it gets to that real quick.
+
+00:10:32.460 --> 00:10:39.739
+Is it not actually on this one?
+
+00:10:39.740 --> 00:10:42.179
+Alright, so that's the first question I always ask one.
+
+NOTE Next question: What are sea monkeys?
+
+00:10:42.180 --> 00:10:44.659
+The next one is what are sea monkeys?
+
+00:10:44.660 --> 00:10:48.979
+It gives you an idea of the breadth of the system.
+
+00:10:48.980 --> 00:11:10.619
+It's querying right now. Pulls it back correctly. Yes.
+
+00:11:10.620 --> 00:11:12.339
+And it's smart enough to actually detect David Bowie
+
+00:11:12.340 --> 00:11:15.019
+even referenced see monkeys in the song sea of love,
+
+00:11:15.020 --> 00:11:16.179
+which came at hit single.
+
+00:11:16.180 --> 00:11:18.859
+So it's actually keeping the context alive
+
+00:11:18.860 --> 00:11:20.419
+and that which is very cool feature.
+
+00:11:20.420 --> 00:11:21.459
+I did not see that coming.
+
+00:11:21.460 --> 00:11:24.139
+Here's one that some people say is a really good one
+
+00:11:24.140 --> 00:11:42.779
+to ask. Rs in "strawberry."
+
+00:11:42.780 --> 00:11:46.179
+All right, now she's going off the reservation.
+
+00:11:46.180 --> 00:11:48.139
+She's going in a different direction.
+
+00:11:48.140 --> 00:11:49.979
+Let me go ahead and reopen that again,
+
+00:11:49.980 --> 00:11:57.179
+because it went down a bad hole there for a second.
+
+NOTE Writing Hello World in Emacs Lisp
+
+00:11:57.180 --> 00:11:58.419
+Let me ask it to write hello world in Emacs Lisp.
+
+00:11:58.420 --> 00:12:10.419
+Yep, that works. So the point being here,
+
+00:12:10.420 --> 00:12:14.939
+that was like two minutes of setup.
+
+00:12:14.940 --> 00:12:18.019
+And now we have a small AI embedded inside the system.
+
+00:12:18.020 --> 00:12:20.539
+So that gives you an idea just how easy it can be.
+
+00:12:20.540 --> 00:12:22.299
+And it's just running locally on the system.
+
+00:12:22.300 --> 00:12:25.259
+We also have the default system here as well.
+
+00:12:25.260 --> 00:12:32.579
+So not that bad.
+
+NOTE Pieces for a better solution
+
+00:12:32.580 --> 00:12:35.379
+That's a basic solution, that's a basic setup
+
+00:12:35.380 --> 00:12:37.059
+that will get you to the point where you can go like,
+
+00:12:37.060 --> 00:12:39.859
+it's a party trick, but it's a very cool party trick.
+
+00:12:39.860 --> 00:12:42.859
+The way that Gptel works is it puts it into buffers,
+
+00:12:42.860 --> 00:12:45.099
+it doesn't interfere with your flow that much,
+
+00:12:45.100 --> 00:12:47.179
+it's just an additional window you can pop open
+
+00:12:47.180 --> 00:12:49.019
+to ask questions and get information for,
+
+00:12:49.020 --> 00:12:51.459
+dump code into it and have it refactored.
+
+00:12:51.460 --> 00:12:53.339
+Gptel has a lot of additional options
+
+00:12:53.340 --> 00:12:55.699
+for things that are really cool for that.
+
+00:12:55.700 --> 00:12:57.099
+But if you want a better solution,
+
+00:12:57.100 --> 00:12:59.939
+I recommend Ollama or LM Studio.
+
+00:12:59.940 --> 00:13:01.899
+They're both more capable than Llamafile.
+
+00:13:01.900 --> 00:13:03.859
+They can accept a lot of different models.
+
+00:13:03.860 --> 00:13:05.739
+You can do things like RAG.
+
+00:13:05.740 --> 00:13:09.219
+You can do loading of things onto the GPU more explicitly.
+
+00:13:09.220 --> 00:13:10.379
+It can speed stuff up.
+
+00:13:10.380 --> 00:13:13.059
+One of the things about the retrieval augmentation is
+
+00:13:13.060 --> 00:13:15.539
+it will let you put your data into the system
+
+00:13:15.540 --> 00:13:17.779
+so you can start uploading your code, your information,
+
+00:13:17.780 --> 00:13:20.139
+and actually being able to do analysis of it.
+
+00:13:20.140 --> 00:13:23.539
+Open WebUI provides more capabilities.
+
+00:13:23.540 --> 00:13:24.859
+It provides an interface that's similar
+
+00:13:24.860 --> 00:13:25.899
+to what you're used to seeing
+
+00:13:25.900 --> 00:13:28.179
+for ChatGPT and the other systems.
+
+00:13:28.180 --> 00:13:29.419
+It's really quite well done.
+
+00:13:29.420 --> 00:13:32.539
+And once again, gptel, I have to mention that
+
+00:13:32.540 --> 00:13:34.779
+because that's the one I really kind of like.
+
+00:13:34.780 --> 00:13:36.899
+And Ollama Buddy is also another really nice one.
+
+NOTE What about the license?
+
+00:13:36.900 --> 00:13:41.019
+So what about the licensing of these models?
+
+00:13:41.020 --> 00:13:42.299
+Since I'm going out pulling down
+
+00:13:42.300 --> 00:13:43.579
+a model and doing this stuff.
+
+00:13:43.580 --> 00:13:46.579
+Let's take a look at a couple of highlights
+
+00:13:46.580 --> 00:13:49.379
+from the Meta Llama 3 community license scale.
+
+00:13:49.380 --> 00:13:52.579
+If your service exceeds 700 million monthly users,
+
+00:13:52.580 --> 00:13:54.099
+you need additional licensing.
+
+00:13:54.100 --> 00:13:56.099
+Probably not going to be a problem for most of us.
+
+00:13:56.100 --> 00:13:58.379
+There's a competition restriction.
+
+00:13:58.380 --> 00:14:00.899
+You can't use this model to enhance competing models.
+
+00:14:00.900 --> 00:14:04.219
+And there's some limitations on using the Meta trademarks.
+
+00:14:04.220 --> 00:14:05.939
+Not that big a deal.
+
+00:14:05.940 --> 00:14:09.139
+And the other ones are it's a permissive one
+
+00:14:09.140 --> 00:14:10.939
+designed to encourage innovation,
+
+00:14:10.940 --> 00:14:13.779
+open development, commercial use is allowed,
+
+00:14:13.780 --> 00:14:15.219
+but there are some restrictions on it.
+
+00:14:15.220 --> 00:14:17.259
+Yeah, you can modify the model,
+
+00:14:17.260 --> 00:14:20.419
+but you have to rely on the license terms.
+
+00:14:20.420 --> 00:14:22.339
+And you can distribute the model with derivatives.
+
+00:14:22.340 --> 00:14:24.059
+And there are some very cool ones out there.
+
+00:14:24.060 --> 00:14:25.259
+There's people who've done things
+
+00:14:25.260 --> 00:14:29.579
+to try and make the Llama be less, what's the phrase,
+
+00:14:29.580 --> 00:14:31.939
+ethical if you're doing penetration testing research
+
+00:14:31.940 --> 00:14:32.619
+and stuff like that.
+
+00:14:32.620 --> 00:14:34.459
+It has some very nice value there.
+
+00:14:34.460 --> 00:14:37.739
+Keep in mind licenses also vary
+
+00:14:37.740 --> 00:14:39.619
+depending on the model you're using.
+
+00:14:39.620 --> 00:14:42.419
+Mistral AI has the non-production license.
+
+00:14:42.420 --> 00:14:45.219
+It's designed to keep it to research and development.
+
+00:14:45.220 --> 00:14:46.739
+You can't use it commercially.
+
+00:14:46.740 --> 00:14:51.792
+So it's designed to clearly delineate
+
+00:14:51.793 --> 00:14:52.939
+between research and development
+
+00:14:52.940 --> 00:14:54.259
+and somebody trying to actually build
+
+00:14:54.260 --> 00:14:56.579
+something on top of it.
+
+NOTE Are there open source data model options?
+
+00:14:56.580 --> 00:14:57.979
+And another question I get asked is,
+
+00:14:57.980 --> 00:14:59.899
+are there open source data model options?
+
+00:14:59.900 --> 00:15:02.819
+Yeah, but most of them are small or specialized currently.
+
+00:15:02.820 --> 00:15:05.499
+MoMo is a whole family of them,
+
+00:15:05.500 --> 00:15:07.339
+but there tend to be more specialized,
+
+00:15:07.340 --> 00:15:09.019
+but it's very cool to see where it's going.
+
+00:15:09.020 --> 00:15:11.339
+And it's another thing that's just going forward.
+
+00:15:11.340 --> 00:15:14.519
+It's under the MIT license.
+
+NOTE Things to know
+
+00:15:14.520 --> 00:15:15.819
+Some things to know to help you
+
+00:15:15.820 --> 00:15:17.499
+have a better experience with this.
+
+00:15:17.500 --> 00:15:21.059
+Get ollama and Open WebUI working by themselves,
+
+00:15:21.060 --> 00:15:22.659
+then set up your config file.
+
+00:15:22.660 --> 00:15:24.819
+I was fighting both at the same time,
+
+00:15:24.820 --> 00:15:26.699
+and it turned out I had a problem with my ollama.
+
+00:15:26.700 --> 00:15:28.899
+I had a conflict, so that was what my problem is.
+
+00:15:28.900 --> 00:15:32.819
+Llamafile, gptel is a great way to start experimenting
+
+00:15:32.820 --> 00:15:34.299
+just to get you an idea of how it works
+
+00:15:34.300 --> 00:15:36.939
+and figure out how the interfaces work. Tremendous.
+
+00:15:36.940 --> 00:15:40.739
+RAG loading documents into it is really easy with open web UI.
+
+00:15:40.740 --> 00:15:43.019
+You can create models, you can put things like
+
+00:15:43.020 --> 00:15:46.419
+help desk developers and stuff like that, breaking it out.
+
+00:15:46.420 --> 00:15:51.019
+The Hacker Noon has a how to build a $300 AI computer.
+
+00:15:51.020 --> 00:15:52.859
+This is for March 2024,
+
+00:15:52.860 --> 00:15:55.099
+but it still has a lot of great information
+
+00:15:55.100 --> 00:15:56.819
+on how to benchmark the environments,
+
+00:15:56.820 --> 00:16:01.339
+what some values are like the Ryzen 5700U
+
+00:16:01.340 --> 00:16:02.579
+inside my Acer Aspire,
+
+00:16:02.580 --> 00:16:04.419
+that's where I got the idea doing that.
+
+00:16:04.420 --> 00:16:06.739
+Make sure you do the ROCm stuff correctly
+
+00:16:06.740 --> 00:16:09.899
+to get the GUI extensions. But it's just really good stuff.
+
+00:16:09.900 --> 00:16:13.059
+You don't need a great GPU or CPU to get started.
+
+00:16:13.060 --> 00:16:14.819
+Smaller models like tinyllama
+
+00:16:14.820 --> 00:16:16.819
+can run on very small systems.
+
+00:16:16.820 --> 00:16:19.042
+It gets you the ability to start playing with it
+
+00:16:19.043 --> 00:16:21.619
+and start experimenting and figure out if that's for you
+
+00:16:21.620 --> 00:16:23.379
+and to move forward with it.
+
+00:16:23.380 --> 00:16:29.219
+The AMD Ryzen AI Max+ 395 is a mini PC
+
+00:16:29.220 --> 00:16:31.179
+makes it really nice dedicated host.
+
+00:16:31.180 --> 00:16:34.078
+You used to be able to buy these for about $1200.
+
+00:16:34.079 --> 00:16:35.579
+Now with the RAM price increase,
+
+00:16:35.580 --> 00:16:38.458
+you want to get 120 gig when you're pushing two brands,
+
+00:16:38.459 --> 00:16:40.739
+so it gets a little tighter.
+
+00:16:40.740 --> 00:16:44.099
+Macs work remarkably well with AI.
+
+00:16:44.100 --> 00:16:47.659
+My MacBook Air was one of my go-tos for a while,
+
+00:16:47.660 --> 00:16:49.779
+but once I started doing anything AI,
+
+00:16:49.780 --> 00:16:50.779
+I had a five-minute window
+
+00:16:50.780 --> 00:16:52.619
+before the thermal throttling became an issue.
+
+00:16:52.620 --> 00:16:54.619
+Keep in mind that's a MacBook Air,
+
+00:16:54.620 --> 00:16:56.659
+so it doesn't have the greatest ventilation.
+
+00:16:56.660 --> 00:16:58.339
+If you get the MacBook Pros and stuff,
+
+00:16:58.340 --> 00:17:00.139
+they tend to have more ventilation,
+
+00:17:00.140 --> 00:17:02.499
+but still you're going to be pushing against that.
+
+00:17:02.500 --> 00:17:04.939
+So Mac Minis and the Mac Ultras and stuff like that
+
+00:17:04.940 --> 00:17:06.099
+tend to work really well for that.
+
+00:17:06.100 --> 00:17:09.779
+Alex Ziskind on YouTube has a channel.
+
+00:17:09.780 --> 00:17:11.899
+He does a lot of AI performance benchmarking,
+
+00:17:11.900 --> 00:17:14.819
+like "I load a 70 billion parameter model
+
+00:17:14.820 --> 00:17:16.699
+on this mini PC" and stuff like that.
+
+00:17:16.700 --> 00:17:19.019
+It's a lot of fun and interesting stuff there.
+
+00:17:19.020 --> 00:17:21.219
+And it's influencing my decision
+
+00:17:21.220 --> 00:17:22.979
+to buy my next AI style PC.
+
+00:17:22.980 --> 00:17:27.619
+Small domain specific LLMs are happening.
+
+00:17:27.620 --> 00:17:29.939
+An LLM that has all your code and information,
+
+00:17:29.940 --> 00:17:31.659
+it sounds like a really cool idea.
+
+00:17:31.660 --> 00:17:34.299
+It gives you capabilities to start training stuff
+
+00:17:34.300 --> 00:17:35.899
+that you couldn't do with like the big ones.
+
+00:17:35.900 --> 00:17:38.059
+Even with in terms of fine-tuning and stuff,
+
+00:17:38.060 --> 00:17:40.539
+it's remarkable to see where that space is coming along
+
+00:17:40.540 --> 00:17:41.739
+in the next year or so.
+
+00:17:41.740 --> 00:17:46.219
+HuggingFace.co has pointers to tons of AI models.
+
+00:17:46.220 --> 00:17:48.417
+You'll find the one that works for you, hopefully there.
+
+00:17:48.418 --> 00:17:50.539
+If you're doing cybersecurity,
+
+00:17:50.540 --> 00:17:52.059
+there's a whole bunch out there for that,
+
+00:17:52.060 --> 00:17:54.619
+that have certain training on it, information.
+
+00:17:54.620 --> 00:17:56.139
+It's really good.
+
+00:17:56.140 --> 00:18:00.099
+One last thing to keep in mind is hallucinations are real.
+
+00:18:00.100 --> 00:18:02.779
+You will get BS back from the AI occasionally,
+
+00:18:02.780 --> 00:18:05.179
+so do validate everything you get from it.
+
+00:18:05.180 --> 00:18:08.459
+Don't be using it for court cases like some people have
+
+00:18:08.460 --> 00:18:14.539
+and run into those problems. So, That is my talk.
+
+00:18:14.540 --> 00:18:17.219
+What I would like you to get out of that is,
+
+00:18:17.220 --> 00:18:21.859
+if you haven't tried it, give Gptel and LlamaFile a shot.
+
+00:18:21.860 --> 00:18:23.979
+Fire up a little small AI instance,
+
+00:18:23.980 --> 00:18:27.339
+play around with a little bit inside your Emacs,
+
+00:18:27.340 --> 00:18:30.139
+and see if it makes your life better. Hopefully it will.
+
+00:18:30.140 --> 00:18:32.139
+And I really hope you guys
+
+00:18:32.140 --> 00:18:34.659
+learned something from this talk. And thanks for listening.
+
+00:18:34.660 --> 00:18:38.979
+And the links are at the end of the talk, if you have any questions.
+
+00:18:38.980 --> 00:18:42.739
+Let me see if we got anything you want, Pat. You do.
+
+00:18:42.740 --> 00:18:43.899
+You've got a few questions.
+
+00:18:43.900 --> 00:18:48.059
+[Corwin]: Hey, this is Corwin. Thank you so much. Thank you, Aaron.
+
+00:18:48.060 --> 00:18:50.339
+What an awesome talk this was, actually.
+
+00:18:50.340 --> 00:18:52.179
+If you don't have a camera,
+
+00:18:52.180 --> 00:18:54.339
+I can get away with not having one too.
+
+00:18:54.340 --> 00:18:56.299
+[Aaron]: I've got, I'll turn the camera on.
+
+00:18:56.300 --> 00:18:59.833
+[Corwin]: Okay. All right. I'll turn mine back on. Here I come.
+
+00:18:59.834 --> 00:19:03.139
+Yeah, so there are a few questions,
+
+00:19:03.140 --> 00:19:04.579
+but first let me say thank you
+
+00:19:04.580 --> 00:19:06.339
+for a really captivating talk.
+
+00:19:06.340 --> 00:19:10.939
+I think a lot of people will be empowered from this
+
+00:19:10.940 --> 00:19:15.259
+to try to do more with less, especially locally.
+
+00:19:15.260 --> 00:19:20.179
+concerned about the data center footprint,
+
+00:19:20.180 --> 00:19:23.659
+environmentally concerned
+
+00:19:23.660 --> 00:19:26.979
+about the footprint of LLM inside data centers.
+
+00:19:26.980 --> 00:19:28.219
+So just thinking about how we can
+
+00:19:28.220 --> 00:19:32.419
+put infrastructure we have at home to use
+
+00:19:32.420 --> 00:19:34.019
+and get more done with less.
+
+00:19:34.020 --> 00:19:37.499
+[Aaron]: Yeah, the data center impact's interesting
+
+00:19:37.500 --> 00:19:39.979
+because there was a study a while ago.
+
+00:19:39.980 --> 00:19:42.099
+Someone said every time you do a Gemini query,
+
+00:19:42.100 --> 00:19:45.019
+it's like boiling a cup of water.
+
+00:19:45.020 --> 00:19:48.619
+[Corwin]: Yeah, I've heard that one too. So do you want to, you know,
+
+00:19:48.620 --> 00:19:51.699
+I don't know how much direction you want.
+
+00:19:51.700 --> 00:19:53.859
+I'd be very happy to read out the questions for you.
+
+00:19:53.860 --> 00:19:55.219
+[Aaron]: Yeah, that would be great.
+
+00:19:55.220 --> 00:19:57.619
+I'm having trouble getting to that tab.
+
+00:19:57.620 --> 00:20:02.779
+[Corwin]: Okay, I'm there, so I'll put it into our chat too,
+
+00:20:02.780 --> 00:20:07.419
+so you can follow along if you'd like.
+
+NOTE Q: Why is the David Bowie question a good one for testing a model? e.g. does it fail in interesting ways?
+
+00:20:07.420 --> 00:20:11.219
+[Corwin]: The first question was, why is the David Bowie question
+
+00:20:11.220 --> 00:20:12.219
+a good one to start with?
+
+00:20:12.220 --> 00:20:14.419
+Does it have interesting failure conditions
+
+00:20:14.420 --> 00:20:16.639
+or what made you choose that?
+
+00:20:16.640 --> 00:20:21.979
+[Aaron]: First off, huge fan of David Bowie.
+
+00:20:21.980 --> 00:20:24.499
+But I came down to it really taught me a few things
+
+00:20:24.500 --> 00:20:26.299
+about how the models work
+
+00:20:26.300 --> 00:20:28.819
+in terms of things like how many kids he had,
+
+00:20:28.820 --> 00:20:31.779
+because Deepseek, which is a very popular Chinese model
+
+00:20:31.780 --> 00:20:33.179
+that a lot of people are using now,
+
+00:20:33.180 --> 00:20:35.619
+misidentifies him having three daughters,
+
+00:20:35.620 --> 00:20:38.459
+and he has like one son and one, one, I think,
+
+00:20:38.460 --> 00:20:40.899
+two sons and a daughter or something like that.
+
+00:20:40.900 --> 00:20:43.659
+so there's differences on that, and it just goes over...
+
+00:20:43.660 --> 00:20:45.299
+there's a whole lot of stuff
+
+00:20:45.300 --> 00:20:47.779
+because his story spans like 60 years,
+
+00:20:47.780 --> 00:20:49.659
+so it gives good feedback.
+
+00:20:49.660 --> 00:20:51.539
+That's the real main reason I asked that question
+
+00:20:51.540 --> 00:20:53.699
+because I just needed one... That sea monkeys, I just picked
+
+00:20:53.700 --> 00:20:56.579
+because it was obscure, and just always have, write,
+
+00:20:56.580 --> 00:20:58.939
+I used to have it write hello world in forth
+
+00:20:58.940 --> 00:21:01.019
+because I thought was an interesting one as well.
+
+00:21:01.020 --> 00:21:03.899
+It's just picking random ones like that.
+
+00:21:03.900 --> 00:21:06.499
+One question I ask a lot of models is,
+
+00:21:06.500 --> 00:21:09.419
+what is the closest star to the Earth?
+
+00:21:09.420 --> 00:21:12.019
+Because most of them will say Alpha Centauri
+
+00:21:12.020 --> 00:21:13.739
+or Proxima Centauri and not the sun.
+
+00:21:13.740 --> 00:21:15.899
+And I have a whole 'nother talk
+
+00:21:15.900 --> 00:21:17.899
+where I just argue with the LLM
+
+00:21:17.900 --> 00:21:20.019
+trying to say, hey, the sun is a star.
+
+00:21:20.020 --> 00:21:26.579
+And he just wouldn't accept it, so. What?
+
+00:21:26.580 --> 00:21:30.739
+Oh, I can... You're there.
+
+NOTE Q: What specific tasks do you use local AI for?
+
+00:21:30.740 --> 00:21:34.379
+[Corwin]: So what specific tasks do you like to use your local AI?
+
+00:21:34.380 --> 00:21:37.459
+[Aaron]: I like to load a lot of my code into
+
+00:21:37.460 --> 00:21:39.099
+and actually have it do analysis of it.
+
+00:21:39.100 --> 00:21:42.339
+I was actually going through some code
+
+00:21:42.340 --> 00:21:45.619
+I have for some pen testing, and I was having it modified
+
+00:21:45.620 --> 00:21:47.259
+to update it for the newer version,
+
+00:21:47.260 --> 00:21:48.459
+because I hate to say this,
+
+00:21:48.460 --> 00:21:49.859
+but it was written for Python 2,
+
+00:21:49.860 --> 00:21:51.459
+and I needed to update it for Python 3.
+
+00:21:51.460 --> 00:21:53.859
+And the 2 to 3 tool did not do all of it,
+
+00:21:53.860 --> 00:21:56.659
+but the actual tool was able to do the refactoring.
+
+00:21:56.660 --> 00:21:58.499
+It's part of my laziness.
+
+00:21:58.500 --> 00:22:01.459
+But I use that for anything I don't want to hit the web.
+
+00:22:01.460 --> 00:22:03.259
+And that's a lot of stuff when you start thinking about
+
+00:22:03.260 --> 00:22:04.979
+if you're doing cyber security researching.
+
+00:22:04.980 --> 00:22:06.819
+and you have your white papers
+
+00:22:06.820 --> 00:22:08.417
+and stuff like that and stuff in there.
+
+00:22:08.418 --> 00:22:10.625
+I've got a lot of that loaded into RAG
+
+00:22:10.626 --> 00:22:16.879
+in one model on my Open WebUI system.
+
+NOTE Q: Have you used any small domain-specific LLMs? What are the kinds of tasks they specialize in, and how do I find and use them?
+
+00:22:16.880 --> 00:22:21.059
+[Corwin]: Neat. Have you used have you used
+
+00:22:21.060 --> 00:22:25.739
+any small domain specific LLMs? What kind of tasks?
+
+00:22:25.740 --> 00:22:30.419
+If so, what kind of tasks that they specialize in?
+
+00:22:30.420 --> 00:22:32.139
+And you know, how?
+
+00:22:32.140 --> 00:22:34.979
+[Aaron]: Not to be honest, but there are some out there like once again,
+
+00:22:34.980 --> 00:22:36.779
+for cybersecurity and stuff like that,
+
+00:22:36.780 --> 00:22:39.739
+that I really need to dig into that's on my to do list.
+
+00:22:39.740 --> 00:22:41.699
+I've got a couple weeks off at the end of the year.
+
+00:22:41.700 --> 00:22:46.539
+And that's a big part of my plan for that.
+
+NOTE Q: Are the various models updated regularly? Can you add your own data to pre-built models?
+
+00:22:46.540 --> 00:22:49.379
+[Corwin]: Are the various models updated pretty regularly?
+
+00:22:49.380 --> 00:22:52.059
+Can you add your own data to the pre-built models?
+
+00:22:52.060 --> 00:22:56.699
+[Aaron]: Yes. The models are updated pretty reasonably.
+
+00:22:56.700 --> 00:22:59.699
+You can add data to a model in a couple of different ways.
+
+00:22:59.700 --> 00:23:01.099
+You can do something called fine-tuning,
+
+00:23:01.100 --> 00:23:03.819
+which requires a really nice GPU and a lot of CPU time.
+
+00:23:03.820 --> 00:23:05.499
+Probably not going to do that.
+
+00:23:05.500 --> 00:23:07.419
+You can do retrieval augmentation generation,
+
+00:23:07.420 --> 00:23:09.499
+which is you load your data on top of the system
+
+00:23:09.500 --> 00:23:11.299
+and put inside a database,
+
+00:23:11.300 --> 00:23:12.859
+and you can actually scan that and stuff.
+
+00:23:12.860 --> 00:23:14.619
+I have another talk where I go through
+
+00:23:14.620 --> 00:23:16.219
+and I start asking questions about,
+
+00:23:16.220 --> 00:23:18.579
+I load the talk into the engine
+
+00:23:18.580 --> 00:23:20.099
+and I ask questions against that.
+
+00:23:20.100 --> 00:23:22.179
+If I would have had time, I would have done that,
+
+00:23:22.180 --> 00:23:25.796
+but it comes down to how many... That's RAG.
+
+00:23:25.797 --> 00:23:29.419
+RAG is pretty easy to do through Open WebUI or LM studio.
+
+00:23:29.420 --> 00:23:31.419
+It's a great way, you just, like,
+
+00:23:31.420 --> 00:23:34.099
+point it to a folder and it just sucks all that state into...
+
+00:23:34.100 --> 00:23:35.499
+and it'll hit that data first.
+
+00:23:35.500 --> 00:23:36.859
+You have like helpdesk and stuff and...
+
+00:23:36.860 --> 00:23:39.619
+The other options: there's vector databases,
+
+00:23:39.620 --> 00:23:41.819
+which is, like, if you use PostgreSQL,
+
+00:23:41.820 --> 00:23:43.699
+it has a pg vector that can do a lot of that stuff.
+
+00:23:43.700 --> 00:23:44.739
+I've not dug into that yet,
+
+00:23:44.740 --> 00:23:46.099
+but that is also on that to-do list
+
+00:23:46.100 --> 00:23:48.055
+I've got a lot of stuff planned for...
+
+NOTE Q: What is your experience with RAG? Are you using them and how have they helped?
+
+00:23:48.056 --> 00:23:51.819
+[Corwin]: Cool. So what are your experience with RAGs?
+
+00:23:51.820 --> 00:23:54.339
+I don't even know what that means.
+
+00:23:54.340 --> 00:23:57.419
+Do you know what that means?
+
+00:23:57.420 --> 00:23:59.619
+Do you remember this question again?
+
+00:23:59.620 --> 00:24:03.979
+What is your experience with RAGs?
+
+00:24:03.980 --> 00:24:07.459
+[Aaron]: RAGs is great. That's Retrieval Augmentation Generation.
+
+00:24:07.460 --> 00:24:09.739
+That loads your data first, and it hits yours,
+
+00:24:09.740 --> 00:24:11.499
+and it'll actually cite it and stuff.
+
+00:24:11.500 --> 00:24:14.659
+There's a guy who wrote a RAG in 100 lines of Python,
+
+00:24:14.660 --> 00:24:16.899
+and it's an impressive piece of software.
+
+00:24:16.900 --> 00:24:18.779
+I think if you hit one of my sites,
+
+00:24:18.780 --> 00:24:22.099
+I've got a private AI talk where I actually refer to that.
+
+00:24:22.100 --> 00:24:25.219
+But retrieval augmentation, it's easy, it's fast,
+
+00:24:25.220 --> 00:24:26.699
+it puts your data into the system,
+
+00:24:26.700 --> 00:24:31.339
+Yeah, start with that and go then iterate on top of that.
+
+00:24:31.340 --> 00:24:32.659
+That's one of the great things about AI,
+
+00:24:32.660 --> 00:24:33.619
+especially private AI,
+
+00:24:33.620 --> 00:24:35.625
+is you can do whatever you want to with it
+
+00:24:35.626 --> 00:24:38.833
+and build up with it as you get more experience.
+
+NOTE Q: Thoughts on running things on AWS/digital ocean instances, etc?
+
+00:24:38.834 --> 00:24:44.219
+[Corwin]: Any thoughts on running things
+
+00:24:44.220 --> 00:24:49.179
+on AWS, DigitalOcean, and so on?
+
+00:24:49.180 --> 00:24:50.619
+[Aaron]: AWS is not bad.
+
+00:24:50.620 --> 00:24:52.659
+The DigitalOcean, they have some of their GPUs.
+
+00:24:52.660 --> 00:24:54.379
+I still don't like having the data
+
+00:24:54.380 --> 00:24:57.419
+leave my house, to be honest, or at work,
+
+00:24:57.420 --> 00:24:59.019
+because I tend to do some stuff
+
+00:24:59.020 --> 00:25:01.259
+that I don't want it even hitting that situation.
+
+00:25:01.260 --> 00:25:03.699
+But they have pretty good stuff.
+
+00:25:03.700 --> 00:25:05.579
+Another one to consider is Oracle Cloud.
+
+00:25:05.580 --> 00:25:09.059
+Oracle has their AI infrastructure that's really well done.
+
+00:25:09.060 --> 00:25:12.379
+But I mean, once again, then you start looking at potential
+
+00:25:12.380 --> 00:25:13.779
+is saying your data is private,
+
+00:25:13.780 --> 00:25:14.819
+I don't necessarily trust it.
+
+00:25:14.820 --> 00:25:17.859
+But they do have good stuff, both DigitalOcean, AWS,
+
+00:25:17.860 --> 00:25:20.339
+Oracle Cloud has the free service, which isn't too bad,
+
+00:25:20.340 --> 00:25:21.339
+usually a certain number of stuff.
+
+00:25:21.340 --> 00:25:23.179
+And Google's also has it,
+
+00:25:23.180 --> 00:25:26.739
+but I still tend to keep more stuff on local PCs,
+
+00:25:26.740 --> 00:25:31.077
+because I'm just paranoid that way.
+
+NOTE Q: What has your experience been using AI for cyber security applications? What do you usually use it for?
+
+00:25:31.078 --> 00:25:35.579
+[Corwin]: Gotcha. What has your experience been using AI?
+
+00:25:35.580 --> 00:25:40.139
+Do you want to get into that, using AI for cybersecurity?
+
+00:25:40.140 --> 00:25:42.019
+You might have already touched on this.
+
+00:25:42.020 --> 00:25:44.379
+[Aaron]: Yeah, really, for cybersecurity,
+
+00:25:44.380 --> 00:25:46.259
+what I've had to do is I've dumped logs
+
+00:25:46.260 --> 00:25:47.299
+to have it do correlation.
+
+00:25:47.300 --> 00:25:49.859
+Keep in mind, the size of that Llama file we were using
+
+00:25:49.860 --> 00:25:52.059
+for figuring out David Bowie, writing the hello world,
+
+00:25:52.060 --> 00:25:54.179
+all that stuff, is like six gig.
+
+00:25:54.180 --> 00:25:56.859
+How does it get the entire world in six gig?
+
+00:25:56.860 --> 00:25:59.739
+I still haven't figured that out in terms of quantization.
+
+00:25:59.740 --> 00:26:02.499
+So I'm really interested in seeing the ability
+
+00:26:02.500 --> 00:26:05.139
+to take all this stuff out of all my logs,
+
+00:26:05.140 --> 00:26:06.339
+dump it all in there,
+
+00:26:06.340 --> 00:26:08.459
+and actually be able to do intelligent queries against that.
+
+00:26:08.460 --> 00:26:10.899
+Microsoft has a project called Security Copilot,
+
+00:26:10.900 --> 00:26:12.819
+which is trying to do that in the Cloud.
+
+00:26:12.820 --> 00:26:15.299
+But I want to work on something to do that more locally
+
+00:26:15.300 --> 00:26:19.019
+and be able to actually drive this stuff over that.
+
+00:26:19.020 --> 00:26:24.659
+That's one also on the long-term goals.
+
+00:26:24.660 --> 00:26:26.059
+[Corwin]: So we got any other questions or?
+
+00:26:26.060 --> 00:26:29.099
+Those are the questions that I see.
+
+00:26:29.100 --> 00:26:31.179
+I want to just read out a couple of comments
+
+00:26:31.180 --> 00:26:33.419
+that I saw in IRC though.
+
+00:26:33.420 --> 00:26:36.699
+jrootabaga says, it went very well
+
+00:26:36.700 --> 00:26:39.259
+from an audience perspective.
+
+00:26:39.260 --> 00:26:43.619
+And GGundam says, respect your commitment to privacy.
+
+00:26:43.620 --> 00:26:45.619
+And then somebody is telling us
+
+00:26:45.620 --> 00:26:46.779
+we might have skipped a question.
+
+00:26:46.780 --> 00:26:50.019
+So I'm just going to run back to my list.
+
+00:26:50.020 --> 00:26:52.819
+Updated regularly experience.
+
+00:26:52.820 --> 00:26:57.659
+I just didn't type in the answer here's
+
+00:26:57.660 --> 00:26:59.659
+and there's a couple more questions coming in so
+
+NOTE Q: Is there a disparity where you go to paid models becouse they are better and what problems would those be?
+
+00:26:59.660 --> 00:27:04.699
+Is there a disparity where you go to paid models
+
+00:27:04.700 --> 00:27:08.619
+because they are better and what problems?
+
+00:27:08.620 --> 00:27:14.019
+You know what would drive you to? That's a good question.
+
+00:27:14.020 --> 00:27:17.819
+Paid models, I don't mind them. I think they're good,
+
+00:27:17.820 --> 00:27:21.299
+but I don't think they're actually economically sustainable
+
+00:27:21.300 --> 00:27:22.659
+under their current system.
+
+00:27:22.660 --> 00:27:24.299
+Because right now, if you're paying
+
+00:27:24.300 --> 00:27:26.899
+20 bucks a month for Copilot and that goes up to 200 bucks,
+
+00:27:26.900 --> 00:27:28.499
+I'm not going to be as likely to use it.
+
+00:27:28.500 --> 00:27:29.579
+You know what I mean?
+
+00:27:29.580 --> 00:27:33.059
+But it does do some things in a way that I did not expect.
+
+00:27:33.060 --> 00:27:35.459
+For example, Grok was refactoring
+
+00:27:35.460 --> 00:27:38.019
+some of my code in the comments and dropped an F-bomb.
+
+00:27:38.020 --> 00:27:39.979
+which I did not see coming,
+
+00:27:39.980 --> 00:27:41.619
+but the other code before
+
+00:27:41.620 --> 00:27:43.219
+that I had gotten off GitHub
+
+00:27:43.220 --> 00:27:44.059
+had F bombs in it.
+
+00:27:44.060 --> 00:27:45.899
+So it was just emulating the style,
+
+00:27:45.900 --> 00:27:47.779
+but would that be something
+
+00:27:47.780 --> 00:27:49.979
+I'd want to turn in a pull request? I don't know.
+
+00:27:49.980 --> 00:27:52.139
+But, uh, there's, there's a lot of money
+
+00:27:52.140 --> 00:27:53.899
+going into these AIs and stuff,
+
+00:27:53.900 --> 00:27:56.219
+but in terms of the ability to get a decent one,
+
+00:27:56.220 --> 00:27:57.979
+like the llama, llama 3.2,
+
+00:27:57.980 --> 00:28:01.239
+and load your data into it, you can be pretty competitive.
+
+00:28:01.240 --> 00:28:02.792
+You're not going to get all the benefits,
+
+00:28:02.793 --> 00:28:04.333
+but you have more control over it.
+
+00:28:04.334 --> 00:28:11.000
+So it's a balancing act.
+
+00:28:11.001 --> 00:28:14.125
+[Corwin]: Okay, and I think I see a couple more questions coming in.
+
+NOTE Q: What's the largest (in parameter size) local model you've been able to successfully run locally, and do you run into issues with limited context window size?
+
+00:28:14.126 --> 00:28:19.619
+What is the largest parameter size for local models
+
+00:28:19.620 --> 00:28:22.459
+that you've been able to successfully run locally
+
+00:28:22.460 --> 00:28:26.059
+and do you run into issues with limited context window size?
+
+00:28:26.060 --> 00:28:29.659
+The top paid models will tend to have a larger ceiling.
+
+00:28:29.660 --> 00:28:32.859
+[Aaron]: Yes, yes, yes, yes, yes.
+
+00:28:32.860 --> 00:28:37.019
+By default, the context size is I think 1024.
+
+00:28:37.020 --> 00:28:41.160
+But I've upped it to 8192 on this box, the Pangolin,
+
+00:28:41.161 --> 00:28:43.542
+because it seems to be, for some reason,
+
+00:28:43.543 --> 00:28:45.208
+it's just a very... working quite well.
+
+00:28:45.209 --> 00:28:49.750
+But the largest ones I've loaded have been in the...
+
+00:28:49.751 --> 00:28:51.333
+have not been that huge.
+
+00:28:51.334 --> 00:28:55.699
+I've loaded this... the last biggest one I've done...
+
+00:28:55.700 --> 00:28:57.459
+That's the reason why I'm planning
+
+00:28:57.460 --> 00:29:01.339
+on breaking down and buying a Ryzen.
+
+00:29:01.340 --> 00:29:03.619
+Actually, I'm going to buy
+
+00:29:03.620 --> 00:29:06.979
+an Intel i285H with 96 gig of RAM.
+
+00:29:06.980 --> 00:29:08.379
+Then I should be able to load
+
+00:29:08.380 --> 00:29:12.059
+a 70 billion parameter model in that. How fast will it run?
+
+00:29:12.060 --> 00:29:13.819
+It's going to run slow as dog,
+
+00:29:13.820 --> 00:29:15.819
+but it's going to be cool to be able to do it.
+
+00:29:15.820 --> 00:29:17.379
+It's an AI bragging rights thing,
+
+00:29:17.380 --> 00:29:20.019
+but I mostly stick with the smaller size models
+
+00:29:20.020 --> 00:29:22.819
+and the ones that are more quantitized
+
+00:29:22.820 --> 00:29:26.619
+because it just tends to work better for me.
+
+00:29:26.620 --> 00:29:29.179
+[Corwin]: We've still got over 10 minutes before we're cutting away,
+
+00:29:29.180 --> 00:29:30.179
+but I'm just anticipating
+
+00:29:30.180 --> 00:29:32.859
+that we're going to be going strong at the 10 minute mark.
+
+00:29:32.860 --> 00:29:34.899
+So I'm just, just letting, you know,
+
+00:29:34.900 --> 00:29:37.379
+we can go as long as we like here at a certain point.
+
+00:29:37.380 --> 00:29:41.059
+I may have to jump away and check in with the next speaker,
+
+00:29:41.060 --> 00:29:44.419
+but we'll post the entirety of this,
+
+00:29:44.420 --> 00:29:47.979
+even if we aren't able to stay with it all.
+
+00:29:47.980 --> 00:29:49.739
+Okay. And we've got 10 minutes
+
+00:29:49.740 --> 00:29:52.379
+where we're still going to stay live.
+
+NOTE Q: Are there "Free" as in FSF/open source issues with the data?
+
+00:29:52.380 --> 00:30:00.139
+So next question coming in, I see, are there free as in freedom,
+
+00:30:00.140 --> 00:30:05.739
+free as in FSF issues with the data?
+
+00:30:05.740 --> 00:30:11.699
+[Aaron]: Yes, where's the data coming from is a huge question with AI.
+
+00:30:11.700 --> 00:30:13.739
+It's astonishing you can ask questions
+
+00:30:13.740 --> 00:30:16.899
+to models that you don't know where it's coming from.
+
+00:30:16.900 --> 00:30:19.979
+That is gonna be one of the big issues long-term.
+
+00:30:19.980 --> 00:30:21.499
+There are people who are working
+
+00:30:21.500 --> 00:30:22.979
+on trying to figure out that stuff,
+
+00:30:22.980 --> 00:30:25.259
+but it's, I mean, if you look at, God,
+
+00:30:25.260 --> 00:30:27.059
+I can't remember who it was.
+
+00:30:27.060 --> 00:30:28.659
+Somebody was actually out torrenting books
+
+00:30:28.660 --> 00:30:30.939
+just to be able to build it into their AI system.
+
+00:30:30.940 --> 00:30:32.339
+I think it might've been Meta.
+
+00:30:32.340 --> 00:30:34.819
+So there's a lot of that going on.
+
+00:30:34.820 --> 00:30:38.139
+The open source of the stuff is going to be tough.
+
+00:30:38.140 --> 00:30:39.459
+There's going to be there's some models
+
+00:30:39.460 --> 00:30:41.419
+like the mobile guys have got their own license,
+
+00:30:41.420 --> 00:30:42.739
+but where they're getting their data from,
+
+00:30:42.740 --> 00:30:45.499
+I'm not sure, so that's a huge question.
+
+00:30:45.500 --> 00:30:47.979
+That's a talk in itself.
+
+00:30:47.980 --> 00:30:51.979
+But yeah, if you train on your RAG and your data,
+
+00:30:51.980 --> 00:30:53.499
+you know what it's come, you know,
+
+00:30:53.500 --> 00:30:54.379
+you have a license that
+
+00:30:54.380 --> 00:30:55.139
+but the other stuff is just
+
+00:30:55.140 --> 00:30:56.739
+more lines of supplement
+
+00:30:56.740 --> 00:31:01.379
+if you're using a smaller model.
+
+00:31:01.380 --> 00:31:05.419
+[Corwin]: The comments online, I see a couple of them.
+
+00:31:05.420 --> 00:31:08.339
+I'll read them out in order here. Really interesting stuff.
+
+00:31:08.340 --> 00:31:09.556
+Thank you for your talk.
+
+NOTE Q: Given that large AI companies are openly stealing IP and copyright, thereby eroding the authority of such law (and eroding truth itself as well), can you see a future where IP & copyright flaw become untenable and what sort of onwards effect might that have?
+
+00:31:09.557 --> 00:31:11.659
+Given that large AI companies
+
+00:31:11.660 --> 00:31:14.899
+are openly stealing intellectual property and copyright
+
+00:31:14.900 --> 00:31:18.939
+and therefore eroding the authority of such laws
+
+00:31:18.940 --> 00:31:21.579
+and maybe obscuring the truth itself,
+
+00:31:21.580 --> 00:31:26.579
+can you see a future where IP and copyright flaw become untenable?
+
+00:31:26.580 --> 00:31:29.619
+I think that's a great question.
+
+00:31:29.620 --> 00:31:34.979
+I'm not a lawyer, but it is really getting complicated.
+
+00:31:34.980 --> 00:31:37.859
+It is getting to the point, I asked a question from,
+
+00:31:37.860 --> 00:31:41.179
+I played with Sora a little bit, and it generated someone,
+
+00:31:41.180 --> 00:31:42.819
+you can go like, oh, that's Jon Hamm,
+
+00:31:42.820 --> 00:31:44.099
+that's Christopher Walken,
+
+00:31:44.100 --> 00:31:45.379
+you start figuring out who the people
+
+00:31:45.380 --> 00:31:47.019
+they're modeling stuff after.
+
+00:31:47.020 --> 00:31:48.979
+There is an apocalypse, something
+
+00:31:48.980 --> 00:31:52.459
+going to happen right now.
+
+00:31:52.460 --> 00:31:53.579
+There is, but this is once again,
+
+00:31:53.580 --> 00:31:56.059
+my personal opinion, and I'm not a lawyer,
+
+00:31:56.060 --> 00:31:57.459
+and I do not have money.
+
+00:31:57.460 --> 00:31:58.859
+So don't sue me, is there's going to be
+
+00:31:58.860 --> 00:32:02.899
+the current administration tends is very AI, pro AI.
+
+00:32:02.900 --> 00:32:05.499
+And there's very a great deal of lobbying by those groups.
+
+00:32:05.500 --> 00:32:07.139
+And it's on both sides.
+
+00:32:07.140 --> 00:32:09.699
+And it's going to be, it's gonna be interesting to see
+
+00:32:09.700 --> 00:32:11.699
+what happens to copyright the next 510 years.
+
+00:32:11.700 --> 00:32:13.339
+I just don't know how it keeps up
+
+00:32:13.340 --> 00:32:18.059
+without there being some adjustments and stuff.
+
+NOTE Comment: File size is not going to be the bottleneck, your RAM is.
+
+00:32:18.060 --> 00:32:20.419
+[Corwin]: Okay, and then another comment I saw,
+
+00:32:20.420 --> 00:32:23.219
+file size is not going to be a bottleneck.
+
+00:32:23.220 --> 00:32:25.819
+RAM is. You'll need 16 gigabytes of RAM
+
+00:32:25.820 --> 00:32:28.259
+to run the smallest local models
+
+00:32:28.260 --> 00:32:31.979
+and 512 gigabytes of RAM to run the larger ones.
+
+00:32:31.980 --> 00:32:35.059
+You'll need a GPU with that much memory
+
+00:32:35.060 --> 00:32:38.318
+if you want it to run quickly.
+
+00:32:38.319 --> 00:32:41.259
+[Aaron]: Yeah. Oh no. It also depends upon how your memory is laid out.
+
+00:32:41.260 --> 00:32:45.699
+Like example being the Ultra i285H
+
+00:32:45.700 --> 00:32:47.899
+I plan to buy, that has 96 gig of memory.
+
+00:32:47.900 --> 00:32:50.499
+It's unified between the GPU and the CPU share it,
+
+00:32:50.500 --> 00:32:52.739
+but they go over the same bus.
+
+00:32:52.740 --> 00:32:55.779
+So the overall bandwidth of it tends to be a bit less,
+
+00:32:55.780 --> 00:32:57.579
+but you're able to load more of it into memory.
+
+00:32:57.580 --> 00:32:59.419
+So it's able to do some additional stuff with it
+
+00:32:59.420 --> 00:33:00.819
+as opposed to come off disk.
+
+00:33:00.820 --> 00:33:03.699
+It's all balancing act. If you hit Ziskind's website,
+
+00:33:03.700 --> 00:33:05.819
+that guy's done some great work on it.
+
+00:33:05.820 --> 00:33:07.499
+I'm trying to figure out how big a model you can do,
+
+00:33:07.500 --> 00:33:08.619
+what you can do with it.
+
+00:33:08.620 --> 00:33:12.699
+And some of the stuff seems to be not obvious,
+
+00:33:12.700 --> 00:33:15.299
+because like example, being that MacBook Air,
+
+00:33:15.300 --> 00:33:17.619
+for the five minutes I can run the model,
+
+00:33:17.620 --> 00:33:19.379
+it runs it faster than a lot of other things
+
+00:33:19.380 --> 00:33:21.339
+that should be able to run it faster,
+
+00:33:21.340 --> 00:33:24.619
+just because of the way the ARM cores and the unified memory work on it.
+
+00:33:24.620 --> 00:33:26.019
+So it's a learning process.
+
+00:33:26.020 --> 00:33:29.579
+But if you want to, Network Chuck had a great video
+
+00:33:29.580 --> 00:33:30.939
+talking about building his own system
+
+00:33:30.940 --> 00:33:34.379
+with a couple really powerful Nvidia cards
+
+00:33:34.380 --> 00:33:35.379
+and stuff like that in it.
+
+00:33:35.380 --> 00:33:38.859
+And just actually setting up on his system as a node
+
+00:33:38.860 --> 00:33:41.459
+and using a web UI on it. So there's a lot of stuff there,
+
+00:33:41.460 --> 00:33:43.899
+but it is a process of learning how big your data is,
+
+00:33:43.900 --> 00:33:44.899
+which models you want to use,
+
+00:33:44.900 --> 00:33:46.219
+how much information you need,
+
+00:33:46.220 --> 00:33:49.579
+but it's part of the learning.
+
+00:33:49.580 --> 00:33:52.899
+And you can run models, even on Raspberry Pi 5s,
+
+00:33:52.900 --> 00:33:54.499
+if you want to, they'll run slow.
+
+00:33:54.500 --> 00:33:59.339
+Don't get me wrong, but they're possible.
+
+00:33:59.340 --> 00:34:02.179
+[Corwin]: Okay, and I think there's other questions coming in too,
+
+00:34:02.180 --> 00:34:04.019
+so I'll just bam for another second.
+
+00:34:04.020 --> 00:34:06.299
+We've got about five minutes before we'll,
+
+00:34:06.300 --> 00:34:09.739
+before we'll be cutting over,
+
+00:34:09.740 --> 00:34:13.179
+but I just want to say in case we get close for time here,
+
+00:34:13.180 --> 00:34:14.859
+how much I appreciate your talk.
+
+00:34:14.860 --> 00:34:15.979
+This is another one that I'm going to
+
+00:34:15.980 --> 00:34:18.339
+have to study after the conference.
+
+00:34:18.340 --> 00:34:21.099
+[Aaron]: We greatly appreciate, all of us appreciate
+
+00:34:21.100 --> 00:34:22.459
+you guys putting on the conference.
+
+00:34:22.460 --> 00:34:26.299
+It's a great conference. It's well done.
+
+00:34:26.300 --> 00:34:28.019
+[Corwin]: It's an honor to be on the stage
+
+00:34:28.020 --> 00:34:33.124
+with the brains of the project, which is you.
+
+00:34:33.125 --> 00:34:34.699
+[Aaron]: So what else we got? Question wise.
+
+00:34:34.700 --> 00:34:46.899
+[Corwin]: Okay, so just scanning here.
+
+NOTE Q: Have you used local models capable of tool-calling?
+
+00:34:46.900 --> 00:34:50.699
+Have you used local models capable of tool calling?
+
+00:34:50.700 --> 00:34:54.779
+I'm scared of agentic.
+
+00:34:54.780 --> 00:34:58.739
+I'm going to be a slow adopter of that.
+
+00:34:58.740 --> 00:35:02.459
+I want to do it, but I just don't have the, uh,
+
+00:35:02.460 --> 00:35:04.339
+four decimal fortitude right now to do it.
+
+00:35:04.340 --> 00:35:07.179
+I've had to give me the commands,
+
+00:35:07.180 --> 00:35:08.739
+but I still run the commands by hand.
+
+00:35:08.740 --> 00:35:10.539
+I'm looking into it and it's on once again,
+
+00:35:10.540 --> 00:35:20.899
+it's on that list, but I just, that's a big step for me.
+
+00:35:20.900 --> 00:35:23.139
+[Corwin]: So. Awesome. All right.
+
+00:35:23.140 --> 00:35:27.179
+Well, maybe it's, let me just scroll through
+
+00:35:27.180 --> 00:35:31.539
+because we might have missed one question. Oh, I see.
+
+00:35:31.540 --> 00:35:36.899
+Here was the piggyback question.
+
+00:35:36.900 --> 00:35:38.419
+Now I see the question that I missed.
+
+00:35:38.420 --> 00:35:41.139
+So this was piggybacking on the question
+
+00:35:41.140 --> 00:35:44.859
+about model updates and adding data.
+
+NOTE Q: Will the models reach out to the web if they need to for more info?
+
+00:35:44.860 --> 00:35:46.579
+And will models reach out to the web
+
+00:35:46.580 --> 00:35:47.819
+if they need more info?
+
+00:35:47.820 --> 00:35:52.479
+Or have you worked with any models that work that way?
+
+00:35:52.480 --> 00:35:55.259
+[Aaron]: No, I've not seen any models to do that
+
+00:35:55.260 --> 00:35:57.739
+There's there was like a group
+
+00:35:57.740 --> 00:35:59.899
+working on something like a package updater
+
+00:35:59.900 --> 00:36:02.499
+that would do different diffs on it,
+
+00:36:02.500 --> 00:36:03.939
+but it's so... Models change so much,
+
+00:36:03.940 --> 00:36:05.739
+even who make minor changes and fine-tuning,
+
+00:36:05.740 --> 00:36:07.659
+It's hard just to update them in place.
+
+00:36:07.660 --> 00:36:10.099
+So I haven't seen one, but that doesn't mean
+
+00:36:10.100 --> 00:36:15.713
+they're not out there. Curious topic though.
+
+00:36:15.714 --> 00:36:16.259
+[Corwin]: Awesome.
+
+00:36:16.260 --> 00:36:19.539
+Well, it's probably pretty good timing.
+
+00:36:19.540 --> 00:36:21.299
+Let me just scroll and make sure.
+
+00:36:21.300 --> 00:36:23.499
+And of course, before I can say that,
+
+00:36:23.500 --> 00:36:25.899
+there's one more question. So let's go ahead and have that.
+
+00:36:25.900 --> 00:36:28.299
+I want to make sure while we're still live, though,
+
+00:36:28.300 --> 00:36:31.299
+I give you a chance to offer any closing thoughts.
+
+NOTE Q: What scares you most about agentic tools? How would you think about putting a sandbox around it if you adopt an agentic workflow?
+
+00:36:31.300 --> 00:36:35.779
+So what scares you most about the agentic tools?
+
+00:36:35.780 --> 00:36:38.419
+How would you think about putting a sandbox around that
+
+00:36:38.420 --> 00:36:41.619
+if you did adopt an agentic workflow?
+
+00:36:41.620 --> 00:36:42.899
+[Aaron]: That is a great question.
+
+00:36:42.900 --> 00:36:45.939
+In terms of that, I would just control
+
+00:36:45.940 --> 00:36:48.099
+what it's able to talk to, what machines,
+
+00:36:48.100 --> 00:36:50.059
+I would actually have it be air gap.
+
+00:36:50.060 --> 00:36:52.099
+I work for a defense contractor,
+
+00:36:52.100 --> 00:36:53.819
+and we spend a lot of time dealing with air gap systems,
+
+00:36:53.820 --> 00:36:55.979
+because that's just kind of the way it works out for us.
+
+00:36:55.980 --> 00:36:58.499
+So agentic, it's just going to take a while to get trust.
+
+00:36:58.500 --> 00:37:01.059
+I want to see more stuff happening.
+
+00:37:01.060 --> 00:37:02.819
+Humans screw up stuff enough.
+
+00:37:02.820 --> 00:37:04.819
+The last thing we need is to multiply that by 1000.
+
+00:37:04.820 --> 00:37:09.419
+So in terms of that, I would be restricting what it can do.
+
+00:37:09.420 --> 00:37:10.859
+If you look at the capabilities,
+
+00:37:10.860 --> 00:37:13.579
+if I created a user and gave it permissions,
+
+00:37:13.580 --> 00:37:15.299
+I would have a lockdown through sudo,
+
+00:37:15.300 --> 00:37:17.379
+what it's able to do, what the account's able to do.
+
+00:37:17.380 --> 00:37:18.899
+I would do those kind of things,
+
+00:37:18.900 --> 00:37:20.859
+but it's going to be, it's happening.
+
+00:37:20.860 --> 00:37:25.819
+It's just, I'm going to be one of the laggards on that one.
+
+00:37:25.820 --> 00:37:29.259
+So air gap, jail, extremely locked down environments,
+
+00:37:29.260 --> 00:37:34.899
+like we're talking about separate physicals, not Docker.
+
+00:37:34.900 --> 00:37:36.577
+Yeah, hopefully.
+
+NOTE Q: Tool calling can be read-only, such as giving models the ability to search the web before answersing your question. (No write access or execute access) I'm interested to know if local models are any good at calling tools, though.
+
+00:37:36.578 --> 00:37:39.899
+[Corwin]: Right, fair. So tool calling can be read-only,
+
+00:37:39.900 --> 00:37:42.539
+such as giving models the ability to search the web
+
+00:37:42.540 --> 00:37:43.979
+before answering your question,
+
+00:37:43.980 --> 00:37:46.219
+you know, write access, execute access.
+
+00:37:46.220 --> 00:37:49.219
+I'm interested to know if local models
+
+00:37:49.220 --> 00:37:51.419
+are any good at that.
+
+00:37:51.420 --> 00:37:55.579
+[Aaron]: Yes, local models can do a lot of that stuff.
+
+00:37:55.580 --> 00:37:56.819
+It's their capabilities.
+
+00:37:56.820 --> 00:37:59.019
+If you load LM studio, you can do a lot of wonderful stuff
+
+00:37:59.020 --> 00:38:02.419
+with that or with Open Web UI with ollama.
+
+00:38:02.420 --> 00:38:05.739
+It's a lot of capabilities. It's amazing.
+
+00:38:05.740 --> 00:38:08.139
+Open Web UI is actually what a lot of companies are using now
+
+00:38:08.140 --> 00:38:10.259
+to put their data behind that.
+
+00:38:10.260 --> 00:38:12.139
+They're curated data and stuff like that. So works well.
+
+00:38:12.140 --> 00:38:15.819
+I can confirm that from my own professional experience.
+
+00:38:15.820 --> 00:38:16.915
+Excellent.
+
+00:38:16.916 --> 00:38:19.659
+[Corwin]: Okay, well, our timing should be just perfect
+
+00:38:19.660 --> 00:38:22.659
+if you want to give us like a 30-second, 45-second wrap-up.
+
+00:38:22.660 --> 00:38:24.419
+Aaron, let me squeeze in mine.
+
+00:38:24.420 --> 00:38:26.779
+Thank you again so much for preparing this talk
+
+00:38:26.780 --> 00:38:30.499
+and for entertaining all of our questions.
+
+00:38:30.500 --> 00:38:33.299
+[Aaron]: Yeah, let me just thank you guys for the conference again.
+
+00:38:33.300 --> 00:38:35.179
+This is a great one. I've enjoyed a lot of it.
+
+00:38:35.180 --> 00:38:37.339
+I've only had a couple of talks so far,
+
+00:38:37.340 --> 00:38:41.659
+but I'm looking forward to hitting the ones after this and tomorrow.
+
+NOTE Wrapping up
+
+00:38:41.660 --> 00:38:44.739
+But the AI stuff is coming. Get on board.
+
+00:38:44.740 --> 00:38:46.939
+Definitely recommend it. If you want to just try it out
+
+00:38:46.940 --> 00:38:48.419
+and get a little taste of it,
+
+00:38:48.420 --> 00:38:49.779
+what my minimal viable product
+
+00:38:49.780 --> 00:38:51.619
+with just Llamafile and gptel
+
+00:38:51.620 --> 00:38:53.139
+will get you to the point where you start figuring out.
+
+00:38:53.140 --> 00:38:55.579
+Gptel is an amazing thing. It just gets out of your way,
+
+00:38:55.580 --> 00:39:00.459
+but it works so well with Emacs's design because
+
+00:39:00.460 --> 00:39:01.699
+it doesn't take your hands off the keyboard.
+
+00:39:01.700 --> 00:39:02.499
+It's just another buffer,
+
+00:39:02.500 --> 00:39:04.059
+and you just put information in there.
+
+00:39:04.060 --> 00:39:06.979
+It's quite a wonderful time.
+
+00:39:06.980 --> 00:39:10.501
+Let's put that way. That's all I got.
+
+00:39:10.502 --> 00:39:14.339
+[Corwin]: Thank you so much for once again, and we've just cut away.
+
+00:39:14.340 --> 00:39:15.779
+So I'll stop the recording
+
+00:39:15.780 --> 00:39:18.259
+and you're on your own recognizance.
+
+00:39:18.260 --> 00:39:19.699
+[Aaron]: Well, I'm gonna punch out
+
+00:39:19.700 --> 00:39:21.059
+if anybody has any questions or anything
+
+00:39:21.060 --> 00:39:24.699
+my email address is ajgrothe@yahoo.com or at gmail and
+
+00:39:24.700 --> 00:39:26.779
+thank you all for attending,
+
+00:39:26.780 --> 00:39:29.939
+and thanks again for the conference
+
+00:39:29.940 --> 00:39:32.579
+Okay, I'm gonna go ahead and end the room there, thank you.
+
+00:39:32.580 --> 00:39:34.100
+Excellent, thanks, bye.
diff --git a/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt
new file mode 100644
index 00000000..2ab53895
--- /dev/null
+++ b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt
@@ -0,0 +1,887 @@
+WEBVTT
+
+NOTE Developing Python in Emacs
+
+00:00:00.000 --> 00:00:02.839
+So as we wait for people to drop
+
+00:00:02.840 --> 00:00:04.279
+in their questions and so on,
+
+00:00:04.280 --> 00:00:08.719
+I'll just kind of add a couple of thoughts.
+
+00:00:08.720 --> 00:00:12.039
+I'm not personally much of a Python developer,
+
+00:00:12.040 --> 00:00:17.759
+so I'm just curious as to your thoughts on using Emacs
+
+00:00:17.760 --> 00:00:24.319
+and kind of the development methodology you showed
+
+00:00:24.320 --> 00:00:26.519
+as a way to learn Python.
+
+00:00:26.520 --> 00:00:29.239
+Yeah, I think Emacs is perfect for it.
+
+00:00:29.240 --> 00:00:31.759
+If you're already an Emacs user
+
+00:00:31.760 --> 00:00:35.599
+and you have the keyboard commands
+
+00:00:35.600 --> 00:00:38.719
+and everything uploaded in your brain,
+
+00:00:38.720 --> 00:00:42.599
+then learning Python shouldn't be too difficult,
+
+00:00:42.600 --> 00:00:44.839
+because there's a lot of good packages.
+
+00:00:44.840 --> 00:00:51.319
+For Python, I'm using a thing called elpy,
+
+00:00:51.320 --> 00:00:55.679
+which is really good. for Python development.
+
+00:00:55.680 --> 00:01:00.039
+So you have this connection to a running backend,
+
+00:01:00.040 --> 00:01:06.039
+the Jedi Python backend that will give you autocomplete
+
+00:01:06.040 --> 00:01:09.039
+and some refactoring and things like that.
+
+00:01:09.040 --> 00:01:14.439
+So I think Emacs is really good for Python development.
+
+00:01:14.440 --> 00:01:16.679
+So what are some other...
+
+NOTE Q: How long have you been using Emacs?
+
+00:01:16.680 --> 00:01:18.319
+How long have you been using Emacs?
+
+00:01:18.320 --> 00:01:19.599
+Kind of a general question.
+
+00:01:19.600 --> 00:01:23.599
+Sorry if you covered this and I missed it.
+
+00:01:23.600 --> 00:01:26.599
+It's not that long actually.
+
+00:01:26.600 --> 00:01:31.599
+I think it was in 2019 or 2020.
+
+00:01:31.600 --> 00:01:34.799
+It's when I started to, I was really fortunate enough
+
+00:01:34.800 --> 00:01:38.039
+to join a team that had chosen to
+
+00:01:38.040 --> 00:01:42.919
+develop an app in Lisp, in Clojure.
+
+00:01:42.920 --> 00:01:45.039
+yeah and i didn't know anything about it
+
+00:01:45.040 --> 00:01:47.359
+i didn't know lisp at all so it was like brand new
+
+00:01:47.360 --> 00:01:50.639
+so i really had struggling to to learn it
+
+00:01:50.640 --> 00:01:53.559
+but at the same time i was looking for okay
+
+00:01:53.560 --> 00:01:55.279
+which editor should i pick to to do this
+
+00:01:55.280 --> 00:02:00.239
+and i was before that and like an ide person
+
+00:02:00.240 --> 00:02:02.919
+so i do use this big ideas
+
+00:02:02.920 --> 00:02:07.839
+and this time i figured maybe i should try something different.
+
+00:02:07.840 --> 00:02:10.239
+And I read this book about Clojure development
+
+00:02:10.240 --> 00:02:13.239
+and the author was really into Emacs
+
+00:02:13.240 --> 00:02:17.159
+and he was like, Clojure is really good for,
+
+00:02:17.160 --> 00:02:19.159
+Emacs is really good for Clojure development.
+
+00:02:19.160 --> 00:02:20.759
+So that's how I started.
+
+00:02:20.760 --> 00:02:24.479
+So I like to learn, rewired my brain
+
+00:02:24.480 --> 00:02:27.639
+to learn all how Emacs works
+
+00:02:27.640 --> 00:02:30.959
+as opposed to like the mainstream editors out there.
+
+00:02:30.960 --> 00:02:33.519
+So that's how it started. So like five years ago, maybe.
+
+00:02:33.520 --> 00:02:39.519
+Cool. Um, so did you, what were some other,
+
+NOTE Q: What editor were you primarily using before?
+
+00:02:39.520 --> 00:02:43.999
+what, what, what editor were you primarily using before you?
+
+00:02:44.000 --> 00:02:49.399
+Um, um, back, back then it was like,
+
+00:02:49.400 --> 00:02:52.719
+I think it was like Sublime Text.
+
+00:02:52.720 --> 00:02:57.719
+And also some IntelliJ, sorry, JetBrains, their tools.
+
+00:02:57.720 --> 00:03:04.599
+And before that, I was in the Microsoft world,
+
+00:03:04.600 --> 00:03:08.199
+so it's like Microsoft toolings basically.
+
+00:03:08.200 --> 00:03:10.879
+So I moved towards open source tooling
+
+00:03:10.880 --> 00:03:16.679
+and also open source development. Very cool.
+
+00:03:16.680 --> 00:03:19.119
+So I see we've got a couple people
+
+00:03:19.120 --> 00:03:23.479
+that have joined on the BBB here with us
+
+00:03:23.480 --> 00:03:24.959
+for the live question.
+
+00:03:24.960 --> 00:03:29.199
+You're welcome to just throw your question in this chat,
+
+00:03:29.200 --> 00:03:32.039
+or if you've got a microphone connected,
+
+00:03:32.040 --> 00:03:34.599
+you're welcome to come off mute
+
+00:03:34.600 --> 00:03:36.759
+and throw a question in that way as well.
+
+00:03:36.760 --> 00:03:40.359
+You can join on liberachat IRC.
+
+00:03:40.360 --> 00:03:44.119
+You can join pound emacs comp hyphen dev,
+
+00:03:44.120 --> 00:03:47.279
+and we would happily take your questions there.
+
+00:03:47.280 --> 00:03:49.479
+Meanwhile, I've got a question
+
+00:03:49.480 --> 00:03:52.719
+coming in on the pad right now, so take that next.
+
+00:03:52.720 --> 00:03:55.239
+I'll just read it out.
+
+00:03:55.240 --> 00:03:58.239
+I don't quite see how your setup works with IPython.
+
+00:03:58.240 --> 00:04:00.279
+Sorry if you already answered this.
+
+NOTE Q: Do you have your Emacs connect to the IPython kernel over the XMPP socket that IPython sets up?
+
+00:04:00.280 --> 00:04:03.519
+Do you have your Emacs connect to the IPython kernel
+
+00:04:03.520 --> 00:04:11.919
+over XMPP socket that IPython sets up? Oh, good question.
+
+00:04:11.920 --> 00:04:18.039
+So what I've done is I have two different connections.
+
+00:04:18.040 --> 00:04:21.359
+Like if I'm going to do this regular day-to-day Python work
+
+00:04:21.360 --> 00:04:24.399
+when I want to evaluate code
+
+00:04:24.400 --> 00:04:29.959
+without thinking about the external connection,
+
+00:04:29.960 --> 00:04:31.559
+then I just use IPython
+
+00:04:31.560 --> 00:04:36.799
+and I have my I'm using the LP Python package
+
+00:04:36.800 --> 00:04:39.839
+so that you can set up which of the REPLs
+
+00:04:39.840 --> 00:04:42.799
+you want to start when you evaluate code.
+
+00:04:42.800 --> 00:04:46.759
+So that's IPython. But in the second part of the talk
+
+00:04:46.760 --> 00:04:50.919
+where I connect to an externally running app,
+
+00:04:50.920 --> 00:04:55.839
+then I have set up the same configuration
+
+00:04:55.840 --> 00:05:00.959
+but to start Jupyter, the Jupyter console instead.
+
+00:05:00.960 --> 00:05:04.959
+And when I start it up, it's going to, it's like a dialogue
+
+00:05:04.960 --> 00:05:09.599
+that will ask for the ID of a running kernel.
+
+00:05:09.600 --> 00:05:10.839
+Because if you start a kernel,
+
+00:05:10.840 --> 00:05:12.919
+if you start something in a kernel,
+
+00:05:12.920 --> 00:05:17.079
+you will get this unique ID so you can connect to it.
+
+00:05:17.080 --> 00:05:19.679
+So that's kind of the difference.
+
+00:05:19.680 --> 00:05:21.639
+So I have two different ways
+
+00:05:21.640 --> 00:05:26.599
+of starting up the Python kernel. REPLs, either PyPython,
+
+00:05:26.600 --> 00:05:29.559
+which I do for most of my daily work,
+
+00:05:29.560 --> 00:05:32.239
+or if I want this connection to a running app,
+
+00:05:32.240 --> 00:05:38.479
+I'm using the Jupyter console, basically.
+
+NOTE Q: Not sure if you've explored Org Babel, but what are the benefits of using your approach over Org?
+
+00:05:38.480 --> 00:05:45.199
+Have you explored Org Babel at all?
+
+00:05:45.200 --> 00:05:48.199
+Can you talk about your approach
+
+00:05:48.200 --> 00:05:52.279
+compared to the Babel workflow? Oh, interesting.
+
+00:05:52.280 --> 00:05:54.879
+No, I haven't actually, I haven't done that,
+
+00:05:54.880 --> 00:05:59.119
+but I think it's similar to Jupyter notebooks,
+
+00:05:59.120 --> 00:06:02.359
+so you can do some interactive, you can run Python there,
+
+00:06:02.360 --> 00:06:03.279
+but I haven't,
+
+00:06:03.280 --> 00:06:08.119
+I have too little knowledge about it to elaborate on that.
+
+00:06:08.120 --> 00:06:24.159
+Sorry. Very good. All right.
+
+00:06:24.160 --> 00:06:26.999
+I'm just going to peek over to the other chats
+
+00:06:27.000 --> 00:06:28.839
+and make sure I'm not missing questions.
+
+00:06:28.840 --> 00:06:35.519
+Sorry, I got a lot of screens. A little dance here.
+
+00:06:35.520 --> 00:06:41.239
+All right, and I do see a few people in the chat.
+
+00:06:41.240 --> 00:06:44.559
+I'll just say again, if you've joined us on the BBB,
+
+00:06:44.560 --> 00:06:46.999
+you're more than welcome to jump in with your questions
+
+00:06:47.000 --> 00:06:50.119
+or put questions into the chat here.
+
+00:06:50.120 --> 00:06:52.879
+I'm not a big Python person,
+
+00:06:52.880 --> 00:06:57.599
+so I can't get into the really interesting questions
+
+00:06:57.600 --> 00:07:01.639
+that are probably more relevant,
+
+00:07:01.640 --> 00:07:05.799
+just because a lot of it's kind of over my head.
+
+NOTE Q: Have you seen marimo.io notebooks? It uses standard Python.
+
+00:07:05.800 --> 00:07:12.879
+Have you seen the marimo.io notebooks?
+
+00:07:12.880 --> 00:07:15.279
+These use standard Python?
+
+00:07:15.280 --> 00:07:18.119
+Oh, yes, I've seen, I haven't tried it myself,
+
+00:07:18.120 --> 00:07:19.359
+but I've seen it.
+
+00:07:19.360 --> 00:07:22.639
+It's very, I think it's a very interesting approach
+
+00:07:22.640 --> 00:07:26.279
+that probably will solve a lot of these things
+
+00:07:26.280 --> 00:07:28.839
+with interactive development in general,
+
+00:07:28.840 --> 00:07:31.839
+but because I think it's basically Python files
+
+00:07:31.840 --> 00:07:36.439
+and not the, not this other file format that you have
+
+00:07:36.440 --> 00:07:40.799
+for the regular notebook setup.
+
+00:07:40.800 --> 00:07:45.559
+So I have that in my list of things to try out in future,
+
+00:07:45.560 --> 00:08:00.719
+but it looks really, really cool. Awesome.
+
+00:08:00.720 --> 00:08:06.719
+Yeah, I'm hesitant to just ask you really boilerplate questions.
+
+00:08:06.720 --> 00:08:11.239
+You get an expert, a souffle chef,
+
+00:08:11.240 --> 00:08:16.599
+and you ask about making pasta or some other sort of thing.
+
+00:08:16.600 --> 00:08:20.559
+No, go ahead. Go ahead. I'm glad to ask any questions.
+
+NOTE Q: what LLM did you say you've used?
+
+00:08:20.560 --> 00:08:25.679
+So just generally about Emacs as a coding developer,
+
+00:08:25.680 --> 00:08:26.999
+what are the features
+
+00:08:27.000 --> 00:08:28.479
+that you tend to lean on more heavily?
+
+00:08:28.480 --> 00:08:34.059
+You know completion or you know, what have you...
+
+00:08:34.060 --> 00:08:35.257
+Maybe I could put it better as:
+
+00:08:35.258 --> 00:08:40.079
+what have you spent more time configuring for Emacs
+
+00:08:40.080 --> 00:08:45.439
+to facilitate development?
+
+00:08:45.440 --> 00:08:49.639
+Yes, initially, it was basically taking away
+
+00:08:49.640 --> 00:08:51.319
+some of the UI features,
+
+00:08:51.320 --> 00:08:56.599
+basically disabling it, but fairly quickly,
+
+00:08:56.600 --> 00:08:58.919
+for both Clojure development
+
+00:08:58.920 --> 00:09:04.599
+where I was using CIDER, which is like a really good tool,
+
+00:09:04.600 --> 00:09:08.159
+and for Python, when I quickly found elpy,
+
+00:09:08.160 --> 00:09:10.599
+I'm not sure how to pronounce it,
+
+00:09:10.600 --> 00:09:16.039
+but you get so much good things from these tools...
+
+00:09:16.040 --> 00:09:21.019
+So what I've done additionally is theme
+
+00:09:21.020 --> 00:09:27.159
+and maybe having this environment
+
+00:09:27.160 --> 00:09:29.019
+that is without disturbance.
+
+00:09:29.020 --> 00:09:34.839
+So I really like the code to have my full attention.
+
+00:09:34.840 --> 00:09:41.239
+So I rarely have, maybe I have like a preview sometimes,
+
+00:09:41.240 --> 00:09:45.359
+but mostly, it's the window or the buffer where I have my code,
+
+00:09:45.360 --> 00:09:49.879
+and I've minimized the running REPL buffer.
+
+00:09:49.880 --> 00:09:53.439
+So sometimes it's, I'm hiding it, but it's still active.
+
+00:09:53.440 --> 00:09:57.679
+So basically that's how I configured,
+
+00:09:57.680 --> 00:10:00.279
+spent my configuration doing that.
+
+00:10:00.280 --> 00:10:04.799
+And also lately, trying out some LLM tools.
+
+00:10:04.800 --> 00:10:09.279
+I think I have two packages
+
+00:10:09.280 --> 00:10:12.239
+that I'm using actively today.
+
+00:10:12.240 --> 00:10:15.799
+My favorite is a tool called ECA,
+
+00:10:15.800 --> 00:10:20.199
+which is a LLM chat assistant, which is really good.
+
+00:10:20.200 --> 00:10:28.479
+The developer is also an Emacs enthusiast.
+
+NOTE Q: Are you building your own Emacs, or using the system packages?
+
+00:10:28.480 --> 00:10:33.639
+So are you the type of person that tends to work with
+
+00:10:33.640 --> 00:10:37.039
+like a master builder, build your own Emacs?
+
+00:10:37.040 --> 00:10:40.799
+Are you using the system packages?
+
+00:10:40.800 --> 00:10:43.615
+What's your approach to just get Emacs
+
+00:10:43.616 --> 00:10:45.368
+up and off the ground for yourself?
+
+00:10:45.369 --> 00:10:52.519
+I'm not there yet with doing my own builds.
+
+00:10:52.520 --> 00:10:55.599
+Currently, I'm on macOS,
+
+00:10:55.600 --> 00:11:00.039
+so I'm installing Emacs through brew, basically, homebrew.
+
+00:11:00.040 --> 00:11:04.919
+I've yet so much Emacs things to learn
+
+00:11:04.920 --> 00:11:07.739
+because I'm not even using Org yet.
+
+00:11:07.740 --> 00:11:11.559
+I'm exploring the this editor.
+
+00:11:11.560 --> 00:11:13.919
+So I feel like I'm very much a beginner.
+
+00:11:13.920 --> 00:11:17.919
+I'm not using Emacs to its full potential yet.
+
+00:11:17.920 --> 00:11:23.279
+So I'm counting on that I will be more and more using Emacs
+
+00:11:23.280 --> 00:11:29.119
+for more and more different tasks basically.
+
+00:11:29.120 --> 00:11:32.559
+And I'm just seeing a comment.
+
+00:11:32.560 --> 00:11:35.799
+Ed Stallthroat says, thank you
+
+00:11:35.800 --> 00:11:40.839
+for publishing your configuration and offers a link.
+
+00:11:40.840 --> 00:11:43.199
+Oh, great. Great.
+
+00:11:43.200 --> 00:11:46.359
+Yes, those things that I showed in my talk,
+
+00:11:46.360 --> 00:11:49.319
+I haven't made any, I haven't packaged it yet,
+
+00:11:49.320 --> 00:11:51.199
+but everything is on my GitHub,
+
+00:11:51.200 --> 00:11:57.079
+and I've tried to separate each feature
+
+00:11:57.080 --> 00:11:59.639
+in separate LSP files.
+
+00:11:59.640 --> 00:12:04.319
+So it should be, I hope that it's fairly straightforward
+
+00:12:04.320 --> 00:12:08.959
+to understand how it's set up. Very good.
+
+00:12:08.960 --> 00:12:11.119
+Let me just scroll down,
+
+00:12:11.120 --> 00:12:12.999
+make sure I'm not missing questions here.
+
+00:12:13.000 --> 00:12:16.959
+Okay, I think those are the questions that we have.
+
+00:12:16.960 --> 00:12:20.879
+We can take a couple more minutes if you're open to that,
+
+00:12:20.880 --> 00:12:24.039
+just for people to consider.
+
+00:12:24.040 --> 00:12:26.119
+I know we're coming up on the lunch hour,
+
+00:12:26.120 --> 00:12:31.679
+so it may be that people are jogging off to get some food.
+
+00:12:31.680 --> 00:12:36.599
+Yeah, in Sweden, it's dinner time.
+
+00:12:36.600 --> 00:12:40.079
+It's like 6 p.m. soon. That fits.
+
+NOTE Q: Are you involved with local Emacs meetups?
+
+00:12:40.080 --> 00:12:46.439
+So are you involved with local Emacs meetups?
+
+00:12:46.440 --> 00:12:49.079
+I know that your part of the world
+
+00:12:49.080 --> 00:12:51.799
+has a really brisk community,
+
+00:12:51.800 --> 00:12:55.279
+you know, a lot of, just a lot going on.
+
+00:12:55.280 --> 00:12:58.799
+I'm always seeing in Sacha's Emacs News,
+
+00:12:58.800 --> 00:13:02.319
+all of the different meetups and so on.
+
+00:13:02.320 --> 00:13:03.519
+I'm curious if you're plugged
+
+00:13:03.520 --> 00:13:08.719
+into a local community there at all, No, I haven't.
+
+00:13:08.720 --> 00:13:10.759
+Not in any community. I haven't done that yet,
+
+00:13:10.760 --> 00:13:18.215
+but we are... Like, friends that I've gotten to know
+
+00:13:18.216 --> 00:13:23.439
+through work and through like open source work that also use Emacs.
+
+00:13:23.440 --> 00:13:28.959
+We talk and share our conflicts
+
+00:13:28.960 --> 00:13:30.799
+basically on a regular basis,
+
+00:13:30.800 --> 00:13:35.999
+because we are, at least in the Python community,
+
+00:13:36.000 --> 00:13:37.399
+we're like a minority,
+
+00:13:37.400 --> 00:13:39.799
+like other editors are like the standards.
+
+00:13:39.800 --> 00:13:45.879
+And at work, I'm sharing what I'm doing,
+
+00:13:45.880 --> 00:13:48.679
+just like my talk here to my fellow co-workers
+
+00:13:48.680 --> 00:13:53.999
+that are not on Emacs, but I hope to get their interest up.
+
+00:13:54.000 --> 00:13:58.999
+So many of us Emacs users are Emacs evangelists.
+
+00:13:59.000 --> 00:14:06.201
+Yeah. It's the Venn diagram of Emacs user
+
+00:14:06.202 --> 00:14:08.868
+and Emacs evangelist is a circle, I think.
+
+00:14:08.869 --> 00:14:11.035
+Yeah, I think so too.
+
+00:14:11.036 --> 00:14:16.559
+Well, David, I super appreciate your talk
+
+00:14:16.560 --> 00:14:18.759
+and thank you so much also for...
+
+00:14:18.760 --> 00:14:24.639
+I'm sorry, I saw another question here. Let me cover that.
+
+NOTE Q: Can you repeat the name of the LLM that you specifically mentioned there? - ECA
+
+00:14:24.640 --> 00:14:27.959
+Can you repeat the name of the LLM
+
+00:14:27.960 --> 00:14:30.319
+that you specifically mentioned there?
+
+00:14:30.320 --> 00:14:36.784
+Oh, it's a tool called ECA, E-C-A.
+
+00:14:36.785 --> 00:14:44.076
+It's basically a server and clients,
+
+00:14:44.077 --> 00:14:49.160
+and it's not only Emacs. It has support for other editors,
+
+00:14:49.161 --> 00:14:53.119
+but I think the primary support is for,
+
+00:14:53.120 --> 00:14:57.599
+at least the developer who does it is an Emacs user,
+
+00:14:57.600 --> 00:15:01.039
+and so it's like Emacs first, basically.
+
+00:15:01.040 --> 00:15:04.959
+And his name is Eric Dallo.
+
+00:15:04.960 --> 00:15:09.679
+He's a great developer in the Clojure community.
+
+00:15:09.680 --> 00:15:13.159
+He has done some LSP work in the Clojure world, too.
+
+00:15:13.160 --> 00:15:17.159
+What was the last name? What was Eric's last name?
+
+00:15:17.160 --> 00:15:23.919
+Eric Dallo, D-A-L-L-O. Yeah.
+
+00:15:23.920 --> 00:15:31.879
+So I think that's a great tool, but I also use another tool
+
+00:15:31.880 --> 00:15:38.919
+that for some reason I forgot to have this interactive way of,
+
+00:15:38.920 --> 00:15:43.599
+because I think they are developing that feature too,
+
+00:15:43.600 --> 00:15:46.439
+but I have another LLM that has support
+
+00:15:46.440 --> 00:15:50.599
+for requests and callbacks basically.
+
+00:15:50.600 --> 00:15:53.799
+So you can do something programmatically.
+
+00:15:53.800 --> 00:15:55.919
+So that's how I've solved my LLM thing
+
+00:15:55.920 --> 00:16:00.759
+where I select some Python variables
+
+00:16:00.760 --> 00:16:05.599
+and tell the LLM to populate it with some fake data
+
+00:16:05.600 --> 00:16:08.879
+so I can send that to the REPL.
+
+00:16:08.880 --> 00:16:11.479
+But for some reason, I forgot the name of it.
+
+00:16:11.480 --> 00:16:29.859
+I can look it up. Just give me one minute, sorry.
+
+00:16:29.860 --> 00:16:35.559
+Oh yeah, gptel, that's that's the name of the other tool
+
+00:16:35.560 --> 00:16:37.879
+which is also a good tool, yeah,
+
+00:16:37.880 --> 00:16:41.279
+but ECA is more like a chat companion
+
+00:16:41.280 --> 00:16:46.679
+and this, you can also tell it to write code and things like that,
+
+00:16:46.680 --> 00:16:51.679
+but I mostly use it for reviews and research
+
+00:16:51.680 --> 00:16:53.739
+and asking questions
+
+00:16:53.740 --> 00:16:57.544
+because I want to... My...
+
+00:16:57.545 --> 00:17:00.279
+I don't have a problem with typing code.
+
+00:17:00.280 --> 00:17:01.919
+I don't think that slows me down,
+
+00:17:01.920 --> 00:17:05.639
+but maybe getting some quick feedback
+
+00:17:05.640 --> 00:17:07.479
+on the actual work that I'm doing,
+
+00:17:07.480 --> 00:17:08.999
+that's what I'm using LLM for,
+
+00:17:09.000 --> 00:17:13.519
+on LLM for two, mostly today. That really hits for me.
+
+00:17:13.520 --> 00:17:15.199
+[Corwin]: I don't mind typing either.
+
+00:17:15.200 --> 00:17:18.479
+I think somehow having things be so simple
+
+00:17:18.480 --> 00:17:20.879
+and in many cases just automated,
+
+00:17:20.880 --> 00:17:22.719
+Emacs just does the right thing.
+
+00:17:22.720 --> 00:17:26.519
+It makes me hungry to type. I want to type more.
+
+00:17:26.520 --> 00:17:28.559
+It feels like every keystroke does a little more.
+
+00:17:28.560 --> 00:17:33.519
+Speaking of evangelism, thank you. Thank you
+
+00:17:33.520 --> 00:17:35.599
+pop up for the for the question.
+
+00:17:35.600 --> 00:17:39.439
+I'm just going to peek one more time through
+
+00:17:39.440 --> 00:17:41.159
+and I don't see a backlog.
+
+00:17:41.160 --> 00:17:44.519
+There are a couple more comments here
+
+00:17:44.520 --> 00:17:49.319
+linking to the ECA Emacs and gptel.
+
+00:17:49.320 --> 00:17:52.239
+Comment also saying very cool setup.
+
+00:17:52.240 --> 00:17:56.959
+So I suppose I'll hand it over to you
+
+00:17:56.960 --> 00:17:59.319
+if you have kind of final thoughts or
+
+00:17:59.320 --> 00:18:02.079
+additional wisdoms you want to share
+
+00:18:02.080 --> 00:18:03.974
+I really appreciate your taking the time
+
+00:18:03.975 --> 00:18:05.399
+to prepare this presentation
+
+00:18:05.400 --> 00:18:08.741
+especially to do the live Q&A with us.
+
+NOTE Wrapping up
+
+00:18:08.742 --> 00:18:12.988
+[David]: Thank you. I haven't anything more than that
+
+00:18:12.989 --> 00:18:19.479
+I will of course continue evolving my setup,
+
+00:18:19.480 --> 00:18:21.359
+because there's new tools
+
+00:18:21.360 --> 00:18:24.759
+and maybe new ideas also coming up.
+
+00:18:24.760 --> 00:18:28.719
+What I'm aiming for in Python development
+
+00:18:28.720 --> 00:18:30.479
+is the great developer experience
+
+00:18:30.480 --> 00:18:34.519
+of what's called Lisp programming, basically.
+
+00:18:34.520 --> 00:18:41.699
+So that's what I'm aiming at for Python too.
+
+00:18:41.700 --> 00:18:44.359
+Thank you. Thank you so much.
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--answers.vtt b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.vtt
new file mode 100644
index 00000000..81066917
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.vtt
@@ -0,0 +1,1131 @@
+WEBVTT
+
+NOTE Q: Is there scope for integrating the C library into Emacs itself with muPDF becoming an optional dependency?
+
+00:00:00.000 --> 00:00:01.479
+The first question,
+
+00:00:01.480 --> 00:00:03.599
+and I'm reading from the etherpad here,
+
+00:00:03.600 --> 00:00:05.519
+is there a scope for integrating
+
+00:00:05.520 --> 00:00:07.839
+the C library to Emacs itself
+
+00:00:07.840 --> 00:00:13.159
+with MuPDF becoming an optional dependency?
+
+00:00:13.160 --> 00:00:18.719
+Right, so integrating the C library into Emacs itself
+
+00:00:18.720 --> 00:00:24.359
+is like having MuPDF inside Emacs source tree.
+
+00:00:24.360 --> 00:00:27.999
+I don't think Emacs devs would be inclined to do that,
+
+00:00:28.000 --> 00:00:30.079
+and I don't think we really need it.
+
+00:00:30.080 --> 00:00:33.039
+Um, I think as it is, uh, Emacs
+
+00:00:33.040 --> 00:00:36.439
+with docview needs mutool, which is something you need
+
+00:00:36.440 --> 00:00:38.919
+to install from MuPDF anyways.
+
+00:00:38.920 --> 00:00:42.599
+So, um, I think it is almost expected
+
+00:00:42.600 --> 00:00:46.279
+that you install MuPDF from system package manager.
+
+00:00:46.280 --> 00:00:49.119
+Um, and I think that as it is, is better
+
+00:00:49.120 --> 00:00:50.999
+because we don't really need to have
+
+00:00:51.000 --> 00:00:53.439
+a whole PDF engine inside Emacs.
+
+00:00:53.440 --> 00:00:59.879
+Next question also from the pad,
+
+NOTE Q: The dynamic modules sound great, and it's amazing they're there since 2017. Why is it so slow to take off, do you think? Is there prior art with them?
+
+00:00:59.880 --> 00:01:01.759
+the dynamic modules sound great,
+
+00:01:01.760 --> 00:01:06.639
+and it's amazing that they've been there since 2017.
+
+00:01:06.640 --> 00:01:09.839
+Why do you think they've been slowly
+
+00:01:09.840 --> 00:01:11.559
+so slow to get adopted?
+
+00:01:11.560 --> 00:01:14.279
+Is there a prior art with them? Right?
+
+00:01:14.280 --> 00:01:16.359
+That's a good question.
+
+00:01:16.360 --> 00:01:22.119
+Actually, I think one of the reasons is that
+
+00:01:22.120 --> 00:01:24.919
+most of the time, I think people love Emacs
+
+00:01:24.920 --> 00:01:27.519
+because they can do so much with Elisp.
+
+00:01:27.520 --> 00:01:28.919
+I think certainly there is a bias
+
+00:01:28.920 --> 00:01:31.319
+towards trying to do things with Elisp.
+
+00:01:31.320 --> 00:01:35.039
+I think there's only a sort of specific class of problems
+
+00:01:35.040 --> 00:01:36.879
+that you can solve with dynamic modules,
+
+00:01:36.880 --> 00:01:40.879
+such as this, where you want to use a native library
+
+00:01:40.880 --> 00:01:44.239
+to do something in a faster, better way.
+
+00:01:44.240 --> 00:01:48.959
+I use that quite a lot.
+
+00:01:48.960 --> 00:01:53.319
+There's of course libvterm, which uses a dynamic module
+
+00:01:53.320 --> 00:01:55.119
+and it does it really well.
+
+00:01:55.120 --> 00:02:00.439
+And I think there's another one, a plotting library
+
+00:02:00.440 --> 00:02:05.879
+or package in Emacs that was using something from Python.
+
+00:02:05.880 --> 00:02:07.879
+So, dynamic modules are good,
+
+00:02:07.880 --> 00:02:10.039
+but I think they don't really come
+
+00:02:10.040 --> 00:02:13.974
+to the surface level packages, your day-to-day packages,
+
+00:02:13.975 --> 00:02:17.359
+because most of the day-to-day packages that we use in Emacs
+
+00:02:17.360 --> 00:02:20.879
+can be done with Elisp. So, unless you really need
+
+00:02:20.880 --> 00:02:23.199
+something system-level efficient,
+
+00:02:23.200 --> 00:02:29.519
+Most of the time, you don't want to write C or C++ or something.
+
+00:02:29.520 --> 00:02:34.919
+But there is actually a really nice Rust crate for native modules,
+
+00:02:34.920 --> 00:02:37.239
+and there's a really nice Haskell package.
+
+00:02:37.240 --> 00:02:39.879
+So there's actually really good support
+
+00:02:39.880 --> 00:02:41.279
+for multiple languages.
+
+00:02:41.280 --> 00:02:45.799
+So it's there, it's just not used as much. Yeah.
+
+00:02:45.800 --> 00:02:47.039
+So what you're saying is
+
+00:02:47.040 --> 00:02:51.279
+if Elisp weren't so simple to learn and easy to use
+
+00:02:51.280 --> 00:02:52.879
+and so fully featured,
+
+00:02:52.880 --> 00:02:54.959
+we'd get a lot more mileage
+
+00:02:54.960 --> 00:02:57.799
+out of this super cool dynamic module feature.
+
+00:02:57.800 --> 00:03:02.159
+Yeah. Cool I'll take I'll bring in the next question.
+
+NOTE Q: How is pdf-tools difficult to install? I install it using the built in package manager.
+
+00:03:02.160 --> 00:03:07.399
+How difficult is PDF-tools to install?
+
+00:03:07.400 --> 00:03:10.439
+The questioner is installing it
+
+00:03:10.440 --> 00:03:12.519
+using the built-in package manager.
+
+00:03:12.520 --> 00:03:16.679
+Looking at the Emacs reader installation instructions,
+
+00:03:16.680 --> 00:03:18.479
+it doesn't necessarily cover
+
+00:03:18.480 --> 00:03:20.399
+how to install that easily.
+
+00:03:20.400 --> 00:03:25.679
+Person is not using use-package or straight. Okay.
+
+00:03:25.680 --> 00:03:27.959
+Oh, and they say that you didn't
+
+00:03:27.960 --> 00:03:32.439
+catch much of this in the presentation.
+
+00:03:32.440 --> 00:03:35.079
+Okay, so you want me to skip that or should I answer?
+
+00:03:35.080 --> 00:03:38.159
+It's your choice. If you would like to say more.
+
+00:03:38.160 --> 00:03:40.519
+Yeah, I think just as a thing,
+
+00:03:40.520 --> 00:03:43.319
+the reason I said pdf-tools is difficult
+
+00:03:43.320 --> 00:03:45.839
+is pdf-tools has a huge list of dependencies.
+
+00:03:45.840 --> 00:03:47.639
+The only thing Emacs Reader depends
+
+00:03:47.640 --> 00:03:50.599
+on is MuPDF, nothing else. There's a single dependency.
+
+00:03:50.600 --> 00:03:54.479
+pdf-tools depends on a lot of things
+
+00:03:54.480 --> 00:03:57.759
+and they have their own server,
+
+00:03:57.760 --> 00:04:00.039
+which is packaged as a system package,
+
+00:04:00.040 --> 00:04:02.359
+which you don't really find everywhere.
+
+00:04:02.360 --> 00:04:05.039
+And there's like systems, the GNU/Linux systems
+
+00:04:05.040 --> 00:04:07.359
+where the package is very difficult to build
+
+00:04:07.360 --> 00:04:10.079
+because of so many dependencies.
+
+00:04:10.080 --> 00:04:13.159
+So my goal was to sort of reduce
+
+00:04:13.160 --> 00:04:14.839
+the number of dependencies.
+
+00:04:14.840 --> 00:04:19.559
+And then right now it's sort of a key
+
+00:04:19.560 --> 00:04:21.119
+to install Emacs Reader.
+
+00:04:21.120 --> 00:04:23.319
+Once we go to GNU ELPA, it's just
+
+00:04:23.320 --> 00:04:25.999
+going to be Emacs package-install, just that.
+
+00:04:26.000 --> 00:04:27.919
+Right now you have to do package :vc
+
+00:04:27.920 --> 00:04:30.223
+a bit.
+
+00:04:30.224 --> 00:04:32.359
+Boy, we get spoiled as
+
+00:04:32.360 --> 00:04:35.359
+Emacs users. Everything just gets so easy
+
+00:04:35.360 --> 00:04:37.959
+for us. It's like an IDE for our
+
+00:04:37.960 --> 00:04:41.200
+whole machine.
+
+NOTE Q: What tool(s) did you use to measure the memory usage between the three packages?
+
+00:04:41.201 --> 00:04:44.839
+What tools did you use to measure the
+
+00:04:44.840 --> 00:04:48.879
+memory usage between the three packages?
+
+00:04:48.880 --> 00:04:50.119
+Yeah, that's a good question.
+
+00:04:50.120 --> 00:04:54.799
+So during my development, I used mostly for debugging
+
+00:04:54.800 --> 00:05:00.119
+purposes Valgrind. So Valgrind is a a set of suite
+
+00:05:00.120 --> 00:05:01.559
+of debugging tools.
+
+00:05:01.560 --> 00:05:03.799
+And one of the tools that it has is Massif.
+
+00:05:03.800 --> 00:05:08.919
+It's a heap analyzer, heap profiler.
+
+00:05:08.920 --> 00:05:10.839
+So Valgrind plus Massif,
+
+00:05:10.840 --> 00:05:14.119
+and then there's a KDE package
+
+00:05:14.120 --> 00:05:15.759
+called Massif-Visualizer.
+
+00:05:15.760 --> 00:05:19.839
+So I first get the Massif output using Valgrind,
+
+00:05:19.840 --> 00:05:23.159
+and then put that output into Massif Visualizer.
+
+00:05:23.160 --> 00:05:24.519
+That gives me the grasp.
+
+00:05:24.520 --> 00:05:28.599
+Are there Emacs integrations for those components at all?
+
+00:05:28.600 --> 00:05:30.279
+Does Valgrind have them?
+
+00:05:30.280 --> 00:05:32.399
+I don't think so. I don't think so.
+
+00:05:32.400 --> 00:05:37.319
+There's, yeah, there's I think a few packages
+
+00:05:37.320 --> 00:05:38.879
+which do something with Massif,
+
+00:05:38.880 --> 00:05:42.159
+but I don't think like they're maintained.
+
+00:05:42.160 --> 00:05:47.759
+Yeah. Gotcha. Cool. Awesome opportunity
+
+00:05:47.760 --> 00:05:49.399
+there for someone spunky.
+
+NOTE Q: How is the conversion between ELisp and the foreign language type system done? For example when interfacing with a C++ library that makes heavy use of C++ object system and templates?
+
+00:05:49.400 --> 00:05:55.399
+How is conversion between Elisp and foreign language types?
+
+00:05:55.400 --> 00:05:59.039
+For example, when interfacing with the C++ library
+
+00:05:59.040 --> 00:06:03.439
+that makes heavy use of the C++ object system and templates.
+
+00:06:03.440 --> 00:06:05.879
+Yeah, that's a good question.
+
+00:06:05.880 --> 00:06:10.519
+So the go-to answer is the blog post that I wrote,
+
+00:06:10.520 --> 00:06:12.199
+which is an extensive explanation
+
+00:06:12.200 --> 00:06:14.679
+on how the internals of dynamic modules work.
+
+00:06:14.680 --> 00:06:21.119
+The short answer is that basically what happens
+
+00:06:21.120 --> 00:06:24.639
+is anything that is compatible with C-ABI
+
+00:06:24.640 --> 00:06:27.759
+When you compile that language code,
+
+00:06:27.760 --> 00:06:33.559
+so when I compile C++ code, I would have a particular API.
+
+00:06:33.560 --> 00:06:35.799
+So we have a dynamic module API,
+
+00:06:35.800 --> 00:06:39.119
+which is the emacs-module.h, the file that I showed.
+
+00:06:39.120 --> 00:06:45.799
+You have to put that into your C++ package program
+
+00:06:45.800 --> 00:06:48.679
+and then link it to...
+
+00:06:48.680 --> 00:06:51.119
+So emacs-module.h is basically going to...
+
+00:06:51.120 --> 00:06:56.799
+like use things in your Emacs installation
+
+00:06:56.800 --> 00:07:04.359
+to interact with this C++ language. So it's basically FFI.
+
+00:07:04.360 --> 00:07:10.959
+And what this gives you is that you can have things in C++.
+
+00:07:10.960 --> 00:07:13.119
+So let's say you want to do multi-threading
+
+00:07:13.120 --> 00:07:15.279
+the way I did system level multi-threading.
+
+00:07:15.280 --> 00:07:20.519
+You can have C++ be responsible for the multi-threading.
+
+00:07:20.520 --> 00:07:22.999
+but you want the output
+
+00:07:23.000 --> 00:07:24.879
+of the multithreading to go into Emacs.
+
+00:07:24.880 --> 00:07:29.039
+So then you write like a piece of C++ function,
+
+00:07:29.040 --> 00:07:31.879
+which is going to be a dynamic module function.
+
+00:07:31.880 --> 00:07:32.919
+A dynamic module function
+
+00:07:32.920 --> 00:07:34.959
+is written in the language that you target,
+
+00:07:34.960 --> 00:07:37.359
+that is C++ or C or Rust.
+
+00:07:37.360 --> 00:07:40.759
+And then that is going to be compiled
+
+00:07:40.760 --> 00:07:43.279
+into a share library like .so,
+
+00:07:43.280 --> 00:07:46.439
+shared object, and then that shared object
+
+00:07:46.440 --> 00:07:50.639
+is going to be loaded into Emacs system using require.
+
+00:07:50.640 --> 00:07:53.119
+So when I do require render core
+
+00:07:53.120 --> 00:07:54.799
+in one of the slides that I showed,
+
+00:07:54.800 --> 00:07:58.439
+I'm basically loading that shared object,
+
+00:07:58.440 --> 00:08:00.516
+and that shared object already has
+
+00:08:00.517 --> 00:08:03.879
+the compiled dynamic module functions and so on.
+
+00:08:03.880 --> 00:08:07.079
+But my blog will explain that better.
+
+00:08:07.080 --> 00:08:09.999
+Gotcha. I thought that was pretty clear.
+
+00:08:10.000 --> 00:08:12.199
+I'm looking forward to seeing that blog post
+
+00:08:12.200 --> 00:08:13.919
+and understanding what I glossed over
+
+00:08:13.920 --> 00:08:15.879
+trying to understand from that explanation.
+
+00:08:15.880 --> 00:08:17.279
+That was great.
+
+NOTE Q: Can one look at pdf metadata with emacs-reader? Can annotations be added? Does it understand forms? Can it handle encrypted pdfs?
+
+00:08:17.280 --> 00:08:22.840
+Can one look at PDF metadata with Emacs Reader?
+
+00:08:22.880 --> 00:08:26.199
+Can you do annotations? Does it understand forms?
+
+00:08:26.200 --> 00:08:29.959
+Can it handle encrypted PDFs?
+
+00:08:29.960 --> 00:08:33.159
+In other words, I think reading between the lines,
+
+00:08:33.160 --> 00:08:34.279
+wow, this is awesome.
+
+00:08:34.280 --> 00:08:39.199
+Is there anything I can't do? You're right.
+
+00:08:39.200 --> 00:08:44.119
+So Emacs Reader will be able to do all of those things.
+
+00:08:44.120 --> 00:08:48.359
+It can do annotations. It will be able to do forms.
+
+00:08:48.360 --> 00:08:52.279
+And we have an issue open for interpret PDFs.
+
+00:08:52.280 --> 00:08:54.839
+The thing is, right now we are struggling with
+
+00:08:54.840 --> 00:08:58.759
+making Emacs Reader be very efficient
+
+00:08:58.760 --> 00:09:02.679
+in terms of highlighting and text selection
+
+00:09:02.680 --> 00:09:05.519
+because of the challenges that I mentioned in the slides,
+
+00:09:05.520 --> 00:09:07.959
+so it will be able to do all that.
+
+00:09:07.960 --> 00:09:10.959
+Once we tackle the basic features
+
+00:09:10.960 --> 00:09:18.599
+down in an efficient manner. Gotcha. Um.
+
+00:09:18.600 --> 00:09:24.119
+Comment or questioner says,
+
+00:09:24.120 --> 00:09:28.799
+I installed Emacs Reader already. It is as promised. Great job.
+
+NOTE Q: How can I associate ODT files to open with emacs-reader?
+
+00:09:28.800 --> 00:09:34.879
+How can I associate ODT files to open with Emacs Reader?
+
+00:09:34.880 --> 00:09:37.939
+You don't really need to do anything.
+
+00:09:37.940 --> 00:09:40.599
+You should be just able to do find file,
+
+00:09:40.600 --> 00:09:42.959
+C-x C-f and open.
+
+00:09:42.960 --> 00:09:45.319
+And it should open with Emacs Reader
+
+00:09:45.320 --> 00:09:47.759
+because we have an auto mode list,
+
+00:09:47.760 --> 00:09:51.679
+a list that takes an ODT file
+
+00:09:51.680 --> 00:09:53.199
+and opens it with reader mode.
+
+00:09:53.200 --> 00:09:55.639
+So you should just be able to do find file.
+
+00:09:55.640 --> 00:09:56.879
+If you're not able to do that,
+
+00:09:56.880 --> 00:09:58.199
+you should open a bug report.
+
+00:09:58.200 --> 00:10:00.759
+And I'll just mention
+
+00:10:00.760 --> 00:10:03.239
+we've got about 10 minutes left of our live Q&A,
+
+00:10:03.240 --> 00:10:06.079
+but if you're watching the stream,
+
+00:10:06.080 --> 00:10:08.439
+it's possible that we'll just keep going.
+
+00:10:08.440 --> 00:10:10.799
+The questions just keep coming, which I just love that.
+
+00:10:10.800 --> 00:10:14.519
+So feel free to join the BBB link
+
+00:10:14.520 --> 00:10:17.439
+that should have shown in the IRC chat.
+
+00:10:17.440 --> 00:10:21.559
+Jump in and we can take questions
+
+00:10:21.560 --> 00:10:25.999
+as long as Divya has steam for that.
+
+NOTE Q: If a pdf file is open in emacs-reader and I regenerate the pdf with some changes, does emacs-reader actually refresh the pdf on its own or do I have to reload the pdf?
+
+00:10:26.000 --> 00:10:30.439
+If a PDF file is open in Emacs Reader
+
+00:10:30.440 --> 00:10:33.199
+and I reintegrate the PDF with some changes,
+
+00:10:33.200 --> 00:10:36.519
+does the Emacs Reader refresh the PDF on its own
+
+00:10:36.520 --> 00:10:38.919
+or do I reload it?
+
+00:10:38.920 --> 00:10:41.319
+Right, that's also a really good question.
+
+00:10:41.320 --> 00:10:44.599
+So one answer is that it depends on
+
+00:10:44.600 --> 00:10:46.079
+how you change the PDF.
+
+00:10:46.080 --> 00:10:50.839
+So for example, if I just replaced the PDF
+
+00:10:50.840 --> 00:10:52.639
+with something else of the same name,
+
+00:10:52.640 --> 00:10:55.799
+Emacs will update it immediately.
+
+00:10:55.800 --> 00:10:57.919
+If you have auto revert mode on,
+
+00:10:57.920 --> 00:10:59.119
+it'll just revert the buffer
+
+00:10:59.120 --> 00:11:01.879
+and it'll reload the PDF really nicely.
+
+00:11:01.880 --> 00:11:05.439
+But if you're doing it something like LaTeX,
+
+00:11:05.440 --> 00:11:07.399
+where you're writing something in LaTeX
+
+00:11:07.400 --> 00:11:10.519
+and LaTeX is continuously producing the PDF,
+
+00:11:10.520 --> 00:11:13.279
+that needs SyncTeX integration.
+
+00:11:13.280 --> 00:11:16.159
+Because LaTeX, while it's producing the PDF,
+
+00:11:16.160 --> 00:11:19.159
+it does a lot of funky things.
+
+00:11:19.160 --> 00:11:24.519
+It does not provide a sort of renderable PDF all the time.
+
+00:11:24.520 --> 00:11:28.679
+So Emacs will sort of crash trying to
+
+00:11:28.680 --> 00:11:31.679
+basically render a PDF that is not ready yet.
+
+00:11:31.680 --> 00:11:34.799
+So we need SyncTex to sync
+
+00:11:34.800 --> 00:11:37.279
+with LaTeX to do that really nice.
+
+00:11:37.280 --> 00:11:39.559
+Okay, so we have to do some care
+
+00:11:39.560 --> 00:11:41.319
+and feeding of the exact timing
+
+00:11:41.320 --> 00:11:46.879
+if we have more of a continuous behind the curtains, so to speak.
+
+00:11:46.880 --> 00:11:49.752
+That makes a lot of sense to me.
+
+NOTE Q: What are the challenges with integrating with SyncTeX and AucTeX? This would be great to see as pdf-tools handles this well.
+
+00:11:49.753 --> 00:11:50.959
+What are the challenges
+
+00:11:50.960 --> 00:11:55.719
+with integrating SyncTeX and AucTeX?
+
+00:11:55.720 --> 00:12:01.459
+This would be great to see as pdf-tools handles this well.
+
+00:12:01.460 --> 00:12:02.319
+Yeah, yeah.
+
+00:12:02.320 --> 00:12:04.399
+So, we have SyncTeX and AucTeX planned.
+
+00:12:04.400 --> 00:12:06.839
+I don't really see any major obstacles
+
+00:12:06.840 --> 00:12:08.679
+for doing that, to be very honest.
+
+00:12:08.680 --> 00:12:11.519
+I think we can do it in a much simpler way
+
+00:12:11.520 --> 00:12:12.479
+than pdf-tools does.
+
+00:12:12.480 --> 00:12:17.479
+The only reason we haven't done it yet is because, again,
+
+00:12:17.480 --> 00:12:20.479
+we have more important highlighting
+
+00:12:20.480 --> 00:12:24.399
+and text selection and those features planned,
+
+00:12:24.400 --> 00:12:32.919
+but it's anticipated. Yeah. All right. This next question
+
+00:12:32.920 --> 00:12:35.008
+I love your presentation.
+
+NOTE Q: Will you be giving another talk on the architecture you went over? A deep-dive there would be awesome.
+
+00:12:35.009 --> 00:12:36.439
+Will you be giving another talk
+
+00:12:36.440 --> 00:12:38.193
+on the architecture you went over?
+
+00:12:38.194 --> 00:12:40.424
+A deep dive on that would be awesome.
+
+00:12:40.425 --> 00:12:44.919
+That would be awesome. I'm not sure if an EmacsConf talk
+
+00:12:44.920 --> 00:12:48.479
+will be appropriate for this, but I do stream bi-weekly.
+
+00:12:48.480 --> 00:12:52.599
+So you're always welcome to come on my stream and ask,
+
+00:12:52.600 --> 00:12:55.359
+and I would be very happy to go deep into this.
+
+00:12:55.360 --> 00:12:58.119
+I'm looking forward to catching that myself.
+
+00:12:58.120 --> 00:12:59.764
+Thank you for the shout.
+
+NOTE Q: Is there search functionality? Something like isearch and occur?
+
+00:12:59.765 --> 00:13:02.639
+Is there search functionality,
+
+00:13:02.640 --> 00:13:05.319
+something like isearch and occur?
+
+00:13:05.320 --> 00:13:07.599
+Yeah, we don't really have it,
+
+00:13:07.600 --> 00:13:09.599
+but this is the most immediate feature
+
+00:13:09.600 --> 00:13:10.959
+after we have text selection.
+
+00:13:10.960 --> 00:13:12.399
+So once we have text selection,
+
+00:13:12.400 --> 00:13:14.359
+once we're able to select the text,
+
+00:13:14.360 --> 00:13:17.679
+then we can have isearch so that it can highlight the text.
+
+00:13:17.680 --> 00:13:26.679
+Yeah. Um, all right. And then, um, there's, I'm just gonna,
+
+00:13:26.680 --> 00:13:28.799
+I'll read out this question
+
+00:13:28.800 --> 00:13:30.639
+and then I have to do a little bookkeeping on the pad.
+
+NOTE Q: Does dynamic module prevent customization that Elisp usually provide? (Advices, Hooks, etc).
+
+00:13:30.640 --> 00:13:35.639
+Does the dynamic module prevent customization
+
+00:13:35.640 --> 00:13:39.999
+that Emacs usually provides advice, hooks, et cetera,
+
+00:13:40.000 --> 00:13:44.359
+or does everything just kind of...
+
+00:13:44.360 --> 00:13:46.559
+No, if you have a dynamic module,
+
+00:13:46.560 --> 00:13:49.279
+it doesn't limit you into doing anything.
+
+00:13:49.280 --> 00:13:52.839
+You can do everything on the Elisp side that you want,
+
+00:13:52.840 --> 00:13:55.719
+and you only take care of certain things
+
+00:13:55.720 --> 00:13:56.879
+on the dynamic module side.
+
+00:13:56.880 --> 00:13:57.999
+If you're asking whether
+
+00:13:58.000 --> 00:14:01.879
+you can do advices, hooks, and all of that
+
+00:14:01.880 --> 00:14:03.879
+on the dynamic module itself,
+
+00:14:03.880 --> 00:14:05.679
+from the dynamic module itself,
+
+00:14:05.680 --> 00:14:09.719
+that's a bit tricky because something like
+
+00:14:09.720 --> 00:14:13.999
+calling a macro or doing macros and dynamic modules
+
+00:14:14.000 --> 00:14:18.119
+is not really that nice. You have to pretty much manually
+
+00:14:18.120 --> 00:14:21.359
+expand the macro yourself in the dynamic module,
+
+00:14:21.360 --> 00:14:23.839
+so if you want to do it from the dynamic module,
+
+00:14:23.840 --> 00:14:25.959
+there's not much support right now,
+
+00:14:25.960 --> 00:14:29.479
+but you can do everything on the elisp side
+
+00:14:29.480 --> 00:14:33.399
+without touching the dynamic module. Got it.
+
+00:14:33.400 --> 00:14:38.279
+So those are the questions that I see.
+
+00:14:38.280 --> 00:14:39.999
+I'm just going to take a quick peek,
+
+00:14:40.000 --> 00:14:42.639
+but let me invite you if you want to.
+
+00:14:42.640 --> 00:14:45.999
+We've got just about 5 minutes left
+
+00:14:46.000 --> 00:14:48.239
+and I will get carried away sometimes
+
+00:14:48.240 --> 00:14:51.279
+and fail to make this invitation before we cut away live,
+
+00:14:51.280 --> 00:14:54.479
+especially if we do keep going a bit.
+
+00:14:54.480 --> 00:14:57.799
+that you have live onto the stream.
+
+00:14:57.800 --> 00:15:02.599
+Of course, you don't have to do that.
+
+00:15:02.600 --> 00:15:05.799
+You said a lot in your presentation.
+
+00:15:05.800 --> 00:15:12.199
+No, I think mostly that's fine.
+
+00:15:12.200 --> 00:15:13.679
+I'm just really happy
+
+00:15:13.680 --> 00:15:17.079
+that people are interested in the package,
+
+00:15:17.080 --> 00:15:19.879
+and I would be glad to have contributors
+
+00:15:19.880 --> 00:15:25.199
+and viewers or anything. That would be nice. Awesome.
+
+00:15:25.200 --> 00:15:28.879
+So here comes one more question,
+
+00:15:28.880 --> 00:15:31.959
+or actually a couple more questions coming in.
+
+NOTE Q: Do you usually create an Elisp shim from the FFI and then use them with Elisp code?
+
+00:15:31.960 --> 00:15:34.239
+Following up on dynamic modules,
+
+00:15:34.240 --> 00:15:38.479
+do you usually create an Elisp shim
+
+00:15:38.480 --> 00:15:40.399
+from foreign function interface
+
+00:15:40.400 --> 00:15:41.559
+and then use them with Elisp?
+
+00:15:41.560 --> 00:15:46.159
+Yeah, so basically how you do is you write,
+
+00:15:46.160 --> 00:15:49.639
+let's say I have a C function
+
+00:15:49.640 --> 00:15:51.399
+that I've written in the dynamic module.
+
+00:15:51.400 --> 00:15:52.879
+It's a dynamic module function.
+
+00:15:52.880 --> 00:15:54.639
+And then when I'm trying to call
+
+00:15:54.640 --> 00:15:56.039
+the dynamic module function,
+
+00:15:56.040 --> 00:15:58.999
+most of the time, I don't call it like that.
+
+00:15:59.000 --> 00:16:01.679
+I wrap it inside a proper Elisp function
+
+00:16:01.680 --> 00:16:03.559
+and then call that Elisp function.
+
+00:16:03.560 --> 00:16:08.279
+So that's how I think it's better to do that because
+
+00:16:08.280 --> 00:16:12.559
+You can take care of certain cases
+
+00:16:12.560 --> 00:16:15.199
+on when you want the dynamic module function to be called.
+
+00:16:15.200 --> 00:16:17.199
+Maybe sometimes you don't want
+
+00:16:17.200 --> 00:16:18.839
+the dynamic module function
+
+00:16:18.840 --> 00:16:19.879
+to be called immediately.
+
+00:16:19.880 --> 00:16:22.159
+So it's better to wrap it.
+
+00:16:22.160 --> 00:16:26.599
+Yeah. Okay. So timing issues. Yeah.
+
+00:16:26.600 --> 00:16:31.679
+For the purposes of managing timing issues,
+
+00:16:31.680 --> 00:16:34.319
+that elisp shim is preferred.
+
+00:16:34.320 --> 00:16:38.959
+Yeah. Makes sense. Um.
+
+00:16:38.960 --> 00:16:44.639
+Uh, so question here
+
+NOTE Q: Is searching on the roadmap? Or is it already available as a feature?
+
+00:16:44.640 --> 00:16:47.439
+is searching... The person is searching for a roadmap.
+
+00:16:47.440 --> 00:16:49.279
+Is that already available as a feature?
+
+00:16:49.280 --> 00:16:52.239
+Searching is on the roadmap.
+
+00:16:52.240 --> 00:16:56.559
+It is not available yet as a feature, but it's on priority.
+
+00:16:56.560 --> 00:16:59.839
+I think you may have may have touched on that.
+
+00:16:59.840 --> 00:17:06.559
+Sorry. All right. Those are the questions that I see.
+
+00:17:06.560 --> 00:17:08.279
+We've got just a couple of minutes.
+
+00:17:08.280 --> 00:17:10.399
+I'm not sure if you have more you wanted to say,
+
+00:17:10.400 --> 00:17:13.719
+but I have to say how much I appreciate your talk,
+
+00:17:13.720 --> 00:17:16.119
+especially you jumping in live with us
+
+00:17:16.120 --> 00:17:19.079
+and just taking everything on the fly.
+
+00:17:19.080 --> 00:17:24.559
+I think this is a big part of what adds the energy,
+
+00:17:24.560 --> 00:17:28.039
+you in particular, just really dynamic speaker.
+
+00:17:28.040 --> 00:17:31.479
+Thank you. Thank you. Thank you. I enjoyed it as well.
+
+00:17:31.480 --> 00:17:37.159
+A person is, and I think this may have been touched on already,
+
+00:17:37.160 --> 00:17:39.439
+but let's maybe get into it more specifically.
+
+00:17:39.440 --> 00:17:42.159
+We've said that search is kind of
+
+00:17:42.160 --> 00:17:44.719
+a next up type of feature as things,
+
+00:17:44.720 --> 00:17:48.159
+as the current iteration stabilizes.
+
+NOTE Q: Will there be occur-like searching?
+
+00:17:48.160 --> 00:17:52.239
+Question was, you know, occur like, how would you?
+
+00:17:52.240 --> 00:17:56.159
+Totally. There will be occur searches.
+
+00:17:56.160 --> 00:17:59.639
+There will be isearch enabled, isearch.
+
+00:17:59.640 --> 00:18:02.879
+used to with PDF tools,
+
+00:18:02.880 --> 00:18:06.439
+we would be like parity with the features,
+
+00:18:06.440 --> 00:18:08.719
+all the features that you're used to with PDF tools.
+
+00:18:08.720 --> 00:18:12.599
+Um, so, uh, certainly occur anything
+
+00:18:12.600 --> 00:18:15.679
+that is important in Emacs with text
+
+00:18:15.680 --> 00:18:17.359
+and that can be done with PDFs.
+
+00:18:17.360 --> 00:18:19.839
+We really want to do that because, um,
+
+00:18:19.840 --> 00:18:22.679
+I want the package to be as knitted
+
+00:18:22.680 --> 00:18:24.959
+into Emacs ecosystem as possible.
+
+00:18:24.960 --> 00:18:28.159
+Okay. We'll see if we can get in this last question here.
+
+NOTE Q: What is your timing expectation for it to appear on ELPA?
+
+00:18:28.160 --> 00:18:30.319
+Do you have a timing expectation for ELPA?
+
+00:18:30.320 --> 00:18:33.199
+Uh, yeah, next major release essentially.
+
+00:18:33.200 --> 00:18:35.279
+So next major release is most likely
+
+00:18:35.280 --> 00:18:37.319
+going to be within a month or two.
+
+00:18:37.320 --> 00:18:39.639
+So once we have the next major release, we're going to be.
+
+00:18:39.640 --> 00:18:43.479
+Uh, timing couldn't be more perfect.
+
+00:18:43.480 --> 00:18:45.519
+Maybe this is a good, good point to break.
+
+00:18:45.520 --> 00:18:47.759
+We'll be cutting away to the next talk
+
+00:18:47.760 --> 00:18:48.879
+in just a couple of minutes.
+
+00:18:48.880 --> 00:18:51.479
+So let me say one more time how much
+
+00:18:51.480 --> 00:18:52.959
+on behalf of all the attendees
+
+00:18:52.960 --> 00:18:54.959
+and all the volunteers and all everybody,
+
+00:18:54.960 --> 00:18:57.079
+um, how much we appreciate your talks
+
+00:18:57.080 --> 00:19:01.299
+and, uh, your awesome contribution to the Emacs world.
+
+00:19:01.300 --> 00:19:02.766
+Thanks, Corwin.
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--answers.vtt b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.vtt
new file mode 100644
index 00000000..e41b3dd1
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.vtt
@@ -0,0 +1,1034 @@
+WEBVTT
+
+NOTE Q: Have you try ivy-bibtex/bibtex-completion.el, how it compares to ebib?
+
+00:00:00.000 --> 00:00:01.381
+So the first question,
+
+00:00:01.382 --> 00:00:05.461
+have you tried ivy-bibtex or bibtex-completion earlier
+
+00:00:05.462 --> 00:00:06.524
+and how it compares to eBib?
+
+00:00:06.525 --> 00:00:09.941
+Well, I would say that I use both.
+
+00:00:09.942 --> 00:00:14.901
+I don't think there is very much a comparison
+
+00:00:14.902 --> 00:00:18.661
+because for me, they're achieving different goals.
+
+00:00:18.662 --> 00:00:24.501
+When I want to just very quickly find the paper
+
+00:00:24.502 --> 00:00:28.621
+in the entirety of the literature,
+
+00:00:28.622 --> 00:00:34.701
+I can just go here and open ivy-bibtex and see it.
+
+00:00:34.702 --> 00:00:36.661
+Bibtex now needs to parse my bib files,
+
+00:00:36.662 --> 00:00:38.781
+so it may take a second.
+
+00:00:38.782 --> 00:00:41.581
+Yeah, so if I want to just search, I'll do this.
+
+00:00:41.582 --> 00:00:46.461
+If I want a bigger view, then I can open eBib,
+
+00:00:46.462 --> 00:00:49.661
+but I don't use eBib so much as a tool
+
+00:00:49.662 --> 00:00:54.381
+to find just one literature. I use it for other purposes.
+
+00:00:54.382 --> 00:00:58.501
+So I think they're not really mutually exclusive,
+
+00:00:58.502 --> 00:01:00.941
+like you can use both.
+
+00:01:00.942 --> 00:01:04.641
+And they don't think that the features that one provides
+
+00:01:04.642 --> 00:01:08.821
+are something that the other also provides.
+
+00:01:08.822 --> 00:01:13.381
+They're different kind of goals for me.
+
+00:01:13.382 --> 00:01:15.341
+Also, for the answers, is it OK
+
+00:01:15.342 --> 00:01:20.741
+if I don't write anything down and I can just write them
+
+00:01:20.742 --> 00:01:23.741
+After, when I have time, and I'll just talk.
+
+00:01:23.742 --> 00:01:27.861
+Yeah, that's OK. We'll transcribe all the answers later.
+
+00:01:27.862 --> 00:01:32.541
+So you can just go ahead and talk.
+
+NOTE Q: Do you find showing abstract on your navigation panel helpful?
+
+00:01:32.542 --> 00:01:34.301
+And do you find showing abstract
+
+00:01:34.302 --> 00:01:36.661
+on your navigation panel helpful?
+
+00:01:36.662 --> 00:01:38.461
+I always delete the abstract info,
+
+00:01:38.462 --> 00:01:40.421
+and my bib files make things more concise.
+
+00:01:40.422 --> 00:01:44.981
+So for me, I think it is helpful to see the abstract.
+
+00:01:44.982 --> 00:01:50.861
+I think that if you're in a regular screen,
+
+00:01:50.862 --> 00:01:52.941
+you have the space to have that.
+
+00:01:52.942 --> 00:01:57.421
+And yeah, for example, if I go again here,
+
+00:01:57.422 --> 00:02:00.021
+it's kind of indeed a bit more,
+
+00:02:00.022 --> 00:02:01.741
+a bit longer than it can be.
+
+00:02:01.742 --> 00:02:09.341
+And also you find a bigger abstract somewhere.
+
+00:02:09.342 --> 00:02:10.421
+It may be more space,
+
+00:02:10.422 --> 00:02:16.381
+but like, for example, this, yeah, this is a big abstract.
+
+00:02:16.382 --> 00:02:19.181
+And for example, yeah, this takes a bit more space,
+
+00:02:19.182 --> 00:02:23.021
+but I find it easy because the only case
+
+00:02:23.022 --> 00:02:25.901
+where I'm actually looking at this panel
+
+00:02:25.902 --> 00:02:30.581
+and trying to see things is when I'm going to be either,
+
+00:02:30.582 --> 00:02:33.861
+is when I'm going to be trying to find something
+
+00:02:33.862 --> 00:02:37.141
+that I don't remember the title to search immediately.
+
+00:02:37.142 --> 00:02:38.581
+And if you don't remember the title
+
+00:02:38.582 --> 00:02:39.781
+and you're trying to search,
+
+00:02:39.782 --> 00:02:43.261
+the abstract will be a way
+
+00:02:43.262 --> 00:02:49.221
+that helps you search better maybe.
+
+00:02:49.222 --> 00:02:51.701
+and also the other thing they use
+
+00:02:51.702 --> 00:02:54.981
+is also the small little descriptions
+
+00:02:54.982 --> 00:02:59.261
+I add in the note entries to help me
+
+00:02:59.262 --> 00:03:03.381
+but I think that the abstract is nice to be there
+
+00:03:03.382 --> 00:03:05.141
+in case you don't remember
+
+00:03:05.142 --> 00:03:07.541
+to find something from the title
+
+00:03:07.542 --> 00:03:08.581
+or from your notes
+
+00:03:08.582 --> 00:03:10.581
+and just need something more general.
+
+00:03:10.582 --> 00:03:16.621
+So yes it can be large and not always convenient,
+
+00:03:16.622 --> 00:03:20.181
+but I generally like it being there
+
+00:03:20.182 --> 00:03:29.421
+in case I need it for anything. Then the next question.
+
+00:03:29.422 --> 00:03:34.381
+Also, if any question is not fully answered by what I'm saying,
+
+00:03:34.382 --> 00:03:36.941
+feel free to add more to your question
+
+00:03:36.942 --> 00:03:39.501
+and we can discuss more. I don't have a problem.
+
+00:03:39.502 --> 00:03:45.621
+So for the next one, yeah, I copied this from IRC
+
+00:03:45.622 --> 00:03:49.141
+because I prefer to answer it orally
+
+00:03:49.142 --> 00:03:53.261
+because it's a bit longer than the others answering in IRC.
+
+NOTE Q: it seems that there's a meta problem here: too much information. Do your tools reduce cognative load?
+
+00:03:53.262 --> 00:03:55.261
+So it seems that there's a meta problem here.
+
+00:03:55.262 --> 00:03:57.621
+There's too much information.
+
+00:03:57.622 --> 00:04:02.221
+And does this tool reduce the cognitive load?
+
+00:04:02.222 --> 00:04:09.061
+Well, for me, it does reduce the cognitive load because
+
+00:04:09.062 --> 00:04:11.261
+Indeed, there's a lot of information,
+
+00:04:11.262 --> 00:04:18.661
+but that's how managing literature works, essentially.
+
+00:04:18.662 --> 00:04:21.061
+It necessarily has to have a lot of cognitive load,
+
+00:04:21.062 --> 00:04:22.981
+because you are trying to
+
+00:04:22.982 --> 00:04:25.021
+process more information
+
+00:04:25.022 --> 00:04:28.221
+than your brain can process to begin with.
+
+00:04:28.222 --> 00:04:31.301
+So you really need a tool
+
+00:04:31.302 --> 00:04:36.581
+to help you not keep everything in your mind,
+
+00:04:36.582 --> 00:04:40.461
+process the information externally.
+
+00:04:40.462 --> 00:04:44.181
+They do think that the way I do this, for me at least,
+
+00:04:44.182 --> 00:04:49.661
+it does help with reducing cognitive load.
+
+00:04:49.662 --> 00:04:51.061
+Because I'm here, for example,
+
+00:04:51.062 --> 00:04:55.221
+if I'm looking for something, I do not remember,
+
+00:04:55.222 --> 00:05:01.501
+I've read most of these papers not too many months ago,
+
+00:05:01.502 --> 00:05:02.701
+so a lot of them are recent.
+
+00:05:02.702 --> 00:05:06.181
+If I don't look at what I have written for it,
+
+00:05:06.182 --> 00:05:08.821
+I do not remember anything.
+
+00:05:08.822 --> 00:05:11.941
+So indeed, you have this kind of cognitive load
+
+00:05:11.942 --> 00:05:17.341
+that I cannot remember everything.
+
+00:05:17.342 --> 00:05:23.101
+But on the other hand, I think the tool helps
+
+00:05:23.102 --> 00:05:26.861
+because my notes are what keeps, what I want to remember.
+
+00:05:26.862 --> 00:05:30.981
+So it doesn't stay in my mind, it stays in the text.
+
+00:05:30.982 --> 00:05:35.221
+And regarding things like the reading list,
+
+00:05:35.222 --> 00:05:39.021
+I think also for me reduces the cognitive load
+
+00:05:39.022 --> 00:05:42.821
+because I will mostly remember
+
+00:05:42.822 --> 00:05:46.341
+what the papers I have in that list are,
+
+00:05:46.342 --> 00:05:50.901
+but just sorting them by priority helps me
+
+00:05:50.902 --> 00:05:54.621
+Okay, this was the thing I wanted to do next.
+
+00:05:54.622 --> 00:06:00.301
+Oh, sorry. This is the thing I wanted to do next.
+
+00:06:00.302 --> 00:06:02.501
+And I didn't have to remember
+
+00:06:02.502 --> 00:06:03.901
+that this is what I want to do next.
+
+00:06:03.902 --> 00:06:06.821
+I just had it, I saw it there.
+
+00:06:06.822 --> 00:06:11.261
+So for me, it reduces cognitive load,
+
+00:06:11.262 --> 00:06:16.981
+but the problem of too much information is 100% there
+
+00:06:16.982 --> 00:06:19.541
+because there's objectively
+
+00:06:19.542 --> 00:06:21.021
+too much information
+
+00:06:21.022 --> 00:06:23.181
+when you're working with literature
+
+00:06:23.182 --> 00:06:35.221
+that's by nature, and yeah, essentially
+
+00:06:35.222 --> 00:06:36.381
+that's for me the thing
+
+00:06:36.382 --> 00:06:41.141
+that I'm just putting this information elsewhere
+
+00:06:41.142 --> 00:06:44.941
+so I don't have to keep it in my mind.
+
+NOTE Q: When you download a new article, how do you integrate its file to your database? For example, do you move and rename the file manually?
+
+00:06:44.942 --> 00:06:52.421
+Okay, so when you download a new article,
+
+00:06:52.422 --> 00:06:54.941
+how do you integrate the file to the database?
+
+00:06:54.942 --> 00:06:58.261
+So, for example, do you remove
+
+00:06:58.262 --> 00:06:59.741
+and rename the file manually?
+
+00:06:59.742 --> 00:07:11.781
+So, for me, I also briefly showed that in the talk,
+
+00:07:11.782 --> 00:07:13.781
+but I did that very quickly,
+
+00:07:13.782 --> 00:07:16.581
+so it's understandable that it wasn't there.
+
+00:07:16.582 --> 00:07:21.501
+Essentially, when I download the article,
+
+00:07:21.502 --> 00:07:27.421
+then I will open ivy-bibtex and find the article.
+
+00:07:27.422 --> 00:07:31.581
+For example, this one is the first.
+
+00:07:31.582 --> 00:07:34.941
+You can open the menu in ivy-bibtex.
+
+00:07:34.942 --> 00:07:40.061
+It's with an alt o, and then it will give you this menu.
+
+00:07:40.062 --> 00:07:44.261
+And from here, it will say, add PDF to library.
+
+00:07:44.262 --> 00:07:47.261
+And then it will ask from where do you want to add it?
+
+00:07:47.262 --> 00:07:49.941
+I don't recommend the URL
+
+00:07:49.942 --> 00:07:53.701
+because it doesn't download it properly sometimes.
+
+00:07:53.702 --> 00:07:56.981
+As I also mentioned that with Zotra,
+
+00:07:56.982 --> 00:08:00.301
+the URLs downloading things,
+
+00:08:00.302 --> 00:08:02.141
+especially with academic papers
+
+00:08:02.142 --> 00:08:05.341
+that are sometimes paywalled, it doesn't want to work well.
+
+00:08:05.342 --> 00:08:07.781
+So I will download the paper
+
+00:08:07.782 --> 00:08:10.981
+and then you can just press the f here for file.
+
+00:08:10.982 --> 00:08:13.421
+And then you find the file.
+
+00:08:13.422 --> 00:08:20.861
+For example, for me, all my PDFs are in this folder.
+
+00:08:20.862 --> 00:08:23.181
+It's still named Zotero PDFs
+
+00:08:23.182 --> 00:08:25.438
+from when it was Zotero saving them.
+
+00:08:25.439 --> 00:08:28.341
+Now Zotero no longer saves them,
+
+00:08:28.342 --> 00:08:30.381
+but I'm too bored to change the name.
+
+00:08:30.382 --> 00:08:33.501
+And then you just find the paper you want.
+
+00:08:33.502 --> 00:08:37.261
+So you can see there is an endless list of papers here,
+
+00:08:37.262 --> 00:08:42.821
+and it then will automatically rename it
+
+00:08:42.822 --> 00:08:56.781
+to have the title of the author, a small title and a date.
+
+00:08:56.782 --> 00:09:01.821
+I believe the naming is also configurable,
+
+00:09:01.822 --> 00:09:08.941
+but I have this notation in my config for many years now,
+
+00:09:08.942 --> 00:09:11.181
+because that's how everything
+
+00:09:11.182 --> 00:09:17.981
+expects to find it, essentially. I do not then move it.
+
+00:09:17.982 --> 00:09:19.341
+It's stored in that folder.
+
+00:09:19.342 --> 00:09:22.501
+I store all my PDFs in that specific folder.
+
+00:09:22.502 --> 00:09:27.541
+And then Emacs knows that all PDFs
+
+00:09:27.542 --> 00:09:29.021
+should be found in that folder.
+
+00:09:29.022 --> 00:09:32.581
+And it then just looks for the name
+
+00:09:32.582 --> 00:09:33.981
+that it expects to find.
+
+00:09:33.982 --> 00:09:38.221
+And ivy-bibtex has renamed it automatically to that.
+
+00:09:38.222 --> 00:09:54.381
+Okay, I'll wait a bit to continue with that
+
+00:09:54.382 --> 00:09:59.801
+for moving to the next question.
+
+00:09:59.802 --> 00:10:02.301
+Yeah, ivy-bibtex has that functionality.
+
+NOTE Q: What about annotations with ereaders: viewing and taking on emacs or ereader touchscreen highlighting and notes, org-noter I think would be an alternative out of ebook annotation alternative?
+
+00:10:02.302 --> 00:10:08.061
+And then annotations with e-readers.
+
+00:10:08.062 --> 00:10:12.781
+Viewing and taking an Emacs or Reader touchscreen,
+
+00:10:12.782 --> 00:10:16.501
+highlighting notes, noter, think would be an alternative,
+
+00:10:16.502 --> 00:10:18.301
+e-book annotation alternative.
+
+00:10:18.302 --> 00:10:25.981
+So, I do not use an e-reader, personally.
+
+00:10:25.982 --> 00:10:29.781
+The only thing that I have is my tablet,
+
+00:10:29.782 --> 00:10:34.981
+I can actually show you. It's this little thing here.
+
+00:10:34.982 --> 00:10:39.661
+It's a Chromebook.
+
+00:10:39.662 --> 00:10:42.381
+And the reason it's a Chromebook is that
+
+00:10:42.382 --> 00:10:44.621
+when I bought it a few years ago,
+
+00:10:44.622 --> 00:10:48.541
+it was the most viable alternative I could find
+
+00:10:48.542 --> 00:10:52.301
+that can run Linux as a tablet with good touchscreen.
+
+00:10:52.302 --> 00:10:55.021
+That was also a bit budget
+
+00:10:55.022 --> 00:10:57.821
+because there are some Linux tablets,
+
+00:10:57.822 --> 00:11:00.301
+but they were a bit too high cost
+
+00:11:00.302 --> 00:11:02.181
+for what I was looking back then.
+
+00:11:02.182 --> 00:11:07.501
+And this thing runs Linux essentially
+
+00:11:07.502 --> 00:11:10.421
+natively from the Chromebook.
+
+00:11:10.422 --> 00:11:14.581
+And I've installed Emacs there. It has all my config.
+
+00:11:14.582 --> 00:11:21.741
+And so if I want to take touchscreen notes, I do it there.
+
+00:11:21.742 --> 00:11:27.181
+But again, that is in Emacs. And it's mostly with PDFs.
+
+00:11:27.182 --> 00:11:31.181
+I'm not sure if it answers exactly the question.
+
+00:11:31.182 --> 00:11:35.221
+So if it's an e-reader, if it's, for example, a book,
+
+00:11:35.222 --> 00:11:39.661
+I know that if you have an EPUB,
+
+00:11:39.662 --> 00:11:42.221
+I think it's called the format for books,
+
+00:11:42.222 --> 00:11:44.701
+and Org-noter can also read that.
+
+00:11:44.702 --> 00:11:49.741
+So you could also open that file inside Emacs
+
+00:11:49.742 --> 00:11:51.541
+using Org-noter and take notes.
+
+00:11:51.542 --> 00:12:02.941
+But otherwise, If you're not
+
+00:12:02.942 --> 00:12:06.901
+reading everything in Emacs,
+
+00:12:06.902 --> 00:12:09.021
+then it's hard to pass annotations
+
+00:12:09.022 --> 00:12:11.581
+from outside Emacs to inside it,
+
+00:12:11.582 --> 00:12:15.461
+because of course you have less interoperability in that case.
+
+00:12:15.462 --> 00:12:22.621
+but I think Emacs is featureful enough
+
+00:12:22.622 --> 00:12:25.621
+to where you can do all your reading inside it.
+
+00:12:25.622 --> 00:12:30.141
+And Org-noter has a surprising amount of different formats
+
+00:12:30.142 --> 00:12:31.621
+where you can read things actually.
+
+00:12:31.622 --> 00:12:40.141
+I hope it was clear if you want more on that
+
+00:12:40.142 --> 00:12:45.901
+because I know it's a bit more a complex question, I guess,
+
+00:12:45.902 --> 00:12:47.701
+also with e-readers.
+
+00:12:47.702 --> 00:12:52.061
+And if it is in Emacs or not, feel free to add more.
+
+NOTE Q: How well do you feel about making notes on web sites, pdf, videos? I know pdf is usually good but others I am less sure about.
+
+00:12:52.062 --> 00:12:56.901
+And how well do you feel
+
+00:12:56.902 --> 00:13:00.461
+about making notes on websites, PDF, videos?
+
+00:13:00.462 --> 00:13:05.741
+So I will agree with the other question
+
+00:13:05.742 --> 00:13:07.621
+that I answered here.
+
+00:13:07.622 --> 00:13:11.301
+If you can convert something to PDF,
+
+00:13:11.302 --> 00:13:13.621
+I prefer it because then
+
+00:13:13.622 --> 00:13:16.741
+you need to only worry about PDFs
+
+00:13:16.742 --> 00:13:19.941
+and it works better that way
+
+00:13:19.942 --> 00:13:21.981
+than having to annotate websites.
+
+00:13:21.982 --> 00:13:26.181
+There is, I believe, I should have it
+
+00:13:26.182 --> 00:13:27.661
+in my bookmarks somewhere.
+
+00:13:27.662 --> 00:13:32.381
+There is the org-roam protocol
+
+00:13:32.382 --> 00:13:36.621
+that allows you to take notes directly out of a website
+
+00:13:36.622 --> 00:13:39.421
+and it saves all the metadata of the website.
+
+00:13:39.422 --> 00:13:42.941
+I did look at it at some point,
+
+00:13:42.942 --> 00:13:47.781
+but I haven't really continued using it too much
+
+00:13:47.782 --> 00:13:53.541
+because I find that I don't often take notes
+
+00:13:53.542 --> 00:14:00.221
+from a website where I want more information
+
+00:14:00.222 --> 00:14:02.421
+than just either the link of the website
+
+00:14:02.422 --> 00:14:05.741
+or if I want the full text converting into a PDF.
+
+00:14:05.742 --> 00:14:07.261
+So I haven't really found
+
+00:14:07.262 --> 00:14:08.541
+a very big use case for it,
+
+00:14:08.542 --> 00:14:11.301
+but I know that Org-Roam protocol is a thing.
+
+00:14:11.302 --> 00:14:16.701
+And then for videos is a bit of a longer story
+
+00:14:16.702 --> 00:14:19.901
+because if you want to take notes on videos,
+
+00:14:19.902 --> 00:14:21.541
+that's a bit more complex.
+
+00:14:21.542 --> 00:14:28.181
+And I don't know of a way to do it in Emacs,
+
+00:14:28.182 --> 00:14:30.941
+but I also don't know of an effective way
+
+00:14:30.942 --> 00:14:34.421
+to take notes on videos using other tools.
+
+00:14:34.422 --> 00:14:39.901
+What I typically do if I'm following the video or something
+
+00:14:39.902 --> 00:14:44.461
+is that I will take notes of the more important things.
+
+00:14:44.462 --> 00:14:50.581
+I'll take notes of the more important things
+
+00:14:50.582 --> 00:14:52.381
+that I was listening in the video.
+
+00:14:52.382 --> 00:14:55.101
+And while I'm listening, I will take
+
+00:14:55.102 --> 00:14:57.581
+some ideal crude notes,
+
+00:14:57.582 --> 00:15:00.901
+not because I don't want to lose
+
+00:15:00.902 --> 00:15:03.981
+a lot of my attention during
+
+00:15:03.982 --> 00:15:09.781
+what I'm trying to learn by taking very good notes.
+
+00:15:09.782 --> 00:15:11.141
+So most of the time,
+
+00:15:11.142 --> 00:15:13.741
+those kinds of notes will be in paper,
+
+00:15:13.742 --> 00:15:16.181
+even just very simple, crude notes.
+
+00:15:16.182 --> 00:15:20.381
+And then without any timestamps or anything,
+
+00:15:20.382 --> 00:15:23.941
+because that's too complex for what I've done.
+
+00:15:23.942 --> 00:15:28.501
+And after watching, I will try to
+
+00:15:28.502 --> 00:15:31.421
+consolidate all my thoughts that I wrote down
+
+00:15:31.422 --> 00:15:36.061
+into some more permanent notes using Org Roam.
+
+00:15:36.062 --> 00:15:46.181
+And then move on with that. Also look online,
+
+00:15:46.182 --> 00:15:50.421
+if I noted that I want to look more on on this subject
+
+00:15:50.422 --> 00:15:52.821
+that was mentioned the video
+
+00:15:52.822 --> 00:15:53.821
+and I didn't fully understand it,
+
+00:15:53.822 --> 00:15:57.381
+then I will try and look more, and things like that.
+
+00:15:57.382 --> 00:16:02.981
+So for me, that's how I do it, because I think that
+
+00:16:02.982 --> 00:16:05.661
+annotating a video directly with timestamps
+
+00:16:05.662 --> 00:16:07.821
+and everything is a bit too complex.
+
+00:16:07.822 --> 00:16:09.501
+I don't know if you have
+
+00:16:09.502 --> 00:16:12.061
+any suggestions for working with that,
+
+00:16:12.062 --> 00:16:19.381
+but for me, it has been very troublesome.
+
+NOTE Q: How do you add a new article from scratch, a pdf that you did not have in your bib file? How do you generate the 'bib' entry with metadata and abstract?
+
+00:16:19.382 --> 00:16:22.341
+And then how do you add a new article from scratch,
+
+00:16:22.342 --> 00:16:25.301
+a PDF that you did not have in your bib file?
+
+00:16:25.302 --> 00:16:29.661
+How do you generate the bib entry metadata and abstract?
+
+00:16:29.662 --> 00:16:36.941
+So yeah, the package is called Zotra.
+
+00:16:36.942 --> 00:16:44.061
+I can also show it again. Let's find something.
+
+00:16:44.062 --> 00:16:49.861
+and can open up. Let's not do that.
+
+00:16:49.862 --> 00:16:53.981
+If I open it, I need to access it through my institution.
+
+00:16:53.982 --> 00:16:57.621
+So I will not open the link, but I can show you essentially
+
+00:16:57.622 --> 00:17:02.101
+you run zotra-add-entry, this function,
+
+00:17:02.102 --> 00:17:10.421
+and it copies what you have currently in,
+
+00:17:10.422 --> 00:17:12.461
+what you have already copied right now,
+
+00:17:12.462 --> 00:17:15.861
+it's the message I copied before for the Q&A,
+
+00:17:15.862 --> 00:17:21.861
+but if you open a paper and have the URL copied,
+
+00:17:21.862 --> 00:17:26.341
+it will immediately come here and will save everything.
+
+00:17:26.342 --> 00:17:28.621
+Also as I mentioned there's the...
+
+00:17:28.622 --> 00:17:31.301
+you can also download attachments from there,
+
+00:17:31.302 --> 00:17:34.381
+but with paywalled articles doesn't always work well,
+
+00:17:34.382 --> 00:17:40.261
+so I just do it manually
+
+00:17:40.262 --> 00:17:45.821
+Oh, system is running low on power. Give me just a second.
+
+00:17:45.822 --> 00:17:59.021
+So the computer doesn't turn off as we're speaking. Yes.
+
+00:17:59.022 --> 00:18:03.541
+So yeah, everything is added from scratch.
+
+00:18:03.542 --> 00:18:06.590
+Essentially you copy the URL and give it to Zotra,
+
+00:18:06.591 --> 00:18:15.631
+and it does everything.
+
+NOTE Q: When do you fact check every detail for a bib entry? The author names, published journal, doi stuff.
+
+00:18:15.632 --> 00:18:17.381
+When you fact check every detail
+
+00:18:17.382 --> 00:18:26.261
+for a bib entry, your author names, published journal,
+
+00:18:26.262 --> 00:18:29.461
+doi stuff. So I generally don't do that.
+
+00:18:29.462 --> 00:18:30.861
+Oh yeah, thanks for the person
+
+00:18:30.862 --> 00:18:35.101
+that added the link to the Zotra.
+
+00:18:35.102 --> 00:18:38.381
+I wouldn't say that I fact check the details.
+
+00:18:38.382 --> 00:18:40.901
+I assume that when they're added,
+
+00:18:40.902 --> 00:18:44.541
+they're actually correct.
+
+00:18:44.542 --> 00:18:49.741
+Have you actually had trouble with a tool
+
+00:18:49.742 --> 00:18:52.021
+that automatically adds them, to add them wrong?
+
+00:18:52.022 --> 00:18:54.861
+I'm curious. I haven't really heard
+
+00:18:54.862 --> 00:18:59.421
+that happening too much.
+
+00:18:59.422 --> 00:19:01.861
+I've always thought that, yeah, if you do it manually,
+
+00:19:01.862 --> 00:19:04.621
+you need to fact check that you did it correctly.
+
+00:19:04.622 --> 00:19:06.461
+But I always assume that if you do it
+
+00:19:06.462 --> 00:19:09.301
+automatically through a tool,
+
+00:19:09.302 --> 00:19:11.661
+It should already be correct.
+
+00:19:11.662 --> 00:19:15.101
+And I don't remember ever having any trouble either
+
+00:19:15.102 --> 00:19:20.221
+when I was using Zotero before, or now
+
+00:19:20.222 --> 00:19:24.101
+with the more Emacs based tools.
+
+00:19:24.102 --> 00:19:29.781
+I feel like the big entries are copied correctly.
+
+00:19:29.782 --> 00:19:35.101
+I haven't noticed this being incorrect.
+
+00:19:35.102 --> 00:19:40.181
+But I'm curious, do you have any point
+
+00:19:40.182 --> 00:19:44.661
+on that, I will keep in mind.
+
+00:19:44.662 --> 00:19:48.541
+Sometimes, DOI records are not exactly correct.
+
+00:19:48.542 --> 00:19:52.861
+For example, they can contain some very strange symbols.
+
+00:19:52.862 --> 00:20:00.679
+So that can happen sometimes. OK. Yeah. I don't know.
+
+00:20:00.680 --> 00:20:05.741
+I guess then if you want to fact check,
+
+00:20:05.742 --> 00:20:12.141
+it's probably the best to do it directly as it is added,
+
+00:20:12.142 --> 00:20:14.901
+like it's added, for example, here,
+
+00:20:14.902 --> 00:20:17.941
+and you can just directly, when you add it,
+
+00:20:17.942 --> 00:20:23.501
+find it and say, is everything correct here?
+
+00:20:23.502 --> 00:20:27.661
+Because I think that if you leave it for later,
+
+00:20:27.662 --> 00:20:31.381
+it will be much more of a mess.
+
+00:20:31.382 --> 00:20:33.181
+So for checking, I would just do it directly
+
+00:20:33.182 --> 00:20:47.261
+after I add it to the bib file.
+
+00:20:47.262 --> 00:20:50.621
+And let me see, is there anything else?
+
+00:20:50.622 --> 00:20:53.501
+I think one common way it can fail
+
+00:20:53.502 --> 00:20:56.381
+is when the metadata includes
+
+00:20:56.382 --> 00:20:59.581
+HTML tags for math, for example.
+
+00:20:59.582 --> 00:21:03.501
+And in some papers, for some journals, it can happen.
+
+00:21:03.502 --> 00:21:05.061
+So then you can imagine what happens
+
+00:21:05.062 --> 00:21:06.981
+when you try to put that citation
+
+00:21:06.982 --> 00:21:08.741
+into your references.
+
+00:21:08.742 --> 00:21:12.421
+That's going to be a mess.
+
+00:21:12.422 --> 00:21:17.501
+Yeah, okay. I didn't know, to be honest, so yeah.
+
+00:21:17.502 --> 00:21:27.101
+Thanks for the information.
+
+00:21:27.102 --> 00:21:29.501
+I think our graph has automatic cleaning
+
+00:21:29.502 --> 00:21:30.421
+of certain things
+
+00:21:30.422 --> 00:21:34.741
+for common errors in the metadata.
+
+00:21:34.742 --> 00:21:37.221
+How did you call that?
+
+00:21:37.222 --> 00:21:38.381
+I can note it down also here for the discussion.
+
+00:21:38.382 --> 00:21:45.861
+Oh, our graph. Or graph. Or graph. Yeah.
+
+00:21:45.862 --> 00:22:12.261
+Okay. Okay. I will put it down the pad.
+
+00:22:12.262 --> 00:22:14.141
+And I think the next talk,
+
+00:22:14.142 --> 00:22:18.461
+the live will move in the next minute anyways.
+
+00:22:18.462 --> 00:22:22.141
+And I see we're done with all the questions.
+
+00:22:22.142 --> 00:22:26.141
+So thank you everyone. I hope this was interesting.
+
+00:22:26.142 --> 00:22:28.501
+Thank you for giving me a lot of questions
+
+00:22:28.502 --> 00:22:31.461
+so we had to discuss for the whole time
+
+00:22:31.462 --> 00:22:34.541
+and we weren't just here sitting.
+
+00:22:34.542 --> 00:22:36.182
+And enjoy the rest of EmacsConf.
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--answers.vtt b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.vtt
new file mode 100644
index 00000000..0ec71aed
--- /dev/null
+++ b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.vtt
@@ -0,0 +1,1586 @@
+WEBVTT
+
+NOTE Q: I think that Kiczalez et al.'s metaobject protocol has a scheme implementation, does this mean schemacs will be metaobject-changeable in practice?
+
+00:00:00.000 --> 00:00:01.091
+[oops, forgot to start] [Corwin]: ... object protocol
+
+00:00:01.092 --> 00:00:03.839
+has a scheme implementation.
+
+00:00:03.840 --> 00:00:07.159
+Does this mean schemacs will be
+
+00:00:07.160 --> 00:00:11.079
+meta object changeable in practice?
+
+00:00:11.080 --> 00:00:16.599
+[Ramin]: So I don't actually need the meta object protocol so far.
+
+00:00:16.600 --> 00:00:19.279
+In the reference implementation for Guile,
+
+00:00:19.280 --> 00:00:27.559
+Guile has its own object-oriented system called Goops.
+
+00:00:27.560 --> 00:00:29.239
+I'm sorry, I'm hearing a delay.
+
+00:00:29.240 --> 00:00:32.519
+Anyway, I'm going to turn off my stream quick. There we go.
+
+00:00:32.520 --> 00:00:39.439
+So, um. Yes, uh, I, I don't I wasn't aware of the, um.
+
+00:00:39.440 --> 00:00:43.919
+the meta-object protocol that you have mentioned here,
+
+00:00:43.920 --> 00:00:45.959
+but I will look into it.
+
+00:00:45.960 --> 00:00:48.719
+I know that there isn't really a standard
+
+00:00:48.720 --> 00:00:52.119
+meta-object protocol for Scheme.
+
+00:00:52.120 --> 00:00:53.519
+That was an issue for me
+
+00:00:53.520 --> 00:00:56.919
+because I'm trying to make this cross-platform,
+
+00:00:56.920 --> 00:00:59.639
+and so I've done all of my work so far
+
+00:00:59.640 --> 00:01:00.959
+without a meta-object protocol
+
+00:01:00.960 --> 00:01:02.439
+because that's the easiest way to make it work
+
+00:01:02.440 --> 00:01:04.879
+on multiple Scheme implementations.
+
+00:01:04.880 --> 00:01:07.359
+But if there is a nice portable one
+
+00:01:07.360 --> 00:01:12.559
+that works on many implementations, I would use that, yes.
+
+00:01:12.560 --> 00:01:14.999
+It's just that so far it hasn't been necessary.
+
+00:01:15.000 --> 00:01:19.279
+I've been doing mostly functional reactive programming
+
+00:01:19.280 --> 00:01:21.079
+and React.js-like framework.
+
+00:01:21.080 --> 00:01:23.239
+I've created that for the GUI front end.
+
+00:01:23.240 --> 00:01:26.199
+And that's all the more I've needed so far.
+
+00:01:26.200 --> 00:01:33.399
+So, yeah. Oh, yeah, please, next question. Sure.
+
+NOTE Q: How will the GUI display code be r7rs compliant afaik there is no dlopen in r7rs?
+
+00:01:33.400 --> 00:01:39.599
+[Corwin]: So how will the GUI display code be R7RS compliant?
+
+00:01:39.600 --> 00:01:44.486
+As far as I know, there's no DL open in R7RS.
+
+00:01:44.487 --> 00:01:45.079
+[Ramin]: That's right.
+
+00:01:45.080 --> 00:01:48.879
+Yeah, R7RS small is extremely small
+
+00:01:48.880 --> 00:01:50.439
+and does not have any features at all.
+
+00:01:50.440 --> 00:01:54.799
+But it does provide a conv expand macro.
+
+00:01:54.800 --> 00:01:57.639
+And this allows you to load in different code
+
+00:01:57.640 --> 00:02:00.879
+depending on which scheme implementation you're using.
+
+00:02:00.880 --> 00:02:03.359
+So basically, I'll have to write a different back end
+
+00:02:03.360 --> 00:02:05.279
+for each scheme implementation.
+
+00:02:05.280 --> 00:02:06.639
+And I think that's really
+
+00:02:06.640 --> 00:02:10.919
+the only way is possible at all,
+
+00:02:10.920 --> 00:02:12.719
+because there's no standardization.
+
+00:02:12.720 --> 00:02:14.439
+So essentially, the libraries
+
+00:02:14.440 --> 00:02:15.719
+that I've written for schemacs
+
+00:02:15.720 --> 00:02:22.439
+will become kind of a platform-independent way
+
+00:02:22.440 --> 00:02:25.839
+of writing GUIs for Scheme.
+
+00:02:25.840 --> 00:02:27.119
+It's just a matter of,
+
+00:02:27.120 --> 00:02:28.679
+will your Scheme implementation
+
+00:02:28.680 --> 00:02:32.279
+support the Schemacs GUI protocol?
+
+00:02:32.280 --> 00:02:34.199
+So I've kind of written my own protocol,
+
+00:02:34.200 --> 00:02:36.679
+and it's entirely R7RS small compliant.
+
+00:02:36.680 --> 00:02:38.239
+It's all done with record,
+
+00:02:38.240 --> 00:02:43.039
+what are they called, record types.
+
+NOTE Q: Do you think some of schemacs could be extracted into SRFIs since you have made it portable between scheme implementations?
+
+00:02:43.040 --> 00:02:46.519
+[Corwin]: Do you think some of the Schemacs
+
+00:02:46.520 --> 00:02:50.679
+could be extracted into SFRIs since you've made it portable
+
+00:02:50.680 --> 00:02:52.879
+between scheme implementations?
+
+00:02:52.880 --> 00:02:55.279
+[Ramin]: Yes, I would definitely like to do that.
+
+00:02:55.280 --> 00:02:59.239
+Probably first thing I'll do is start splitting up
+
+00:02:59.240 --> 00:03:01.679
+and publishing independent libraries
+
+00:03:01.680 --> 00:03:04.319
+on the Akku package manager.
+
+00:03:04.320 --> 00:03:07.639
+This is a kind of a package manager ecosystem for Scheme,
+
+00:03:07.640 --> 00:03:11.679
+and in particular R7RS Scheme.
+
+00:03:11.680 --> 00:03:15.239
+And it's also mirrored on the other package manager,
+
+00:03:15.240 --> 00:03:18.279
+Snowfort, just by the way.
+
+00:03:18.280 --> 00:03:21.359
+But yeah, and then I might be also,
+
+00:03:21.360 --> 00:03:25.079
+I've considered creating a SRFI for the lens library,
+
+00:03:25.080 --> 00:03:27.399
+which is based on the Haskell lens library.
+
+00:03:27.400 --> 00:03:29.839
+I don't think that exists yet in Scheme,
+
+00:03:29.840 --> 00:03:34.319
+so I thought that might make a good SRFI.
+
+NOTE Q: Is there a recommended scheme implementation or does it try to be as portable as possible?
+
+00:03:34.320 --> 00:03:36.719
+[Corwin]: Is there a recommended Scheme implementation?
+
+00:03:36.720 --> 00:03:44.559
+[Ramin]: Guile is the reference implementation.
+
+00:03:44.560 --> 00:03:47.279
+It's the only one that works with GUI,
+
+00:03:47.280 --> 00:03:51.359
+but as I demonstrated in my presentation,
+
+00:03:51.360 --> 00:03:52.599
+the Emacs Lisp interpreter
+
+00:03:52.600 --> 00:03:55.079
+works on multiple schemes so far,
+
+00:03:55.080 --> 00:04:00.039
+and I've had trouble with some of the scheme compilers.
+
+00:04:00.040 --> 00:04:04.839
+But yeah, I would recommend Guile.
+
+NOTE Q: How would Schemacs deal with Emacs' (re)display architecture? Would it be having its own display architecture? If so, how can it be compatible with things like overlays, images, etc.? From what I know, Emacs is extremely idiosyncratic here.
+
+00:04:04.840 --> 00:04:07.719
+[Corwin]: But how would schemacs deal with
+
+00:04:07.720 --> 00:04:10.039
+Emacs's re-display architecture
+
+00:04:10.040 --> 00:04:13.159
+will be having its own display architecture?
+
+00:04:13.160 --> 00:04:15.359
+And if so, how will you handle
+
+00:04:15.360 --> 00:04:18.479
+things like overlays and images?
+
+00:04:18.480 --> 00:04:25.239
+[Ramin]: Yeah, definitely. That's to be determined.
+
+00:04:25.240 --> 00:04:31.279
+So basically, the scheme way of doing things
+
+00:04:31.280 --> 00:04:36.639
+So, I've created this React-like programming framework.
+
+00:04:36.640 --> 00:04:40.999
+It's like ReactJS or Vue.js.
+
+00:04:41.000 --> 00:04:45.119
+That is just the API of how you write GUI code in Scheme.
+
+00:04:45.120 --> 00:04:49.719
+And each Scheme implementation
+
+00:04:49.720 --> 00:04:52.279
+will have its own GUI backend,
+
+00:04:52.280 --> 00:04:55.599
+which implements that Protocol.
+
+00:04:55.600 --> 00:04:59.199
+And so when it comes time to link
+
+00:04:59.200 --> 00:05:03.079
+the Emacs Lisp built-in functions
+
+00:05:03.080 --> 00:05:08.279
+that do these things like overlays and so on,
+
+00:05:08.280 --> 00:05:11.079
+we're going to have to come up with some way
+
+00:05:11.080 --> 00:05:12.079
+of modeling that
+
+00:05:12.080 --> 00:05:15.799
+using the scheme framework that I've designed.
+
+00:05:15.800 --> 00:05:17.599
+And I may have to make alterations
+
+00:05:17.600 --> 00:05:22.039
+specifically to support Emacs Lisp.
+
+00:05:22.040 --> 00:05:28.559
+I don't know yet. I haven't got that far.
+
+NOTE Q: You were saying that you'd like to get "most" of the one thousand three hundred and something Emacs packages done. Is there a technical blocker to doing them all? Or just a problem of getting enough people in to help and start writing scheme?
+
+00:05:28.560 --> 00:05:30.079
+[Corwin]: You were saying that you would like
+
+00:05:30.080 --> 00:05:33.479
+to get the most out of the 1300
+
+00:05:33.480 --> 00:05:36.519
+and something Emacs packages that exist.
+
+00:05:36.520 --> 00:05:38.759
+Are there technical blockers to doing them all
+
+00:05:38.760 --> 00:05:44.039
+or just a problem of getting enough people to jump into it?
+
+00:05:44.040 --> 00:05:48.639
+[Ramin]: Yeah, it's just a matter of implementing enough
+
+00:05:48.640 --> 00:05:50.839
+of the Emacs built-in functions.
+
+00:05:50.840 --> 00:05:57.079
+Right now, there's kind of a big bug.
+
+00:05:57.080 --> 00:05:59.359
+I mentioned this also in the presentation.
+
+00:05:59.360 --> 00:06:02.599
+The stacktrace that you saw during my presentation,
+
+00:06:02.600 --> 00:06:05.799
+that is the biggest bug right now
+
+00:06:05.800 --> 00:06:08.159
+that's preventing me from running most other code.
+
+00:06:08.160 --> 00:06:10.359
+And I don't think other people
+
+00:06:10.360 --> 00:06:13.039
+will be able to contribute to the code base
+
+00:06:13.040 --> 00:06:14.559
+until I get that bug fixed,
+
+00:06:14.560 --> 00:06:18.679
+because it doesn't capture closures correctly.
+
+00:06:18.680 --> 00:06:22.519
+it doesn't behave like Emacs Lisp does,
+
+00:06:22.520 --> 00:06:26.959
+and that's the big problem.
+
+00:06:26.960 --> 00:06:31.759
+So once I get that worked out,
+
+00:06:31.760 --> 00:06:35.599
+then it's just a matter of implementing enough
+
+00:06:35.600 --> 00:06:37.879
+of the EmacsLisp built-in functions,
+
+00:06:37.880 --> 00:06:40.679
+these are the functions that are mostly implemented in C,
+
+00:06:40.680 --> 00:06:42.879
+implementing those in Scheme.
+
+00:06:42.880 --> 00:06:45.959
+And that, yeah, that's the thing
+
+00:06:45.960 --> 00:06:47.839
+that I'm going to need a lot of help with
+
+00:06:47.840 --> 00:06:49.719
+because there's quite a few of those APIs.
+
+00:06:49.720 --> 00:06:53.519
+But I imagine, I have no idea, no way of knowing,
+
+00:06:53.520 --> 00:06:56.459
+but I imagine we don't need 100% of them
+
+00:06:56.460 --> 00:06:58.167
+in order to run most of ELPA.
+
+00:06:58.168 --> 00:07:05.084
+We probably can get some of the important large ELPA packages
+
+00:07:05.085 --> 00:07:12.719
+like Magit and Org mode with just enough of the Emacs Lisp
+
+00:07:12.720 --> 00:07:14.959
+built-in functions to handle that.
+
+00:07:14.960 --> 00:07:19.279
+But we won't really know until we've tried.
+
+00:07:19.280 --> 00:07:22.519
+So yeah, I'll try to get this bug fixed right away.
+
+00:07:22.520 --> 00:07:24.979
+That way we can all start working on it together, hopefully.
+
+00:07:24.980 --> 00:07:27.126
+[Corwin]: Highly relatable answer there.
+
+00:07:27.127 --> 00:07:31.959
+We'll burn that bridge when we're on it or something.
+
+NOTE Q: What are you thoughts on Chicken Scheme? Would it be a good fit?
+
+00:07:31.960 --> 00:07:34.559
+[Corwin]: What are your thoughts on Chicken Scheme?
+
+00:07:34.560 --> 00:07:37.199
+Will that be a good fit? Do you think?
+
+00:07:37.200 --> 00:07:41.039
+[Ramin]: I think it will be, um, I, I did show
+
+00:07:41.040 --> 00:07:44.959
+trying to run chicken scheme in my, um, presentation
+
+00:07:44.960 --> 00:07:48.839
+and, uh, I ran up against some kind of issue,
+
+00:07:48.840 --> 00:07:51.079
+which I really don't know how to debug.
+
+00:07:51.080 --> 00:07:55.879
+Um, it's probably something to do with the, uh, pattern matcher.
+
+00:07:55.880 --> 00:07:58.919
+Um, I'm using the pattern matcher,
+
+00:07:58.920 --> 00:08:00.599
+uh, written by Alex Shinn,
+
+00:08:00.600 --> 00:08:02.599
+which seems to be the most portable.
+
+00:08:02.600 --> 00:08:05.919
+Pattern matcher, uh, for our seven RS scheme.
+
+00:08:05.920 --> 00:08:13.519
+But not all scheme compilers implement, what is it called?
+
+00:08:13.520 --> 00:08:19.559
+The macro, I can't remember what it's called.
+
+00:08:19.560 --> 00:08:24.199
+There's the macro expansion system for R7RS small.
+
+00:08:24.200 --> 00:08:27.199
+All of these scheme implementations
+
+00:08:27.200 --> 00:08:29.319
+seem to have a slightly different take on how they work.
+
+00:08:29.320 --> 00:08:33.919
+And so that macro expander has been, for pattern matching,
+
+00:08:33.920 --> 00:08:35.719
+has been the biggest difficulty
+
+00:08:35.720 --> 00:08:37.359
+in making this code portable.
+
+00:08:37.360 --> 00:08:42.239
+And so I'm thinking of ways of maybe trying to ditch pattern matching,
+
+00:08:42.240 --> 00:08:44.999
+but that's such a useful feature and it's hard.
+
+00:08:45.000 --> 00:08:49.879
+So I don't know, we'll see if I can,
+
+00:08:49.880 --> 00:08:52.439
+if somebody can help me get it to work on chicken team,
+
+00:08:52.440 --> 00:08:56.599
+I'd really appreciate it.
+
+NOTE Q: Can this emacs lisp implementation be used by Guile's emacs lisp "mode"?
+
+00:08:56.600 --> 00:09:01.799
+[Corwin]: Can this implementation be used by Guile's Emacs Lisp mode?
+
+00:09:01.800 --> 00:09:08.199
+[Ramin]: Guile's Emacs Lisp mode. Okay. Yeah, good question.
+
+00:09:08.200 --> 00:09:10.919
+I did mention this last year in my presentation.
+
+00:09:10.920 --> 00:09:13.719
+Emacs list in Guile is totally different
+
+00:09:13.720 --> 00:09:16.199
+from what I've done.
+
+00:09:16.200 --> 00:09:21.292
+That implementation was written about 10 or 15 years ago.
+
+00:09:21.293 --> 00:09:26.501
+I can't remember exactly when. It is quite incomplete.
+
+00:09:26.502 --> 00:09:36.542
+I don't think it even runs most of the macro expanding code.
+
+00:09:36.543 --> 00:09:39.679
+Some of the code that is written
+
+00:09:39.680 --> 00:09:42.479
+for GNU Emacs in Emacs Lisp,
+
+00:09:42.480 --> 00:09:45.679
+where GNU Emacs is initializing itself,
+
+00:09:45.680 --> 00:09:51.319
+it can't even get the first file in that code.
+
+00:09:51.320 --> 00:09:53.479
+It hasn't been touched in 10 or 15 years.
+
+00:09:53.480 --> 00:09:57.239
+Initially, when I first started this project,
+
+00:09:57.240 --> 00:09:59.159
+I was using the parser
+
+00:09:59.160 --> 00:10:02.319
+for Guile's Emacs Lisp implementation,
+
+00:10:02.320 --> 00:10:05.319
+but it didn't give me things like source locations,
+
+00:10:05.320 --> 00:10:10.639
+so I had to rewrite that. And also, it wasn't portable.
+
+00:10:10.640 --> 00:10:14.279
+So yeah, because I want it to be portable,
+
+00:10:14.280 --> 00:10:16.919
+it's necessarily going to be not reliant
+
+00:10:16.920 --> 00:10:19.119
+on anything that's inside of the Guile library,
+
+00:10:19.120 --> 00:10:21.479
+including the Emacs Lisp interpreter that's there.
+
+00:10:21.480 --> 00:10:24.959
+Maybe I could replace the Emacs Lisp interpreter in Guile
+
+00:10:24.960 --> 00:10:29.599
+if Andy Wingo would be interested. All right.
+
+00:10:29.600 --> 00:10:31.599
+And I see we've got a few people
+
+00:10:31.600 --> 00:10:34.039
+that did jump into the BBB.
+
+00:10:34.040 --> 00:10:37.159
+I'm just going to quickly, oops.
+
+00:10:37.160 --> 00:10:40.679
+quickly try to make my text a little bigger
+
+00:10:40.680 --> 00:10:42.799
+so I can read a question that came here.
+
+NOTE Q: I wonder if we could do some sort of programmatic analysis on popular Emacs packages to see what list of functions they tend to depend upon, follow function calls down to the lowest level
+
+00:10:42.800 --> 00:10:48.479
+[Corwin]: I wonder if we can do some sort of pragmatic analysis
+
+00:10:48.480 --> 00:10:49.959
+on popular Emacs packages
+
+00:10:49.960 --> 00:10:52.399
+to see what list of functions they tend to depend on
+
+00:10:52.400 --> 00:10:54.799
+while a function calls down to the lower level.
+
+00:10:54.800 --> 00:10:57.209
+[Ramin]: Yeah, that would be good.
+
+00:10:57.210 --> 00:10:59.382
+Somebody please do that for me.
+
+00:10:59.383 --> 00:11:05.439
+[Corwin]: Awesome. Somebody's raising their hand. Divya.
+
+00:11:05.440 --> 00:11:08.799
+[Divya]: Let's see. Yeah, can you hear me?
+
+00:11:08.800 --> 00:11:11.734
+[Corwin]: Yes, we can. Yeah, go ahead.
+
+00:11:11.735 --> 00:11:12.359
+[Divya]: Hello, thank you.
+
+00:11:12.360 --> 00:11:14.079
+Yeah, this is really awesome.
+
+00:11:14.080 --> 00:11:16.959
+I use Guile, and I love Guile,
+
+00:11:16.960 --> 00:11:18.919
+and I also love functional programming,
+
+00:11:18.920 --> 00:11:21.599
+so this is really nice that you took
+
+00:11:21.600 --> 00:11:22.719
+the declarative approach.
+
+00:11:22.720 --> 00:11:26.319
+One thing that I'm interested in is,
+
+00:11:26.320 --> 00:11:29.839
+are you also considering Racket in the scheme group?
+
+00:11:29.840 --> 00:11:32.959
+Because I know a lot of people do not consider Racket
+
+00:11:32.960 --> 00:11:36.639
+as a sort of scheme thing, because it grew out of it.
+
+NOTE Q: Do you think there is an opportunity to use Racket?
+
+00:11:36.640 --> 00:11:39.519
+[Divya]: Do you think you'll take something from Racket?
+
+00:11:39.520 --> 00:11:40.424
+Because I think Racket has
+
+00:11:40.425 --> 00:11:42.090
+a lot of good ideas that can be used.
+
+00:11:42.091 --> 00:11:48.439
+[Ramin]: Yeah, I briefly looked at Racket's GUI library,
+
+00:11:48.440 --> 00:11:51.879
+but it's very, very heavily dependent
+
+00:11:51.880 --> 00:11:53.839
+on Racket's macro expander,
+
+00:11:53.840 --> 00:11:57.679
+which is, well, yeah, the macro expander
+
+00:11:57.680 --> 00:11:59.679
+is extremely complex for Racket,
+
+00:11:59.680 --> 00:12:02.159
+and I don't think it's possible to port it to any other scheme,
+
+00:12:02.160 --> 00:12:07.679
+as far as I know. But Racket is based on Chez Scheme.
+
+00:12:07.680 --> 00:12:14.479
+And I am making an effort to port my code to Chez's Scheme.
+
+00:12:14.480 --> 00:12:18.639
+I mentioned this earlier,
+
+00:12:18.640 --> 00:12:22.159
+but there's the Gwen Weinholdt Akku system,
+
+00:12:22.160 --> 00:12:25.439
+which allows you to translate R7RS to R6RS.
+
+00:12:25.440 --> 00:12:28.519
+And since Chez is an R6RS compiler,
+
+00:12:28.520 --> 00:12:33.919
+I did at one point get the Emacs Lisp interpreter
+
+00:12:33.920 --> 00:12:34.919
+to compile for Chez,
+
+00:12:34.920 --> 00:12:38.239
+although I think there's been a change
+
+00:12:38.240 --> 00:12:40.479
+either to Akku or somewhere in my own code base.
+
+00:12:40.480 --> 00:12:42.879
+It doesn't build anymore, and I'm not sure why.
+
+00:12:42.880 --> 00:12:47.039
+But I would also very much like to run this on Chez.
+
+00:12:47.040 --> 00:12:54.679
+And I guess in that sense, we'll be able to work on Racket as well.
+
+00:12:54.680 --> 00:12:56.199
+There's also one other option.
+
+00:12:56.200 --> 00:13:03.519
+Alexis King has written an R7RS language package for Racket.
+
+00:13:03.520 --> 00:13:05.039
+I have not yet tried.
+
+00:13:05.040 --> 00:13:08.479
+running my package on R7RS for Racket.
+
+00:13:08.480 --> 00:13:11.599
+But that would be something interesting.
+
+00:13:11.600 --> 00:13:12.919
+Yes, I would like to try that.
+
+00:13:12.920 --> 00:13:13.919
+[Divya]: Yeah, it'll be interesting.
+
+00:13:13.920 --> 00:13:15.839
+I do have some experience with Chez.
+
+00:13:15.840 --> 00:13:17.479
+So, uh, if I can find some time,
+
+00:13:17.480 --> 00:13:20.006
+I'll, I'll, I'll certainly like to,
+
+00:13:20.007 --> 00:13:21.239
+[Ramin]: I would very much appreciate.
+
+00:13:21.240 --> 00:13:24.039
+Yes. Yeah. Go ahead. Yeah.
+
+NOTE Q: Shouldn't it be enough to just implement the builtin functions? Most of the commands are written in Emacs Lisp, right?
+
+00:13:24.040 --> 00:13:26.079
+[Divya]: Another question I have is, like,
+
+00:13:26.080 --> 00:13:29.199
+what exactly is sort of, like, the, the approach is that
+
+00:13:29.200 --> 00:13:31.479
+you'll first want to do the interpreter
+
+00:13:31.480 --> 00:13:33.799
+and then have enough Elisp functions,
+
+00:13:33.800 --> 00:13:36.479
+ getting the GNU Emacs Lisp functions
+
+00:13:36.480 --> 00:13:38.119
+interpreted or interpretable,
+
+00:13:38.120 --> 00:13:40.999
+and then go for GUI, or do you want
+
+00:13:41.000 --> 00:13:42.759
+to sort of like go hand in hand
+
+00:13:42.760 --> 00:13:45.679
+is like we have the interpreter working on
+
+00:13:45.680 --> 00:13:46.959
+and we have also the GUI
+
+00:13:46.960 --> 00:13:53.199
+and we sort of use one for the other?
+
+00:13:53.200 --> 00:13:56.479
+[Ramin]: Yeah, I consider the two tasks to be parallel.
+
+00:13:56.480 --> 00:13:59.639
+So I'm actually doing the GUI separately.
+
+00:13:59.640 --> 00:14:05.519
+The reason why is because the GUI for Schemacs
+
+00:14:05.520 --> 00:14:10.279
+is really just a clone of the look and feel of Emacs.
+
+00:14:10.280 --> 00:14:14.679
+It's not like an actual clone of the low-level C code
+
+00:14:14.680 --> 00:14:16.039
+that puts everything on screen.
+
+00:14:16.040 --> 00:14:18.679
+And I'm actually not really that interested
+
+00:14:18.680 --> 00:14:21.439
+in the low-level details
+
+00:14:21.440 --> 00:14:23.479
+of how Emacs draws things on screen either.
+
+00:14:23.480 --> 00:14:26.839
+I think it has a lot of historical baggage,
+
+00:14:26.840 --> 00:14:28.839
+and I'm actually trying to move away from that.
+
+00:14:28.840 --> 00:14:31.759
+So that was part of the reason why I started
+
+00:14:31.760 --> 00:14:36.399
+with this React.js or Vue.js-like Reactive GUI framework.
+
+00:14:36.400 --> 00:14:39.519
+So that GUI part is completely separate.
+
+00:14:39.520 --> 00:14:42.239
+And I want to worry about the details
+
+00:14:42.240 --> 00:14:46.719
+of how we make the GUI look and feel
+
+00:14:46.720 --> 00:14:50.319
+similar in Schemacs, similar to GNU Emacs.
+
+00:14:50.320 --> 00:14:54.799
+In Schemacs, using the Emacs programming language,
+
+00:14:54.800 --> 00:14:59.319
+I think that's something that we should worried about
+
+00:14:59.320 --> 00:15:03.399
+after we have enough of the Emacs Lisp implemented.
+
+00:15:03.400 --> 00:15:04.919
+[Divya]: Yeah, that makes sense.
+
+00:15:04.920 --> 00:15:06.679
+There are sort of, I'm a bit worried.
+
+00:15:06.680 --> 00:15:10.599
+So, I don't know if, so one of my presentations
+
+00:15:10.600 --> 00:15:11.479
+is going to be tomorrow.
+
+00:15:11.480 --> 00:15:13.119
+I'm working on something called Emacs Viewer.
+
+00:15:13.120 --> 00:15:15.319
+It's a document viewer in Emacs.
+
+00:15:15.320 --> 00:15:17.679
+And essentially one of the issues that I'm up against
+
+00:15:17.680 --> 00:15:20.359
+is that Emacs's display system
+
+00:15:20.360 --> 00:15:25.439
+is sort of very... let's say, not flexible.
+
+00:15:25.440 --> 00:15:31.839
+When trying to analyze where this inflexibility comes from,
+
+00:15:31.840 --> 00:15:35.759
+I don't think it's just the display architecture.
+
+00:15:35.760 --> 00:15:38.319
+I think parts of Elisp itself
+
+00:15:38.320 --> 00:15:43.599
+are connected to the display architecture.
+
+00:15:43.600 --> 00:15:48.399
+The notion of a cell in a buffer,
+
+00:15:48.400 --> 00:15:52.199
+itself is connected tightly to
+
+00:15:52.200 --> 00:15:54.519
+how the re-display architecture works.
+
+00:15:54.520 --> 00:15:57.199
+So I think you'll have to sort of figure out
+
+00:15:57.200 --> 00:16:00.679
+what exactly you can salvage from Elisp
+
+00:16:00.680 --> 00:16:05.199
+without taking the display architecture baggage.
+
+00:16:05.200 --> 00:16:08.001
+[Ramin]: That's right. I do anticipate
+
+00:16:08.002 --> 00:16:09.876
+that's going to be fairly challenging.
+
+00:16:09.877 --> 00:16:14.584
+It's all Turing-complete,
+
+00:16:14.585 --> 00:16:17.879
+so I imagine we're probably going to end up
+
+00:16:17.880 --> 00:16:21.039
+creating something like an emulator
+
+00:16:21.040 --> 00:16:24.319
+for the Emacs Lisp display architecture in Scheme
+
+00:16:24.320 --> 00:16:27.559
+that will somehow translate down
+
+00:16:27.560 --> 00:16:30.039
+to the React-like protocol that I've written.
+
+00:16:30.040 --> 00:16:32.719
+But yeah, I don't... I haven't... That's nice.
+
+00:16:32.720 --> 00:16:35.256
+[Divya]: No, this is this is very exciting. Yeah.
+
+00:16:35.257 --> 00:16:36.319
+[Ramin]: Oh, yes, it is.
+
+00:16:36.320 --> 00:16:39.559
+Yeah, I'm glad. A lot of people have told me
+
+00:16:39.560 --> 00:16:41.679
+that they really are excited to see this project,
+
+00:16:41.680 --> 00:16:42.719
+and this really helps me
+
+00:16:42.720 --> 00:16:46.399
+keep focused on this project,
+
+00:16:46.400 --> 00:16:48.319
+because a lot of people are very interested.
+
+00:16:48.320 --> 00:16:50.359
+[Corwin]: I'd like to move on
+
+00:16:50.360 --> 00:16:52.159
+to a couple of questions from the past.
+
+00:16:52.160 --> 00:16:54.479
+We're starting to build up a good backlog.
+
+00:16:54.480 --> 00:16:59.719
+Thank you for that, Divya. Next question from the pad I have.
+
+NOTE Q: Tell us more about this show-stopping bug! How to squash it? Can people help?
+
+00:16:59.720 --> 00:17:02.239
+[Corwin]: Can you tell us more about the show stopping bug?
+
+00:17:02.240 --> 00:17:04.159
+How to squash it? How can people help?
+
+00:17:04.160 --> 00:17:08.799
+[Ramin]: OK, well, that one, unfortunately, I think,
+
+00:17:08.800 --> 00:17:11.679
+unless you're really a scheme genius
+
+00:17:11.680 --> 00:17:13.799
+and you can really read my code
+
+00:17:13.800 --> 00:17:15.479
+and immediately understand how it all works,
+
+00:17:15.480 --> 00:17:18.319
+I don't think you'd be able to help.
+
+00:17:18.320 --> 00:17:22.599
+It shouldn't be too difficult for me to fix.
+
+00:17:22.600 --> 00:17:26.639
+So it has to do with how closures work.
+
+00:17:26.640 --> 00:17:30.719
+And a closure is basically an object
+
+00:17:30.720 --> 00:17:33.159
+that can be created with stuff that's on the stack.
+
+00:17:33.160 --> 00:17:37.079
+And this is a feature, I think,
+
+00:17:37.080 --> 00:17:39.679
+that was introduced with Emacs 27.
+
+00:17:39.680 --> 00:17:40.879
+I can't remember exactly,
+
+00:17:40.880 --> 00:17:43.439
+but it's actually a relatively recent feature.
+
+00:17:43.440 --> 00:17:45.879
+It was ever since they introduced
+
+00:17:45.880 --> 00:17:50.999
+lexically scoped variable bindings in Emacs Lisp.
+
+00:17:51.000 --> 00:17:54.519
+And so yeah, the problem is that
+
+00:17:54.520 --> 00:17:59.839
+when you create like a let structure
+
+00:17:59.840 --> 00:18:01.799
+and you could declare a variable in the let.
+
+00:18:01.800 --> 00:18:05.399
+And then you create inside of that a second let structure,
+
+00:18:05.400 --> 00:18:07.239
+and you have a lambda inside of that.
+
+00:18:07.240 --> 00:18:11.319
+And the lambda references or uses a variable
+
+00:18:11.320 --> 00:18:14.399
+that was declared in the outer let binding.
+
+00:18:14.400 --> 00:18:18.279
+That outer let binding is somewhere on the stack.
+
+00:18:18.280 --> 00:18:22.999
+And the lambda you can actually return it as a value.
+
+00:18:23.000 --> 00:18:25.319
+So when you do return that lambda,
+
+00:18:25.320 --> 00:18:27.679
+it has to have a note somewhere inside
+
+00:18:27.680 --> 00:18:31.279
+that says, by the way, I'm using that variable.
+
+00:18:31.280 --> 00:18:34.359
+So you need to capture it and restore it to the stack
+
+00:18:34.360 --> 00:18:38.199
+whenever this lambda is applied, whenever you execute it.
+
+00:18:38.200 --> 00:18:40.959
+And that is where the error is.
+
+00:18:40.960 --> 00:18:44.399
+It's not capturing the stack variable properly.
+
+00:18:44.400 --> 00:18:46.879
+And I think what I'm going to do,
+
+00:18:46.880 --> 00:18:49.759
+I haven't looked into it in detail yet
+
+00:18:49.760 --> 00:18:53.279
+because I've gone back to GUI stuff recently,
+
+00:18:53.280 --> 00:18:55.479
+but what I'm going to do, I think,
+
+00:18:55.480 --> 00:18:57.799
+is just do a static analysis
+
+00:18:57.800 --> 00:18:59.079
+of the code inside of the Lambda
+
+00:18:59.080 --> 00:19:02.919
+and see which symbols are being used,
+
+00:19:02.920 --> 00:19:05.079
+and then just capture all of those
+
+00:19:05.080 --> 00:19:07.559
+and place those into the record type
+
+00:19:07.560 --> 00:19:09.519
+that stores the lambda.
+
+00:19:09.520 --> 00:19:12.679
+That's how I'm going to fix that, I think.
+
+00:19:12.680 --> 00:19:15.999
+I hope anyway that's going to work.
+
+00:19:16.000 --> 00:19:17.239
+You never know with bugs.
+
+00:19:17.240 --> 00:19:21.759
+They're always a little bit tricky. Okay, next question.
+
+NOTE Q: Are there performance concerns with implementing certain C primitives in pure scheme?
+
+00:19:21.760 --> 00:19:23.119
+[Corwin]: Are there performance concerns
+
+00:19:23.120 --> 00:19:28.479
+with implementing certain C primitives in pure Scheme?
+
+00:19:28.480 --> 00:19:32.879
+[Ramin]: So who is it? The famous computer scientist that said
+
+00:19:32.880 --> 00:19:35.879
+premature optimization is the root of all evil.
+
+00:19:35.880 --> 00:19:39.799
+I think it was the guy who invented the A* algorithm.
+
+00:19:39.800 --> 00:19:42.719
+His name escapes me at the minute.
+
+00:19:42.720 --> 00:19:49.359
+But yeah, I'm not concerned about performance yet,
+
+00:19:49.360 --> 00:19:52.119
+although most of the scheme compilers that I have seen,
+
+00:19:52.120 --> 00:19:56.999
+especially Chez and Gambit
+
+00:19:57.000 --> 00:20:02.039
+have extremely good performance characteristics.
+
+00:20:02.040 --> 00:20:03.679
+And so I think there won't be
+
+00:20:03.680 --> 00:20:05.879
+too much difficulty with performance,
+
+00:20:05.880 --> 00:20:08.759
+even implementing some of the C stuff.
+
+00:20:08.760 --> 00:20:10.759
+And besides, a lot of the GUI stuff
+
+00:20:10.760 --> 00:20:12.719
+is already written in C anyway.
+
+00:20:12.720 --> 00:20:14.399
+I mean, it would be cool
+
+00:20:14.400 --> 00:20:16.879
+if we had a scheme GUI library
+
+00:20:16.880 --> 00:20:18.599
+that painted to a canvas,
+
+00:20:18.600 --> 00:20:21.639
+maybe for a Wayland implementation or something.
+
+00:20:21.640 --> 00:20:29.079
+But I don't know. It's not a concern for me, performance.
+
+00:20:29.080 --> 00:20:32.079
+[Corwin]: Okay, there are a few more questions. I do want to mention
+
+00:20:32.080 --> 00:20:33.839
+that the stream has cut away at this point,
+
+00:20:33.840 --> 00:20:36.279
+but we're still recording live.
+
+00:20:36.280 --> 00:20:38.799
+All of this will be put up on the website
+
+00:20:38.800 --> 00:20:40.399
+and so on like that.
+
+00:20:40.400 --> 00:20:44.199
+So, I appreciate all the enthusiastic questions
+
+00:20:44.200 --> 00:20:47.799
+and you're kind of tanking through them all.
+
+00:20:47.800 --> 00:20:52.799
+[Ramin]: Me too. I love how many questions I'm getting.
+
+00:20:52.800 --> 00:20:54.039
+This is very encouraging
+
+00:20:54.040 --> 00:20:55.999
+and it really makes me want to keep on working on it.
+
+00:20:56.000 --> 00:20:56.879
+So it's great.
+
+00:20:56.880 --> 00:21:00.199
+I'm so glad to hear that because that's exactly the message
+
+00:21:00.200 --> 00:21:01.439
+I think you should be receiving.
+
+00:21:01.440 --> 00:21:04.159
+This is a fantastic project. Thank you so much.
+
+00:21:04.160 --> 00:21:07.051
+I'll just say so myself.
+
+NOTE Q: If this project is successful, are you worried about a possible split in the community between Schemacs and GNU Emacs users?
+
+00:21:07.052 --> 00:21:08.439
+[Corwin]: If the project is successful,
+
+00:21:08.440 --> 00:21:11.479
+are you worried about a possible split in the community
+
+00:21:11.480 --> 00:21:15.599
+between Schemacs and GNU Emacs?
+
+00:21:15.600 --> 00:21:18.959
+[Ramin]: Oh, I have thought about that.
+
+00:21:18.960 --> 00:21:24.039
+And I really don't know what's going to happen.
+
+00:21:24.040 --> 00:21:26.239
+There seems to be already a huge demand
+
+00:21:26.240 --> 00:21:30.439
+for a scheme-based, a modern scheme-based editor.
+
+00:21:30.440 --> 00:21:33.399
+You know, the Edwin scheme for MIT scheme
+
+00:21:33.400 --> 00:21:37.279
+hasn't been touched since like 1987 or something,
+
+00:21:37.280 --> 00:21:41.439
+maybe 1993 or, but anyway.
+
+00:21:41.440 --> 00:21:43.159
+There seems to be huge demand.
+
+00:21:43.160 --> 00:21:45.119
+And so I guess a lot of people
+
+00:21:45.120 --> 00:21:47.679
+who are currently using GNU Emacs
+
+00:21:47.680 --> 00:21:49.079
+will probably just switch over
+
+00:21:49.080 --> 00:21:50.479
+because they've been wanting
+
+00:21:50.480 --> 00:21:53.159
+something like this for a very long time.
+
+00:21:53.160 --> 00:21:56.559
+And then, I mean, is that going to cause fragmentation?
+
+00:21:56.560 --> 00:21:58.679
+Is it really a big deal, though?
+
+00:21:58.680 --> 00:22:02.479
+I mean, it's all GPL-licensed code.
+
+00:22:02.480 --> 00:22:08.759
+I mean, I think a rising tide raises all the ships at the same time.
+
+00:22:08.760 --> 00:22:13.279
+So, yeah, also, the last thing I want to say about that
+
+00:22:13.280 --> 00:22:18.999
+is I would like to contribute some of what I do in Schemacs
+
+00:22:19.000 --> 00:22:24.399
+back into GNU Emacs, if I can. So, for example, I'm going
+
+00:22:24.400 --> 00:22:25.959
+to be working on like a canvas library
+
+00:22:25.960 --> 00:22:27.879
+where you can have interactive canvases
+
+00:22:27.880 --> 00:22:30.879
+and you know you can actually like draw pictures
+
+00:22:30.880 --> 00:22:33.559
+and put things with the mouse and drag things around.
+
+00:22:33.560 --> 00:22:36.079
+And I was thinking you know
+
+00:22:36.080 --> 00:22:37.667
+if if I can figure out how that works
+
+00:22:37.668 --> 00:22:41.917
+maybe I can write something like that for Emacs
+
+00:22:41.918 --> 00:22:47.759
+or GNU Emacs using the Cairo library, you know,
+
+00:22:47.760 --> 00:22:49.319
+SVG rendering library that they have.
+
+00:22:49.320 --> 00:22:51.319
+So, you know, if I have time,
+
+00:22:51.320 --> 00:22:55.799
+I would like to continue contributing to GNU Emacs as well.
+
+00:22:55.800 --> 00:22:57.839
+I'm sorry, what was the name of the library you mentioned?
+
+00:22:57.840 --> 00:23:01.039
+Oh, Cairo, like Cairo.
+
+00:23:01.040 --> 00:23:07.599
+Oh, Cairo, yeah. Absolutely. I spelled that poorly.
+
+NOTE Q: The dream of never even needing to change to the web browser - would schemacs bring us closer to that?
+
+00:23:07.600 --> 00:23:12.519
+[Corwin]: The dream of never needing to change to the web browser.
+
+00:23:12.520 --> 00:23:17.818
+Would schemacs bring us closer to that?
+
+00:23:17.819 --> 00:23:18.376
+[Ramin]: I hope so.
+
+00:23:18.377 --> 00:23:21.709
+That's also a dream of mine.
+
+00:23:21.710 --> 00:23:26.479
+The part of the reason why I wanted to work, you know,
+
+00:23:26.480 --> 00:23:30.999
+make sure I had a really good workable GUI framework
+
+00:23:31.000 --> 00:23:32.626
+is so that I could, you know,
+
+00:23:32.627 --> 00:23:34.879
+we could write apps like, you know,
+
+00:23:34.880 --> 00:23:38.759
+they have a Mastodon client written in Emacs Lisp.
+
+00:23:38.760 --> 00:23:42.199
+that would be so nice to have this, you know,
+
+00:23:42.200 --> 00:23:43.439
+a really nice Mastodon client
+
+00:23:43.440 --> 00:23:47.479
+that was right inside of, you know, our scheme environment
+
+00:23:47.480 --> 00:23:50.039
+where we were doing our text editing and other stuff.
+
+00:23:50.040 --> 00:23:52.079
+I've always wanted something like that,
+
+00:23:52.080 --> 00:23:53.799
+or it would be cool to have
+
+00:23:53.800 --> 00:23:56.319
+just a slightly nicer GUI for Magit.
+
+00:23:56.320 --> 00:24:04.199
+So, yeah, I mean, like, yeah, being able to avoid the web entirely
+
+00:24:04.200 --> 00:24:08.199
+and just be able to like, you know, do social networking
+
+00:24:08.200 --> 00:24:11.439
+and do your GitHub stuff,
+
+00:24:11.440 --> 00:24:14.759
+everything from within Emacs or Schemacs in this case,
+
+00:24:14.760 --> 00:24:16.919
+that's a dream of mine as well.
+
+00:24:16.920 --> 00:24:20.079
+And so I hope that that's where we end up in a couple of years.
+
+00:24:20.080 --> 00:24:29.999
+The sooner the better. Anything, just double checking.
+
+NOTE Q: Anything specific other than minimalism that made you choose Scheme over Common Lisp?
+
+00:24:30.000 --> 00:24:33.319
+Anything specific other than minimalism
+
+00:24:33.320 --> 00:24:35.799
+that made you choose Scheme over Common Lisp?
+
+00:24:35.800 --> 00:24:40.199
+Oh, yeah, it's kind of a philosophical question.
+
+00:24:40.200 --> 00:24:45.559
+So a couple of things. First of all, it was a conversation
+
+00:24:45.560 --> 00:24:47.399
+I had with William Byrd,
+
+00:24:47.400 --> 00:24:50.519
+and he's a guy who makes the miniKanren framework for Scheme.
+
+00:24:50.520 --> 00:24:52.879
+It was his PhD thesis.
+
+00:24:52.880 --> 00:24:57.119
+He worked with, I'm sorry, I just can't remember his name.
+
+00:24:57.120 --> 00:24:59.679
+He worked at the University of Indiana.
+
+00:24:59.680 --> 00:25:03.839
+Another famous Scheme or Lisp person was there.
+
+00:25:03.840 --> 00:25:06.279
+Friedman, Dan Friedman was his advisor.
+
+00:25:06.280 --> 00:25:09.159
+Yeah, big name in Lisp.
+
+00:25:09.160 --> 00:25:12.839
+Anyway, so I was talking with William Byrd,
+
+00:25:12.840 --> 00:25:14.639
+and I'm a huge Haskell fan,
+
+00:25:14.640 --> 00:25:16.919
+and he told me why he didn't like Haskell at all,
+
+00:25:16.920 --> 00:25:19.639
+and kind of convinced me to try Scheme out.
+
+00:25:19.640 --> 00:25:22.759
+And what I really like about Scheme is,
+
+00:25:22.760 --> 00:25:25.399
+yeah, like you said, the minimalism,
+
+00:25:25.400 --> 00:25:29.839
+but it's more that it is very close
+
+00:25:29.840 --> 00:25:34.879
+to the mathematical framework of lambda calculus.
+
+00:25:34.880 --> 00:25:38.519
+Haskell is probably the most pure
+
+00:25:38.520 --> 00:25:39.919
+lambda calculus that I've ever used,
+
+00:25:39.920 --> 00:25:45.519
+but Scheme is like the simply typed lambda calculus,
+
+00:25:45.520 --> 00:25:47.799
+and That just appeals to me.
+
+00:25:47.800 --> 00:25:50.839
+I think, you know, if you have this tiny, tiny core language
+
+00:25:50.840 --> 00:25:55.599
+from which all of the computing can be defined,
+
+00:25:55.600 --> 00:25:57.119
+I think it's kind of a shame
+
+00:25:57.120 --> 00:26:00.079
+that so far we just haven't explored that space yet.
+
+00:26:00.080 --> 00:26:03.639
+I mean, there's compared to JavaScript or Python,
+
+00:26:03.640 --> 00:26:05.879
+there's very little scheme code out there
+
+00:26:05.880 --> 00:26:08.239
+and it could be doing so much. And I would just like to try
+
+00:26:08.240 --> 00:26:10.159
+and expand the scheme ecosystem
+
+00:26:10.160 --> 00:26:12.999
+and see just what this tiny little language can do.
+
+00:26:13.000 --> 00:26:14.479
+And I think we haven't even seen
+
+00:26:14.480 --> 00:26:16.839
+a fraction of what it can do.
+
+00:26:16.840 --> 00:26:22.399
+That's why I've chosen scheme.
+
+00:26:22.400 --> 00:26:24.719
+[Corwin]: Divya, I see you've got a bunch more comments.
+
+00:26:24.720 --> 00:26:26.679
+I think we're just about close to our time here,
+
+00:26:26.680 --> 00:26:28.279
+but if you wanted to jump back in,
+
+00:26:28.280 --> 00:26:30.519
+I'm sorry, I had to cut you off a little before.
+
+00:26:30.520 --> 00:26:33.959
+[Divya]: No, it's fine. No, it's fine.
+
+00:26:33.960 --> 00:26:36.599
+I think I agree with most of what he said.
+
+00:26:36.600 --> 00:26:40.679
+So, yeah, thank you so much.
+
+NOTE Closing thoughts
+
+00:26:40.680 --> 00:26:45.159
+[Corwin]: Um, closing thoughts, Ramin.
+
+00:26:45.160 --> 00:26:51.639
+[Ramin]: Yeah, I guess everybody, please, if you're interested,
+
+00:26:51.640 --> 00:26:56.719
+keep watching my Mastodon and keep watching my Codeberg.
+
+00:26:56.720 --> 00:27:01.559
+I'm going to try and squash this bug as quickly as I can.
+
+00:27:01.560 --> 00:27:03.279
+I hope early next year,
+
+00:27:03.280 --> 00:27:07.519
+hopefully not much later than February,
+
+00:27:07.520 --> 00:27:12.039
+I'll actually be able to start taking in contributions
+
+00:27:12.040 --> 00:27:16.719
+for some of the Emacs Lisp built-ins in the code base.
+
+00:27:16.720 --> 00:27:21.959
+So, please keep watching. The pace of my development
+
+00:27:21.960 --> 00:27:24.279
+has increased pretty rapidly recently,
+
+00:27:24.280 --> 00:27:25.839
+and I think we're pretty close
+
+00:27:25.840 --> 00:27:29.119
+to getting something that we can all use together.
+
+00:27:29.120 --> 00:27:31.719
+[Corwin]: Thank you once again for your amazing talk,
+
+00:27:31.720 --> 00:27:34.039
+for your exceptional work,
+
+00:27:34.040 --> 00:27:36.599
+and for jumping in, doing the live Q&A,
+
+00:27:36.600 --> 00:27:40.039
+rolling with us here as we have yet another
+
+00:27:40.040 --> 00:27:42.079
+"we'll see how it goes" conference.
+
+00:27:42.080 --> 00:27:44.279
+It's been just amazing so far,
+
+00:27:44.280 --> 00:27:46.839
+and this talk is no small part of that. Thank you.
+
+00:27:46.840 --> 00:27:50.279
+[Ramin]: Oh, thank you so much. Yeah. OK, cool.
+
+00:27:50.280 --> 00:27:51.834
+And thanks for all the questions, everyone.
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-close--sunday-closing-remarks--main.vtt b/2025/captions/emacsconf-2025-sun-close--sunday-closing-remarks--main.vtt
new file mode 100644
index 00000000..d2ad3832
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sun-close--sunday-closing-remarks--main.vtt
@@ -0,0 +1,676 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:17.279
+screen. That screen. Yes. All right. Thank you so much.
+
+00:00:17.280 --> 00:00:22.439
+We have made it thus far. It is the end of EmacsConf 2025.
+
+00:00:22.440 --> 00:00:24.359
+Oh, I better remember to open this
+
+00:00:24.360 --> 00:00:32.999
+in case anyone wants to join me in this room.
+
+00:00:49.460 --> 00:00:51.139
+Hang on a sec. And normally all this stuff
+
+00:00:51.140 --> 00:00:52.959
+gets done automatically by my scripts,
+
+00:00:52.960 --> 00:00:55.250
+so I'm doing it manually. Ah, there you go.
+
+00:00:55.251 --> 00:00:58.125
+Okay, now people can join. Hooray, we made it!
+
+00:00:58.126 --> 00:01:01.439
+Today was great, and yesterday was great too,
+
+00:01:01.440 --> 00:01:06.519
+with so many fascinating talks and conversations.
+
+00:01:06.520 --> 00:01:09.599
+I'm really, really glad that it all worked out,
+
+00:01:09.600 --> 00:01:12.159
+despite some running around
+
+00:01:12.160 --> 00:01:14.679
+and figuring things out on the fly,
+
+00:01:14.680 --> 00:01:18.559
+we all managed to get there.
+
+00:01:18.560 --> 00:01:20.639
+I actually have some of the live
+
+00:01:20.640 --> 00:01:22.959
+talks recordings up already
+
+00:01:22.960 --> 00:01:28.399
+on media.emacsconf.org and YouTube, assuming things work.
+
+00:01:28.400 --> 00:01:33.319
+I'm just going to republish it from Emacs naturally.
+
+00:01:33.320 --> 00:01:36.359
+As you can see, I was e-debugging things
+
+00:01:36.360 --> 00:01:37.479
+to the very last minute.
+
+00:01:37.480 --> 00:01:39.799
+Yeah, feel free to spread the word.
+
+00:01:39.800 --> 00:01:42.519
+I check the Emacs hashtag every week
+
+00:01:42.520 --> 00:01:45.839
+as part of the Emacs news process anyway.
+
+00:01:45.840 --> 00:01:47.839
+So if you have any favorite talks,
+
+00:01:47.840 --> 00:01:52.039
+that's a great way to share the ideas with more people,
+
+00:01:52.040 --> 00:01:54.559
+and then even more conversations can happen.
+
+00:01:54.560 --> 00:01:58.079
+The prerecorded talks, as I mentioned,
+
+00:01:58.080 --> 00:02:00.239
+are already up on the wiki
+
+00:02:00.240 --> 00:02:05.199
+and at the media emacsconf.org slash 2027 website.
+
+00:02:05.200 --> 00:02:10.959
+Sorry, 2025. We're not in the time machine. 2025 site.
+
+00:02:10.960 --> 00:02:13.799
+And they should already be on YouTube as well.
+
+00:02:13.800 --> 00:02:16.399
+I will upload the late submissions
+
+00:02:16.400 --> 00:02:18.999
+and the live talks and the Q&A sessions
+
+00:02:19.000 --> 00:02:20.439
+over the next week or two.
+
+00:02:20.440 --> 00:02:23.199
+I usually get that done very quickly.
+
+00:02:23.200 --> 00:02:27.519
+I didn't even finish this sentence.
+
+00:02:27.520 --> 00:02:31.079
+I'll post an update to the Emacs Conf Discuss mailing list,
+
+00:02:31.080 --> 00:02:34.479
+so feel free to subscribe to that if you'd like an update.
+
+00:02:34.480 --> 00:02:37.559
+If you've got ideas for making things better,
+
+00:02:37.560 --> 00:02:40.959
+then feel free to drop them into the Etherpad
+
+00:02:40.960 --> 00:02:45.759
+so that we can make next year's conference even smoother.
+
+00:02:45.760 --> 00:02:51.119
+I had a lot of people watching, so thank you for that.
+
+00:02:51.120 --> 00:02:53.719
+And of course, thanks to all the speakers
+
+00:02:53.720 --> 00:02:56.359
+who put hours and hours into their presentations,
+
+00:02:56.360 --> 00:03:01.079
+the volunteers who helped both before and during the conference
+
+00:03:01.080 --> 00:03:03.439
+and who will help in the days ahead
+
+00:03:03.440 --> 00:03:08.919
+as we get everything extracted and packaged and transcribed even,
+
+00:03:08.920 --> 00:03:11.239
+and a nice chapter indices on the Q&A
+
+00:03:11.240 --> 00:03:14.399
+so you can jump to when a specific question was answered,
+
+00:03:14.400 --> 00:03:16.519
+all that good stuff.
+
+00:03:16.520 --> 00:03:19.799
+and to all those other people in their lives
+
+00:03:19.800 --> 00:03:23.479
+whose patience and support make all of this possible.
+
+00:03:23.480 --> 00:03:26.919
+So thank you so much for that.
+
+00:03:26.920 --> 00:03:30.199
+This year's host, you saw Corwin and you saw,
+
+00:03:30.200 --> 00:03:32.319
+I mean, what's, why am I,
+
+00:03:32.320 --> 00:03:34.439
+wait, I'm like buzzing all over the place
+
+00:03:34.440 --> 00:03:37.039
+as people are mentioning my nick on IRC.
+
+00:03:37.040 --> 00:03:40.319
+All right, now that I'm in do not disturb mode.
+
+00:03:40.320 --> 00:03:42.199
+So thank you to the hosts
+
+00:03:42.200 --> 00:03:43.839
+and thank you to other volunteers,
+
+00:03:43.840 --> 00:03:49.919
+JC and Trico and James and Amitav and Rodion and Jaybird and Indra.
+
+00:03:49.920 --> 00:03:55.119
+and Yang3, and Bhavin, and Michael, and Ian,
+
+00:03:55.120 --> 00:03:57.879
+and Jamie, and Ihor, and FlowyCoder,
+
+00:03:57.880 --> 00:03:58.839
+and probably other people
+
+00:03:58.840 --> 00:04:02.599
+that I have forgotten to copy out of my conference.org file
+
+00:04:02.600 --> 00:04:05.159
+and into this, but thank you anyway.
+
+00:04:05.160 --> 00:04:08.039
+Thank you to the Free Software Foundation.
+
+00:04:08.040 --> 00:04:12.159
+They host the mailing list, they host the media server,
+
+00:04:12.160 --> 00:04:16.359
+and of course, they've got like Emacs, so that's awesome.
+
+00:04:16.360 --> 00:04:23.479
+To make things easier, our streams are actually not on my computer.
+
+00:04:23.480 --> 00:04:26.279
+We use OBS and a server,
+
+00:04:26.280 --> 00:04:30.279
+a fairly beefy one that Ry P shares with us.
+
+00:04:30.280 --> 00:04:33.279
+So then I can VNC into it and control OBS
+
+00:04:33.280 --> 00:04:36.239
+and stream to IceCast and all that other goodness.
+
+00:04:36.240 --> 00:04:39.719
+And I don't have to worry about my computer stressing out.
+
+00:04:39.720 --> 00:04:43.439
+It's all good. And so we use a whole lot of free
+
+00:04:43.440 --> 00:04:45.519
+and open source software in the stack.
+
+00:04:45.520 --> 00:04:47.119
+So we are very, very grateful
+
+00:04:47.120 --> 00:04:49.159
+for all the users and contributors
+
+00:04:49.160 --> 00:04:50.759
+who make all of that possible.
+
+00:04:50.760 --> 00:04:55.919
+Things like Emacs and Org Mode and ERC and Tramp and Magit
+
+00:04:55.920 --> 00:04:59.159
+and BigBlueButton and Etherpad and IckyWicky and IceCast
+
+00:04:59.160 --> 00:05:02.319
+and OBS and TheLaunch and LiberaChat and FFmpeg
+
+00:05:02.320 --> 00:05:05.719
+and OpenAI Whisper, WhisperX, different interface.
+
+00:05:05.720 --> 00:05:09.639
+The Aeneas forced alignment tool, site transfer for uploads,
+
+00:05:09.640 --> 00:05:11.679
+subed for editing the subtitles,
+
+00:05:11.680 --> 00:05:14.439
+sub-seg for cutting the subtitles into nice chunks
+
+00:05:14.440 --> 00:05:17.399
+so that you're not like trying to read a whole lot in one line,
+
+00:05:17.400 --> 00:05:22.759
+Mozilla Firefox, MPV and TamperMonkey
+
+00:05:22.760 --> 00:05:25.919
+so that everything gets automatically logged in
+
+00:05:25.920 --> 00:05:30.479
+when the stream switches to like a big blue button room, it's handy.
+
+00:05:30.480 --> 00:05:32.999
+and of course, many other tools and services
+
+00:05:33.000 --> 00:05:35.199
+that we use to prepare and host this year's conference.
+
+00:05:35.200 --> 00:05:37.199
+Thanks to Shoshin for the music.
+
+00:05:37.200 --> 00:05:39.479
+He's an Emacs geek as well.
+
+00:05:39.480 --> 00:05:42.159
+If you also have music that you'd like to share with us
+
+00:05:42.160 --> 00:05:44.999
+under the Creative Commons Attribution License,
+
+00:05:45.000 --> 00:05:47.239
+please feel free to let me know
+
+00:05:47.240 --> 00:05:50.679
+or I should put in my email address here.
+
+00:05:50.680 --> 00:05:57.079
+Yeah, sacha@sachachua.com.
+
+00:05:57.080 --> 00:05:59.559
+So let us know in case you have music
+
+00:05:59.560 --> 00:06:01.599
+or other things you want to share.
+
+00:06:01.600 --> 00:06:03.599
+Thanks to the people who donated
+
+00:06:03.600 --> 00:06:06.439
+via the FSF working together program.
+
+00:06:06.440 --> 00:06:09.919
+It costs like I think less than a hundred dollars
+
+00:06:09.920 --> 00:06:11.319
+to run this whole thing
+
+00:06:11.320 --> 00:06:14.879
+that the biggest thing really is people's time.
+
+00:06:14.880 --> 00:06:17.119
+And thank you so much for sharing that with us.
+
+00:06:17.120 --> 00:06:20.719
+So yes, but thank you specifically to Scott and Jonathan
+
+00:06:20.720 --> 00:06:23.039
+and the other anonymous donors
+
+00:06:23.040 --> 00:06:26.479
+through the Working Together program.
+
+00:06:26.480 --> 00:06:30.199
+And that's where we are so far. Feel free to join me.
+
+00:06:30.200 --> 00:06:32.319
+I can be here until the kiddo says
+
+00:06:32.320 --> 00:06:34.719
+I have not given her enough hugs for today.
+
+00:06:34.720 --> 00:06:40.439
+But if you want to like do a quick recap of your favorite talks
+
+00:06:40.440 --> 00:06:43.719
+or how you're excited to take things going forward
+
+00:06:43.720 --> 00:06:45.159
+and all that stuff.
+
+00:06:45.160 --> 00:06:47.719
+You can join me in this as Sunday closing.
+
+00:06:47.720 --> 00:06:49.519
+If you look at the talk page,
+
+00:06:49.520 --> 00:06:51.999
+there's going to be theoretically
+
+00:06:52.000 --> 00:06:54.999
+a big blue button link there that you can join.
+
+00:06:55.000 --> 00:07:04.839
+But thank you for this. And now it's like awkward silence.
+
+00:07:04.840 --> 00:07:07.719
+I'm wondering what you learned most
+
+00:07:07.720 --> 00:07:09.519
+from this conference this year.
+
+00:07:09.520 --> 00:07:11.679
+Because I'm running around so much,
+
+00:07:11.680 --> 00:07:23.839
+I don't get a lot of the live stuff.
+
+00:07:23.840 --> 00:07:30.039
+Like, for example, when I was listening to your Q&A,
+
+00:07:30.040 --> 00:07:34.519
+I had it in one ear and I had Christian's dental casting Q&A in the other ear,
+
+00:07:34.520 --> 00:07:36.879
+so that just in case he had questions also.
+
+00:07:36.880 --> 00:07:39.559
+which kind of just meant I was listening for silences
+
+00:07:39.560 --> 00:07:43.199
+and that meant I had to read the next question out loud.
+
+00:07:43.200 --> 00:07:46.879
+But I love going through the videos and captioning them.
+
+00:07:46.880 --> 00:07:50.599
+And I'm really excited about the kinds of conversations
+
+00:07:50.600 --> 00:07:53.719
+that people have been having on the etherpacks and IRC.
+
+00:07:53.720 --> 00:07:57.039
+So I think the biggest thing that I'm learning
+
+00:07:57.040 --> 00:08:00.999
+is that people are having a lot of fun with Emacs.
+
+00:08:01.000 --> 00:08:05.199
+Which is no surprise, of course.
+
+00:08:05.200 --> 00:08:09.079
+But it's always so exciting to see people bump into other people
+
+00:08:09.080 --> 00:08:11.159
+whose minds work the same way.
+
+00:08:11.160 --> 00:08:17.639
+And then who knows where that will go over the next year, over the next years.
+
+00:08:17.640 --> 00:08:22.039
+That's sort of an interesting topic,
+
+00:08:22.040 --> 00:08:24.279
+is like how to keep the conversations
+
+00:08:24.280 --> 00:08:27.439
+going between the conferences, you know?
+
+00:08:27.440 --> 00:08:33.039
+is where do people hang out and discuss these things?
+
+00:08:33.040 --> 00:08:49.359
+Reddit's one place. IRC. I figure it's... Sorry, go ahead. I'm done.
+
+00:08:49.360 --> 00:08:54.879
+I think it's rather...
+
+00:08:54.880 --> 00:08:59.679
+I like to think of it as the start of the conversation.
+
+00:08:59.680 --> 00:09:08.159
+And so we have around 100 people,
+
+00:09:08.160 --> 00:09:12.639
+more than 100, around 200 people yesterday,
+
+00:09:12.640 --> 00:09:14.999
+around 100 today joining us.
+
+00:09:15.000 --> 00:09:16.999
+And those are a lot of conversations,
+
+00:09:17.000 --> 00:09:18.639
+but then they're the conversations that happen
+
+00:09:18.640 --> 00:09:22.399
+when people look up the videos and the captions
+
+00:09:22.400 --> 00:09:25.399
+and the resources that people have shared.
+
+00:09:25.400 --> 00:09:30.079
+And so I think it gives us a lot of material,
+
+00:09:30.080 --> 00:09:31.679
+a lot of exciting points
+
+00:09:31.680 --> 00:09:34.359
+for plenty of other conversations this year.
+
+00:09:34.360 --> 00:09:41.119
+Yeah, it's a great community. Oh, yes, I should mention,
+
+00:09:41.120 --> 00:09:42.799
+the conversation doesn't stop here
+
+00:09:42.800 --> 00:09:44.399
+because there are mailing lists.
+
+00:09:44.400 --> 00:09:45.999
+Thank you, Rudy, for the reminder.
+
+00:09:46.000 --> 00:09:50.759
+If you're looking for more of this kind of sense of community,
+
+00:09:50.760 --> 00:09:56.879
+there's like, well, Emacs Develop course has a lot of technical discussions going on,
+
+00:09:56.880 --> 00:10:00.559
+but the Org Mode mailing list is very nice.
+
+00:10:00.560 --> 00:10:02.719
+There are also lots of meetups.
+
+00:10:02.720 --> 00:10:05.199
+There's definitely a meetup every month.
+
+00:10:05.200 --> 00:10:10.639
+Org Meetup, in fact, is happening in a couple of days.
+
+00:10:10.640 --> 00:10:13.159
+If you look on the Emacs wiki for user groups,
+
+00:10:13.160 --> 00:10:14.719
+or you check my Emacs news,
+
+00:10:14.720 --> 00:10:16.959
+or you check, if you look for like Emacs calendar,
+
+00:10:16.960 --> 00:10:20.679
+which I think I put on like emacslife.com slash calendar,
+
+00:10:20.680 --> 00:10:22.639
+then you'll find upcoming meetups.
+
+00:10:22.640 --> 00:10:26.999
+so that you can keep reconnecting with people.
+
+00:10:27.000 --> 00:10:29.599
+And if you come up with something cool,
+
+00:10:29.600 --> 00:10:33.759
+you don't have to wait until the next Emacs Con
+
+00:10:33.760 --> 00:10:35.279
+to show it to everybody.
+
+00:10:35.280 --> 00:10:43.079
+You can also go to these meetups and start sharing it
+
+00:10:43.080 --> 00:10:53.319
+and get feedback and make it even better and so on.
+
+00:10:53.320 --> 00:10:56.399
+Great, thank you. Rudy says, the Emacs bugs mailing list
+
+00:10:56.400 --> 00:10:58.599
+is surprisingly interesting as well.
+
+00:10:58.600 --> 00:11:01.439
+Lots of discussion on there, various details
+
+00:11:01.440 --> 00:11:04.159
+and upcoming little features every single day.
+
+00:11:04.160 --> 00:11:37.999
+Oh yes, Maddie would like another shout out for Emacs Carnival
+
+00:11:38.000 --> 00:11:41.319
+which is a monthly blogging people share topics
+
+00:11:41.320 --> 00:11:46.999
+so that people can all write about the same thing
+
+00:11:47.000 --> 00:11:52.439
+and then discover other people's perspectives on it.
+
+00:11:52.440 --> 00:11:54.839
+There have been quite a few now.
+
+00:11:54.840 --> 00:11:57.759
+So if you want, you can go through the Emacs Carnival page
+
+00:11:57.760 --> 00:12:01.239
+in the Emacs wiki and start exploring the past issues.
+
+00:12:01.240 --> 00:12:04.039
+The host will have a list of links
+
+00:12:04.040 --> 00:12:07.079
+to the people who've submitted. So it's a great way to see
+
+00:12:07.080 --> 00:12:09.919
+what other people in the community
+
+00:12:09.920 --> 00:12:11.359
+have been thinking about something.
+
+00:12:11.360 --> 00:12:18.279
+Also, people are very curious about the fonts and templates
+
+00:12:18.280 --> 00:12:20.599
+that people use for their presentations.
+
+00:12:20.600 --> 00:12:22.599
+It's always, that's one of the things
+
+00:12:22.600 --> 00:12:23.959
+I love about presentations.
+
+00:12:23.960 --> 00:12:26.359
+You kind of get this, you pick up so much more
+
+00:12:26.360 --> 00:12:28.599
+when you're looking over someone's shoulder,
+
+00:12:28.600 --> 00:12:32.079
+the things that they would forget to even mention
+
+00:12:32.080 --> 00:12:34.199
+because it's not the point of their talk
+
+00:12:34.200 --> 00:12:36.839
+or they take it for granted.
+
+00:12:36.840 --> 00:12:40.519
+So, yes. if the presenters can share their fonts
+
+00:12:40.520 --> 00:12:44.479
+and setups and themes and stuff like that.
+
+00:12:44.480 --> 00:12:47.279
+Or if you as a viewer have been watching something
+
+00:12:47.280 --> 00:12:50.639
+and you see someone do this really cool keyword shortcut
+
+00:12:50.640 --> 00:12:53.279
+and you have no idea how they did that,
+
+00:12:53.280 --> 00:12:56.119
+because of course, you know, it just flies by too quickly
+
+00:12:56.120 --> 00:12:57.639
+and it's part of their muscle memory,
+
+00:12:57.640 --> 00:12:59.239
+so they don't even explain it anymore.
+
+00:12:59.240 --> 00:13:01.799
+Go ahead and ask the speakers, hey,
+
+00:13:01.800 --> 00:13:05.799
+that command that you did, that just did the magic, how?
+
+00:13:05.800 --> 00:13:11.759
+So yes, please feel free to go back over the videos,
+
+00:13:11.760 --> 00:13:12.679
+look at them slowly,
+
+00:13:12.680 --> 00:13:45.079
+look for interesting things you want to learn more about.
+
+00:13:45.080 --> 00:13:49.159
+All right, it sounds like we are
+
+00:13:49.160 --> 00:13:53.239
+pretty much ready to wrap up.
+
+00:13:53.240 --> 00:13:58.999
+So thank you, everyone, for coming.
+
+00:13:59.000 --> 00:14:01.519
+See you next year and also in the months in between
+
+00:14:01.520 --> 00:14:02.479
+because there are meetups,
+
+00:14:02.480 --> 00:14:04.039
+which you're going to go check out and have fun at.
+
+00:14:04.040 --> 00:14:05.879
+Thank you for this.
+
+00:14:05.880 --> 00:14:07.919
+Yes, thank you for this nice Emacs weekend.
+
+00:14:07.920 --> 00:14:14.319
+Thanks for putting it all together, Sacha and everyone.
+
+00:14:14.320 --> 00:14:19.326
+That's great. Bye!
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-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main--chapters.vtt b/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main--chapters.vtt
new file mode 100644
index 00000000..b0c089ec
--- /dev/null
+++ b/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main--chapters.vtt
@@ -0,0 +1,68 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:15.399
+Introduction
+
+00:00:15.400 --> 00:01:05.439
+Current state of mobile ecosystem
+
+00:01:05.440 --> 00:02:06.719
+Emacs replaceability
+
+00:02:06.720 --> 00:03:46.959
+Weightlifting tracking
+
+00:03:46.960 --> 00:04:58.399
+Difficulties
+
+00:04:58.400 --> 00:07:45.459
+Demo
+
+00:07:45.460 --> 00:08:56.319
+Org-mode based
+
+00:08:56.320 --> 00:10:09.759
+Notifications (demo)
+
+00:10:09.760 --> 00:10:45.159
+Unexpected Keyboard
+
+00:10:45.160 --> 00:12:31.439
+Syncthing Fork
+
+00:12:31.440 --> 00:13:33.039
+Q: Very cool! It would be nice to build some One-rep max calculation formulae into calc
+
+00:13:33.040 --> 00:14:17.759
+Q: Do you have plans to extend this to clock-report kind of reporting? graphical reports, etc?
+
+00:14:17.760 --> 00:15:51.559
+Q: Have you ever wanted to modify the functionality on your mobile device while working out? Any good or challenging experiences or tips with that?
+
+00:15:51.560 --> 00:17:08.599
+Q: Does the rest timer end with an audible notification at the end of the time?
+
+00:17:08.600 --> 00:17:31.359
+Q: Have you tried other keyboards such as Hacker's keyboard?
+
+00:17:31.360 --> 00:19:05.359
+Q: Another keyboard question - have you tried the "flickboard" on f-droid? It's the craziest keyboard, you use one thumb.
+
+00:19:05.360 --> 00:20:52.559
+Q: This user interface is simplified but still keyboard based, can you think of ways to make it more touch based?
+
+00:20:52.560 --> 00:23:15.999
+Q: Is a touch interface something you'd prefer to dive into yourself or factor out into a higher-level API?
+
+00:23:16.000 --> 00:24:19.919
+Q: You mentioned file sync, what have you found works well for you?
+
+00:24:19.920 --> 00:26:24.759
+Q: I'm curious about the development experience. Do you do everything on the phone?
+
+00:26:24.760 --> 00:28:20.319
+Q: Have you thought about integrating cardio tracking like timed runs, bike rides, etc?
+
+00:28:20.320 --> 00:29:12.560
+Closing
diff --git a/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt b/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt
new file mode 100644
index 00000000..a2bf20a4
--- /dev/null
+++ b/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt
@@ -0,0 +1,1725 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00.000 --> 00:05.819
+And you're ready to go. All right, perfect.
+
+00:05.820 --> 00:07.875
+Hello, my name is Zachary Romero
+
+00:07.876 --> 00:08.879
+and today I'll be giving a talk
+
+00:08.880 --> 00:12.719
+on how I'm using Emacs for Android
+
+00:12.720 --> 00:15.399
+to replace my fitness app I normally use.
+
+NOTE Current state of mobile ecosystem
+
+00:15.400 --> 00:17.239
+So it goes without saying
+
+00:17.240 --> 00:21.559
+that a lot of the mobile ecosystem these days
+
+00:21.560 --> 00:25.439
+are pretty hostile to the interest of its users.
+
+00:25.440 --> 00:26.999
+So there's privacy policies
+
+00:27.000 --> 00:00:29.632
+that are constantly collecting your data and selling it.
+
+00:00:29.633 --> 00:00:33.840
+without your consent, bombardment of ads.
+
+00:00:33.841 --> 00:37.999
+And then there's a lot of features that are locked.
+
+00:38.000 --> 00:40.479
+Sometimes features that the app gives you,
+
+00:40.480 --> 00:42.959
+they're put behind paywalls.
+
+00:42.960 --> 00:45.159
+And so a lot of the ecosystem
+
+00:45.160 --> 00:49.119
+isn't in the best interest of users.
+
+00:49.120 --> 00:51.959
+And obviously there are apps like on F-Droid
+
+00:51.960 --> 00:56.799
+and the Android ecosystem that do try to address this,
+
+00:56.800 --> 00:59.159
+but the solutions overall are lagging
+
+00:59.160 --> 01:05.439
+behind maybe desktop computers.
+
+NOTE Emacs replaceability
+
+01:05.440 --> 01:14.479
+One option that has come in the past few years
+
+01:14.480 --> 01:17.239
+is Emacs on Android. It's just a normal Emacs build,
+
+01:17.240 --> 01:21.159
+and so it can do everything, in theory, that Emacs can do.
+
+01:21.160 --> 01:24.399
+And so I got to thinking how could I, how I could use Emacs
+
+01:24.400 --> 01:27.039
+to replace some of the proprietary apps
+
+01:27.040 --> 01:28.479
+that I use on a daily basis?
+
+01:28.480 --> 01:31.279
+So I just went thinking about the apps,
+
+01:31.280 --> 01:33.039
+the apps that Emacs can replace.
+
+01:33.040 --> 01:35.119
+Some of them seem quite easy.
+
+01:35.120 --> 01:39.879
+Some of them... maybe might take a little effort but seem doable.
+
+01:39.880 --> 01:41.959
+And then obviously, there's a whole class of apps
+
+01:41.960 --> 01:47.199
+that would be pretty impossible to emulate on Emacs.
+
+01:47.200 --> 01:52.679
+So I mean besides like to-do lists, note taking, Org mode,
+
+01:52.680 --> 01:55.759
+one thing that came to mind was my fitness tracking app.
+
+01:55.760 --> 01:59.239
+This is an app I use pretty often
+
+01:59.240 --> 02:06.719
+and in theory, Emacs should be quite usable for this case.
+
+NOTE Weightlifting tracking
+
+02:06.720 --> 02:09.759
+So weightlifting tracking is,
+
+02:09.760 --> 02:13.599
+so it's normally used to record
+
+02:13.600 --> 02:17.519
+what exercises you do at what intensity
+
+02:17.520 --> 02:20.719
+in order to progress week by week.
+
+02:20.720 --> 02:25.719
+So you might plan on like slowly increasing
+
+02:25.720 --> 02:27.399
+the amount of effort you put into
+
+02:27.400 --> 02:30.159
+your various workouts from week to week,
+
+02:30.160 --> 02:34.079
+and then maybe you'll have put some rest weeks in there.
+
+02:34.080 --> 02:37.439
+And so you want a detailed plan
+
+02:37.440 --> 02:40.439
+and recording of what you do throughout the week.
+
+02:40.440 --> 02:43.919
+And so I guess way back, normally
+
+02:43.920 --> 02:45.919
+this would have been done on pen and paper.
+
+02:45.920 --> 02:48.079
+So you would take your notebook
+
+02:48.080 --> 02:50.999
+and just write down on paper what you did.
+
+02:51.000 --> 02:56.559
+And this obviously works, and a lot of people do do this.
+
+02:56.560 --> 02:59.799
+But these days, there are quite a few apps
+
+02:59.800 --> 03:02.639
+that make this process quite seamless and effortless.
+
+03:02.640 --> 03:06.279
+So just as an example, really fast.
+
+03:06.280 --> 03:09.039
+So this is one of the popular apps out these days
+
+03:09.040 --> 03:10.399
+that has such a feature.
+
+03:10.400 --> 03:13.479
+So you can save all your workout routines
+
+03:13.480 --> 03:14.319
+and this nice interface.
+
+03:14.320 --> 03:18.719
+And so you click a button and then it starts,
+
+03:18.720 --> 03:20.919
+you have the workout interface and then
+
+03:20.920 --> 03:23.439
+You can kind of, you go through your workout
+
+03:23.440 --> 03:25.079
+and then you can input,
+
+03:25.080 --> 03:27.399
+you can input like what things you do.
+
+03:27.400 --> 03:29.119
+And then it has this like fancy timer at the bottom.
+
+03:29.120 --> 03:30.959
+So like, this is kind of like the,
+
+03:30.960 --> 03:35.839
+kind of like what a lot of people use these days,
+
+03:35.840 --> 03:39.319
+just for, just for, to make it as frictionless as possible.
+
+03:39.320 --> 03:44.359
+So obviously you can do like this bare bone text editing in Emacs.
+
+03:44.360 --> 03:46.959
+You just have to open up an Org mode file and just right away...
+
+NOTE Difficulties
+
+03:46.960 --> 03:48.879
+So, but there are a number of problems with this.
+
+03:48.880 --> 03:50.559
+So like, especially on mobile,
+
+03:50.560 --> 03:52.719
+character by character editing,
+
+03:52.720 --> 03:55.879
+just like writing all these, this text out manually,
+
+03:55.880 --> 03:58.759
+maybe some formatting, it can be pretty tedious
+
+03:58.760 --> 04:01.839
+and not, maybe not something you want to, you want to have to do,
+
+04:01.840 --> 04:04.559
+especially if you're like exhausted or tired.
+
+04:04.560 --> 04:06.479
+So, I mean, there's also like the problem
+
+04:06.480 --> 04:09.439
+of like remembering which, where in your workout you are,
+
+04:09.440 --> 04:11.839
+like how many of these, these, like which,
+
+04:11.840 --> 04:13.479
+which, like where are you, where you are,
+
+04:13.480 --> 04:17.159
+like, um like which set number are you on,
+
+04:17.160 --> 04:17.679
+are you on the first, second,
+
+04:17.680 --> 04:19.919
+and then also, like, maybe you failed,
+
+04:19.920 --> 04:22.239
+maybe you weren't able to perform this,
+
+04:22.240 --> 04:24.279
+and maybe you have to make a note that...
+
+04:24.280 --> 04:28.279
+so that's even more text editing you would have to do.
+
+04:28.280 --> 04:30.959
+Also some things like unit conversions,
+
+04:30.960 --> 04:31.799
+like you could use calc,
+
+04:31.800 --> 04:35.879
+but then you'd have to open up the calc,
+
+04:35.880 --> 04:39.799
+and then number, unit conversion, switch buffers.
+
+04:39.800 --> 04:41.999
+So it's doable, but it takes a little effort.
+
+04:42.000 --> 04:43.439
+And then also the rest timer.
+
+04:43.440 --> 04:45.399
+So if you want to make sure you're resting
+
+04:45.400 --> 04:46.999
+in between these exercises you do,
+
+04:47.000 --> 04:51.079
+you'd have to maybe open up another app,
+
+04:51.080 --> 04:52.439
+or maybe you'd have to bring your watch.
+
+04:52.440 --> 04:53.719
+So that's another thing that
+
+04:53.720 --> 04:58.399
+these apps normally would do for you.
+
+NOTE Demo
+
+04:58.400 --> 05:02.559
+So writing some Elisp, I created a package
+
+05:02.560 --> 05:04.479
+to try to emulate that experience
+
+05:04.480 --> 05:06.079
+I showed you on that other app.
+
+05:06.080 --> 05:08.159
+So let me just demo this real fast.
+
+05:08.160 --> 05:13.679
+So here, the package is called org-fit.
+
+05:13.680 --> 05:17.359
+And so here, I'm going to start a new workout.
+
+05:17.360 --> 05:19.559
+And then here, I'm prompted by a list of routines
+
+05:19.560 --> 05:22.159
+that I have pre-written in Org mode.
+
+05:22.160 --> 05:25.759
+So the header name is the routine name.
+
+05:25.760 --> 05:29.279
+And so I can, out of all these routines I've written,
+
+05:29.280 --> 05:35.959
+I can select one and then also I can have it populate.
+
+05:35.960 --> 05:41.519
+So here it's populating preset weights I had for it.
+
+05:41.520 --> 05:45.839
+So yeah, so basically this is my current attempt
+
+05:45.840 --> 05:47.599
+to emulate that experience.
+
+05:47.600 --> 05:51.039
+So here we can, so here like the arrows and the tabs,
+
+05:51.040 --> 05:55.239
+they only go through like the, editable fields I can so
+
+05:55.240 --> 05:58.119
+on the notes section you see you see here in the table
+
+05:58.120 --> 06:00.439
+this is like the my plan for the day
+
+06:00.440 --> 06:02.159
+so I can press space to easily
+
+06:02.160 --> 06:03.839
+just fill out the data tab
+
+06:03.840 --> 06:06.879
+go the next the next the next set
+
+06:06.880 --> 06:10.239
+I can press quote to copy from above
+
+06:10.240 --> 06:13.359
+There's also some interesting things with Android,
+
+06:13.360 --> 06:15.719
+like you can bind the volume down key.
+
+06:15.720 --> 06:17.319
+So here I have the volume down key
+
+06:17.320 --> 06:21.439
+just like inputting the data automatically
+
+06:21.440 --> 06:22.399
+and going to the next field.
+
+06:22.400 --> 06:26.639
+So you see there it's quite seamless input of information.
+
+06:26.640 --> 06:30.119
+Notice also when all the sets
+
+06:30.120 --> 06:31.839
+of a single exercise are done,
+
+06:31.840 --> 06:34.759
+it marks that heading as done.
+
+06:34.760 --> 06:37.959
+Also, if you notice at the top, on the left,
+
+06:37.960 --> 06:42.239
+you have the session time for the workout.
+
+06:42.240 --> 06:44.199
+And then on here, we have the rest timer.
+
+06:44.200 --> 06:48.519
+So the rest timer is actually just defined as an org mode property.
+
+06:48.520 --> 06:50.839
+So here it's saying that, okay,
+
+06:50.840 --> 06:52.759
+you should start the auto rest timer
+
+06:52.760 --> 06:54.479
+for three minutes every time you do a set.
+
+06:54.480 --> 06:58.279
+So here, let's fill it in, go to the next one.
+
+06:58.280 --> 07:00.639
+And now the rest timer is set for three minutes.
+
+07:00.640 --> 07:03.079
+And so here I have, I can just rest
+
+07:03.080 --> 07:05.879
+I just have the information right here.
+
+07:05.880 --> 07:08.119
+Also, you'll notice here we have
+
+07:08.120 --> 07:09.439
+some calculations at the bottom.
+
+07:09.440 --> 07:12.159
+This is something also that those apps provide,
+
+07:12.160 --> 07:14.319
+like in order to make sure you're tracking
+
+07:14.320 --> 07:16.719
+on certain levels of intensity.
+
+07:16.720 --> 07:22.599
+Let's see, what else do we have?
+
+07:22.600 --> 07:30.879
+We can add warmups, automatic warmup set inserting, unit conversions,
+
+07:30.880 --> 07:33.439
+and then Something else to know
+
+07:33.440 --> 07:35.439
+is that all of these actions I'm doing,
+
+07:35.440 --> 07:37.079
+they're all bound to a single key
+
+07:37.080 --> 07:40.159
+to make things as effortless as possible.
+
+07:40.160 --> 00:07:45.459
+So yeah, that's the app in a nutshell.
+
+NOTE Org-mode based
+
+00:07:45.460 --> 07:47.079
+And then, so how is this done?
+
+07:47.080 --> 07:51.239
+So the philosophy behind this is to use Org mode as a base.
+
+07:51.240 --> 07:55.639
+So all the functionality, the timer for the session,
+
+07:55.640 --> 08:00.319
+that's just clock in or clock in.
+
+08:00.320 --> 08:05.159
+The various, all the data you fill in,
+
+08:05.160 --> 08:09.519
+the exercises, routines, those are just org headings,
+
+08:09.520 --> 08:12.159
+like with nested entries.
+
+08:12.160 --> 08:14.959
+So yeah, and then all the movement,
+
+08:14.960 --> 08:16.759
+like a lot of the editing stuff
+
+08:16.760 --> 08:18.559
+is just going off of the Org mode API.
+
+08:18.560 --> 08:22.919
+So like here, my upper field, is actually just using the,
+
+08:22.920 --> 08:26.239
+so it's using like the org-table-goto-line function.
+
+08:26.240 --> 08:28.999
+Adding a note is org-table-put.
+
+08:29.000 --> 08:31.319
+So like all of my functions I'm using,
+
+08:31.320 --> 08:33.239
+they're just building off of the org mode API.
+
+08:33.240 --> 08:38.199
+And I found that this pattern worked work pretty well.
+
+08:38.200 --> 08:41.959
+So you get the benefits of Org mode
+
+08:41.960 --> 08:48.839
+and then the ease of using it on mobile.
+
+08:48.840 --> 08:51.919
+And so I guess in the last few minutes of this talk,
+
+08:51.920 --> 08:53.479
+I'll just go over some quick things
+
+08:53.480 --> 08:56.319
+about working with Android that might come up.
+
+NOTE Notifications (demo)
+
+08:56.320 --> 08:58.879
+So the first thing is notifications.
+
+08:58.880 --> 09:01.039
+This is actually an interesting feature.
+
+09:01.040 --> 09:03.679
+So In the Android build for Emacs,
+
+09:03.680 --> 09:05.799
+you have the function android-notifications-notify.
+
+09:05.800 --> 09:09.039
+And so here, this is how you can send a notification.
+
+09:09.040 --> 09:11.999
+So my rest timer, for example, utilizes this function
+
+09:12.000 --> 09:14.399
+to let you know when your rest is over.
+
+09:14.400 --> 09:22.439
+And the cool thing about this is that the build for Emacs
+
+09:22.440 --> 09:29.039
+lets you, so here in the app settings, under notifications,
+
+09:29.040 --> 09:33.039
+so here you can actually pick a notification group,
+
+09:33.040 --> 09:36.639
+which is here set, which is, yeah, so it's set right here
+
+09:36.640 --> 09:37.999
+and you can just customize it.
+
+09:38.000 --> 09:39.599
+So like what sound do you want it to make?
+
+09:39.600 --> 09:40.439
+Do you want it to vibrate?
+
+09:40.440 --> 09:41.679
+Do you want to show on the screen?
+
+09:41.680 --> 09:43.519
+And so this way, like you can easily,
+
+09:43.520 --> 09:46.839
+so if you are resting, you will get a notification.
+
+09:46.840 --> 09:47.879
+It will vibrate.
+
+09:47.880 --> 09:50.079
+it might make a really loud noise if you want it to.
+
+09:50.080 --> 09:51.919
+And so this is all customizable.
+
+09:51.920 --> 09:54.479
+And the cool thing is that if you have other packages
+
+09:54.480 --> 09:55.639
+that utilize these notifications,
+
+09:55.640 --> 09:57.479
+all of the notification groups,
+
+09:57.480 --> 10:01.079
+they're all customizable separately. So, and there we go.
+
+10:01.080 --> 10:02.359
+So that notification you see on the top
+
+10:02.360 --> 10:04.999
+is actually from the Emacs app.
+
+10:05.000 --> 10:07.399
+So you notice here, we're not even running Emacs
+
+10:07.400 --> 10:09.759
+and yet we got that rest timer is over.
+
+NOTE Unexpected Keyboard
+
+10:09.760 --> 10:13.559
+So that's one thing. Next, keyboard.
+
+10:13.560 --> 10:15.039
+So just when working with Emacs,
+
+10:15.040 --> 10:19.079
+I found using the unexpected keyboard, in particular,
+
+10:19.080 --> 10:22.519
+to be really helpful with all the keybinding.
+
+10:22.520 --> 10:25.879
+So if you just want to try out Emacs
+
+10:25.880 --> 10:27.719
+from F-Droid or something,
+
+10:27.720 --> 10:30.239
+I would recommend using a keyboard like this
+
+10:30.240 --> 10:33.999
+to let you use the meta keys and the control keys.
+
+10:34.000 --> 10:37.039
+And then yeah, using this keyboard,
+
+10:37.040 --> 10:39.159
+I haven't really noticed any problems
+
+10:39.160 --> 10:41.679
+with Emacs key bindings.
+
+10:41.680 --> 10:45.159
+And then lastly, just like my setup...
+
+NOTE Syncthing Fork
+
+10:45.160 --> 10:49.679
+So Syncthing Fork is another app I rely on heavily.
+
+10:49.680 --> 10:54.399
+So as I mentioned, all the, this is org-fit files,
+
+10:54.400 --> 10:55.719
+they're all org-mode files.
+
+10:55.720 --> 10:57.439
+So I use Syncthing Fork to synchronize them
+
+10:57.440 --> 10:59.879
+between my laptop and my Android.
+
+10:59.880 --> 11:04.479
+And then also like to get this package,
+
+11:04.480 --> 11:06.559
+just syncing a list folder might be helpful
+
+11:06.560 --> 11:09.999
+if you want to easily edit your init file
+
+11:10.000 --> 11:12.319
+on Android on your machine.
+
+11:12.320 --> 11:15.639
+So yeah, Syncthing Fork is another helpful thing
+
+11:15.640 --> 11:17.959
+that you might wanna look into
+
+11:17.960 --> 11:22.919
+if you're exploring Android, the Emacs build of Android.
+
+11:22.920 --> 11:26.239
+So yeah, Emacs on Android does actually have the potential
+
+11:26.240 --> 11:30.959
+to replace a decent number of common use cases.
+
+11:30.960 --> 11:35.759
+And org mode can be a solid foundation
+
+11:35.760 --> 11:39.959
+for any of these applications that you're thinking of.
+
+11:39.960 --> 11:45.639
+And yeah, I highly recommend giving giving Emacs on Android a shot.
+
+11:45.640 --> 11:49.719
+And that concludes this presentation.
+
+11:49.720 --> 11:56.439
+Thank you so much, Zachary. That was an awesome talk,
+
+11:56.440 --> 11:59.599
+and I appreciate your preparing it for us.
+
+11:59.600 --> 12:03.399
+A couple questions on the pad, if anybody wants to jump in
+
+12:03.400 --> 12:05.119
+and throw in your questions or comments.
+
+12:05.120 --> 12:08.599
+Of course, happy to read them out on screen here.
+
+12:08.600 --> 12:12.039
+I think when we were talking backstage before,
+
+12:12.040 --> 12:14.239
+you had asked me to kind of read them out,
+
+12:14.240 --> 12:17.199
+but feel free to jump in and kind of
+
+12:17.200 --> 12:18.999
+take over at any point.
+
+12:19.000 --> 12:25.279
+This is the You Show. I'm kind of...
+
+12:25.280 --> 12:30.199
+So the first question we had was a comment.
+
+12:30.200 --> 12:31.439
+This is very cool.
+
+NOTE Q: Very cool! It would be nice to build some One-rep max calculation formulae into calc
+
+12:31.440 --> 12:33.519
+It would be nice to build up some
+
+12:33.520 --> 12:38.439
+org rep max calculation formula into calc.
+
+12:38.440 --> 12:42.119
+Is that something that you've thought about?
+
+12:42.120 --> 12:47.159
+Um, well, I mean, um, one rep max. Yeah.
+
+12:47.160 --> 12:48.799
+I mean, not in honesty,
+
+12:48.800 --> 12:52.359
+I'm not sure about
+
+12:52.360 --> 12:53.839
+extending calc itself.
+
+12:53.840 --> 12:56.799
+Like if there's...
+
+12:56.800 --> 12:59.199
+what are the ways of extending calc itself,
+
+12:59.200 --> 13:01.999
+but this package org-fit,
+
+13:02.000 --> 13:04.159
+I mean, it does have the one rep max.
+
+13:04.160 --> 13:11.199
+I had to dig into that...
+
+13:11.200 --> 13:20.079
+I can find the code, but yeah, I mean, it does,
+
+13:20.080 --> 13:25.079
+I mean, you know, so this is specifically this package,
+
+13:25.080 --> 13:33.039
+but yeah, you can use the various one rep max formulas for this.
+
+NOTE Q: Do you have plans to extend this to clock-report kind of reporting? graphical reports, etc?
+
+13:33.040 --> 13:37.159
+Extend this clock report. Yes, yeah, exactly.
+
+13:37.160 --> 13:39.199
+Graphical reports. These are all something that,
+
+13:39.200 --> 13:43.439
+It currently doesn't have, and these nice apps do have.
+
+13:43.440 --> 13:45.399
+They have charts of all kinds.
+
+13:45.400 --> 13:48.799
+You can see your progress from week to week
+
+13:48.800 --> 13:49.959
+on various exercise.
+
+13:49.960 --> 13:54.359
+They have charts galore, all these fancy apps.
+
+13:54.360 --> 14:00.319
+And in theory, it wouldn't be hard at all to like,
+
+14:00.320 --> 14:03.719
+'cause like, you know, there's gnuplot.
+
+14:03.720 --> 14:07.119
+There's those, and then they have like
+
+14:07.120 --> 14:10.479
+very good packages on any of them.
+
+14:10.480 --> 14:13.919
+So, I mean, I assume integration would be pretty seamless.
+
+14:13.920 --> 00:14:17.424
+So yes, that is definitely on the list
+
+00:14:17.425 --> 14:17.759
+of things I want to do.
+
+NOTE Q: Have you ever wanted to modify the functionality on your mobile device while working out? Any good or challenging experiences or tips with that?
+
+14:17.760 --> 14:21.599
+Have you ever wanted to modify
+
+14:21.600 --> 14:23.679
+the functionality of your mobile device
+
+14:23.680 --> 14:26.119
+while working out any good
+
+14:26.120 --> 14:28.439
+or challenging experiences or tips with that?
+
+14:28.440 --> 14:30.759
+Yeah, that's actually funny.
+
+14:30.760 --> 14:37.439
+There was a time where, yeah, I mean, like debugging,
+
+14:37.440 --> 14:40.999
+there was like some bug I was having with my code.
+
+14:41.000 --> 14:44.799
+And so I have, in the middle of a workout,
+
+14:44.800 --> 14:48.439
+yeah, start, like, open up the debugger and kind of,
+
+14:48.440 --> 14:50.959
+and the cool thing is that, I mean,
+
+14:50.960 --> 14:53.079
+the biggest thing, like, the biggest thing by far
+
+14:53.080 --> 14:54.599
+is unexpected keyboard.
+
+14:54.600 --> 14:56.359
+Like, I can't state how,
+
+14:56.360 --> 14:58.439
+I don't know how much Unexpected Keyboard is,
+
+14:58.440 --> 15:01.279
+because, like, with Unexpected, with the Unexpected,
+
+15:01.280 --> 15:03.599
+with that keyboard, you can literally just, like,
+
+15:03.600 --> 15:06.159
+it's, it's not hard at all to, like,
+
+15:06.160 --> 15:11.159
+you can do M-x or C-M-x
+
+15:11.160 --> 15:13.639
+or you know C-u C-M-x
+
+15:13.640 --> 15:15.959
+to debug, like, you can do all the key bindings
+
+15:15.960 --> 15:18.519
+with unexpected keyboard. There's no problem
+
+15:18.520 --> 00:15:20.303
+whatsoever with that part.
+
+00:15:20.304 --> 00:15:23.599
+The only part is muscle memory.
+
+15:23.600 --> 15:25.599
+It's because you get the muscle memory
+
+15:25.600 --> 00:15:27.424
+of the emacs key binding
+
+00:15:27.425 --> 15:28.279
+and so you have to kind of like yeah...
+
+15:28.280 --> 15:31.639
+I mean that translation is actually kind of
+
+15:31.640 --> 15:35.039
+you have to think about it like, like, okay,
+
+15:35.040 --> 15:36.559
+what was that key binding again?
+
+15:36.560 --> 15:39.559
+And you have to kind of like do it with your fingers.
+
+15:39.560 --> 15:41.359
+And it was like doing it on the, on Android is,
+
+15:41.360 --> 15:44.199
+I mean, it takes a little longer
+
+15:44.200 --> 15:45.439
+and it's just a different, yeah,
+
+15:45.440 --> 15:47.079
+different set of different muscle memory.
+
+15:47.080 --> 15:51.559
+Gotcha. Sorry, if you've covered this,
+
+NOTE Q: Does the rest timer end with an audible notification at the end of the time?
+
+15:51.560 --> 15:55.439
+does the rest timer end with an audible notification?
+
+15:55.440 --> 15:58.199
+That's the cool thing.
+
+15:58.200 --> 16:02.519
+So with the Emacs, with the Android notification settings,
+
+16:02.520 --> 16:06.159
+you can, I can show that again in more detail.
+
+16:06.160 --> 16:17.079
+So bonus settings, apps, pick the app, notifications.
+
+16:17.080 --> 16:21.159
+And then here we get that org-fit-rest-over.
+
+16:21.160 --> 16:22.919
+And so here you can set, for example,
+
+16:22.920 --> 16:24.879
+whether it's a silent notification.
+
+16:24.880 --> 16:27.959
+And so this won't, this won't make it make noise. You can do...
+
+16:27.960 --> 16:29.559
+or like make it have a noise,
+
+16:29.560 --> 00:16:31.399
+and so you can have it make sure
+
+00:16:31.400 --> 16:33.119
+it's popped on the screen
+
+16:33.120 --> 16:37.039
+and then you can just pick whatever ringtone you want,
+
+16:37.040 --> 16:38.679
+and you can make it look like yeah.
+
+16:38.680 --> 00:16:44.299
+Then obviously you have the whole volume setting,
+
+00:16:44.300 --> 00:16:49.132
+so you can, when you're working
+
+00:16:49.133 --> 16:50.519
+you can just set the volume pretty high,
+
+16:50.520 --> 16:51.679
+so if you do happen
+
+16:51.680 --> 16:55.719
+to set your phone kind of away, you set the volume high,
+
+16:55.720 --> 16:57.239
+maybe make a really annoying sound,
+
+16:57.240 --> 17:00.759
+a loud sound you won't miss. And then, yeah, you'll be set.
+
+17:00.760 --> 17:02.159
+So that works.
+
+17:02.160 --> 17:04.639
+That was actually one of the biggest surprises.
+
+17:04.640 --> 17:08.599
+I wasn't expecting that to work so nice.
+
+NOTE Q: Have you tried other keyboards such as Hacker's keyboard?
+
+17:08.600 --> 17:17.279
+One of the next question relates to the Unexpected Keyboard.
+
+17:17.280 --> 17:19.399
+Question is, have you tried other keyboards,
+
+17:19.400 --> 17:20.399
+such as Hacker's Keyboard?
+
+17:20.400 --> 17:27.119
+Not recently. I haven't, so I couldn't compare them.
+
+17:27.120 --> 17:31.359
+Fair enough. Another keyboard question.
+
+NOTE Q: Another keyboard question - have you tried the "flickboard" on f-droid? It's the craziest keyboard, you use one thumb.
+
+17:31.360 --> 17:34.399
+Have you tried Flickboard on F-Droid?
+
+17:34.400 --> 17:37.959
+The commenter says, this is the craziest keyboard.
+
+17:37.960 --> 17:44.559
+You use one thumb. Oh, that is interesting. Let me see.
+
+17:44.560 --> 17:48.879
+Flickboard. Flickboard. Yeah, I'll have to try that.
+
+17:48.880 --> 17:53.119
+I'm curious to get the key bindings done.
+
+17:53.120 --> 17:57.359
+I wonder if the key bindings and all that work.
+
+17:57.360 --> 18:01.279
+I hope that's interesting. I'll definitely look into that.
+
+18:01.280 --> 18:02.359
+So I'll hold on just a moment
+
+18:02.360 --> 18:04.239
+as people are typing in more questions.
+
+18:04.240 --> 18:06.759
+A good moment to just thank you for the talk.
+
+18:06.760 --> 18:09.719
+It's personally, it's one of my favorite things
+
+18:09.720 --> 18:14.559
+to see at EmacsConf is, you know, a glimpse into a world
+
+18:14.560 --> 18:17.679
+that kind of isn't mine, right?
+
+18:17.680 --> 18:22.799
+but it shows how, you know, Emacs is sort of
+
+18:22.800 --> 00:18:27.037
+the bazaar in the cathedral and bazaar sense of
+
+00:18:27.038 --> 00:18:28.439
+we're all just here
+
+18:28.440 --> 18:31.839
+sort of hauling our bags of toys
+
+18:31.840 --> 18:35.679
+into the center square and, you know, making a,
+
+18:35.680 --> 18:38.439
+you know, I don't know if it's a house of cards
+
+18:38.440 --> 18:40.319
+or what exactly it is,
+
+18:40.320 --> 18:43.559
+but it, you know, it's managing to keep me afloat personally.
+
+18:43.560 --> 18:47.239
+And I just appreciate your, you know,
+
+18:47.240 --> 18:48.519
+kind of expanding my world.
+
+18:48.520 --> 18:53.759
+It's pretty cool. Yeah, definitely. Yeah, I mean, I agree.
+
+18:53.760 --> 19:01.079
+There's a lot of different, yeah. So, next commenter.
+
+19:01.080 --> 19:05.359
+I'm curious, oh, sorry, I skipped one here.
+
+NOTE Q: This user interface is simplified but still keyboard based, can you think of ways to make it more touch based?
+
+19:05.360 --> 19:07.399
+This user interface is simplified,
+
+19:07.400 --> 19:09.639
+but still keyboard based.
+
+19:09.640 --> 19:11.959
+Have you thought about ways to make it more touch-based?
+
+19:11.960 --> 19:16.039
+Good question. Yeah, yeah, yeah.
+
+19:16.040 --> 19:19.599
+So the only thing currently, I think,
+
+19:19.600 --> 19:22.119
+of specific touch-based functionality I have,
+
+19:22.120 --> 19:25.399
+which, so this is like, so let's see,
+
+19:25.400 --> 00:19:33.159
+it's C-x C-+,
+
+00:19:33.160 --> 00:19:38.159
+That key binding wrong, what was it? Okay, whatever.
+
+00:19:38.160 --> 00:19:41.319
+Yeah, so in terms of touch commands,
+
+00:19:41.320 --> 00:19:46.079
+so pressing on a headline will actually unfold it
+
+00:19:46.080 --> 00:19:51.199
+and move your cursor to the next field that you,
+
+00:19:51.200 --> 00:19:54.600
+yeah, so like, yeah, at the beginning of the table.
+
+19:54.640 --> 19:56.959
+So like, there's that, yeah, and so.
+
+19:56.960 --> 20:02.399
+It sounds like that is something you're thinking about.
+
+20:02.400 --> 20:03.639
+Yeah, exactly.
+
+20:03.640 --> 20:05.999
+Like, you know, maybe like a little thing at the bottom,
+
+20:06.000 --> 20:09.559
+like, so this thing has the, this app has this,
+
+20:09.560 --> 20:10.839
+if you notice, like, if you do something,
+
+20:10.840 --> 20:12.479
+it has this rest timer at the bottom.
+
+20:12.480 --> 20:14.639
+So I mean, it wouldn't be,
+
+20:14.640 --> 20:16.599
+it wouldn't be pretty, it wouldn't be,
+
+20:16.600 --> 20:18.799
+it seems quite doable to just have like,
+
+20:18.800 --> 20:19.839
+maybe something at the bottom,
+
+20:19.840 --> 20:21.319
+like for a timer,
+
+20:21.320 --> 20:24.159
+and then you can just like plus 15 seconds or cancel it
+
+20:24.160 --> 20:25.239
+or, you know, just,
+
+20:25.240 --> 20:27.279
+and then those could all be just like touch based.
+
+20:27.280 --> 20:30.559
+And so, yeah. And then obviously just like,
+
+20:30.560 --> 20:36.119
+just like classic Emacs, the Emacs,
+
+20:36.120 --> 20:43.359
+like clicking actions, they just, yeah,
+
+20:43.360 --> 20:44.159
+they work just fine.
+
+20:44.160 --> 20:47.439
+Like, so there's no like weird Android touch thing
+
+20:47.440 --> 20:48.359
+you have to worry about.
+
+20:48.360 --> 20:52.559
+So let me ask a question of my own here.
+
+NOTE Q: Is a touch interface something you'd prefer to dive into yourself or factor out into a higher-level API?
+
+20:52.560 --> 20:57.199
+Just thinking about that myself, how would you, you know,
+
+20:57.200 --> 21:00.119
+ideally approach that as that you'd most prefer
+
+21:00.120 --> 21:02.879
+to sort of dive into yourself?
+
+21:02.880 --> 21:07.919
+Or would you think about factoring that out into
+
+21:07.920 --> 21:12.159
+like some kind of org touch higher level API or?
+
+21:12.160 --> 21:19.679
+Oh, I mean, personally, personally, I mean, I mean,
+
+21:19.680 --> 21:21.279
+I think just like the clicking
+
+21:21.280 --> 21:28.279
+and just like adding a lambda to it. That works.
+
+21:28.280 --> 21:35.759
+I mean, that feels like it works just fine.
+
+21:35.760 --> 21:41.639
+And you can add the code, like the command right there.
+
+21:41.640 --> 21:45.439
+So it's all like, yeah, it's all, I mean,
+
+21:45.440 --> 21:49.159
+and that's kind of a nice thing is like having everything like close,
+
+21:49.160 --> 21:54.159
+just like not having those, a lot of layers of abstraction.
+
+21:54.160 --> 00:21:58.007
+It's just like, you have a lambda to the click and then just do...
+
+00:21:58.008 --> 00:21:59.504
+Yeah, just do.
+
+00:21:59.505 --> 00:22:01.757
+[Corwin]: That was my experience too.
+
+00:22:01.758 --> 00:22:04.590
+This is a few years ago now, but when I was starting on
+
+00:22:04.591 --> 00:22:05.799
+the Dungeon Mode project
+
+00:22:05.800 --> 00:22:07.738
+that a friend and I presented several years ago
+
+00:22:07.739 --> 00:22:09.599
+at Emacs Conference,
+
+22:09.600 --> 22:13.079
+we were shocked to learn just how usable,
+
+22:13.080 --> 22:18.559
+this is echoing a comment I see from ElephantErgo on IRC,
+
+22:18.560 --> 22:21.479
+who says, touch seems so wildly usable nowadays,
+
+22:21.480 --> 22:22.399
+that's so awesome.
+
+22:22.400 --> 22:25.159
+And that was really my experience too with Dungeon.
+
+22:25.160 --> 22:28.719
+We were just working on it, we got the fog of war going,
+
+22:28.720 --> 22:32.439
+and then just took it onto a touchscreen laptop at the time,
+
+22:32.440 --> 22:33.959
+and we're just shocked to learn,
+
+22:33.960 --> 22:37.479
+you know, everything just worked. Yeah.
+
+22:37.480 --> 22:38.639
+[Zachary]: Maybe like the hardest thing
+
+22:38.640 --> 22:40.559
+is actually just the default font size.
+
+22:40.560 --> 22:42.559
+You know, you have to like, you can't,
+
+22:42.560 --> 22:44.279
+you can't have your font too small or you'll,
+
+22:44.280 --> 22:46.319
+you'll like, you'll touch, you'll,
+
+22:46.320 --> 22:48.279
+you'll miss touch things a lot. Yeah.
+
+22:48.280 --> 22:50.159
+[Corwin]: Well, there's no font size
+
+22:50.160 --> 22:52.999
+large enough to make me, you know,
+
+22:53.000 --> 22:58.159
+to make me comfortable on a smart device, unfortunately.
+
+22:58.160 --> 23:00.599
+But, but that, I think it may be a me problem.
+
+23:00.600 --> 23:04.439
+I think this question we might've missed. So the file sync.
+
+23:04.440 --> 23:12.679
+Yeah, so the file sync in terms of what's worked for me,
+
+23:12.680 --> 23:14.039
+I did have to play around with this a lot.
+
+23:14.040 --> 23:15.999
+Let me go ahead and read it out.
+
+NOTE Q: You mentioned file sync, what have you found works well for you?
+
+23:16.000 --> 23:18.519
+You mentioned file sync, what have you found works well for you?
+
+23:18.520 --> 23:21.319
+Sorry. Yeah, yeah, yeah.
+
+23:21.320 --> 23:25.319
+So in terms of what, yeah, I did have to play around with this a lot,
+
+23:25.320 --> 23:28.639
+but Syncthing Fork is what I eventually settled on.
+
+23:28.640 --> 23:34.959
+I mean, this is another thing that, I mean, I don't,
+
+23:34.960 --> 23:36.319
+it wouldn't nearly be as usable,
+
+23:36.320 --> 23:39.679
+like Emacs wouldn't be nearly usable without it.
+
+23:39.680 --> 23:41.319
+So Syncthing Fork essentially, okay.
+
+23:41.320 --> 23:44.559
+And then I also have like a droplet on DigitalOcean,
+
+23:44.560 --> 23:47.399
+just like, so that's kind of like the whole,
+
+23:47.400 --> 23:49.879
+that's kind of like what bridges it together.
+
+23:49.880 --> 23:52.519
+So like, so my Emacs can sync to that,
+
+23:52.520 --> 23:56.559
+and then my machine also syncs to that.
+
+23:56.560 --> 24:00.719
+And so I don't have to have them
+
+24:00.720 --> 24:06.359
+both on the same time. It's just there, that copy.
+
+24:06.360 --> 24:09.599
+And so that works pretty well.
+
+24:09.600 --> 24:13.559
+I also found that editing code in general,
+
+24:13.560 --> 24:15.359
+I think this also goes
+
+24:15.360 --> 24:19.919
+with the development experience question.
+
+NOTE Q: I'm curious about the development experience. Do you do everything on the phone?
+
+24:19.920 --> 24:22.639
+So I'm curious about the development experience.
+
+24:22.640 --> 24:24.639
+Do you do everything on the phone? And that's the thing.
+
+24:24.640 --> 24:27.119
+None of my development in general is done on the phone.
+
+24:27.120 --> 24:32.439
+just because, for one, my muscle memory isn't there,
+
+24:32.440 --> 24:38.399
+and two, just in general, typing on a virtual keyboard on the phone,
+
+24:38.400 --> 24:40.119
+it's just really slow.
+
+24:40.120 --> 24:47.159
+So yeah, all the development is done on my machine,
+
+24:47.160 --> 24:52.119
+but then there's the problem of you have to have an init.l in your Android,
+
+24:52.120 --> 24:55.159
+and so you're going to have to write, you know,
+
+24:55.160 --> 24:56.919
+I found like you'd have to like,
+
+24:56.920 --> 24:58.279
+when you first get Emacs set up,
+
+24:58.280 --> 25:01.239
+you might have to like write some, I don't know,
+
+25:01.240 --> 25:03.959
+like you'll kind of have to like get into your init file
+
+25:03.960 --> 25:04.479
+and then just like,
+
+25:04.480 --> 25:06.999
+maybe just like start to put things together.
+
+25:07.000 --> 25:09.759
+But the cool thing is with Syncthing Fork,
+
+25:09.760 --> 25:15.519
+I'm syncing my, I'm setting it to load off of a sync directory.
+
+25:15.520 --> 25:18.559
+Like this, this init file,
+
+25:18.560 --> 25:21.159
+my Android file is synced with my machine.
+
+25:21.160 --> 25:24.319
+So if I wanted to, I could just edit it on my machine
+
+25:24.320 --> 25:25.879
+and just have that synced automatically.
+
+25:25.880 --> 25:28.839
+So that makes like the whole, like in it,
+
+25:28.840 --> 25:31.879
+cause like it's, it's such a, like, that is one of the,
+
+25:31.880 --> 25:33.079
+it's just like get in,
+
+25:33.080 --> 25:36.879
+sit writing your init.el in Emacs on Android
+
+25:36.880 --> 25:37.839
+is just kind of a...
+
+25:37.840 --> 25:39.359
+[Corwin]: We do have one more question.
+
+25:39.360 --> 25:41.479
+I can't help but throw in a comment there.
+
+25:41.480 --> 25:43.759
+I think that's like.
+
+25:43.760 --> 25:47.519
+That's an extremely good tip, right?
+
+25:47.520 --> 25:49.959
+That if we're, as we're exploring Android,
+
+25:49.960 --> 25:52.839
+we want to think about that as
+
+25:52.840 --> 25:55.759
+adding support for another port of Emacs.
+
+25:55.760 --> 25:58.959
+So the whole dance of, oh, I took, you know,
+
+25:58.960 --> 26:01.239
+I took, you know, I took my init
+
+26:01.240 --> 26:04.479
+and I wanted to use it on BSD
+
+26:04.480 --> 26:06.439
+after mostly using GNU Linux.
+
+26:06.440 --> 26:09.119
+Now we're going in and we're looking at our Emacs.
+
+26:09.120 --> 26:11.279
+all of our Emacs and it stuff
+
+26:11.280 --> 26:13.839
+and thinking about compatibility,
+
+26:13.840 --> 26:15.199
+turning features on and off
+
+26:15.200 --> 26:19.959
+based on the OS that we're running underneath and so on.
+
+26:19.960 --> 26:22.119
+I think that's pretty heads up advice.
+
+26:22.120 --> 26:24.759
+Let me read out this other question.
+
+NOTE Q: Have you thought about integrating cardio tracking like timed runs, bike rides, etc?
+
+26:24.760 --> 26:28.199
+Have you thought about integrating cardio tracking
+
+26:28.200 --> 26:30.559
+like time runs, bike rides, and so on?
+
+26:30.560 --> 26:34.319
+[Zachary]: Yes, I definitely thought about that.
+
+26:34.320 --> 26:36.599
+And that might be another thing
+
+26:36.600 --> 00:26:40.257
+where a touch interface might be helpful.
+
+00:26:40.258 --> 00:26:47.840
+I don't know if I can easily pull it up,
+
+00:26:47.841 --> 00:26:49.465
+but the app itself, oh yeah, here it is.
+
+00:26:49.466 --> 26:50.199
+So you can see kind of how they have,
+
+26:50.200 --> 26:53.279
+and you can kind of see how this fits.
+
+26:53.280 --> 26:55.119
+This is like an org, you can see
+
+26:55.120 --> 26:57.399
+that these are just tables, right?
+
+26:57.400 --> 26:59.239
+This is just like this whole interface in general,
+
+26:59.240 --> 27:02.279
+just like kind of screams like an org mode,
+
+27:02.280 --> 27:05.119
+file with you have you have your different headings
+
+27:05.120 --> 27:06.559
+like here's a warm-up heading
+
+27:06.560 --> 27:07.839
+and then you have the tables
+
+27:07.840 --> 27:09.879
+and you know you could just like envision
+
+27:09.880 --> 27:12.839
+how you could have a org table
+
+27:12.840 --> 27:15.039
+with one of the columns called time
+
+27:15.040 --> 27:18.439
+and then you could just imagine like there'd be a button there
+
+27:18.440 --> 27:21.159
+and you can just have it click,
+
+27:21.160 --> 00:27:23.619
+and then you'd have a timer in the background
+
+00:27:23.620 --> 27:25.799
+that would update this timer.
+
+27:25.800 --> 27:32.599
+It's so, I mean, conceptually, there's nothing really,
+
+27:32.600 --> 00:27:40.424
+it conceptually maps really well to this.
+
+00:27:40.425 --> 27:41.559
+So yeah, I mean, that's definitely something.
+
+27:41.560 --> 27:44.439
+[Corwin]: That's awesome. Great answer.
+
+27:44.440 --> 27:47.759
+So I think we're just at about 90 seconds left.
+
+27:47.760 --> 27:50.119
+Perfect amount of time, I think, to just wrap up.
+
+27:50.120 --> 27:52.199
+Closing thoughts. I'll share mine first.
+
+27:52.200 --> 27:53.759
+Really appreciate you, Zach.
+
+27:53.760 --> 27:56.639
+Thank you for putting this talk together.
+
+27:56.640 --> 27:59.359
+I think this is the type of talk
+
+27:59.360 --> 28:01.239
+that's really going to tie the room together
+
+28:01.240 --> 28:07.559
+for people that may be, you know, not sure how they can take
+
+28:07.560 --> 28:12.719
+although they've been interested in that,
+
+28:12.720 --> 28:16.399
+this can be a really good way to kind of open up the world.
+
+28:16.400 --> 28:20.319
+Thank you. Thank you for putting it together.
+
+NOTE Closing
+
+28:20.320 --> 28:22.439
+[Zachary]: Yeah, I would just say
+
+28:22.440 --> 28:24.159
+like definitely just try things out.
+
+28:24.160 --> 28:25.359
+Like if you think, you know,
+
+28:25.360 --> 28:26.439
+they're just like random ideas,
+
+28:26.440 --> 28:30.319
+like a book tracking app or like a recipe app,
+
+28:30.320 --> 28:33.479
+like, you know, there's a lot of things
+
+28:33.480 --> 28:35.599
+that you do on your mobile device
+
+28:35.600 --> 28:37.719
+that aren't like banking apps that you could easily,
+
+28:37.720 --> 28:39.759
+that seem like they could be done in Emacs.
+
+28:39.760 --> 28:42.479
+So yeah, just try different things out
+
+28:42.480 --> 28:47.239
+and I would love to hear what other people do. Bravo.
+
+28:47.240 --> 28:52.519
+[Corwin]: I appreciate it once again, you're coming together
+
+28:52.520 --> 28:56.639
+and especially you're doing it live.
+
+28:56.640 --> 29:00.079
+I know that as a conference, we have a lot of preference
+
+29:00.080 --> 29:01.479
+for those recorded talks
+
+29:01.480 --> 29:02.759
+and getting the captioning together,
+
+29:02.760 --> 29:05.319
+but I just have a special place in my heart
+
+29:05.320 --> 29:07.679
+for the energy that comes with a live talk
+
+29:07.680 --> 29:12.560
+and I appreciate you doing it. Thanks for putting this on.
diff --git a/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt
new file mode 100644
index 00000000..0362cbc2
--- /dev/null
+++ b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt
@@ -0,0 +1,4019 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:07.319
+Yes. All right. Take it away. Thank you, Christian. Thank you, too.
+
+00:00:07.320 --> 00:00:09.359
+If you could have the pad open at the same time,
+
+00:00:09.360 --> 00:00:11.319
+you can read the questions.
+
+00:00:11.320 --> 00:00:13.639
+Or I can start reading some to you while I'm here.
+
+00:00:13.640 --> 00:00:14.959
+Oh, no. I can read them.
+
+00:00:14.960 --> 00:00:21.599
+I was wondering whether I should maybe copy them into a new buffer.
+
+00:00:21.600 --> 00:00:30.159
+So they are also on screen. Increase the font size a bit.
+
+00:00:30.160 --> 00:00:39.839
+So I'm trying to do this on the fly.
+
+00:00:39.840 --> 00:00:41.279
+Maybe a bad idea. Let's see.
+
+00:00:41.280 --> 00:00:42.519
+Of course, you're going to capture it
+
+00:00:42.520 --> 00:00:45.879
+into your Zettelkasten then. Is that what's happening?
+
+00:00:45.880 --> 00:00:49.559
+Well, I can start you off.
+
+NOTE Q: What do you use for the fancy animations?
+
+00:00:49.560 --> 00:00:56.279
+The first question is, I wonder what they use for the fancy animations.
+
+00:00:56.280 --> 00:00:59.559
+I was thinking about this because that's the first question
+
+00:00:59.560 --> 00:01:00.959
+and I was thinking about this
+
+00:01:00.960 --> 00:01:02.599
+while I copied this stuff over.
+
+00:01:02.600 --> 00:01:09.359
+What part is the fancy part?
+
+00:01:09.360 --> 00:01:13.079
+I can recommend books, like if anyone wants to have book recommendations
+
+00:01:13.080 --> 00:01:18.039
+for how to make presentations with PowerPoint-like software
+
+00:01:18.040 --> 00:01:22.999
+in a very simple way, we taught this at university.
+
+00:01:23.000 --> 00:01:25.559
+was it now, some 15 years ago,
+
+00:01:25.560 --> 00:01:28.799
+to students to make animation abuse
+
+00:01:28.800 --> 00:01:32.439
+where everything was flashy and typed in or something.
+
+00:01:32.440 --> 00:01:36.679
+Don't do this, but instead do a couple of very simple tasteful things
+
+00:01:36.680 --> 00:01:41.959
+like fading through colors like filmmakers do, right?
+
+00:01:41.960 --> 00:01:44.199
+Fading through black to make a scene cut
+
+00:01:44.200 --> 00:01:47.839
+or just fade between things, the fanciness.
+
+00:01:47.840 --> 00:01:53.759
+Presentation software stack, the fanciness.
+
+00:01:53.760 --> 00:01:55.079
+I didn't dial fanciness up,
+
+00:01:55.080 --> 00:02:00.239
+I just resorted to a very simple fade animations,
+
+00:02:00.240 --> 00:02:04.719
+like fading stuff in and wipe, I think, for text effects.
+
+00:02:04.720 --> 00:02:06.879
+That was it, more or less.
+
+00:02:06.880 --> 00:02:09.959
+And for the lines, maybe the lines are fancy.
+
+00:02:09.960 --> 00:02:14.679
+I was using Apple Keynote because I'm fastest with that,
+
+00:02:14.680 --> 00:02:19.079
+but I also usually, we taught this workshop with PowerPoint
+
+00:02:19.080 --> 00:02:23.319
+and I think the LibreOffice stack got much better with that
+
+00:02:23.320 --> 00:02:24.239
+as well in the recent years,
+
+00:02:24.240 --> 00:02:26.279
+but I haven't tried that in a long time
+
+00:02:26.280 --> 00:02:31.599
+to like fiddle around and find all the knobs to dial.
+
+00:02:31.600 --> 00:02:34.719
+Because the Apple presentation thingy has this nice feature
+
+00:02:34.720 --> 00:02:37.079
+where you draw an arrow with a tip,
+
+00:02:37.080 --> 00:02:41.039
+and then you have a special animation for line drawing,
+
+00:02:41.040 --> 00:02:42.439
+which is only available for line art.
+
+00:02:42.440 --> 00:02:45.559
+And then it draws the arrow that moves around like that.
+
+00:02:45.560 --> 00:02:48.079
+So yeah, presentation stack, Apple Keynote,
+
+00:02:48.080 --> 00:02:52.559
+probably not of interest for anyone here.
+
+00:02:52.560 --> 00:02:56.439
+I usually don't use plain text presentation stuff, right?
+
+00:02:56.440 --> 00:03:03.319
+So I tried this, I tried this with markdown presentations,
+
+00:03:03.320 --> 00:03:08.319
+slidey things, org presentation.
+
+00:03:08.320 --> 00:03:12.879
+It's always not enough control for the fiddly things
+
+00:03:12.880 --> 00:03:17.959
+that I'm interested in to make the experience great.
+
+00:03:17.960 --> 00:03:20.199
+So I wonder what are the fancy animations.
+
+00:03:20.200 --> 00:03:25.439
+And the stack, the stack is Apple Keynote, sorry.
+
+00:03:25.440 --> 00:03:30.079
+Okay, that's enough. Thank you for capturing.
+
+NOTE Q: Are you not a fan of using *, **, *** headings in org-mode?
+
+00:03:30.080 --> 00:03:37.719
+Are you not a fan? Okay. You saw this in the recording.
+
+00:03:37.720 --> 00:03:43.839
+Why on earth is autofill mode not enabled? I don't know.
+
+00:03:43.840 --> 00:03:48.479
+I thought it is the default, but apparently it isn't.
+
+00:03:48.480 --> 00:03:52.039
+I could also use visual line mode.
+
+00:03:52.040 --> 00:03:55.719
+It's built in as well, right? Visual line mode.
+
+00:03:55.720 --> 00:03:57.999
+It's so weird to be in this vanilla setup
+
+00:03:58.000 --> 00:04:00.439
+and not have all my key bindings
+
+00:04:00.440 --> 00:04:04.959
+and my normal stuff ready, so.
+
+00:04:04.960 --> 00:04:08.479
+I am not a fan of using asterisk headings in org mode.
+
+00:04:08.480 --> 00:04:12.359
+It's interesting to see how people have different styles of writing org content.
+
+00:04:12.360 --> 00:04:22.359
+Am I not? What exactly? What did I do?
+
+00:04:22.360 --> 00:04:25.959
+And notes, just open one of these.
+
+00:04:25.960 --> 00:04:33.519
+Okay. I could see how you could, in examples like this,
+
+00:04:33.520 --> 00:04:36.639
+use org-mode to read-only.
+
+00:04:36.640 --> 00:04:44.599
+Why? How you could use org-mode to use headings for this,
+
+00:04:44.600 --> 00:04:48.159
+because it's an outliner first and foremost,
+
+00:04:48.160 --> 00:04:50.439
+so outlining is very natural.
+
+00:04:50.440 --> 00:04:53.279
+But when I do in my personal setup,
+
+00:04:53.280 --> 00:04:58.079
+I also have this what's called start indentation thingy.
+
+00:04:58.080 --> 00:05:01.079
+enabled, so that means that everything
+
+00:05:01.080 --> 00:05:04.159
+would be indented one level from the start.
+
+00:05:04.160 --> 00:05:05.599
+So I would probably fiddle around
+
+00:05:05.600 --> 00:05:07.799
+with that to not get like crazy.
+
+00:05:07.800 --> 00:05:12.039
+But also, I don't see, I don't see,
+
+00:05:12.040 --> 00:05:13.839
+like really see when I look at this,
+
+00:05:13.840 --> 00:05:17.879
+I didn't see a potential to create subheadings,
+
+00:05:17.880 --> 00:05:19.479
+I mean, or even headings.
+
+00:05:19.480 --> 00:05:21.559
+The only heading here is the title,
+
+00:05:21.560 --> 00:05:24.279
+like in my perception of this note,
+
+00:05:24.280 --> 00:05:27.159
+and it's one, It's two lists.
+
+00:05:27.160 --> 00:05:28.639
+You could group these in headings.
+
+00:05:28.640 --> 00:05:40.319
+I didn't. That's right. Where's another one?
+
+00:05:40.320 --> 00:05:42.679
+I opened the autosave file because I'm stupid.
+
+00:05:42.680 --> 00:05:46.719
+OK. So this one could also be probably subdivided.
+
+00:05:46.720 --> 00:05:48.559
+But I'm also not sure.
+
+00:05:48.560 --> 00:05:52.359
+I'm also not sure if I would gain anything structurally
+
+00:05:52.360 --> 00:05:55.799
+if I do it like this because then I'm in a structural level
+
+00:05:55.800 --> 00:05:58.279
+and the stuff that just flows naturally
+
+00:05:58.280 --> 00:06:01.039
+as a sequence of text paragraphs,
+
+00:06:01.040 --> 00:06:07.119
+this here, it's not disconnected.
+
+00:06:07.120 --> 00:06:10.519
+It wasn't meant to be under organism
+
+00:06:10.520 --> 00:06:16.839
+and I need to create a new same level thing
+
+00:06:16.840 --> 00:06:23.959
+to say, hey, these are, I don't know, details or whatever.
+
+00:06:23.960 --> 00:06:26.119
+So that's maybe the real reason.
+
+00:06:26.120 --> 00:06:28.879
+I'm fine with writing snippets that are self-contained
+
+00:06:28.880 --> 00:06:31.159
+and essentially one or two or three or five or whatever,
+
+00:06:31.160 --> 00:06:32.119
+how many paragraphs,
+
+00:06:32.120 --> 00:06:36.119
+but it's not like, it's always an outline form.
+
+00:06:36.120 --> 00:06:38.679
+So I don't resort to this.
+
+00:06:38.680 --> 00:06:40.999
+My onSettle custom is usually written in Markdown.
+
+00:06:41.000 --> 00:06:43.999
+So I use subheadings for actual headings
+
+00:06:44.000 --> 00:06:47.559
+to subdivide like I would subdivide an essay
+
+00:06:47.560 --> 00:06:49.759
+or an article, blog post.
+
+00:06:49.760 --> 00:06:52.839
+But that's the mode of writing that I'm in here.
+
+00:06:52.840 --> 00:06:54.319
+It's like blog post writing.
+
+00:06:54.320 --> 00:06:56.239
+I wouldn't start with four headings for this.
+
+00:06:56.240 --> 00:06:58.839
+So I'm not doing that. That's a thing.
+
+00:06:58.840 --> 00:07:04.919
+Okay, I guess I'm going to read the questions,
+
+00:07:04.920 --> 00:07:07.519
+but I'm going to stop copying them in because I lose time.
+
+00:07:07.520 --> 00:07:09.439
+I want to reply to you, folks.
+
+00:07:09.440 --> 00:07:11.479
+Didn't see a need for hierarchical structure.
+
+00:07:11.480 --> 00:07:13.719
+Thank you for capturing this. Next question.
+
+NOTE Q: Can you use org files and all its features inside Denote?
+
+00:07:13.720 --> 00:07:17.799
+Can you use org files and all its features inside Denote?
+
+00:07:17.800 --> 00:07:22.439
+Yes. Like this is, this is an org file
+
+00:07:22.440 --> 00:07:25.359
+and Denote uses org headings instead of,
+
+00:07:25.360 --> 00:07:28.799
+with Markdown, you get YAML front meta.
+
+00:07:28.800 --> 00:07:32.759
+And with org, you get these attributes,
+
+00:07:32.760 --> 00:07:36.359
+value attribute thingies
+
+00:07:36.360 --> 00:07:40.079
+that are then the metadata for the note.
+
+00:07:40.080 --> 00:07:45.279
+So yeah, the answer is yes. You get everything and on top,
+
+00:07:45.280 --> 00:07:48.159
+a small layer of a link, link management.
+
+00:07:48.160 --> 00:07:48.999
+That's all there is.
+
+NOTE Q: Where or how do you like to capture fleeting notes?
+
+00:07:49.000 --> 00:07:55.319
+Next question is, where or how do you like to capture fleeting notes?
+
+00:07:55.320 --> 00:07:58.479
+Oh, fleeting notes. If you say fleeting notes,
+
+00:07:58.480 --> 00:08:01.079
+you also need to say non-fleeting notes
+
+00:08:01.080 --> 00:08:02.399
+and figure out what these are.
+
+00:08:02.400 --> 00:08:05.079
+And when you say non-fleeting notes,
+
+00:08:05.080 --> 00:08:07.239
+and fleeting notes exist, because it's a distinction,
+
+00:08:07.240 --> 00:08:10.199
+and there's something on both sides of this distinction.
+
+00:08:10.200 --> 00:08:12.119
+If you say there's a distinction, there are two sides,
+
+00:08:12.120 --> 00:08:14.559
+maybe you want to subdivide the non-fleeting notes further,
+
+00:08:14.560 --> 00:08:16.199
+because, well, it's a non-fleeting note
+
+00:08:16.200 --> 00:08:21.159
+isn't very descriptive. So what else do you say there?
+
+00:08:21.160 --> 00:08:24.799
+And people have said a couple of things
+
+00:08:24.800 --> 00:08:28.479
+to define non-fleeting notes, for example, permanent notes.
+
+00:08:28.480 --> 00:08:33.199
+I guess that's a Sonke Ahrens,
+
+00:08:33.200 --> 00:08:35.039
+permanent notes is the most popular.
+
+00:08:35.040 --> 00:08:36.159
+Let's stay with that, stick with that.
+
+00:08:36.160 --> 00:08:38.279
+So if you have permanent notes and fleeting notes,
+
+00:08:38.280 --> 00:08:41.599
+now we have two types of notes. The thing is, in books,
+
+00:08:41.600 --> 00:08:46.319
+the only... when we would talk about note-taking
+
+00:08:46.320 --> 00:08:47.679
+and you would ask me, hey Christian,
+
+00:08:47.680 --> 00:08:49.559
+how do you take fleeting notes?
+
+00:08:49.560 --> 00:08:53.679
+I imagine the discussion would be in German
+
+00:08:53.680 --> 00:08:55.799
+because that's how people usually talk to me.
+
+00:08:55.800 --> 00:08:56.679
+I would pull out a book,
+
+00:08:56.680 --> 00:08:59.799
+this is Object-Oriented Software Engineering,
+
+00:08:59.800 --> 00:09:03.679
+interesting book by Ivar Jacobson.
+
+00:09:03.680 --> 00:09:06.159
+I'm not sure because, you know,
+
+00:09:06.160 --> 00:09:08.719
+it's an English or American person.
+
+00:09:08.720 --> 00:09:14.419
+And inside I have these fleeting notes like these
+
+00:09:14.420 --> 00:09:18.879
+are actual paper notes square what are these three by something inch
+
+00:09:18.880 --> 00:09:20.999
+American standard size I guess
+
+00:09:21.000 --> 00:09:25.964
+and A6 minus the tariff part
+
+00:09:25.965 --> 00:09:31.174
+from another notepad. These are notes I took, engagement notes
+
+00:09:31.175 --> 00:09:32.439
+if you will, like engagement notes,
+
+00:09:32.440 --> 00:09:34.999
+because the margins of the book don't suffice to take,
+
+00:09:35.000 --> 00:09:38.799
+and this is related to... I need more space, so this is more space.
+
+00:09:38.800 --> 00:09:41.119
+These are fleeting.
+
+00:09:41.120 --> 00:09:44.999
+As you see, I have them in my pile of books
+
+00:09:45.000 --> 00:09:46.839
+right next to me in the shelf
+
+00:09:46.840 --> 00:09:52.279
+and folded them in this piece of paper,
+
+00:09:52.280 --> 00:09:54.879
+labeled it with the author because I lost them
+
+00:09:54.880 --> 00:09:57.839
+couple of times they just fell out
+
+00:09:57.840 --> 00:09:58.759
+when I reached for the book
+
+00:09:58.760 --> 00:10:01.479
+and this is an envelope I shove it into the book
+
+00:10:01.480 --> 00:10:04.919
+and then forget about processing the book again
+
+00:10:04.920 --> 00:10:08.599
+for five or ten years. So what do I do with fleeting notes?
+
+00:10:08.600 --> 00:10:11.999
+I do fleeting notes on paper or if I'm using an e-reader
+
+00:10:12.000 --> 00:10:14.879
+maybe with an e-reader software annotation tool
+
+00:10:14.880 --> 00:10:21.639
+but fleeting in the most like simple non contrived sense,
+
+00:10:21.640 --> 00:10:23.839
+fleeting notes are meant as engagement notes
+
+00:10:23.840 --> 00:10:26.039
+and then you do something with them
+
+00:10:26.040 --> 00:10:27.519
+or like I just showed you,
+
+00:10:27.520 --> 00:10:29.879
+you don't because life's short, right?
+
+00:10:29.880 --> 00:10:31.919
+Time runs out, then you need to forget,
+
+00:10:31.920 --> 00:10:33.639
+then you need to remember
+
+00:10:33.640 --> 00:10:36.119
+how to restructure everything in your head
+
+00:10:36.120 --> 00:10:37.519
+to make sense of the notes again
+
+00:10:37.520 --> 00:10:38.359
+because they were fleeting,
+
+00:10:38.360 --> 00:10:40.999
+they were just little scribbles and it's
+
+00:10:41.000 --> 00:10:44.559
+It's basically ballast or waste.
+
+00:10:44.560 --> 00:10:46.679
+I'm just carrying this with me for years
+
+00:10:46.680 --> 00:10:50.879
+and maybe never get around to using these.
+
+00:10:50.880 --> 00:10:53.399
+But also, I put stuff on there, maybe I do.
+
+00:10:53.400 --> 00:10:55.399
+It doesn't hurt to keep them in there.
+
+00:10:55.400 --> 00:10:58.519
+It's just an odd collector's habit I can't get rid of.
+
+00:10:58.520 --> 00:11:03.399
+fleeting notes, I just capture them wherever
+
+00:11:03.400 --> 00:11:05.919
+and then either I process them or try to throw them away
+
+00:11:05.920 --> 00:11:07.079
+or forget about them
+
+00:11:07.080 --> 00:11:10.239
+because they're in some inbox file on a smartphone
+
+00:11:10.240 --> 00:11:13.159
+and then, you know, they might as well not exist,
+
+00:11:13.160 --> 00:11:15.439
+they're just there to engage me during the reading
+
+00:11:15.440 --> 00:11:17.079
+and if I don't process them in time,
+
+00:11:17.080 --> 00:11:21.999
+meh like, chance is up, it sucks
+
+00:11:22.000 --> 00:11:26.319
+Next question, like fleeting notes, permanent notes.
+
+00:11:26.320 --> 00:11:27.799
+I'm not going to talk about these
+
+00:11:27.800 --> 00:11:29.039
+unless someone asks a question.
+
+NOTE Q: Zettelkasten feels like a very "cagey" approach to note-taking and knowledge management. Doesn't it restrict one to think in certain ways rather than what feels natural to someone?
+
+00:11:29.040 --> 00:11:32.119
+Zettelkasten feels like a very cagey approach
+
+00:11:32.120 --> 00:11:34.079
+to note-taking and knowledge management.
+
+00:11:34.080 --> 00:11:36.519
+Doesn't it restrict one to think in certain ways
+
+00:11:36.520 --> 00:11:38.919
+rather than what feels natural to someone?
+
+00:11:38.920 --> 00:11:45.919
+Well, yes, but so does wearing underwear, right?
+
+00:11:45.920 --> 00:11:50.119
+A bit of personal revelation.
+
+00:11:50.120 --> 00:11:54.079
+When I'm working from home, I'm wearing pants.
+
+00:11:54.080 --> 00:11:57.039
+You don't see them, but I don't need to.
+
+00:11:57.040 --> 00:12:00.079
+But I'm also kind of self-restricting myself in a way
+
+00:12:00.080 --> 00:12:01.239
+because there's a window,
+
+00:12:01.240 --> 00:12:03.479
+it's dark outside, and I'm well lit.
+
+00:12:03.480 --> 00:12:05.479
+And if I just stand up and have no pants on,
+
+00:12:05.480 --> 00:12:12.919
+I don't care that much what the neighbors like 10, 20 meters across think.
+
+00:12:12.920 --> 00:12:15.759
+your mileage may vary then, right?
+
+00:12:15.760 --> 00:12:18.319
+So there are restrictions that make sense
+
+00:12:18.320 --> 00:12:24.439
+to get to some point in your day-to-day life.
+
+00:12:24.440 --> 00:12:25.999
+And in the case of Zettelkasten,
+
+00:12:26.000 --> 00:12:31.639
+I try to tell people the shortest story possible
+
+00:12:31.640 --> 00:12:36.159
+to convey a story there, but also not to cage them in
+
+00:12:36.160 --> 00:12:38.679
+with 20 definitions of different notes.
+
+00:12:38.680 --> 00:12:42.279
+Because all that matters is try to move your thinking
+
+00:12:42.280 --> 00:12:44.039
+into an environment where you can write,
+
+00:12:44.040 --> 00:12:45.719
+where you feel comfortable writing,
+
+00:12:45.720 --> 00:12:47.239
+and where you can keep this stuff.
+
+00:12:47.240 --> 00:12:50.239
+Because I do feel comfortable with a pencil and paper.
+
+00:12:50.240 --> 00:12:54.199
+But what I just showed you, this might as well never have happened.
+
+00:12:54.200 --> 00:12:56.719
+Something has changed in my brain.
+
+00:12:56.720 --> 00:13:01.159
+most likely, when I engaged with a book like this.
+
+00:13:01.160 --> 00:13:04.199
+As far as publications and writing is concerned,
+
+00:13:04.200 --> 00:13:06.079
+this might as well not exist in my life,
+
+00:13:06.080 --> 00:13:10.279
+because I didn't do something with it.
+
+00:13:10.280 --> 00:13:15.239
+I mean, I was reading the book probably on a commute back then, on the train.
+
+00:13:15.240 --> 00:13:18.679
+I didn't take notes on the computer right away.
+
+00:13:18.680 --> 00:13:20.159
+So if you feel caged in,
+
+00:13:20.160 --> 00:13:24.319
+that may be a sign that you went too far on the,
+
+00:13:24.320 --> 00:13:26.479
+I need to do this, I need to do that stage,
+
+00:13:26.480 --> 00:13:28.359
+and lose some of the playfulness.
+
+00:13:28.360 --> 00:13:29.959
+There needs to be playfulness
+
+00:13:29.960 --> 00:13:32.599
+inside of the whole procedure, otherwise it...
+
+00:13:32.600 --> 00:13:36.999
+If you don't enjoy doing it, you won't be doing it.
+
+00:13:37.000 --> 00:13:39.319
+And if you don't do it, then you don't get a benefit.
+
+00:13:39.320 --> 00:13:41.039
+And it's just another chore in your life.
+
+00:13:41.040 --> 00:13:42.479
+Then rather not do it.
+
+00:13:42.480 --> 00:13:46.479
+So try to avoid the feeling of caginess
+
+00:13:46.480 --> 00:13:49.639
+and do whatever you want with it
+
+00:13:49.640 --> 00:13:52.319
+as long as you try to give your best.
+
+00:13:52.320 --> 00:13:55.799
+That's the cage that you will benefit from
+
+00:13:55.800 --> 00:13:58.959
+like really trying maybe not trying hard
+
+00:13:58.960 --> 00:14:02.639
+but trying in earnest to produce
+
+00:14:02.640 --> 00:14:05.079
+something that you can read in a year in a week whatever
+
+00:14:05.080 --> 00:14:10.439
+and then make sense of it like that's that's that's the minimum bar and the rest
+
+00:14:10.440 --> 00:14:13.799
+If you find yourself writing for hours on end,
+
+00:14:13.800 --> 00:14:15.279
+during the nights, during the weekends,
+
+00:14:15.280 --> 00:14:17.759
+whatever, and can't stop,
+
+00:14:17.760 --> 00:14:21.279
+then you can tackle more of the prescriptions, let's say.
+
+00:14:21.280 --> 00:14:22.319
+But everything I showed to you
+
+00:14:22.320 --> 00:14:24.439
+was there are three essential things,
+
+00:14:24.440 --> 00:14:26.199
+and the rest is just add-ons.
+
+00:14:26.200 --> 00:14:28.519
+Add-ons to inspire you to think in certain ways,
+
+00:14:28.520 --> 00:14:31.279
+but you don't have to do them. You can scratch all of this.
+
+00:14:31.280 --> 00:14:33.679
+You just need to write to think,
+
+00:14:33.680 --> 00:14:35.119
+and then you need to connect
+
+00:14:35.120 --> 00:14:37.799
+to make the thinking happen in an organic way.
+
+00:14:37.800 --> 00:14:40.559
+Otherwise, you get a storage that's very hard to navigate
+
+00:14:40.560 --> 00:14:45.999
+and doesn't grow well. Thanks. Yeah, you're welcome.
+
+00:14:46.000 --> 00:14:51.159
+I'm not writing another show. Yeah. Oh, combine the forums.
+
+00:14:51.160 --> 00:14:54.439
+Like it's a Zettelkasten anonymous group there.
+
+00:14:54.440 --> 00:14:56.239
+Like everyone's struggling.
+
+00:14:56.240 --> 00:14:58.479
+Everyone's struggling and it's okay to like,
+
+00:14:58.480 --> 00:15:01.319
+I'm feeling like stuck at this and that.
+
+00:15:01.320 --> 00:15:03.919
+And then other people will be able to relate.
+
+00:15:03.920 --> 00:15:07.327
+I can promise.
+
+NOTE Q: How does denote compare to org-roam?
+
+00:15:07.328 --> 00:15:10.279
+How does it denote, question mark maybe,
+
+00:15:10.280 --> 00:15:11.639
+compared to org-roam?
+
+00:15:11.640 --> 00:15:18.559
+Roam Research was setting a new trend of connectiveness
+
+00:15:18.560 --> 00:15:21.119
+because you could create recursive structures with links
+
+00:15:21.120 --> 00:15:22.199
+and everything is linkable.
+
+00:15:22.200 --> 00:15:25.439
+And it's like you put every sentence in its own org heading
+
+00:15:25.440 --> 00:15:27.679
+and then link to all the headings possibly
+
+00:15:27.680 --> 00:15:31.039
+and then transpile them so you can expand in place
+
+00:15:31.040 --> 00:15:32.239
+where you would link to.
+
+00:15:32.240 --> 00:15:34.959
+I think this was the approach at least.
+
+00:15:34.960 --> 00:15:38.479
+So this was a very interesting transclusion, not transpile.
+
+00:15:38.480 --> 00:15:41.919
+Transclude the contents, like move them in right then and there
+
+00:15:41.920 --> 00:15:45.839
+and not navigate to another page. It was interesting.
+
+00:15:45.840 --> 00:15:47.439
+It never made sense for me
+
+00:15:47.440 --> 00:15:50.239
+when people told their stories of how they used it.
+
+00:15:50.240 --> 00:15:53.439
+I guess you can use this tool for a lot of purposes,
+
+00:15:53.440 --> 00:15:59.199
+but the prevailing story of the Roam-style note-taking tools
+
+00:15:59.200 --> 00:16:01.879
+was like, just dump everything in it.
+
+00:16:01.880 --> 00:16:04.439
+And garbage in, garbage out still holds.
+
+00:16:04.440 --> 00:16:07.559
+I do keep my personal journal away
+
+00:16:07.560 --> 00:16:10.279
+from my Zettelkasten nowadays
+
+00:16:10.280 --> 00:16:12.799
+because I want to not restrict myself
+
+00:16:12.800 --> 00:16:14.399
+when I feel the urge to journal,
+
+00:16:14.400 --> 00:16:18.919
+when I want to capture something that, for example, my 15-month-old baby daughter does.
+
+00:16:18.920 --> 00:16:21.239
+Like, first time she pulled a chair
+
+00:16:21.240 --> 00:16:22.679
+out of another room to the next room
+
+00:16:22.680 --> 00:16:25.479
+just to create a ladder to then climb onto another thing.
+
+00:16:25.480 --> 00:16:27.439
+It just was, okay, this is now the time
+
+00:16:27.440 --> 00:16:30.839
+to take note of this. in her life, like you were this
+
+00:16:30.840 --> 00:16:33.159
+and that many months old when you did this.
+
+00:16:33.160 --> 00:16:35.359
+So we have some reference parts. And I could put this kind
+
+00:16:35.360 --> 00:16:37.399
+of factual information in Zettelkasten,
+
+00:16:37.400 --> 00:16:42.199
+but also, like, what if I have a toothache or whatever,
+
+00:16:42.200 --> 00:16:44.924
+and just want to gather data for whatever reason?
+
+00:16:44.925 --> 00:16:52.119
+I don't know. Like this kind of personal stuff.
+
+00:16:52.120 --> 00:16:55.639
+That's too much of the non-useful stuff
+
+00:16:55.640 --> 00:16:58.199
+in a tool that I want to use to think.
+
+00:16:58.200 --> 00:17:00.479
+I do see the appeal there.
+
+00:17:00.480 --> 00:17:04.039
+But anyway, the org-roam, like that's a Roam part.
+
+00:17:04.040 --> 00:17:05.879
+You can watch a lot of videos
+
+00:17:05.880 --> 00:17:07.159
+on that to get a feel for this.
+
+00:17:07.160 --> 00:17:10.559
+Org-roam adopted this to make the connection easier
+
+00:17:10.560 --> 00:17:13.479
+and replicate features. As I said, porting tools
+
+00:17:13.480 --> 00:17:16.399
+that exist into Emacs, very nice pastime.
+
+00:17:16.400 --> 00:17:18.079
+A lot of people do this for a lot of things,
+
+00:17:18.080 --> 00:17:20.359
+but it's not a thinking environment.
+
+00:17:20.360 --> 00:17:22.319
+It's just another tool to take notes in
+
+00:17:22.320 --> 00:17:25.279
+that behave weirdly with links or interestingly with links.
+
+00:17:25.280 --> 00:17:29.159
+And Denote does do even less.
+
+00:17:29.160 --> 00:17:31.199
+It only offers you a couple of shortcuts
+
+00:17:31.200 --> 00:17:33.799
+to help you find files quickly.
+
+00:17:33.800 --> 00:17:37.679
+It does, like you see in the bottom here in the mode line,
+
+00:17:37.680 --> 00:17:40.519
+it does just show square brackets D
+
+00:17:40.520 --> 00:17:44.359
+instead of the whole ID, which would be rather long.
+
+00:17:44.360 --> 00:17:48.399
+So you have a buffer list that is bearable and works.
+
+00:17:48.400 --> 00:17:51.439
+You can read this and find the title quickly.
+
+00:17:51.440 --> 00:17:56.199
+Things like that, Denote does things like that.
+
+00:17:56.200 --> 00:17:58.219
+Oh, I closed the wrong.
+
+00:17:58.200 --> 00:18:00.639
+Denote does things like that very well,
+
+00:18:00.640 --> 00:18:02.559
+but it gets out of your way otherwise.
+
+00:18:02.560 --> 00:18:04.079
+Just a couple of conventions
+
+00:18:04.080 --> 00:18:06.239
+to get stuff into your file system.
+
+00:18:06.240 --> 00:18:08.839
+I'm not sure if Org-Roam now,
+
+00:18:08.840 --> 00:18:11.199
+what's the current state there?
+
+00:18:11.200 --> 00:18:13.399
+Do they do ID generation out of the box?
+
+00:18:13.400 --> 00:18:18.319
+Is there a standard popular convention or whatever?
+
+00:18:18.320 --> 00:18:19.879
+not sure, didn't follow,
+
+00:18:19.880 --> 00:18:21.759
+but I'm very happy that org-roam still exists
+
+00:18:21.760 --> 00:18:25.039
+because I think porting tools into emacs is very cool,
+
+NOTE Q: I noticed that the wikipedia link you wrote was typed wrongly - and it got me thinking about how to deal with broken links at scale? Do you have any thoughts on this? What about archival?
+
+00:18:25.040 --> 00:18:27.559
+I guess next question,
+
+00:18:27.560 --> 00:18:29.174
+I noticed that the wikipedia link you wrote
+
+00:18:29.175 --> 00:18:38.632
+was typed wrongly, oh no garbage in, garbage out,
+
+00:18:38.633 --> 00:18:45.079
+I think garbage in, garbage out, garbage well spotted.
+
+00:18:45.080 --> 00:18:47.199
+How do you do that? Oh, I typed it
+
+00:18:47.200 --> 00:18:50.679
+I typed it from... Yeah, right. I didn't,
+
+00:18:50.680 --> 00:18:53.359
+I didn't paste this. Right. Yeah, yeah.
+
+00:18:53.360 --> 00:18:55.879
+Janitorial tasks, that's the umbrella term.
+
+00:18:55.880 --> 00:18:56.839
+How do you deal with this?
+
+00:18:56.840 --> 00:18:59.560
+Like if you put stuff like this into your notes,
+
+00:18:59.560 --> 00:19:05.759
+you hopefully get a 404 code from wikipedia
+
+00:19:05.760 --> 00:19:06.859
+because the page doesn't exist.
+
+00:19:06.860 --> 00:19:11.999
+Let's now check. You get a 404, and then you could write a tool
+
+00:19:12.000 --> 00:19:13.799
+that checks all the links periodically
+
+00:19:13.800 --> 00:19:17.199
+and tells you about broken links, like a broken link checker
+
+00:19:17.200 --> 00:19:19.679
+that then looks up maybe automatically
+
+00:19:19.680 --> 00:19:21.919
+the last good version on archive.org
+
+00:19:21.920 --> 00:19:23.319
+and then the Wayback Machine
+
+00:19:23.320 --> 00:19:26.879
+and then corrects the link with the archived version,
+
+00:19:26.880 --> 00:19:30.479
+because the live one is gone. This happens all the time on the Internet.
+
+00:19:30.480 --> 00:19:31.919
+Even if you don't mistype,
+
+00:19:31.920 --> 00:19:35.879
+you could... you know things go out of order so
+
+00:19:35.880 --> 00:19:42.599
+what do you do with that? You need to automate this.
+
+00:19:42.600 --> 00:19:45.119
+I'm not clicking every link manually.
+
+00:19:45.120 --> 00:19:49.279
+I have like, what's it now, 11,000 notes or something.
+
+00:19:49.280 --> 00:19:51.999
+This is not a thing that humans are good at.
+
+00:19:52.000 --> 00:19:52.279
+I'm not good at this.
+
+00:19:52.280 --> 00:19:55.359
+I will never finish anything else if I do this manually.
+
+00:19:55.360 --> 00:19:57.079
+So write a tool, write a script,
+
+00:19:57.080 --> 00:19:58.719
+get a script from the interwebs.
+
+00:19:58.720 --> 00:20:01.919
+There are tools like this plenty that can do it.
+
+00:20:01.920 --> 00:20:06.319
+And then you just need to do the wiring.
+
+00:20:06.320 --> 00:20:07.599
+and that should help.
+
+00:20:07.600 --> 00:20:09.759
+You could automate this in Emacs, of course, right?
+
+00:20:09.760 --> 00:20:12.479
+For every file in my note directory,
+
+00:20:12.480 --> 00:20:14.359
+look if there's a link inside
+
+00:20:14.360 --> 00:20:16.119
+and then check the URL or whatever.
+
+00:20:16.120 --> 00:20:18.319
+Also works for inter-note connections.
+
+00:20:18.320 --> 00:20:21.239
+This could also break if you rename files or remove files
+
+00:20:21.240 --> 00:20:23.959
+and don't use a denote function,
+
+00:20:23.960 --> 00:20:26.879
+which I believe takes care of backlinks and forward links
+
+00:20:26.880 --> 00:20:28.639
+and keeps them organized.
+
+00:20:28.640 --> 00:20:31.399
+If you do this manually on another device,
+
+00:20:31.400 --> 00:20:38.119
+out of denote, out of Emacs, in Vim, I don't know, then yeah, mistakes happen
+
+00:20:38.120 --> 00:20:39.959
+and you need to deal with mistakes
+
+00:20:39.960 --> 00:20:44.359
+and heal and create scar tissue there in some way
+
+00:20:44.360 --> 00:20:48.279
+so write janitorial tools to do that. It's also,
+
+00:20:48.280 --> 00:20:50.679
+I'm mentioning the term janitorial tools
+
+00:20:50.680 --> 00:20:51.679
+a couple of times now,
+
+00:20:51.680 --> 00:20:55.439
+because that's the term that we in the forums at least
+
+00:20:55.440 --> 00:20:58.199
+usually talk about things like find orphaned notes,
+
+00:20:58.200 --> 00:21:02.119
+notes that no one links to find broken links,
+
+00:21:02.120 --> 00:21:07.479
+clean up references reformat notes, stuff like this.
+
+00:21:07.480 --> 00:21:10.039
+Find large notes and then suggest them
+
+00:21:10.040 --> 00:21:11.799
+to the user to break them up.
+
+00:21:11.800 --> 00:21:14.180
+Like these are tasks that you can do mechanically,
+
+00:21:14.160 --> 00:21:16.382
+but also it's better if you use a tool to get started,
+
+00:21:16.383 --> 00:21:20.590
+otherwise you waste a lot of time.
+
+NOTE Comment: When I completely re-worked my config some two years ago, I also tried out some of these packages for making notes in Emacs...
+
+00:21:20.591 --> 00:21:26.632
+Next question, when I complete, next long question.
+
+00:21:26.633 --> 00:21:34.964
+I'm going to copy this over because maybe...
+
+00:21:34.965 --> 00:21:42.399
+"when I completely reworked my configs from two years ago,
+
+00:21:42.400 --> 00:21:44.839
+I also tried some of these packages for making notes,
+
+00:21:44.840 --> 00:21:47.119
+but none of them actually fit my purpose,
+
+00:21:47.120 --> 00:21:51.919
+because I do not like the idea of splitting up my ideas.
+
+00:21:51.920 --> 00:21:53.279
+I'm writing prose.
+
+00:21:53.280 --> 00:21:55.639
+I collect material, reading lists, and so on
+
+00:21:55.640 --> 00:21:57.519
+in just one big file. Everything fits in.
+
+00:21:57.520 --> 00:22:00.879
+In this notebook file, I do archiving from time to time.
+
+00:22:00.880 --> 00:22:02.399
+I search these files in Finder
+
+00:22:02.400 --> 00:22:04.439
+to find old notes I would like to go back to.
+
+00:22:04.440 --> 00:22:06.119
+So if I write a paper,
+
+00:22:06.120 --> 00:22:09.199
+it's basically an extract from my old notes
+
+00:22:09.200 --> 00:22:13.719
+that only have one structure.
+
+00:22:13.720 --> 00:22:17.959
+when I took them time structures my thought and my notes
+
+00:22:17.960 --> 00:22:20.359
+but they would get lost if I split them up in a network
+
+00:22:20.360 --> 00:22:22.799
+like structure like a wiki, Zettelkasten my two cents
+
+00:22:22.800 --> 00:22:24.715
+by the way I work on legal sociological topics
+
+00:22:24.716 --> 00:22:29.452
+I'm a lawyer by training."
+
+00:22:29.453 --> 00:22:34.590
+You know, Luhmann was a German-style
+
+00:22:34.591 --> 00:22:35.632
+weird sociologist,
+
+00:22:35.633 --> 00:22:41.048
+and sociology studies are
+
+00:22:41.049 --> 00:22:43.999
+like the first four semesters at university,
+
+00:22:44.000 --> 00:22:48.639
+where a lot of, I don't know any of the terms in English,
+
+00:22:48.640 --> 00:22:50.999
+a lot of these things were theories
+
+00:22:51.000 --> 00:22:52.999
+in the loosest and broadest sense.
+
+00:22:53.000 --> 00:22:55.439
+Some were just models of how things might behave,
+
+00:22:55.440 --> 00:22:57.999
+but nobody knew because they were not empirically backed.
+
+00:22:58.000 --> 00:23:00.119
+Some were empirically backed,
+
+00:23:00.120 --> 00:23:01.959
+and then also there was some sense-making.
+
+00:23:01.960 --> 00:23:03.599
+And then also in sociology,
+
+00:23:03.600 --> 00:23:08.999
+you have some structure analysis of,
+
+00:23:09.000 --> 00:23:11.239
+like demographics and things like that.
+
+00:23:11.240 --> 00:23:15.559
+So very, very hard fact and statistics heavy things.
+
+00:23:15.560 --> 00:23:20.639
+So broad topic. And there's a lot of interconnections.
+
+00:23:20.640 --> 00:23:22.599
+I can see the approach here.
+
+00:23:22.600 --> 00:23:25.359
+I'm not going to defend Zettelkasten
+
+00:23:25.360 --> 00:23:30.519
+so that you in the end become a Zettelkasten aficionado
+
+00:23:30.520 --> 00:23:33.639
+or whatever I mean, if it works, fine, more power to you like
+
+00:23:33.640 --> 00:23:37.919
+reminds me of Twyla Tharp's like the shoebox approach
+
+00:23:37.920 --> 00:23:39.159
+or whatever it was called
+
+00:23:39.160 --> 00:23:41.959
+where she just dumped everything inside
+
+00:23:41.960 --> 00:23:44.759
+for her next project, like an idea box,
+
+00:23:44.760 --> 00:23:47.279
+like real physical things like oh, I want to, I don't know,
+
+00:23:47.280 --> 00:23:50.079
+like this weird 8-bit do controller inside
+
+00:23:50.080 --> 00:23:54.639
+and then eventually she would spread out everything she collected,
+
+00:23:54.640 --> 00:23:59.599
+newspaper clippings and I don't know, maybe toenails or some weird stuff,
+
+00:23:59.600 --> 00:24:01.879
+I don't know what she actually put there
+
+00:24:01.880 --> 00:24:03.359
+and then make sense of this
+
+00:24:03.360 --> 00:24:08.319
+and think of something of putting these sorted pieces into context
+
+00:24:08.320 --> 00:24:12.759
+and if you just dump stuff into a notebook file
+
+00:24:12.760 --> 00:24:20.199
+and then rework the stuff, yeah, fine
+
+00:24:20.200 --> 00:24:22.639
+One answer is Zettelkasten is great for mathematics.
+
+00:24:22.640 --> 00:24:25.239
+Or maybe you can have... Oh, next question.
+
+00:24:25.240 --> 00:24:31.439
+Sorry, I jumped. So my answer is, this was not a question,
+
+00:24:31.440 --> 00:24:34.799
+and I'm happy for you. So that's still an answer.
+
+NOTE Q: How Zettelkasten is useful for highly mathematical STEM academic fields like computer science or engineering fields?
+
+00:24:34.800 --> 00:24:38.639
+Next question. How Zettelkasten is useful
+
+00:24:38.640 --> 00:24:42.519
+for highly mathematical STEM academic fields
+
+00:24:42.520 --> 00:24:44.839
+like computer science or engineering fields,
+
+00:24:44.840 --> 00:24:48.879
+like when studying a STEM field?
+
+00:24:48.880 --> 00:24:52.999
+I need to unpack the acronym again maybe for the audience.
+
+00:24:53.000 --> 00:24:58.199
+M is mathematics. Engineering is E.
+
+00:24:58.200 --> 00:25:02.519
+Science and tech, tech, techno,
+
+00:25:02.520 --> 00:25:05.599
+I don't know, maybe technical. I could look this up, right?
+
+00:25:05.600 --> 00:25:09.839
+STEM, what was STEM again? I'm doing a bad job.
+
+00:25:09.840 --> 00:25:12.079
+Science, technology, engineering, mathematics.
+
+00:25:12.080 --> 00:25:16.479
+Okay, so probably technology is the computer stuff.
+
+00:25:16.480 --> 00:25:17.159
+Yeah, STEM.
+
+00:25:17.160 --> 00:25:19.399
+Dear audience, that's science, technology,
+
+00:25:19.400 --> 00:25:22.999
+engineering, mathematics, academic fields.
+
+00:25:23.000 --> 00:25:24.799
+What should we make notes of?
+
+00:25:24.800 --> 00:25:27.199
+The important bits are interconnected in a hierarchy,
+
+00:25:27.200 --> 00:25:28.199
+usually chapters of a book.
+
+00:25:28.200 --> 00:25:31.639
+Yes, someone did the job of making the order
+
+00:25:31.640 --> 00:25:33.559
+out of the chaotic findings
+
+00:25:33.560 --> 00:25:35.919
+that people did over hundreds of years for you.
+
+00:25:35.920 --> 00:25:39.479
+That's an order. But there are also many textbooks.
+
+00:25:39.480 --> 00:25:42.059
+So opinions may vary. The presentation may vary.
+
+00:25:42.060 --> 00:25:43.674
+Some textbooks may click with you,
+
+00:25:43.675 --> 00:26:04.559
+while others stay opaque, and you can't get into the meat.
+
+00:26:04.560 --> 00:26:12.919
+Sorry, I'm just typing the answer right now.
+
+00:26:12.920 --> 00:26:17.379
+Copying information to another box is not, yeah.
+
+00:26:17.380 --> 00:26:19.090
+Yeah, let's see what the first answer is.
+
+00:26:19.091 --> 00:26:21.559
+Someone posted that Zettelkasten is great for mathematics,
+
+00:26:21.560 --> 00:26:22.919
+incredible for computer science.
+
+00:26:22.920 --> 00:26:25.439
+With Org-Babel you can have living source code, yes,
+
+00:26:25.440 --> 00:26:26.719
+that you can execute from the note,
+
+00:26:26.720 --> 00:26:28.479
+also true for a formula,
+
+00:26:28.480 --> 00:26:35.239
+and LaTeX in interspersing of images and SVGs.
+
+00:26:35.240 --> 00:26:37.119
+You can even use Agda if you want to.
+
+00:26:37.120 --> 00:26:39.279
+Ah, I think I know who typed the answer.
+
+00:26:39.280 --> 00:26:42.999
+Hello, Oliver. If you want to have living proofs in your notes,
+
+00:26:43.000 --> 00:26:47.719
+even inline LaTeX is in here. That's, yeah, yeah, yeah.
+
+00:26:47.720 --> 00:26:58.959
+quote the sentence as is and add, yeah, add something,
+
+00:26:58.960 --> 00:27:01.319
+maybe your own summary.
+
+00:27:01.320 --> 00:27:02.959
+I would suggest add your own summary
+
+00:27:02.960 --> 00:27:11.299
+because we're looking at the Etherpad, right?
+
+00:27:11.300 --> 00:27:14.639
+Maybe I just copy this over so you can all...
+
+00:27:14.640 --> 00:27:30.879
+The Etherpad's indentation is missing with what Org is doing.
+
+00:27:30.880 --> 00:27:36.999
+And the answer was probably submitted by Oliver
+
+00:27:37.000 --> 00:27:40.479
+just in case someone wants to see
+
+00:27:40.480 --> 00:27:47.679
+who that could have been with the Agda reference
+
+00:27:47.680 --> 00:27:49.799
+because nobody uses Agda,
+
+00:27:49.800 --> 00:27:55.999
+nobody in the world maybe. So Agda is just a, yeah,
+
+00:27:56.000 --> 00:28:01.319
+let's say it's good for proofing the code that you type
+
+00:28:01.320 --> 00:28:04.399
+as you type it in the compilation set, very weird
+
+00:28:04.400 --> 00:28:07.199
+if you've never heard of this, so check that out.
+
+00:28:07.200 --> 00:28:13.839
+So question was how Zettelkasten is useful for these kinds of things
+
+00:28:13.840 --> 00:28:16.119
+yeah it sounds like in these kinds of fields
+
+00:28:16.120 --> 00:28:18.359
+that you only deal with facts.
+
+00:28:18.360 --> 00:28:24.719
+That's also kind of sort of true for psychology where you have a lot of,
+
+00:28:24.720 --> 00:28:29.639
+and also law, where you at least in German
+
+00:28:29.640 --> 00:28:32.011
+and our style of law where you have a lot of,
+
+00:28:32.012 --> 00:28:33.759
+where you have thick books of law
+
+00:28:33.760 --> 00:28:38.599
+and very very little records,
+
+00:28:38.600 --> 00:28:41.479
+that's not the right phrasing,
+
+00:28:41.480 --> 00:28:44.540
+where you don't rely on the ruling
+
+00:28:44.541 --> 00:28:48.239
+as much as you do in, for example, the USA,
+
+00:28:48.240 --> 00:28:52.674
+where you need to be aware of every court ruling
+
+00:28:52.675 --> 00:28:53.919
+to then put stuff into context
+
+00:28:53.920 --> 00:28:58.999
+and all of this is like the current how you do law.
+
+00:28:59.000 --> 00:29:01.039
+I don't know.
+
+00:29:01.040 --> 00:29:04.039
+I'm not a lawyer and also not good at this in English.
+
+00:29:04.040 --> 00:29:04.839
+So, sorry.
+
+00:29:04.840 --> 00:29:08.159
+If I don't find the cool words and technical terms,
+
+00:29:08.160 --> 00:29:11.079
+you probably all know.
+
+00:29:11.080 --> 00:29:12.639
+What do you do with these kinds of things?
+
+00:29:12.640 --> 00:29:14.719
+You need to collect a lot of stuff.
+
+00:29:14.720 --> 00:29:17.559
+Like the previous questionnaire mentioned,
+
+00:29:17.560 --> 00:29:19.719
+hey, I'm just copying stuff over
+
+00:29:19.720 --> 00:29:22.119
+and then I have a good time and can write about this
+
+00:29:22.120 --> 00:29:24.119
+and create prose in the end.
+
+00:29:24.120 --> 00:29:26.519
+Like with mathematics, you can't.
+
+00:29:26.520 --> 00:29:36.719
+You can't do a lot when you're still working on the foundations.
+
+00:29:36.720 --> 00:29:38.599
+Like, what do you want to do there?
+
+00:29:38.600 --> 00:29:41.959
+You don't innovate there. You just need to learn the stuff.
+
+00:29:41.960 --> 00:29:45.799
+Typing things out and creating your own organization
+
+00:29:45.800 --> 00:29:49.519
+of how things are connected there,
+
+00:29:49.520 --> 00:29:52.079
+that's where the depth of processing increases,
+
+00:29:52.080 --> 00:29:53.839
+like the actual depth of processing
+
+00:29:53.840 --> 00:29:57.759
+so that it takes more effort
+
+00:29:57.760 --> 00:30:01.399
+and affects more parts of your brain, basically,
+
+00:30:01.400 --> 00:30:03.919
+which then helps with remembering stuff.
+
+00:30:03.920 --> 00:30:12.759
+I'm trying not to go into a 10 minute tangent here, but
+
+00:30:12.760 --> 00:30:18.439
+If you've ever tried to memorize stuff with flashcards
+
+00:30:18.440 --> 00:30:20.879
+and you put a, I don't know, coffee stain
+
+00:30:20.880 --> 00:30:24.559
+or a weird scribble or spilled something on one of these cards,
+
+00:30:24.560 --> 00:30:26.639
+actual physical cards there,
+
+00:30:26.640 --> 00:30:29.119
+this card now has another piece of information
+
+00:30:29.120 --> 00:30:32.519
+that is actually important
+
+00:30:32.520 --> 00:30:36.119
+because it makes the card stand out
+
+00:30:36.120 --> 00:30:41.279
+more and more worthy of being remembered
+
+00:30:41.280 --> 00:30:42.639
+because now one of these cards
+
+00:30:42.640 --> 00:30:44.679
+has this coffee circle thingy
+
+00:30:44.680 --> 00:30:46.959
+and all the others don't so this one stands out
+
+00:30:46.960 --> 00:30:49.079
+and this may actually improve
+
+00:30:49.080 --> 00:30:51.519
+how you learn this particular fact
+
+00:30:51.520 --> 00:30:57.839
+that you want to remember or memorize
+
+00:30:57.840 --> 00:31:00.839
+Similar, like what kind of principle
+
+00:31:00.840 --> 00:31:04.439
+do people postulate is at play here?
+
+00:31:04.440 --> 00:31:06.399
+Again, last time I went into
+
+00:31:06.400 --> 00:31:08.079
+this kind of stuff was at university,
+
+00:31:08.080 --> 00:31:11.719
+so I'm not sure if there's something new
+
+00:31:11.720 --> 00:31:15.319
+in the field of flashcard learning.
+
+00:31:15.320 --> 00:31:18.919
+I'm not aware of anything, let's say.
+
+00:31:18.920 --> 00:31:23.279
+And the idea back then that we spread
+
+00:31:23.280 --> 00:31:25.360
+and that was taught to us was like this.
+
+00:31:27.540 --> 00:31:32.599
+That more information and more context and more stimuli
+
+00:31:32.600 --> 00:31:34.759
+and making things more interesting,
+
+00:31:34.760 --> 00:31:39.340
+that's what makes it memorable.
+
+00:31:39.341 --> 00:31:43.799
+if you go for a walk and then associate things with places.
+
+00:31:43.800 --> 00:31:47.359
+Going for a walk is a different activity
+
+00:31:47.360 --> 00:31:48.839
+than imagining going for a walk.
+
+00:31:48.840 --> 00:31:52.079
+It's also different from not doing anything
+
+00:31:52.080 --> 00:31:54.399
+and just sitting in your chair
+
+00:31:54.400 --> 00:31:56.519
+and relaxing because you're not engaged.
+
+00:31:56.520 --> 00:31:58.919
+You're losing, like you're using
+
+00:31:58.920 --> 00:32:01.959
+a bit of your brain matter to do the work
+
+00:32:01.960 --> 00:32:04.399
+while the rest of your body is stagnant.
+
+00:32:04.400 --> 00:32:07.759
+You don't smell anything different.
+
+00:32:07.760 --> 00:32:09.239
+You don't hear, see, feel on your skin,
+
+00:32:09.240 --> 00:32:11.399
+everything's constant,
+
+00:32:11.400 --> 00:32:15.239
+like you're in a, what are these called?
+
+00:32:15.240 --> 00:32:18.639
+These chambers where you're locked
+
+00:32:18.640 --> 00:32:21.479
+into very salty water, I think.
+
+00:32:21.480 --> 00:32:24.639
+Floating chambers, so sensual deprivation chambers.
+
+00:32:24.640 --> 00:32:29.519
+You're depriving yourself of a lot of sensual input
+
+00:32:29.520 --> 00:32:31.519
+if you just try to really focus
+
+00:32:31.520 --> 00:32:33.479
+into everything with your head.
+
+00:32:33.480 --> 00:32:34.999
+If you engage more of your body,
+
+00:32:35.000 --> 00:32:36.007
+if you engage more of your senses,
+
+00:32:36.008 --> 00:32:37.674
+then you have an easier time there.
+
+00:32:37.675 --> 00:32:40.590
+What does it have to do with this answer?
+
+00:32:40.560 --> 00:32:46.799
+My answer would be the value is in rephrasing,
+
+00:32:46.800 --> 00:32:51.799
+in making your own connections eventually.
+
+00:32:51.800 --> 00:32:56.439
+I don't know, the foundational laws of geometry,
+
+00:32:56.440 --> 00:32:58.119
+there's no room for innovation,
+
+00:32:58.120 --> 00:33:00.159
+but there's maybe a room for association.
+
+00:33:00.160 --> 00:33:03.759
+Like, hey, I remember this, like, if you can't figure out
+
+00:33:03.760 --> 00:33:09.759
+what the name of a certain axiom, lemma, whatever it is, and it has a name,
+
+00:33:09.760 --> 00:33:12.679
+adding your own story to the note doesn't hurt.
+
+00:33:12.680 --> 00:33:14.839
+If you say, hey, this is what my grandfather
+
+00:33:14.840 --> 00:33:18.719
+taught me with wire and sticks when we tried to measure
+
+00:33:18.720 --> 00:33:22.839
+whatever in the sand on a vacation one day.
+
+00:33:22.840 --> 00:33:26.199
+And these kinds of things make it more memorable.
+
+00:33:26.200 --> 00:33:31.039
+And that's at least something that you could need to then,
+
+00:33:31.040 --> 00:33:33.999
+which is the ultimate purpose of STEM at university,
+
+00:33:34.000 --> 00:33:39.559
+then you can pass the tests. Like that's it.
+
+00:33:39.560 --> 00:33:42.999
+You either, and eventually you embody the knowledge, right?
+
+00:33:43.000 --> 00:33:44.679
+If you do this stuff over and over again,
+
+00:33:44.680 --> 00:33:45.839
+then you don't need to look up
+
+00:33:45.840 --> 00:33:47.599
+how to do a certain kind of proof.
+
+00:33:47.600 --> 00:33:50.759
+And you just do the proof when you need to do the proof.
+
+00:33:50.760 --> 00:33:53.919
+But maybe you forget all the kinds of weird proofs
+
+00:33:53.920 --> 00:33:55.079
+that you encountered in your life
+
+00:33:55.080 --> 00:33:57.159
+because you only remember the 10 most weird ones,
+
+00:33:57.160 --> 00:33:58.519
+but you had 15 in your life.
+
+00:33:58.520 --> 00:34:00.399
+And what's about the, what do you do
+
+00:34:00.400 --> 00:34:02.800
+with the five missing ones? They just fade away.
+
+00:34:02.800 --> 00:34:05.279
+But if you capture them in some way or another,
+
+00:34:05.280 --> 00:34:08.559
+as superficial as it may be,
+
+00:34:08.560 --> 00:34:10.479
+and you still have access to this later
+
+00:34:10.480 --> 00:34:21.799
+when you need to check your personal inventory
+
+00:34:21.800 --> 00:34:30.519
+of mathematical proofs so my answer would be...
+
+00:34:30.520 --> 00:34:33.119
+Let's type in my answer
+
+00:34:33.120 --> 00:34:46.199
+on Etherpad would be... I'm not able to type.
+
+00:34:46.200 --> 00:34:52.599
+Sorry. My answer would be this.
+
+00:34:52.600 --> 00:35:05.239
+Foundational knowledge is important for tests mostly
+
+00:35:05.240 --> 00:35:13.300
+and eventually becomes your inventory of skills.
+
+00:35:23.200 --> 00:35:25.879
+Synth programming, like I don't need to look up for loops,
+
+00:35:25.880 --> 00:35:29.519
+I just do for loops and that's it, right?
+
+00:35:29.520 --> 00:35:32.999
+But still, I do have notes about for loops, I think,
+
+00:35:33.000 --> 00:35:34.839
+in different languages, like Python,
+
+00:35:34.840 --> 00:35:37.679
+the, what is it called, list comprehension.
+
+00:35:37.680 --> 00:35:39.919
+I'm not using Python, but it's so quirky.
+
+00:35:39.920 --> 00:35:42.879
+It's quirky and I captured this on a note
+
+00:35:42.880 --> 00:35:45.879
+because I needed to get myself used to the pieces
+
+00:35:45.880 --> 00:35:48.159
+and I needed to look at the syntax anyway,
+
+00:35:48.160 --> 00:35:50.719
+and then this is that part and this goes there.
+
+00:35:50.720 --> 00:35:55.799
+And I did this work, like this separation stuff on a note
+
+00:35:55.800 --> 00:36:01.159
+to then do the work with more engagement,
+
+00:36:01.160 --> 00:36:04.599
+like engage more so I can remember more later.
+
+00:36:04.600 --> 00:36:06.079
+I don't remember all the details,
+
+00:36:06.080 --> 00:36:08.079
+but I do remember there were different parts,
+
+00:36:08.080 --> 00:36:09.519
+and then I can look up the note.
+
+00:36:09.520 --> 00:36:12.799
+And it helps me refresh my memory rather quickly,
+
+00:36:12.800 --> 00:36:15.399
+because it's written by me for me
+
+00:36:15.400 --> 00:36:17.199
+in a way that I'm writing these notes
+
+00:36:17.200 --> 00:36:18.599
+for 15 years or something.
+
+00:36:18.600 --> 00:36:27.119
+16, at least, 16 years or something.
+
+00:36:27.120 --> 00:36:30.439
+So it's much better than looking, especially now,
+
+00:36:30.440 --> 00:36:31.759
+it's much better than going to the web
+
+00:36:31.760 --> 00:36:33.399
+and doing a web search for the same topic,
+
+00:36:33.400 --> 00:36:37.199
+because I will probably not get the useful resource
+
+00:36:37.200 --> 00:36:40.199
+that I relied on some eight years ago anyway,
+
+00:36:40.200 --> 00:36:41.599
+but some garbage instead,
+
+00:36:41.600 --> 00:36:44.919
+maybe AI generated stuff, I don't know.
+
+00:36:44.920 --> 00:36:48.319
+So I have my personal copy of this
+
+00:36:48.320 --> 00:36:50.639
+and it's not just copying the thing into a box,
+
+00:36:50.640 --> 00:36:51.759
+like from one box into another,
+
+00:36:51.760 --> 00:36:54.019
+from the public internet box into my own buffer,
+
+00:36:54.020 --> 00:36:56.399
+that Zettelkasten that's closer to me,
+
+00:36:56.400 --> 00:36:58.559
+like a fridge is closer to my kitchen
+
+00:36:58.560 --> 00:37:01.359
+and where I want to eat when I'm hungry
+
+00:37:01.360 --> 00:37:02.399
+than going to the supermarket
+
+00:37:02.400 --> 00:37:04.279
+or out into the wild and hunt animals,
+
+00:37:04.280 --> 00:37:06.199
+like this is all about proximity
+
+00:37:06.200 --> 00:37:10.759
+and also brought about ownership, like I own these notes
+
+00:37:10.760 --> 00:37:13.199
+and I still take responsibility
+
+00:37:13.200 --> 00:37:14.599
+for what I put on them to some degree
+
+00:37:14.600 --> 00:37:15.959
+like sometimes they're really bad
+
+00:37:15.960 --> 00:37:17.319
+and I want to distance myself,
+
+00:37:17.320 --> 00:37:23.919
+but still yeah, so that's it, I'm just I'm leaving,
+
+00:37:23.920 --> 00:37:29.639
+I'm not typing this out, I'm leaving copy box fridge,
+
+00:37:29.640 --> 00:37:32.119
+there was a term for this, wait a second,
+
+00:37:32.120 --> 00:37:38.839
+setup custom fridge can be fridge-like buffer of knowledge
+
+00:37:38.840 --> 00:37:48.079
+I'm just, let me just try to copy this note verbatim into the etherpad
+
+00:37:48.080 --> 00:37:51.879
+and then see whether you folks can do something with it.
+
+00:37:51.880 --> 00:38:00.959
+The formatting. See appendix A. I am doing this here.
+
+00:38:00.960 --> 00:38:10.319
+Appendix A. I'm not going to read this,
+
+00:38:10.320 --> 00:38:13.679
+but then you have a FridgeLab buffer of knowledge.
+
+00:38:13.680 --> 00:38:16.839
+Local link in the supply chain. That was the term.
+
+00:38:16.840 --> 00:38:18.199
+Didn't remember that one.
+
+00:38:18.200 --> 00:38:28.119
+It's at least a local link in supply chain.
+
+00:38:28.120 --> 00:38:36.079
+Also, engagement doing the work of not copying,
+
+00:38:36.080 --> 00:38:38.439
+but rephrasing, organizing,
+
+00:38:38.440 --> 00:38:46.399
+but sometimes also just typing the stuff in
+
+00:38:46.400 --> 00:38:51.759
+that's how people romanticize learning a basic
+
+00:38:51.760 --> 00:38:54.999
+like there were magazines with a lot of code listings
+
+00:38:55.000 --> 00:38:58.839
+and they just typed the code it was quite some effort
+
+00:38:58.840 --> 00:39:00.879
+you eventually got better at this
+
+00:39:00.880 --> 00:39:03.799
+but you did do mistakes and then you needed to correct
+
+00:39:03.800 --> 00:39:06.799
+and look through the source code carefully to spot the typo
+
+00:39:06.800 --> 00:39:11.839
+That's apparently virtue, at least people claim it's a virtue.
+
+00:39:11.840 --> 00:39:15.759
+I don't deny it's a virtue because I went through the same kind of crap
+
+00:39:15.760 --> 00:39:20.919
+and I believe it strengthened my character, for sure, but still.
+
+00:39:20.920 --> 00:39:26.639
+Maybe it's not that useful, but maybe it is. I don't know.
+
+00:39:26.640 --> 00:39:27.759
+There's studies I remember,
+
+00:39:27.760 --> 00:39:30.519
+but I don't remember any interesting results.
+
+00:39:30.520 --> 00:39:32.839
+It's not like it's a 10x improvement
+
+00:39:32.840 --> 00:39:36.959
+of recall if you type this, but it may be significant.
+
+00:39:36.960 --> 00:39:39.319
+Just check it out for yourself. I'm not sure.
+
+00:39:39.320 --> 00:39:40.959
+Next question, sorry.
+
+NOTE Q: In your experience, would you say that you re-use most of your notes?
+
+00:39:40.960 --> 00:39:45.639
+In your experience, would you say that you reuse most of your notes?
+
+00:39:45.640 --> 00:39:47.959
+Watching your demo, I thought that more notes you create,
+
+00:39:47.960 --> 00:39:51.279
+the less you might reuse them. Yes, that's true.
+
+00:39:51.280 --> 00:39:54.879
+I have 11,000 notes or something,
+
+00:39:54.880 --> 00:39:57.239
+and I don't use 11,000 notes every day.
+
+00:39:57.240 --> 00:39:59.879
+I can only use a fraction of them.
+
+00:39:59.880 --> 00:40:06.439
+But let's say you have the Feynman Darling notes,
+
+00:40:06.440 --> 00:40:08.479
+then you would probably use these.
+
+00:40:08.480 --> 00:40:11.479
+Imagine you have the same 12 Darlings for a year.
+
+00:40:11.480 --> 00:40:15.559
+Then you use these 12 thingies for one year more often.
+
+00:40:15.560 --> 00:40:17.919
+than most of your other notes,
+
+00:40:17.920 --> 00:40:19.999
+because these become your entry points
+
+00:40:20.000 --> 00:40:21.999
+into what's in my Zettelkasten today.
+
+00:40:22.000 --> 00:40:23.559
+These become your entry points
+
+00:40:23.560 --> 00:40:24.999
+of what do I want to work on today?
+
+00:40:25.000 --> 00:40:27.719
+These become your, where can I put
+
+00:40:27.720 --> 00:40:29.199
+the weird stuff that I just found?
+
+00:40:29.200 --> 00:40:31.119
+Does it stick to any of these surfaces?
+
+00:40:31.120 --> 00:40:33.719
+Entry point into the process.
+
+00:40:33.720 --> 00:40:41.839
+But let's say, five years later,
+
+00:40:41.840 --> 00:40:45.399
+maybe these 12 Feynman darlings were your darlings
+
+00:40:45.400 --> 00:40:47.719
+during university studies for STEM field,
+
+00:40:47.720 --> 00:40:49.339
+where you had a hard time figuring out
+
+00:40:49.340 --> 00:40:52.479
+how the Zettelkasten works for your benefit.
+
+00:40:52.480 --> 00:40:56.279
+And then five years later, you're in a job and you don't need all of them
+
+00:40:56.280 --> 00:41:00.799
+because your subject matters from university, they're gone.
+
+00:41:00.800 --> 00:41:03.119
+you're not at a day job and you have different darlings
+
+00:41:03.120 --> 00:41:04.319
+whatever your day job is
+
+00:41:04.320 --> 00:41:09.399
+maybe you're a mathematician at an insurance company
+
+00:41:09.400 --> 00:41:14.319
+so you will probably have insurance related domain darlings pouring in
+
+00:41:14.320 --> 00:41:18.119
+and some academic darlings falling off the bandwagon
+
+00:41:18.120 --> 00:41:21.119
+because no time for these maybe other hobbies come in
+
+00:41:21.120 --> 00:41:25.919
+like i didn't have anything related to child Rearing,
+
+00:41:25.920 --> 00:41:28.999
+bearing is when you produce them
+
+00:41:29.000 --> 00:41:30.199
+and put them into the wild, right?
+
+00:41:30.200 --> 00:41:34.639
+Rearing is when you let them grow up, I don't know
+
+00:41:34.640 --> 00:41:36.959
+Like when you have children and make them not die
+
+00:41:36.960 --> 00:41:42.039
+and get larger and do stuff, right?
+
+00:41:42.040 --> 00:41:44.079
+I did have a couple of things in advance, but
+
+00:41:44.080 --> 00:41:47.919
+That was not a daily concern. Now it is.
+
+00:41:47.920 --> 00:41:50.999
+Now I'm a father and that's a new concern in my life.
+
+00:41:51.000 --> 00:41:54.599
+Getting things done also tackled this, right?
+
+00:41:54.600 --> 00:41:56.239
+If you remember getting things done, everyone,
+
+00:41:56.240 --> 00:41:58.559
+you had areas of responsibility.
+
+00:41:58.560 --> 00:42:00.999
+It's a new area of responsibility and you could represent,
+
+00:42:01.000 --> 00:42:06.599
+sorry, you could represent these in your Zettelkasten,
+
+00:42:06.600 --> 00:42:10.239
+if you find that you can spell out your areas of responsibility
+
+00:42:10.240 --> 00:42:12.799
+well, then you can see, well, I've learned something new,
+
+00:42:12.800 --> 00:42:14.719
+can I become a better person
+
+00:42:14.720 --> 00:42:16.879
+in one of my core areas of responsibility?
+
+00:42:16.880 --> 00:42:18.679
+Yes or no? Why not?
+
+00:42:18.680 --> 00:42:21.279
+Then you will use these more than the other notes.
+
+00:42:21.280 --> 00:42:25.159
+Like the weird thing you found last month.
+
+00:42:25.160 --> 00:42:29.079
+Last month, you will probably not reference that weird thing every day.
+
+00:42:29.080 --> 00:42:32.359
+Natural process. But it's there.
+
+00:42:32.360 --> 00:42:34.799
+And eventually you get back to something,
+
+00:42:34.800 --> 00:42:38.999
+and then you serve access to this like that's the that
+
+00:42:39.000 --> 00:42:43.599
+and whatever this changes like going through these processes
+
+00:42:43.600 --> 00:42:51.399
+change you if I if I spend a month getting nerd sniped on
+
+00:42:51.400 --> 00:42:56.679
+I don't know chocolate manufacturing or something
+
+00:42:56.680 --> 00:43:00.759
+then I don't need this ever these things ever again most likely
+
+00:43:00.760 --> 00:43:02.999
+but going through the procedure of
+
+00:43:03.000 --> 00:43:06.199
+becoming the master chocolate manufacturer of my town,
+
+00:43:06.200 --> 00:43:10.159
+at least in theory, will do something with me
+
+00:43:10.160 --> 00:43:12.719
+when I encounter the next topic.
+
+00:43:12.720 --> 00:43:14.959
+I will think of chocolate manufacturing.
+
+00:43:14.960 --> 00:43:17.359
+I wouldn't have thought of chocolate manufacturing before.
+
+00:43:17.360 --> 00:43:18.919
+In fact, I didn't think about chocolate
+
+00:43:18.920 --> 00:43:21.719
+manufacturing yesterday. I just made this up on the spot.
+
+00:43:21.720 --> 00:43:23.679
+What does this say about me today?
+
+00:43:23.680 --> 00:43:26.159
+Maybe because we were out of chocolate,
+
+00:43:26.160 --> 00:43:30.279
+maybe because I don't know,
+
+00:43:30.280 --> 00:43:33.159
+maybe there's nothing that looks like chocolate here
+
+00:43:33.160 --> 00:43:36.359
+I don't know so it just came up and now it's there
+
+00:43:36.360 --> 00:43:39.159
+and things have changed for the better,
+
+00:43:39.160 --> 00:43:41.359
+for the worse, I don't know but they've changed
+
+00:43:41.360 --> 00:43:43.719
+and that's the real takeaway there
+
+00:43:43.720 --> 00:43:44.959
+where do you put the effort?
+
+00:43:44.960 --> 00:43:48.759
+where do you want to put the effort? and will it pay off?
+
+00:43:48.760 --> 00:43:54.479
+maybe if not, then maybe spend the time on something else
+
+00:43:54.480 --> 00:43:57.119
+like don't try to Zettelkastenify something you hate
+
+00:43:57.120 --> 00:43:59.519
+just to I don't know,
+
+00:43:59.520 --> 00:44:04.479
+do your due diligence if you don't want to
+
+00:44:04.480 --> 00:44:06.719
+because then you'll hate the process
+
+00:44:06.720 --> 00:44:15.279
+that's worse than not using notes a lot. Next question.
+
+NOTE Q: How are notes structured and accessed when the notes grow from 10K to 100K notes?
+
+00:44:15.280 --> 00:44:17.719
+How are notes structured and accessed
+
+00:44:17.720 --> 00:44:20.639
+when the notes grow from 10k to 100k notes?
+
+00:44:20.640 --> 00:44:22.119
+yes, that's a field of exploration,
+
+00:44:22.120 --> 00:44:25.919
+I mean that the lower realm there I don't know anybody
+
+00:44:25.920 --> 00:44:32.359
+who's using a hyperlinked 100k note archive.
+
+00:44:32.360 --> 00:44:37.239
+I do know people who have a lot of text files
+
+00:44:37.240 --> 00:44:38.919
+like the Evernote style
+
+00:44:38.920 --> 00:44:42.799
+they capture everything and put the verbatim copy into their stuff
+
+00:44:42.800 --> 00:44:47.519
+and then they have a lot more items of course
+
+00:44:47.520 --> 00:44:51.359
+but these don't really count,
+
+00:44:51.360 --> 00:44:54.599
+these are like web clippings of websites themselves
+
+00:44:54.600 --> 00:44:58.119
+I've read how many hundreds of websites today
+
+00:44:58.120 --> 00:45:02.919
+I could have captured everything automatically,
+
+00:45:02.920 --> 00:45:07.119
+but they wouldn't, like the files there, the clippings,
+
+00:45:07.120 --> 00:45:10.559
+they wouldn't have contributed
+
+00:45:10.560 --> 00:45:12.439
+anything meaningfully to my knowledge base,
+
+00:45:12.440 --> 00:45:14.479
+because I'm not thinking about the stuff,
+
+00:45:14.480 --> 00:45:16.399
+I'm thinking about the stuff that I'm spending time on.
+
+00:45:16.400 --> 00:45:18.839
+What about that?
+
+00:45:18.840 --> 00:45:20.639
+Yeah, how are notes structured and accessed
+
+00:45:20.640 --> 00:45:22.919
+when the notes go from one to 100k?
+
+00:45:22.920 --> 00:45:31.399
+I will imagine that it becomes a matter that's speculation.
+
+00:45:31.400 --> 00:45:34.759
+We'll see. My speculation is this.
+
+00:45:34.760 --> 00:45:40.639
+it's going to be self-similar, like Mandelbrot images,
+
+00:45:40.640 --> 00:45:43.199
+where you have recursive patterns.
+
+00:45:43.200 --> 00:45:46.519
+First, you have a couple of notes.
+
+00:45:46.520 --> 00:45:49.759
+You can leave through them digitally or physically easily.
+
+00:45:49.760 --> 00:45:52.559
+And then eventually, you need to rely on structures
+
+00:45:52.560 --> 00:45:54.079
+or some kinds of entry points,
+
+00:45:54.080 --> 00:45:55.679
+which we usually call structures,
+
+00:45:55.680 --> 00:46:03.359
+thanks to Sascha. Perfect. Thank you.
+
+00:46:03.360 --> 00:46:04.799
+And the clue there is,
+
+00:46:04.800 --> 00:46:10.159
+Eventually, you have hundreds or maybe thousands,
+
+00:46:10.160 --> 00:46:12.359
+not hundreds or thousands, of structure notes.
+
+00:46:12.360 --> 00:46:13.959
+And then you have the same problem
+
+00:46:13.960 --> 00:46:16.039
+that you had on the lower base layer.
+
+00:46:16.040 --> 00:46:19.199
+And now you will probably look for another tool.
+
+00:46:19.200 --> 00:46:22.759
+But there is nothing else that's not also a structure note
+
+00:46:22.760 --> 00:46:25.799
+but is structuring other structures mostly
+
+00:46:25.800 --> 00:46:28.119
+instead of structuring the low-level notes.
+
+00:46:28.120 --> 00:46:31.719
+But this distinction, I want to point out, doesn't pay off.
+
+00:46:31.720 --> 00:46:34.879
+it seems like it doesn't pay off
+
+00:46:34.880 --> 00:46:37.319
+to say hey I have these foundational permanent notes
+
+00:46:37.320 --> 00:46:38.759
+And then I have these meta notes,
+
+00:46:38.760 --> 00:46:40.519
+these maps and structures
+
+00:46:40.520 --> 00:46:42.759
+and then I have these super mega structures
+
+00:46:42.760 --> 00:46:44.159
+which are not permanent,
+
+00:46:44.160 --> 00:46:45.519
+which are not structures, which are not...
+
+00:46:45.520 --> 00:46:47.919
+I don't know... This doesn't seem to pay off,
+
+00:46:47.920 --> 00:46:51.079
+because eventually there is another level and another level
+
+00:46:51.080 --> 00:46:53.519
+and also sometimes you want to talk
+
+00:46:53.520 --> 00:46:56.159
+about a structure as a data point
+
+00:46:56.160 --> 00:46:58.079
+like hey I did this writing project
+
+00:46:58.080 --> 00:47:00.159
+once it was really cool link to writing project
+
+00:47:00.160 --> 00:47:04.959
+and the writing project is a table of contents huge hierarchy or whatever.
+
+00:47:04.960 --> 00:47:06.959
+Is it not a link to a thing?
+
+00:47:06.960 --> 00:47:10.759
+Back then you get into all these weird academic questions
+
+00:47:10.760 --> 00:47:12.799
+about the nature of links
+
+00:47:12.800 --> 00:47:17.719
+and there's no gold at the end of that rainbow, let's say.
+
+00:47:17.720 --> 00:47:21.159
+At least I've never seen anyone come back with any gold.
+
+00:47:21.160 --> 00:47:24.199
+I've seen people come back with very long faces
+
+00:47:24.200 --> 00:47:26.559
+and sadness in their eyes
+
+00:47:26.560 --> 00:47:31.239
+because all the effort, all the metadata was for naught.
+
+00:47:31.240 --> 00:47:32.919
+So, how do you do this?
+
+00:47:32.920 --> 00:47:36.119
+You figure out, when you get to 10k,
+
+00:47:36.120 --> 00:47:37.759
+you will probably have figured,
+
+00:47:37.760 --> 00:47:40.839
+and if you do 10k, not like web clippings,
+
+00:47:40.840 --> 00:47:42.759
+but really like you did put in effort to get there
+
+00:47:42.760 --> 00:47:46.879
+and type everything yourself in one way or another
+
+00:47:46.880 --> 00:47:47.999
+you would have figured out something
+
+00:47:48.000 --> 00:47:52.599
+that kind of sort of works for you around that milestone.
+
+00:47:52.600 --> 00:47:53.439
+And then I believe in you,
+
+00:47:53.440 --> 00:47:58.839
+you will be equipped to get to 20k, 30k,
+
+00:47:58.840 --> 00:48:00.799
+because you feel comfortable in your notes.
+
+00:48:00.800 --> 00:48:02.399
+And then you can expand further.
+
+00:48:02.400 --> 00:48:03.719
+And it will probably look different
+
+00:48:03.720 --> 00:48:06.639
+for someone in STEM fields than for an artist.
+
+00:48:06.640 --> 00:48:09.079
+Maybe, maybe not. I don't know.
+
+00:48:09.080 --> 00:48:14.639
+Maybe a fine arts artist would woodcrafter,
+
+00:48:14.640 --> 00:48:17.359
+maybe these kinds of folks will have different structures
+
+00:48:17.360 --> 00:48:22.519
+and rely more on visuals, schemas,
+
+00:48:22.520 --> 00:48:28.559
+whole part relationships, whereas mathematicians may not.
+
+00:48:28.560 --> 00:48:31.359
+but I don't know, I don't know, we need to compare
+
+00:48:31.360 --> 00:48:33.639
+and this will be the interesting like
+
+00:48:33.640 --> 00:48:36.159
+if the internet survives and we all survive
+
+00:48:36.160 --> 00:48:40.239
+and also Zettelkasten as an idea sticks on
+
+00:48:40.240 --> 00:48:43.039
+I hope we can have this discussion
+
+00:48:43.040 --> 00:48:44.839
+every year in five years, in ten years
+
+00:48:44.840 --> 00:48:50.039
+and then see how people transparently evolve
+
+00:48:50.040 --> 00:48:55.159
+their gardens, their processes, their note-taking systems
+
+NOTE Q: I would be very interested in your thought on this video by Westenberg - https://www.youtube.com/watch?v=CjSWwmg-JRM (Why I Deleted My Second Brain: A Journey Back to Real Thinking)
+
+00:48:55.160 --> 00:49:00.319
+next question not a question but i would be very interested
+
+00:49:00.320 --> 00:49:01.559
+in your thoughts on this video
+
+00:49:01.560 --> 00:49:07.039
+by Westenberg. Okay. This is not spam.
+
+00:49:07.040 --> 00:49:13.959
+I don't... Uh, there's Joe Westenberg's Youtube channel,
+
+00:49:13.960 --> 00:49:15.319
+"Why I Deleted My Second Brain:
+
+00:49:15.320 --> 00:49:22.679
+A Journey Back to Real Thinking."
+
+00:49:22.680 --> 00:49:30.319
+I think I didn't watch the video but read an article.
+
+00:49:30.320 --> 00:49:34.360
+Not sure where. Let me check my Zettelkasten.
+
+00:49:34.383 --> 00:49:36.215
+It's not on screen sharing. That was stupid.
+
+00:49:36.216 --> 00:49:48.239
+I'm probably not going to watch it right now with everyone here,
+
+00:49:48.240 --> 00:49:51.659
+so my thoughts on deleting and stuff like that.
+
+00:49:51.660 --> 00:49:58.679
+I do remember there was a very cleverly written, well-written post
+
+00:49:58.680 --> 00:50:02.719
+and the claim was, from my perspective,
+
+00:50:02.720 --> 00:50:04.919
+and that's not doing the work of...
+
+00:50:04.920 --> 00:50:13.199
+It's not doing the work of the author justice.
+
+00:50:13.200 --> 00:50:19.839
+But the shortest summary is that there seems to be false contradiction,
+
+00:50:19.840 --> 00:50:24.759
+where the contradiction stems from how the opposite side,
+
+00:50:24.760 --> 00:50:27.079
+the note taking, the deliberate note taking,
+
+00:50:27.080 --> 00:50:28.159
+taking a lot of notes,
+
+00:50:28.160 --> 00:50:31.479
+all the notes every time, stuff, like how this is presented.
+
+00:50:31.480 --> 00:50:34.639
+I would say this is more on the collecting
+
+00:50:34.640 --> 00:50:36.519
+and not on the connecting side of things.
+
+00:50:36.520 --> 00:50:42.119
+So like I mentioned for the, some 30 minutes ago
+
+00:50:42.120 --> 00:50:45.039
+when I talked about Roam, Roam Research.
+
+00:50:45.040 --> 00:50:47.439
+If you start your day with a daily note,
+
+00:50:47.440 --> 00:50:50.679
+journal style, and then branch out from there,
+
+00:50:50.680 --> 00:50:53.759
+you do at least have time as a structure
+
+00:50:53.760 --> 00:50:57.039
+that helps you to organize what you put in.
+
+00:50:57.040 --> 00:50:59.319
+But also, it can get very messy
+
+00:50:59.320 --> 00:51:01.239
+and very weirdly interconnected,
+
+00:51:01.240 --> 00:51:04.239
+like this meme of the with a guy
+
+00:51:04.240 --> 00:51:10.919
+standing in front of a board
+
+00:51:10.920 --> 00:51:14.439
+with all these lines connecting things
+
+00:51:14.440 --> 00:51:17.239
+and just, you know, with the madness in his eyes
+
+00:51:17.240 --> 00:51:23.439
+you can do a lot of stuff in there.
+
+00:51:23.440 --> 00:51:27.839
+But at a certain point, it gets hard
+
+00:51:27.840 --> 00:51:30.799
+to also get out of your own head, let's say.
+
+00:51:30.800 --> 00:51:33.079
+If you do it in this kind of style,
+
+00:51:33.080 --> 00:51:35.679
+it can get hard to get off your own head.
+
+00:51:35.680 --> 00:51:39.919
+And one litmus test that you may find enjoyable
+
+00:51:39.920 --> 00:51:41.119
+if you struggle with this
+
+00:51:41.120 --> 00:51:46.199
+is to publish more. Because having access
+
+00:51:46.200 --> 00:51:49.199
+to a very deeply interconnected web of stuff
+
+00:51:49.200 --> 00:51:52.919
+thoughts, ideas, notes, wisdoms, whatever
+
+00:51:52.920 --> 00:51:55.079
+very deeply connected,
+
+00:51:55.080 --> 00:52:02.359
+like not a pile, yarn, wool, what's the ball?
+
+00:52:02.360 --> 00:52:06.519
+Ball of yarn? No, that's boring.
+
+00:52:06.520 --> 00:52:09.239
+Let's say like you have a lot of yarn
+
+00:52:09.240 --> 00:52:11.519
+and then you just create chaos and entropy
+
+00:52:11.520 --> 00:52:13.239
+and can't untangle it. It's a very tangled mess.
+
+00:52:13.240 --> 00:52:15.479
+So it's a very dense, dense thingy
+
+00:52:15.480 --> 00:52:18.639
+that's now its own kind of structure. Like if you have this
+
+00:52:18.640 --> 00:52:21.519
+And in your head, when you think about your notes,
+
+00:52:21.520 --> 00:52:24.639
+you may have some interesting pathways there.
+
+00:52:24.640 --> 00:52:28.999
+But you need to serialize and put into a linear order
+
+00:52:29.000 --> 00:52:30.079
+in order to communicate.
+
+00:52:30.080 --> 00:52:32.799
+Otherwise, people cannot follow your thought.
+
+00:52:32.800 --> 00:52:36.119
+it's a pity because we still rely
+
+00:52:36.120 --> 00:52:39.159
+on the book style of writing
+
+00:52:39.160 --> 00:52:42.639
+and also hypertext which is making navigation easy
+
+00:52:42.640 --> 00:52:47.439
+but not telling a story easier in our modern times
+
+00:52:47.440 --> 00:52:49.999
+but we still rely a lot on books
+
+00:52:50.000 --> 00:52:54.199
+which take take a lot of intertwined stuff,
+
+00:52:54.200 --> 00:52:58.759
+put it into one order so you can read from start to finish.
+
+00:52:58.760 --> 00:53:01.319
+But then, in order for you to make sense of this,
+
+00:53:01.320 --> 00:53:02.439
+you need to chop it up,
+
+00:53:02.440 --> 00:53:04.439
+associate with things you already know,
+
+00:53:04.440 --> 00:53:07.159
+and then attach things and create a new kind of structure
+
+00:53:07.160 --> 00:53:08.399
+through the narrative,
+
+00:53:08.400 --> 00:53:11.079
+because it's only one kind of presentation
+
+00:53:11.080 --> 00:53:12.079
+that's given to you.
+
+00:53:12.080 --> 00:53:14.919
+And there may also be different kinds of presentations,
+
+00:53:14.920 --> 00:53:16.599
+like I also mentioned for the STEM fields,
+
+00:53:16.600 --> 00:53:18.359
+where you have different textbooks
+
+00:53:18.360 --> 00:53:21.199
+from different eras of mathematics foundations,
+
+00:53:21.200 --> 00:53:24.140
+and then you see, hey, this one clicks, this one doesn't.
+
+00:53:24.120 --> 00:53:27.879
+Why? It's the same stuff, but they present it differently.
+
+00:53:27.880 --> 00:53:30.639
+And the presentation matters. The presentation matters.
+
+00:53:30.640 --> 00:53:33.119
+And if you only deal with the chaos,
+
+00:53:33.120 --> 00:53:34.399
+the weird entanglement,
+
+00:53:34.400 --> 00:53:36.479
+if you capture everything and anything,
+
+00:53:36.480 --> 00:53:41.239
+how many, I don't know, how many hairs you lost that day or whatever.
+
+00:53:41.240 --> 00:53:43.559
+If you capture everything in there,
+
+00:53:43.560 --> 00:53:45.119
+you don't create the kind of value
+
+00:53:45.120 --> 00:53:47.159
+that is linearizable into thought,
+
+00:53:47.160 --> 00:53:49.599
+which also makes reading your own stuff later,
+
+00:53:49.600 --> 00:53:55.839
+maybe unbearable, maybe at least hard and making sense.
+
+00:53:55.840 --> 00:53:57.719
+Now we come back to one of the earlier questions,
+
+00:53:57.720 --> 00:54:00.399
+like, why do I not use outlines?
+
+00:54:00.400 --> 00:54:03.039
+Because Org-node allows me to do outlines.
+
+00:54:03.040 --> 00:54:06.319
+Well, I try to write my notes as blog posts,
+
+00:54:06.320 --> 00:54:09.599
+very short blog posts, microblogging, if you will,
+
+00:54:09.600 --> 00:54:11.439
+paragraphs, a couple of paragraphs.
+
+00:54:11.440 --> 00:54:14.279
+Maybe it's also more nested because it's a huge topic.
+
+00:54:14.280 --> 00:54:16.199
+It's a complex topic. That also happens.
+
+00:54:16.200 --> 00:54:18.039
+But then it's more like an article,
+
+00:54:18.040 --> 00:54:21.279
+a long blog post, or an essay,
+
+00:54:21.280 --> 00:54:26.279
+but never just vomiting thought out onto the page,
+
+00:54:26.280 --> 00:54:28.559
+because then you will get back to the note
+
+00:54:28.560 --> 00:54:31.199
+and you will find, hey, there's a lot of vomit.
+
+00:54:31.200 --> 00:54:36.759
+But you never follow this kind of phrase with nice.
+
+00:54:36.760 --> 00:54:40.880
+I enjoyed reading that. It's always me.
+
+00:54:40.880 --> 00:54:43.239
+Oppressing because of its mass,
+
+00:54:43.240 --> 00:54:46.279
+it's also getting in the way of having new ideas
+
+00:54:46.280 --> 00:54:48.719
+because whatever is there and you need to tangle it
+
+00:54:48.720 --> 00:54:52.759
+and then you lost your new genuine idea,
+
+00:54:52.760 --> 00:54:56.319
+this can also happen.
+
+00:54:56.320 --> 00:55:00.759
+So I'm not sure what the Westenberg video contains,
+
+00:55:00.760 --> 00:55:03.799
+but the sentiment there of deleting everything,
+
+00:55:03.800 --> 00:55:06.999
+it makes sense if you find yourself in a situation
+
+00:55:07.000 --> 00:55:09.359
+where you don't have a productive system.
+
+00:55:09.360 --> 00:55:13.199
+and the notes from 2009 in my own Zettelkasten
+
+00:55:13.200 --> 00:55:15.159
+aren't of the highest quality standards
+
+00:55:15.160 --> 00:55:17.959
+I rewrite most of them when I encounter them,
+
+00:55:17.960 --> 00:55:23.399
+but I can still use a couple as is and sometimes they're just garbage,
+
+00:55:23.400 --> 00:55:28.119
+but as Luhmann said garbage like trickles to the ground
+
+00:55:28.120 --> 00:55:34.599
+and forms a nice sediment layer there in the septic tank of your thought machine,
+
+00:55:34.600 --> 00:55:36.439
+your thought thinking environment.
+
+00:55:36.440 --> 00:55:40.319
+But clear water separates and then rises to the top
+
+00:55:40.320 --> 00:55:42.439
+and that's what you work with.
+
+00:55:42.440 --> 00:55:47.759
+it's never going to be 100% useful. But if it's 90% garbage
+
+00:55:47.760 --> 00:55:51.479
+and if the water is, if the septic tank is never clearing,
+
+00:55:51.480 --> 00:55:54.399
+then you probably need to start
+
+00:55:54.400 --> 00:55:55.559
+over and rethink your approach.
+
+00:55:55.560 --> 00:55:57.319
+Maybe there was just too much garbage,
+
+00:55:57.320 --> 00:56:01.559
+too much toxic waste in there, whatever that means, right?
+
+00:56:01.560 --> 00:56:07.839
+So I do understand this, but also I would say
+
+00:56:07.840 --> 00:56:11.479
+maybe maybe they tried to do too much with a different mindset
+
+00:56:11.480 --> 00:56:24.839
+and it just didn't click and then they,
+
+00:56:24.840 --> 00:56:25.519
+you know next question is there a danger?
+
+00:56:25.520 --> 00:56:34.340
+also, wait a second, answer do not probably a lot of collection,
+
+00:56:34.341 --> 00:56:52.359
+not a lot of thinking in the Zettelkasten to some purpose.
+
+00:56:52.360 --> 00:56:58.700
+Usually. Conflation was the word I was fishing for.
+
+00:56:58.701 --> 00:57:02.840
+Usually posts videos like this.
+
+00:57:02.841 --> 00:57:15.049
+Conflate note taking as a dumping ground for stuff
+
+00:57:15.050 --> 00:57:22.174
+with something that is valuable in the long term.
+
+00:57:22.175 --> 00:57:27.599
+Also, if this was our dear friend Westenberg
+
+00:57:27.600 --> 00:57:30.439
+I think the note count also was higher,
+
+00:57:30.440 --> 00:57:33.519
+but I might confuse them with someone else.
+
+00:57:33.520 --> 00:57:36.959
+The note count was way higher than mine. Note count.
+
+00:57:36.960 --> 00:57:41.239
+But then also, you know, there's the sign
+
+00:57:41.240 --> 00:57:44.159
+of going for quantity in...
+
+00:57:44.160 --> 00:57:47.719
+just capture anything, like capturing,
+
+00:57:47.720 --> 00:57:48.799
+that's not the bottleneck.
+
+00:57:48.800 --> 00:57:52.479
+The bottleneck is finding, making connections happen,
+
+00:57:52.480 --> 00:57:55.919
+having thoughts and working on problems
+
+00:57:55.920 --> 00:57:57.279
+you really want to solve in the long term.
+
+00:57:57.280 --> 00:57:59.159
+So next question.
+
+NOTE Q: Is there a danger that with the Zettelkasten process, that the process gets a bit in the way of the content?
+
+00:57:59.160 --> 00:58:02.359
+Is there a danger that with the Zettelkasten process,
+
+00:58:02.360 --> 00:58:05.679
+that the process gets a bit in the way of the content?
+
+00:58:05.680 --> 00:58:12.279
+yes, especially if you do it like old school style
+
+00:58:12.280 --> 00:58:14.639
+if you find that your handwriting sucks
+
+00:58:14.640 --> 00:58:16.079
+and you want to type things
+
+00:58:16.080 --> 00:58:19.199
+on a typewriter like that kind of process
+
+00:58:19.200 --> 00:58:20.479
+definitely gets in the way
+
+00:58:20.480 --> 00:58:21.759
+that's going to be your bottleneck
+
+00:58:21.760 --> 00:58:24.679
+you can't find black paper
+
+00:58:24.680 --> 00:58:30.759
+and put it into your typewriter and then like that's not the speed of thought
+
+00:58:30.760 --> 00:58:35.959
+that's the speed of, I don't know, my long deceased grandmother
+
+00:58:35.960 --> 00:58:54.479
+but yeah it's not like a strive for speed of thought tools
+
+00:58:54.480 --> 00:59:00.439
+not needing a typewriter
+
+00:59:00.440 --> 00:59:10.519
+and then next step reduce ritual reduce rituals and ceremony
+
+00:59:10.520 --> 00:59:15.239
+What I mean by that is if you find yourself doing the same moves
+
+00:59:15.240 --> 00:59:16.799
+or similar moves over and over again,
+
+00:59:16.800 --> 00:59:19.439
+but they don't contribute
+
+00:59:19.440 --> 00:59:23.479
+to having more cool ideas per week, then maybe ditch these,
+
+00:59:23.480 --> 00:59:26.639
+apart from the day timestamp,
+
+00:59:26.640 --> 00:59:28.479
+having a title, hashtags, and content,
+
+00:59:28.480 --> 00:59:32.399
+and also being very, very careful about quoting my sources.
+
+00:59:32.400 --> 00:59:35.639
+I don't do much with my Zettelkasten.
+
+00:59:35.640 --> 00:59:37.679
+I cannot give up quoting my sources
+
+00:59:37.680 --> 00:59:39.399
+because then I'm plagiarizing, stealing,
+
+00:59:39.400 --> 00:59:41.879
+forgetting where I get ideas from and confuse.
+
+00:59:41.880 --> 00:59:44.599
+And I get out because I'm aware of the problem there.
+
+00:59:44.600 --> 00:59:49.439
+I'm also not trusting my own notes anymore.
+
+00:59:49.440 --> 00:59:51.159
+I would not be trusting my own notes anymore.
+
+00:59:51.160 --> 00:59:53.919
+I need to properly cite so then I can see, hey,
+
+00:59:53.920 --> 00:59:56.559
+this block has no quotations, that's mine,
+
+00:59:56.560 --> 01:00:00.559
+and I can trust this. It's not like, hey, this is maybe mine,
+
+01:00:00.560 --> 01:00:04.039
+maybe this is a verbatim quote from a book. Like this
+
+01:00:04.040 --> 01:00:05.799
+is not helping. That's a ceremony
+
+01:00:05.800 --> 01:00:09.039
+that's paying off in the long term also,
+
+01:00:09.040 --> 01:00:11.319
+so that when you write something,
+
+01:00:11.320 --> 01:00:15.159
+you have all the sources at hand.
+
+01:00:15.160 --> 01:00:16.882
+That's a useful ceremony.
+
+01:00:16.883 --> 01:00:20.799
+Title is just a way of summarizing the content.
+
+01:00:20.800 --> 01:00:25.119
+Do it like an excerpt, right?
+
+01:00:25.120 --> 01:00:26.919
+You have the whole content, that's your Zettel.
+
+01:00:26.920 --> 01:00:29.879
+Do a short summary, that may be your introduction.
+
+01:00:29.880 --> 01:00:33.239
+So have a way to quickly get a glimpse of the relevance
+
+01:00:33.240 --> 01:00:35.919
+before having to read the whole Zettel
+
+01:00:35.920 --> 01:00:38.719
+when you encounter it years from now.
+
+01:00:38.720 --> 01:00:41.319
+And then have a one, that's one sentence summary,
+
+01:00:41.320 --> 01:00:44.159
+and then have an even more condensed form that's a title.
+
+01:00:44.160 --> 01:00:45.679
+The title is basically your API,
+
+01:00:45.680 --> 01:00:49.359
+the interface for you and your notes.
+
+01:00:49.360 --> 01:00:54.879
+And it needs to uphold some kind of contract.
+
+01:00:54.880 --> 01:00:57.319
+And if it just is, like, this is my second note,
+
+01:00:57.320 --> 01:01:00.239
+that's not useful. This is just a technical limitation
+
+01:01:00.240 --> 01:01:02.839
+because you can't have the same file name twice.
+
+01:01:02.840 --> 01:01:05.639
+That's not going to be useful.
+
+01:01:05.640 --> 01:01:09.519
+But if you give yourself the permission to take time
+
+01:01:09.520 --> 01:01:12.919
+of titling your notes in one way and also changing titles,
+
+01:01:12.920 --> 01:01:16.199
+because you will know from writing introductions
+
+01:01:16.200 --> 01:01:18.679
+the further you get along,
+
+01:01:18.680 --> 01:01:22.279
+the more and more you need to rewrite your introductions
+
+01:01:22.280 --> 01:01:24.639
+because your understanding changes same for titles
+
+01:01:24.640 --> 01:01:28.319
+titles don't always stay consistent or constant
+
+01:01:28.320 --> 01:01:31.079
+that's why I don't link by title, because I would then need
+
+01:01:31.080 --> 01:01:39.299
+to go through my note archive and also need to go to
+
+01:01:39.300 --> 01:01:41.090
+my note archive and need to correct all the links.
+
+01:01:41.091 --> 01:01:44.039
+That's a janitorial task I like to not do, if I can.
+
+01:01:44.040 --> 01:01:49.759
+So answer here, less ceremony, fewer ceremonies, plural.
+
+01:01:49.760 --> 01:01:54.359
+Try to only do the minimum possible, minimum viable thing.
+
+01:01:54.360 --> 01:01:57.599
+And using Emacs and Denote, you get a lot of defaults.
+
+01:01:57.600 --> 01:01:58.719
+And then you need to worry
+
+01:01:58.720 --> 01:02:01.199
+not about IDs and tags that much,
+
+01:02:01.200 --> 01:02:04.159
+or where to put them and how to put them.
+
+01:02:04.160 --> 01:02:06.439
+You can omit keywords. You can leave keywords out.
+
+01:02:06.440 --> 01:02:08.159
+They don't scale anyway.
+
+01:02:08.160 --> 01:02:12.079
+But they may be interesting as a way to group,
+
+01:02:12.080 --> 01:02:19.959
+but also Sascha from zettelkasten.de, from our website,
+
+01:02:19.960 --> 01:02:23.279
+Sascha also found that, I believe, he,
+
+01:02:23.280 --> 01:02:28.119
+structures win in the long term.
+
+01:02:28.120 --> 01:02:30.719
+Manual created hubs and overviews
+
+01:02:30.720 --> 01:02:34.639
+win over machine generated lumps.
+
+01:02:34.640 --> 01:02:37.959
+Because you need to reorient yourself
+
+01:02:37.960 --> 01:02:42.239
+in the search results all the time.
+
+01:02:42.240 --> 01:02:45.679
+That's not as useful as having a pathway
+
+01:02:45.680 --> 01:02:49.559
+through your notes that you can follow.
+
+01:02:49.560 --> 01:02:52.039
+It may not be a pathway through all of your notes, of course,
+
+01:02:52.040 --> 01:02:56.159
+but it may be a pathway from entry point into some topic.
+
+01:02:56.160 --> 01:03:01.839
+That's why some things are essential and others aren't.
+
+01:03:01.840 --> 01:03:06.239
+And the essential stuff, try to do it quickly, get better at it,
+
+01:03:06.240 --> 01:03:08.799
+practice the movements, then they get out of the way,
+
+01:03:08.800 --> 01:03:10.919
+and then you can focus on having ideas
+
+01:03:10.920 --> 01:03:12.119
+and typing them at speed of thought,
+
+01:03:12.120 --> 01:03:15.239
+more or less, and then you're good.
+
+01:03:15.240 --> 01:03:20.639
+I hope. Wishing you all the best. Next and last question.
+
+NOTE Q: How do you navigate looking at all posts with certain tags
+
+01:03:20.640 --> 01:03:24.519
+How do you navigate looking at all posts with certain tags?
+
+01:03:24.520 --> 01:03:26.679
+This might be an emacs, already new to emacs.
+
+01:03:26.680 --> 01:03:28.679
+I just may have answered this.
+
+01:03:28.680 --> 01:03:31.799
+How do you navigate looking at all posts with certain tags?
+
+01:03:31.800 --> 01:03:43.215
+Let me go to my actual note archive,
+
+01:03:43.216 --> 01:03:55.919
+and then php, no, language learning, ah,
+
+01:03:55.920 --> 01:03:59.319
+this is not a nice setup. I'm very clumsy.
+
+01:03:59.320 --> 01:04:03.119
+I'm sorry, I don't know, swift, language learning,
+
+01:04:03.120 --> 01:04:28.465
+ah that's a boring one, php. By this time, I could have also,
+
+01:04:28.466 --> 01:04:35.299
+ah, there's the model. This would be an entry point
+
+01:04:35.300 --> 01:04:39.159
+into my PHP atom molecule organism learning journey
+
+01:04:39.160 --> 01:04:43.159
+where I tried to practice, what's visual line mode, sorry,
+
+01:04:43.160 --> 01:04:48.919
+where I tried to practice this atom molecule thing on something new.
+
+01:04:48.920 --> 01:04:51.879
+I haven't used PHP in a long time
+
+01:04:51.880 --> 01:04:59.199
+and found that I wasn't, yeah, you can see it on the screen also
+
+01:04:59.200 --> 01:05:01.439
+like language primitives are the atoms,
+
+01:05:01.440 --> 01:05:08.759
+I think molecules are more like idioms or patterns that are PHP special in PHP
+
+01:05:08.760 --> 01:05:10.599
+and different in other languages in Python
+
+01:05:10.600 --> 01:05:13.759
+would be list comprehension that's in a molecule
+
+01:05:13.760 --> 01:05:16.319
+and but also you can make a point for hey,
+
+01:05:16.320 --> 01:05:18.519
+this comprehension is more like a syntactical thing,
+
+01:05:18.520 --> 01:05:23.439
+no no get out of here, like the for loop is the syntactical atom
+
+01:05:23.440 --> 01:05:25.039
+and the molecule is using the for loop
+
+01:05:25.040 --> 01:05:26.559
+with weird other stuff
+
+01:05:26.560 --> 01:05:28.199
+to then make the list comprehension happen.
+
+01:05:28.200 --> 01:05:33.679
+That's my argument there, okay? So what do we do with this?
+
+01:05:33.680 --> 01:05:38.519
+I use this as an entry point if I want to see,
+
+01:05:38.520 --> 01:05:41.639
+hey, what kind of stuff did I take notes on
+
+01:05:41.640 --> 01:05:43.439
+to get a better understanding
+
+01:05:43.440 --> 01:05:45.239
+on multiple levels of the language.
+
+01:05:45.240 --> 01:05:47.479
+And project structure conventions
+
+01:05:47.480 --> 01:05:49.319
+and usually another language
+
+01:05:49.320 --> 01:05:53.239
+that I use more here would be, but I can't remember now.
+
+01:05:53.240 --> 01:05:57.479
+Funny, right? I can't remember how I would need to look,
+
+01:05:57.480 --> 01:05:58.959
+but I think I'm too clumsy in Emacs
+
+01:05:58.960 --> 01:06:00.639
+to do it live on camera, sorry.
+
+01:06:00.640 --> 01:06:05.759
+But the organisms part here would also be like my own inventions,
+
+01:06:05.760 --> 01:06:06.559
+let's say in code,
+
+01:06:06.560 --> 01:06:11.119
+like my own discoveries where I found that in Swift, for example,
+
+01:06:11.120 --> 01:06:13.359
+you can express things on the type level
+
+01:06:13.360 --> 01:06:15.639
+in a very sexy way sometimes.
+
+01:06:15.640 --> 01:06:19.439
+And then I would put these there as well.
+
+01:06:19.440 --> 01:06:20.959
+So these are also,
+
+01:06:20.960 --> 01:06:26.559
+There are organisms to discover in the language reference,
+
+01:06:26.560 --> 01:06:30.599
+but there are also organisms to discover in the world,
+
+01:06:30.600 --> 01:06:32.559
+and then they are your own inventions,
+
+01:06:32.560 --> 01:06:36.519
+discoveries, more or less. And that's a sign of mastery.
+
+01:06:36.520 --> 01:06:38.719
+If you work more on these things,
+
+01:06:38.720 --> 01:06:40.959
+then you don't need to worry
+
+01:06:40.960 --> 01:06:42.399
+about the basics of the language anymore.
+
+01:06:42.400 --> 01:06:46.239
+So I can use this as an entry point
+
+01:06:46.240 --> 01:06:51.039
+to get into things that are very PHP-esque.
+
+01:06:51.040 --> 01:06:54.359
+When do I need this? When I want to talk about PHP,
+
+01:06:54.360 --> 01:06:55.359
+like I do now.
+
+01:06:55.360 --> 01:06:59.359
+Why do I show this when the question is about tags?
+
+01:06:59.360 --> 01:07:10.919
+Because if I search for... Which one do I take?
+
+01:07:10.920 --> 01:07:22.719
+Let's try grep. php. Yep, grep exited abnormally.
+
+01:07:22.720 --> 01:07:28.039
+Dang, why? Option requires an argument.
+
+01:07:28.040 --> 01:07:36.159
+Yes, eshell is there.
+
+01:07:36.160 --> 01:07:43.919
+So let's just use rg, ripgrep and then ripgrep for php.
+
+01:07:43.920 --> 01:07:50.879
+And you see I get, I can do filenames only, right?
+
+01:07:50.880 --> 01:07:56.599
+Let's not worry. I get a lot of, let's just scroll up.
+
+01:07:56.600 --> 01:08:03.239
+I get a lot more hits here for the PHP tech,
+
+01:08:03.240 --> 01:08:06.759
+which is only about PHP specific things,
+
+01:08:06.760 --> 01:08:09.559
+not about anything that I do in PHP.
+
+01:08:09.560 --> 01:08:15.279
+Like, I don't know, I don't take Laravel or Filament,
+
+01:08:15.280 --> 01:08:17.879
+which are frameworks, libraries in PHP,
+
+01:08:17.880 --> 01:08:21.199
+the Zend library or whatever, I don't know many.
+
+01:08:21.200 --> 01:08:23.199
+Like I wouldn't take everything
+
+01:08:23.200 --> 01:08:26.999
+and anything that is related to the php ecosystem
+
+01:08:27.000 --> 01:08:28.399
+with the php hashtag.
+
+01:08:28.400 --> 01:08:30.679
+Why? Because then the tag becomes useless.
+
+01:08:30.680 --> 01:08:33.439
+I only tag things that are about the language.
+
+01:08:33.440 --> 01:08:39.159
+Like how do I pass variables to php includes that's php related.
+
+01:08:39.160 --> 01:08:44.879
+And you see these are... I'm still not at the top.
+
+01:08:44.880 --> 01:08:48.399
+now i'm at the top these are a lot more findings than you could
+
+01:08:48.400 --> 01:08:49.879
+these don't fit on the screen
+
+01:08:49.880 --> 01:08:51.919
+these are three pages i believe
+
+01:08:51.920 --> 01:08:55.039
+and the note about my language learning journey was
+
+01:08:55.040 --> 01:08:58.999
+wasn't even one full page here's white space
+
+01:08:59.000 --> 01:09:02.799
+there wasn't okay right but still there's much more stuff
+
+01:09:02.800 --> 01:09:07.479
+the hashtag I don't use for navigating.
+
+01:09:07.480 --> 01:09:10.839
+I only use this, let's say, the shotgun approach.
+
+01:09:10.840 --> 01:09:14.239
+I think Sascha on our Zettelkasten blog post,
+
+01:09:14.240 --> 01:09:16.359
+don't remember which post, mentioned this as well.
+
+01:09:16.360 --> 01:09:18.079
+Sometimes you need a sniper rifle.
+
+01:09:18.080 --> 01:09:21.319
+Sometimes you need a shotgun.
+
+01:09:21.320 --> 01:09:27.199
+And the hashtag-based search would be I don't know what I'm looking for.
+
+01:09:27.200 --> 01:09:32.959
+It was PHP related. I hope I use the hashtag correctly
+
+01:09:32.960 --> 01:09:36.879
+and then kill all these notes from my archive.
+
+01:09:36.880 --> 01:09:38.959
+The metaphor doesn't work that way,
+
+01:09:38.960 --> 01:09:41.279
+but still you get a lot of results here
+
+01:09:41.280 --> 01:09:45.959
+and you could use this as a way to filter from 11,000 notes
+
+01:09:45.960 --> 01:09:53.559
+down to 50 or so, maybe less.
+
+01:09:53.560 --> 01:09:58.999
+And if you got this far, then you can start to do it in a mechanical way again.
+
+01:09:59.000 --> 01:10:05.279
+But wait, if you have 100 or 1000 notes in the results there,
+
+01:10:05.280 --> 01:10:08.279
+then you can't mechanically go through all the notes again.
+
+01:10:08.280 --> 01:10:09.919
+You can maybe skim and look
+
+01:10:09.920 --> 01:10:11.159
+for something that catches your eye,
+
+01:10:11.160 --> 01:10:14.159
+if you're lucky, and if that's the thing
+
+01:10:14.160 --> 01:10:15.039
+that works for you.
+
+01:10:15.040 --> 01:10:21.319
+but usually no, like usually the text become useless
+
+01:10:21.320 --> 01:10:24.079
+then maybe tag groups become more useful
+
+01:10:24.080 --> 01:10:28.039
+like PHP and LSP which is on screen here
+
+01:10:28.040 --> 01:10:30.799
+like then maybe the combination of two tags
+
+01:10:30.800 --> 01:10:32.519
+that reduces the search terms enough
+
+01:10:32.520 --> 01:10:36.639
+like this is basically glorified full text search
+
+01:10:36.640 --> 01:10:41.359
+where you highlight certain terms of importance that's it,
+
+01:10:41.360 --> 01:10:44.999
+I wouldn't use I wouldn't put more effort in there
+
+01:10:45.000 --> 01:10:48.639
+It's also maybe useful to group things by topic.
+
+01:10:48.640 --> 01:10:52.399
+For example, study notes like, I don't know,
+
+01:10:52.400 --> 01:10:56.759
+this is my undergrad, third semester,
+
+01:10:56.760 --> 01:11:01.279
+what do you do in the third semester, I don't know,
+
+01:11:01.280 --> 01:11:06.399
+history of philosophy of science of birds,
+
+01:11:06.400 --> 01:11:10.959
+very long course name, and then week 10.
+
+01:11:10.960 --> 01:11:13.199
+And then you assemble everything
+
+01:11:13.200 --> 01:11:15.479
+with this very technical tagging.
+
+01:11:15.480 --> 01:11:18.239
+Then you can use these folders
+
+01:11:18.240 --> 01:11:20.999
+to loosely group stuff together
+
+01:11:21.000 --> 01:11:23.119
+that happened during that week.
+
+01:11:23.120 --> 01:11:26.519
+And if you have 10 required readings and then do five of them,
+
+01:11:26.520 --> 01:11:28.879
+but they're also not closely interrelated,
+
+01:11:28.880 --> 01:11:33.639
+you will have read five to 10 different sources that you could process.
+
+01:11:33.640 --> 01:11:36.319
+You could maybe then also create an overview note
+
+01:11:36.320 --> 01:11:38.359
+as a preparation for the seminar
+
+01:11:38.360 --> 01:11:44.799
+whatever happens at university.
+
+01:11:44.800 --> 01:11:51.199
+Then the hashtag becomes just a way to group things.
+
+01:11:51.200 --> 01:11:52.479
+But once you create the structure note,
+
+01:11:52.480 --> 01:11:55.039
+you don't need the hashtags to navigate anymore.
+
+01:11:55.040 --> 01:11:57.679
+You could then maybe use the hashtags not to navigate
+
+01:11:57.680 --> 01:12:02.919
+but to to clump, to create collections,
+
+01:12:02.920 --> 01:12:07.759
+pre-assembled to some degree collections of things that exist already,
+
+01:12:07.760 --> 01:12:09.559
+get them out there and then review them.
+
+01:12:09.560 --> 01:12:13.319
+Like Twyla Tharp again, dumping all the notes on a table,
+
+01:12:13.320 --> 01:12:15.519
+all the stuff on the table,
+
+01:12:15.520 --> 01:12:17.759
+not just notes, all the clippings and so on and so on,
+
+01:12:17.760 --> 01:12:18.959
+and then making sense of them.
+
+01:12:18.960 --> 01:12:21.639
+That's what you can use a hashtag search for in the longterm.
+
+01:12:21.640 --> 01:12:27.799
+And I'm not convinced about navigational use in the longterm.
+
+01:12:27.800 --> 01:12:31.439
+which doesn't mean that it won't work for you,
+
+01:12:31.440 --> 01:12:32.799
+but I can't recommend it.
+
+01:12:32.800 --> 01:12:34.899
+I can't recommend trying to do it that way.
+
+01:12:34.900 --> 01:12:37.882
+So my answer is going to be, how do you navigate
+
+01:12:37.883 --> 01:12:45.507
+looking at all posts with certain tags? I don't.
+
+01:12:45.508 --> 01:12:53.439
+Tags are just a way to loosely group notes and stuff in general
+
+01:12:53.440 --> 01:13:05.519
+so that you can find potentially, PP, why doesn't P work?
+
+01:13:05.520 --> 01:13:14.919
+Potentially relevant pieces of information more quickly.
+
+01:13:14.920 --> 01:13:34.959
+Navigational aids. Create navigational aids
+
+01:13:34.960 --> 01:13:38.049
+things that help you navigate like this is for a week
+
+01:13:38.050 --> 01:13:42.479
+what did I say 10 of semester three
+
+01:13:42.480 --> 01:13:44.632
+uh the history of the sociology
+
+01:13:44.633 --> 01:13:46.799
+of the philosophy of science of birds
+
+01:13:46.800 --> 01:13:51.559
+or something lump things together there then you have a
+
+01:13:51.560 --> 01:13:54.119
+then you have a scratch pad to think on you do this
+
+01:13:54.120 --> 01:13:59.279
+did do this when you went to university with paper anyway, right?
+
+01:13:59.280 --> 01:14:01.039
+You would get your college book or whatever
+
+01:14:01.040 --> 01:14:04.439
+and then you would take notes and these like that location
+
+01:14:04.440 --> 01:14:07.159
+of that piece of paper in your college book
+
+01:14:07.160 --> 01:14:09.959
+in your whatever notes folder
+
+01:14:09.960 --> 01:14:15.039
+that's the important piece of information
+
+01:14:15.040 --> 01:14:20.079
+and the scratchpad, the thinking environment for this course
+
+01:14:20.080 --> 01:14:22.679
+and if you have all the other things
+
+01:14:22.680 --> 01:14:24.679
+that you ever did at your disposal as well
+
+01:14:24.680 --> 01:14:26.839
+maybe pull them in maybe pull them in
+
+01:14:26.840 --> 01:14:28.759
+and then bring them to the discussion
+
+01:14:28.760 --> 01:14:31.479
+with your professor or your teaching assistant
+
+01:14:31.480 --> 01:14:35.199
+and asking about, well, I read these five books
+
+01:14:35.200 --> 01:14:37.159
+that you recommended for this week.
+
+01:14:37.160 --> 01:14:40.439
+Thank you for recommending five whole books
+
+01:14:40.440 --> 01:14:45.399
+for one week of reading. I really enjoyed that. Long pause.
+
+01:14:45.400 --> 01:14:50.599
+And then you say, I also thought about other topics
+
+01:14:50.600 --> 01:14:54.359
+and brought them into a, I don't know, dialectic or position.
+
+01:14:54.360 --> 01:14:58.959
+What do you think about foxes in that regard
+
+01:14:58.960 --> 01:15:01.599
+and their own history and subjectivity
+
+01:15:01.600 --> 01:15:08.639
+when it comes to the bird's point of view or something, right?
+
+01:15:08.640 --> 01:15:10.999
+You can only do this if you either know this by heart
+
+01:15:11.000 --> 01:15:12.999
+because you do this a lot,
+
+01:15:13.000 --> 01:15:15.279
+think a lot about this stuff or you do this,
+
+01:15:15.280 --> 01:15:18.799
+you stumble upon this and then look for oppositions,
+
+01:15:18.800 --> 01:15:19.959
+look for certain patterns in your notes
+
+01:15:19.960 --> 01:15:22.479
+and then try to pull them in and represent them again
+
+01:15:22.480 --> 01:15:26.239
+so they actually do exist and then you can work with this,
+
+01:15:26.240 --> 01:15:27.399
+you can get on people's nerves
+
+01:15:27.400 --> 01:15:30.959
+you can write weird papers, essays
+
+01:15:30.960 --> 01:15:33.719
+and then get through your university studies quickly
+
+01:15:33.720 --> 01:15:35.959
+maybe also become an interesting columnist,
+
+01:15:35.960 --> 01:15:39.319
+I don't know, I've never been a columnist Right.
+
+01:15:39.320 --> 01:15:44.079
+I think these are all the questions.
+
+01:15:44.080 --> 01:15:47.159
+I'm going to delete the leftover ones.
+
+01:15:47.160 --> 01:15:54.719
+I hope you enjoyed some of the answers.
+
+01:15:54.720 --> 01:16:01.174
+Thank you so much. Thank you. That's a lot.
+
+01:16:01.175 --> 01:16:04.674
+We'll go back and get everything transcribed as well,
+
+01:16:04.675 --> 01:16:08.599
+and then you can turn that into other articles in the future,
+
+01:16:08.600 --> 01:16:10.119
+because that's how this all works, right?
+
+01:16:10.120 --> 01:16:14.319
+It all turns into writing. It all does.
+
+01:16:14.320 --> 01:16:15.999
+All the rest is garbage.
+
+01:16:16.000 --> 01:16:20.799
+I don't know why we invented anything else.
+
+01:16:20.800 --> 01:16:23.919
+It's only useful to transfer language before writing,
+
+01:16:23.920 --> 01:16:26.279
+but now you can just read.
+
+01:16:26.280 --> 01:16:29.719
+We have two people in the Big Blue Button room
+
+01:16:29.720 --> 01:16:33.799
+who are still around, but I think they've got their, like,
+
+01:16:33.800 --> 01:16:35.719
+they don't have microphones set up.
+
+01:16:35.720 --> 01:16:40.679
+So I don't know if you want to just, like, CryptKNFL,
+
+01:16:40.680 --> 01:16:44.339
+if you want to just follow up through the Etherpadmp,
+
+01:16:44.340 --> 01:16:47.639
+or email, I guess, in case you have further questions.
+
+01:16:47.640 --> 01:16:50.119
+But yeah, if you want to wrap up,
+
+01:16:50.120 --> 01:16:52.799
+I know it's getting a little bit late over there,
+
+01:16:52.800 --> 01:16:55.919
+you're in your time zone. Thank you so much.
+
+01:16:55.920 --> 01:16:59.679
+Yeah, all right. Thank you. You're welcome.
+
+01:16:59.680 --> 01:17:02.719
+Thanks for joining and listening.
+
+01:17:02.720 --> 01:17:07.640
+Okay, I'll wrap it up here then.
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..4df2e1b4
--- /dev/null
+++ b/2025/cfp.md
@@ -0,0 +1,82 @@
+[[!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.
+
+Wondering what to talk about? Check out this [list of ideas](https://emacsconf.org/ideas/) or the [talks from previous conferences](https://emacsconf.org/talks/). Got an idea for a talk but not sure if you're the right person to present it? Let us know at [emacsconf-submit@gnu.org](mailto:emacsconf-submit@gnu.org?subject=EmacsConf idea&body=) and we can add it to the idea list.
+
+
+# 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..1dd65632
--- /dev/null
+++ b/2025/cfp.org
@@ -0,0 +1,151 @@
+# [[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.
+
+Wondering what to talk about? Check out this [[https://emacsconf.org/ideas/][list of ideas]] or the [[https://emacsconf.org/talks/][talks from previous conferences]]. Got an idea for a talk but not sure if you're the right person to present it? Let us know at [[mailto:emacsconf-submit@gnu.org?subject=EmacsConf idea&body=][emacsconf-submit@gnu.org]] and we can add it to the idea list.
+
+* 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..14151eea
--- /dev/null
+++ b/2025/draft-schedule.md
@@ -0,0 +1,49 @@
+[[!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""" 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: 27:51"""]]
+[[!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, Q&A posted, video: 23:04, answers: 08:21"""]]
+[[!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: 24:33"""]]
+[[!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: 18:44"""]]
+[[!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="""captioned, video posted, video: 32:34"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, 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: 25:20"""]]
+[[!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: 27:45"""]]
+[[!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: 39:34"""]]
+[[!template id=sched time="""30""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, 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, 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="""video posted, video: 1:13:00"""]]
+[[!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, 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, Q&A posted, video: 34:37, answers: 19:02"""]]
+[[!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: 29:12"""]]
+[[!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: 36:04"""]]
+[[!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, Q&A posted, video: 23:18, answers: 1:17:07"""]]
+[[!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="""video posted, video: 47:09"""]]
+[[!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, Q&A posted, video: 31:25, answers: 39: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="""video posted, video: 15:33"""]]</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/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..42b16818
--- /dev/null
+++ b/2025/info/blee-lcnt-after.md
@@ -0,0 +1,1055 @@
+<!-- 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
+
+<div class="transcript transcript-qanda"><a name="blee-lcnt-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""Greetings. Salaam again. I'm delighted to be here""" start="00:00:00.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and happy to answer your questions.""" start="00:00:05.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I'm not seeing anything yet,""" start="00:00:11.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""but let me take advantage of this time""" start="00:00:12.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""to speak about one question that I saw""" start="00:00:17.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""come in earlier on the pad,""" start="00:00:20.080" video="qanda-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Where do we find all the inputs and outputs you mentioned?""" start="00:00:22.880" video="qanda-blee-lcnt" id="subtitle"]]</div>[[!template text="""which was all the outputs""" start="00:00:22.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and the inputs that you mentioned, where are they?""" start="00:00:25.541" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So they are on GitHub, and this is in one of my slides.""" start="00:00:29.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I mentioned the URL for it. I'll show you that as well.""" start="00:00:35.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So the URL for it is https://github.com/bxplpc/180068,""" start="00:00:41.940" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""which is the handle for this talk.""" start="00:00:50.392" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""In there, you have all the PDFs and the HTMLs,""" start="00:00:58.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""a citation, a bib input, and also the sources.""" start="00:01:06.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So if you were to go to the PDF, you will see""" start="00:01:12.120" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""um, both the article presentation and the beamer,""" start="00:01:19.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""let's take a quick look at the beamer,""" start="00:01:24.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""which is what you have seen. So.""" start="00:01:27.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And as far as the sources are, there are two primary files.""" start="00:01:34.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""This presentation, left to right,""" start="00:01:40.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""is the one that includes all the LaTeX packages.""" start="00:01:44.121" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""We might as well take a quick look.""" start="00:01:50.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So what's in there is primarily the use packages.""" start="00:01:52.642" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And then it dispatches to bodyPresArt,""" start="00:01:57.601" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and this is where the code is.""" start="00:02:07.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And I walked through this briefly.""" start="00:02:11.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So, notice here again that this is a mixture of LaTeX and Org.""" start="00:02:14.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Each of the presentation slides are here.""" start="00:02:26.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""For example, my introduction""" start="00:02:31.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""is just a video that gets included.""" start="00:02:34.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And then the notes that I use, the voiceover,""" start="00:02:37.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""is also included in the LaTeX file.""" start="00:02:41.120" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Let me... It'll probably be easy""" start="00:02:47.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""to take those voiceover notes""" start="00:02:50.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and then align them with a tool like Aeneas""" start="00:02:52.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""to make subtitles for your videos.""" start="00:02:54.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Exactly, and that is what I do.""" start="00:02:58.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So there is a way to gather them all as P-notes.""" start="00:03:01.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And so all the P-notes get together in a single file,""" start="00:03:08.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and then you feed that to Aeneas, and it will align them.""" start="00:03:13.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And then there is the work of using your subed""" start="00:03:20.600" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""to just get the right sort of line length on them.""" start="00:03:23.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""But you did all of that for me this year, Sacha.""" start="00:03:30.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:03:33.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""It was just a matter of not having time.""" start="00:03:34.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Otherwise, I planned to do it myself. It's all right.""" start="00:03:37.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""It was very easy since he provided the full narration.""" start="00:03:43.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I still need to tweak it sometimes,""" start="00:03:46.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""so I often use the waveforms in subed""" start="00:03:50.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""to find the right starting time and ending time for things.""" start="00:03:52.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""But it is so nice to have a presentation""" start="00:03:58.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""where you can experience it in different forms,""" start="00:04:01.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""as an article, as a video, as a post with links and everything.""" start="00:04:03.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Very handy.""" start="00:04:10.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Right, and in case a teacher uses this for class lectures,""" start="00:04:11.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""then the student profits from all sorts.""" start="00:04:20.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""The article presentation format is very useful""" start="00:04:26.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""for a student to add their own notes to it and the rest.""" start="00:04:29.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Exactly as you said, having multiple forms is great.""" start="00:04:33.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Video has its place, reveal has its place,""" start="00:04:37.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""PDF has its place, article has its place.""" start="00:04:40.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""All of them work together.""" start="00:04:44.040" video="qanda-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Making presentations easier to distribute""" start="00:04:48.400" video="qanda-blee-lcnt" id="subtitle"]]</div>[[!template text="""I've been having a hard time figuring out""" start="00:04:48.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""how to make the reveal.js version of a presentation""" start="00:04:50.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""more easily distributable, though.""" start="00:04:54.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""This is something we've had a hard time""" start="00:04:57.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""with in the past, too.""" start="00:04:58.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""You have these lovely EmacsConf presentations""" start="00:05:00.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""that could be reveal presentations,""" start="00:05:02.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""but hosting them doesn't quite fit""" start="00:05:04.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""in the usual assumptions people have. Exactly, exactly.""" start="00:05:07.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So if we were to have a reveal server,""" start="00:05:13.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""then we could upload our reveal inputs to it.""" start="00:05:16.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""But you're right, we should look""" start="00:05:20.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""for some sort of a packaging""" start="00:05:25.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""that is more plug and distribute. Yeah, so I'd be all game""" start="00:05:26.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""if we wanted to do it for next year,""" start="00:05:34.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I'd be happy to provide all the reveal outputs.""" start="00:05:36.920" video="qanda-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Reveal output""" start="00:05:42.040" video="qanda-blee-lcnt" id="subtitle"]]</div>[[!template text="""In fact, they are here, let me touch on that quickly.""" start="00:05:42.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Good point you brought up. So, this is the Reveal output.""" start="00:05:45.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So all of these, you see the images and the audio""" start="00:05:53.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""in my own environment are SIM links to where I keep them.""" start="00:05:57.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So those need to come in,""" start="00:06:02.360" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""but the reveal output really comes right here.""" start="00:06:06.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And this is how it looks.""" start="00:06:10.600" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""If that's a link you can add to the pad,""" start="00:06:13.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""then I can add you to the top page afterwards.""" start="00:06:15.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I think as a, as a speaker,""" start="00:06:19.800" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I tend to just self host the thing.""" start="00:06:21.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And that way also, if I find a bug, which often happens,""" start="00:06:24.120" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I can go and quietly update it.""" start="00:06:28.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Exactly. Exactly. Sure. Sure. Yeah.""" start="00:06:30.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""This right now, what we are looking at is from GitHub.""" start="00:06:36.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And the audio and the images, of course, are large,""" start="00:06:44.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and I did not upload them. But I can send them, sure.""" start="00:06:48.600" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So, a few other things maybe I can elaborate on.""" start="00:06:55.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""This is the bootstrapping page for BISOS, also on there.""" start="00:07:02.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And if somebody wanted to actually""" start="00:07:08.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""dig deeper and go through this,""" start="00:07:11.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""a good starting point would be my GitHub page.""" start="00:07:12.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""But my GitHub page is not done and organized the usual way.""" start="00:07:18.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So I only have three repositories""" start="00:07:24.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and the repositories basically say,""" start="00:07:27.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""here is where you need to go.""" start="00:07:30.360" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So all of my work is organized as organizations.""" start="00:07:32.267" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So, for example, for Emacs, if you were to go to BxBlee,""" start="00:07:39.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""you will see all the relevant repos for that purpose.""" start="00:07:48.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So, for example, if you wanted to""" start="00:07:56.360" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""come and take a look at mail template,""" start="00:07:58.976" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""templating, distribution, and tracking,""" start="00:08:03.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""you would get a Emacs package ready to go over here.""" start="00:08:08.720" video="qanda-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""GitHub organizations""" start="00:08:15.000" video="qanda-blee-lcnt" id="subtitle"]]</div>[[!template text="""But again, all of this is through the use of GitHub organizations.""" start="00:08:15.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So my repos are by subject""" start="00:08:23.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and the BISOS itself has 69 repositories""" start="00:08:26.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""where different sections of it are packaged as PIP packages.""" start="00:08:33.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So, for example, for LCNT, we can go there.""" start="00:08:38.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So, these are the packages that let you,""" start="00:08:42.360" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""let me go there, that let you dissect.""" start="00:08:46.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Sorry, you have your slides shared at the moment,""" start="00:08:53.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""so I don't know if you're in a different tab.""" start="00:08:55.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Oh, am I in a different tab?""" start="00:08:59.600" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I thought that that would follow me.""" start="00:09:03.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Yes, I am in a different tab. Let me see.""" start="00:09:06.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""This is the one that you are seeing,""" start="00:09:16.120" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""so let me go over here. Perfect. Now you're seeing it.""" start="00:09:19.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So literally on the same page. Awesome. Right.""" start="00:09:28.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So you were not actually seeing what I was saying.""" start="00:09:31.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So, so what I was saying that is that""" start="00:09:33.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""if you go to my primary website, GitHub page,""" start="00:09:36.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""you will see that there are only three repos there.""" start="00:09:42.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And those repos just give information""" start="00:09:45.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""about where the real repos are.""" start="00:09:49.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And the real repos are organized in various organizations.""" start="00:09:52.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So, for example, for Emacs packages, I use the bxblee""" start="00:09:57.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And in there, there are 40 repositories.""" start="00:10:06.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And as an example, you can choose, for example,""" start="00:10:12.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""AI plus is just a few additional libraries for menus, for Aidermacs.""" start="00:10:15.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And the rest of BLEE is done that way as well.""" start="00:10:26.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So if you were to let me also show""" start="00:10:31.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""more relevant stuff to the content generation.""" start="00:10:36.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And everything related to BISOS in Python is in BISOS-PIP.""" start="00:10:43.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""These are packages that are ready""" start="00:10:48.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""to be exported to pypi and""" start="00:10:52.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""For example, for LCNT, if you go here,""" start="00:10:57.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""let's go to the bin directory.""" start="00:11:02.750" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""These are the utilities that dissect the PDF output of Beamer""" start="00:11:04.559" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""convert it to images so that you can insert them in Reveal.""" start="00:11:15.809" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And then again, if you were to just wanted to dig deeper""" start="00:11:23.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""in any of these as components,""" start="00:11:29.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""you would simply start from this top level page""" start="00:11:34.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and explore the organizations.""" start="00:11:40.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So in total, maybe there is 300 repos,""" start="00:11:44.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""but they are organized by subject matter""" start="00:11:48.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""within GitHub organizations.""" start="00:11:54.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Yeah. One additional general comment.""" start="00:12:03.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""If you were to look at my presentation,""" start="00:12:10.800" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I'd say I touched on five different topics.""" start="00:12:13.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So, one topic was this content generation in general.""" start="00:12:17.520" video="qanda-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Challenge of DIY model and recipes""" start="00:12:24.040" video="qanda-blee-lcnt" id="subtitle"]]</div>[[!template text="""The second one was this challenge of DIY model and recipes""" start="00:12:24.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""versus building something large""" start="00:12:35.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and including everything in it.""" start="00:12:38.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And that is, that has been the motivation""" start="00:12:40.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""for BISOS and BLEE.""" start="00:12:43.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And I'm interested in getting feedback on it.""" start="00:12:46.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""In general, the open source culture""" start="00:12:50.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""has been focusing on components""" start="00:12:54.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and large American corporations""" start="00:13:00.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""have focused in integration of these components.""" start="00:13:03.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So my short message here is that""" start="00:13:07.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""we should start thinking as providing solutions""" start="00:13:11.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""as opposed to minor pieces and packages""" start="00:13:17.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and put them all together and claim them as our own digital ecosystem.""" start="00:13:23.520" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And this is the concept behind ByStar, BISOS and BLEE.""" start="00:13:30.600" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""The third point I was making throughout""" start="00:13:38.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""is this concept of dynamic blocks everywhere,""" start="00:13:41.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and Comeega, which is the inverse of Babel.""" start="00:13:45.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And I'd also be interested in feedback on those.""" start="00:13:51.600" video="qanda-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Dblocks everywhere""" start="00:13:57.480" video="qanda-blee-lcnt" id="subtitle"]]</div>[[!template text="""I think the dblocks everywhere concept,""" start="00:13:57.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I can very quickly show that.""" start="00:14:03.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""it would be in the LaTeX file, as an example.""" start="00:14:13.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I didn't really do a good job in digging deeper into that.""" start="00:14:18.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So if you go to the sources""" start="00:14:23.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and you look at any of the slides,""" start="00:14:25.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""All the slides are in here inside of a dynamic block.""" start="00:14:31.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""This is an org dblock,""" start="00:14:39.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""but you would invoke it in LaTeX mode.""" start="00:14:41.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And then from this begin to this end,""" start="00:14:46.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""everything is auto-generated""" start="00:14:51.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""through the Elisp function, body:mm/video.""" start="00:14:54.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And the parameters that it takes are the video path.""" start="00:15:00.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So all of this code is repeated all over the place.""" start="00:15:06.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And all you need in it is the video path.""" start="00:15:12.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So it's very easy to think of this as a macro capability,""" start="00:15:15.800" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""except that the macro is visible.""" start="00:15:21.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And it has one additional benefit""" start="00:15:25.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""on top of general macro capabilities,""" start="00:15:29.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and that is that it's open.""" start="00:15:34.800" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""In this particular case, it closes,""" start="00:15:36.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""but let me show you another one where it is open.""" start="00:15:41.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So if you look at, this is latex section, this one is good.""" start="00:15:46.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""This is a derived image. And by saying that it's open""" start="00:15:54.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""is that you see my begin verbatim and my begin frame.""" start="00:16:00.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""They end and there is no closing for them.""" start="00:16:06.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So the extra text that is outside""" start="00:16:11.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""of the D block and closes it is down here.""" start="00:16:15.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And none of the existing macro capabilities""" start="00:16:21.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""gives you this feature. This even comes handy in Lisp.""" start="00:16:24.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So that is a proposal saying""" start="00:16:30.800" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""that let's make D blocks, dynamic blocks,""" start="00:16:40.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""generalized to all of Emacs, as opposed to just org mode.""" start="00:16:47.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And that's relatively simple.""" start="00:16:52.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And the Emacs source team could easily decide""" start="00:16:54.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""that this is worthwhile doing.""" start="00:17:01.360" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And then COMEEGA, of course, I've gone""" start="00:17:02.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""over it through the presentation.""" start="00:17:07.760" video="qanda-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What changes have you seen in the culture while developing all these things like libre-halal system and now blee-lcnt?""" start="00:17:09.960" video="qanda-blee-lcnt" id="subtitle"]]</div>[[!template text="""So, I see 1 question coming in. What changes have you seen?""" start="00:17:09.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""the culture while developing all these things""" start="00:17:20.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""like Libre-halaal system and now Blee-LCNT?""" start="00:17:24.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Well, it's a work in progress, I would say.""" start="00:17:36.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""We learn from one another.""" start="00:17:40.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And what I'm doing may be considered""" start="00:17:43.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""just a stepwise increment,""" start="00:17:47.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""but the cultural input is that we really should start""" start="00:17:52.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""thinking about providing solutions as opposed to packages.""" start="00:18:01.800" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""The FOSS culture is really limited in its scope to packages""" start="00:18:09.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""or even if when you think something very large like Debian,""" start="00:18:19.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""which is a collection of packages.""" start="00:18:24.800" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And it is still choice oriented,""" start="00:18:28.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""as opposed to solution oriented.""" start="00:18:31.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Yeah. Are there any additional topics or questions?""" start="00:18:55.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Otherwise, I'll just add a few additional concepts.""" start="00:19:03.600" video="qanda-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Intellectual property rights""" start="00:19:11.160" video="qanda-blee-lcnt" id="subtitle"]]</div>[[!template text="""So the two other points made throughout the presentations""" start="00:19:11.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""are that this statement about clear invalidity""" start="00:19:18.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""of the Western IPR regime.""" start="00:19:28.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So throughout the FOSS movement,""" start="00:19:30.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""we have been focusing on providing alternative licenses""" start="00:19:34.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""which coexist with the IPR system.""" start="00:19:42.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And that is the practical thing to do.""" start="00:19:49.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""We are doing a jujitsu on IPR.""" start="00:19:52.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""We are saying that this is our license to it.""" start="00:19:55.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""But conceptually, there has been little discussion""" start="00:20:00.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and also positioning on this basic question""" start="00:20:07.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""as to whether or not copyright""" start="00:20:14.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and patents are valid or invalid.""" start="00:20:17.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And what I am saying is that it is clear that they are invalid,""" start="00:20:21.120" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""particularly once you start looking at them""" start="00:20:26.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""with the lens of polyexistentials.""" start="00:20:30.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And that the FOSS movement""" start="00:20:33.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""really needs to combine these two,""" start="00:20:39.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""this notion of free software and open source licenses,""" start="00:20:42.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and combined with the belief system""" start="00:20:47.360" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""that we are completely and utterly against""" start="00:20:51.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""the validity of the Western intellectual property rights regime.""" start="00:20:55.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And I use the Western and the American occasionally,""" start="00:21:00.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and the reason behind that is that in fact it is, they are Western.""" start="00:21:05.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""If you go to any other language, if you go to Farsi,""" start="00:21:12.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""if you go to Arabic, if you go to Chinese,""" start="00:21:16.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""if you go to Japanese, which are non-Western cultures,""" start="00:21:19.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""the concept of intellectual property,""" start="00:21:24.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""the words, the vocabulary of those""" start="00:21:28.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""combination of intellectual and property,""" start="00:21:33.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""did not exist anywhere in those cultures.""" start="00:21:36.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""It's only in the past, maybe 60, 70 years""" start="00:21:40.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""that they have been translated from the Western world and brought into it.""" start="00:21:44.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So there is an inherent root""" start="00:21:52.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""into the intellectual property rights system,""" start="00:21:54.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""which goes to the Western culture.""" start="00:21:58.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""The second point that I have brought into""" start="00:22:02.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""this presentation and the previous ones""" start="00:22:08.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""is this question of, if we go with free software,""" start="00:22:11.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""if we go with open software,""" start="00:22:16.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""are we really creating the right labels?""" start="00:22:18.120" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And my point is that no, neither of them,""" start="00:22:22.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""neither free software, nor open source""" start="00:22:25.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""are capturing really the essence""" start="00:22:29.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""of what we are trying to do.""" start="00:22:33.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And I claim that that is in fact ethics and morality.""" start="00:22:36.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And it is societal belief that if we reject""" start="00:22:41.440" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""intellectual property rights regime,""" start="00:22:48.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""what do we replace it with?""" start="00:22:51.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And in my thinking is that a software developer""" start="00:22:53.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""does not get to choose""" start="00:22:58.800" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""what license goes with his or her software,""" start="00:23:00.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and that the equivalent of a Affero GPL""" start="00:23:04.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""is the default correct license""" start="00:23:09.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""to use for all of your software""" start="00:23:13.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""because it is the one that reflects the belief system""" start="00:23:16.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""that all software should be ethical software.""" start="00:23:21.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Yeah, I'm looking at the Etherpad again and""" start="00:23:24.720" video="qanda-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Given that large AI companies are openly stealing IP and copyright, thereby eroding the authority of such law (and eroding truth itself as well), can you see a future where IP & copyright flaw become untenable and what sort of onwards effect might that have?""" start="00:23:43.560" video="qanda-blee-lcnt" id="subtitle"]]</div>[[!template text="""The question is about IP and AI.""" start="00:23:43.560" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So yeah, over the past two years,""" start="00:23:48.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""something huge has happened.""" start="00:23:54.360" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And what I am seeing in there as a solution""" start="00:23:56.600" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""is essentially comes down to a talk""" start="00:24:04.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""that was given maybe two years ago by someone at EmacsConf,""" start="00:24:12.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and its label was attribution-based economics.""" start="00:24:16.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""In my thinking, intellectual property""" start="00:24:22.360" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""as a whole is invalid.""" start="00:24:28.320" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""But that means that through something like a Affero GPL,""" start="00:24:29.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""you focus on attribution basing, proper attribution basing.""" start="00:24:36.120" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""If somebody has done some work,""" start="00:24:41.720" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""it should be clear, no matter what, that that work is his.""" start="00:24:43.840" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And that we already, even prior to AI, we were seeing this.""" start="00:24:48.600" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""We were seeing large GitHub repos with hundreds of authors.""" start="00:24:54.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And it was utterly unclear as to who would own this whole thing.""" start="00:24:59.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And any piece of it is not of significance.""" start="00:25:09.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""What is of significance is the whole thing.""" start="00:25:14.120" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""So moving towards that attribution based economics is key.""" start="00:25:16.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And then once we do that,""" start="00:25:25.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and then we accept AI as a reality.""" start="00:25:27.600" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""AI should still take very seriously""" start="00:25:31.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and conform to attribution-based economics.""" start="00:25:38.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""In other words, what is generated by the machine""" start="00:25:44.000" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""should not be claimed to be no one's""" start="00:25:47.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""or the machine owners, the AI owners.""" start="00:25:51.280" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""It should still clearly be attributed""" start="00:25:54.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""to the people who contributed in its creation.""" start="00:25:56.880" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""This all becomes very muddy, very clear,""" start="00:26:03.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and I don't have a simple or clear answer to it.""" start="00:26:06.960" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""But the perimeters of the solution lie in""" start="00:26:11.920" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""rejection of intellectual property,""" start="00:26:16.080" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""replacement of the intellectual property""" start="00:26:21.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""with attribution-based economics,""" start="00:26:25.040" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and restrictions on AI use""" start="00:26:27.400" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""of not properly attributed content.""" start="00:26:31.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Yeah, I'd say that would be, it's a complicated topic""" start="00:26:38.200" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and I would simply say I haven't figured it out at all.""" start="00:26:50.240" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I just have a perimeter set of concepts""" start="00:26:56.120" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""that can be used to drive it.""" start="00:27:03.760" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Are there any other questions? If there aren't any,""" start="00:27:06.480" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I thank everybody again,""" start="00:27:20.680" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""and particularly the EmacsConf organizers and Sacha.""" start="00:27:23.160" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""And I look forward to continuing all of this next year.""" start="00:27:27.800" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""Unless there is any objection,""" start="00:27:32.640" video="qanda-blee-lcnt" id="subtitle"]]
+[[!template text="""I'll leave the session and close it. Thank you.""" start="00:27:39.080" video="qanda-blee-lcnt" 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%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..f25b6247
--- /dev/null
+++ b/2025/info/blee-lcnt-before.md
@@ -0,0 +1,57 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 37-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-blee-lcnt>
+Etherpad: <https://pad.emacsconf.org/2025-blee-lcnt>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<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/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://toobnix.org/videos/watch/12405492-f07b-43c8-a256-c1ffff2f6e90">View on Toobnix</a></li><li><a href="https://youtu.be/49e0ES-nk0k">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-blee-lcnt"><source src="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.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--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--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-lcnt" data="""
+00:22.880 Q: Where do we find all the inputs and outputs you mentioned?
+04:48.400 Making presentations easier to distribute
+05:42.040 Reveal output
+08:15.000 GitHub organizations
+12:24.040 Challenge of DIY model and recipes
+13:57.480 Dblocks everywhere
+17:09.960 Q: What changes have you seen in the culture while developing all these things like libre-halal system and now blee-lcnt?
+19:11.160 Intellectual property rights
+23:43.560 Q: Given that large AI companies are openly stealing IP and copyright, thereby eroding the authority of such law (and eroding truth itself as well), can you see a future where IP & copyright flaw become untenable and what sort of onwards effect might that have?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-blee-lcnt-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.opus"></audio></div><div></div>Duration: 27:45 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/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers--chapters.vtt">Download --answers--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--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.m4v">Download --answers.m4v (111MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.opus">Download --answers.opus (24MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.txt">Download --answers.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--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.webm">Download --answers.webm (55MB)</a></li><li><a href="https://toobnix.org/videos/watch/e67991b8-2886-4b56-a410-7f14b7f910f2">View on Toobnix</a></li><li><a href="https://youtu.be/uVdsavLDEyU">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..70dd2eb8
--- /dev/null
+++ b/2025/info/blee-lcnt-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a>
+Next by track: <a href="/2025/talks/greader">GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2025/info/bookclub-tapas-after.md b/2025/info/bookclub-tapas-after.md
new file mode 100644
index 00000000..5ad63aa9
--- /dev/null
+++ b/2025/info/bookclub-tapas-after.md
@@ -0,0 +1,1530 @@
+<!-- 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 less friction""" 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
+
+<div class="transcript transcript-qanda"><a name="bookclub-tapas-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""All right, take it away. Okay, am I, are we live?""" start="00:00:00.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yes, we're live. Oh man, holy moly.""" start="00:00:07.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Oh, that's surreal. Hi everyone. Oh man.""" start="00:00:12.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Ah, so excited to be here. So good to see all of you. Okay.""" start="00:00:19.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So, should we just go ahead and get right into it?""" start="00:00:26.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, let me, let me see here. So I have.""" start="00:00:29.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, I see, I see some, I see some questions coming in.""" start="00:00:38.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Perfect. I am going to share my screen real quick.""" start="00:00:41.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Currently, we have a sort of a ?? thing going.""" start="00:00:53.417" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And so I just wanted to, while we're waiting""" start="00:00:59.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for some more stuff to come in,""" start="00:01:04.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I just wanted to sort of idle on this buffer here.""" start="00:01:05.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""If you increase your font size slightly,""" start="00:01:11.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that might be even nicer.""" start="00:01:13.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yes, absolutely, gladly. Whoa, okay. There we go.""" start="00:01:15.960" video="qanda-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Did you show examples of files in bookclub style?""" start="00:01:38.160" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""All right, the first question""" start="00:01:38.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""was looking for examples of files in book club style.""" start="00:01:40.900" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""The person says, that seems to be related""" start="00:01:45.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to what I've been doing,""" start="00:01:48.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but coming from different influences. Yes, yes.""" start="00:01:49.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I included a...""" start="00:01:54.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Let me see, I'm just looking at the IRC here""" start="00:02:03.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and smiling at all the people. So, yes, I provided a link.""" start="00:02:07.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I think that an excellent...""" start="00:02:16.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I have gone ahead and provided""" start="00:02:19.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the link to the repo""" start="00:02:24.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I'm going to go ahead and post that again.""" start="00:02:28.126" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So this should serve as a full example""" start="00:02:30.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of what a just sort of standard book club file looks like.""" start="00:02:34.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And if anyone has specific questions""" start="00:02:39.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""about anything in particular,""" start="00:02:41.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""they would love to see my walkthrough""" start="00:02:42.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and narrate specifically, you know, any place in this file""" start="00:02:47.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that they would like to see me go over live,""" start="00:02:52.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would be super happy to do that.""" start="00:02:55.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I have the whole more or less complete""" start="00:02:58.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""book club file for Squint pulled up here.""" start="00:03:03.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, I have my vision laid out,""" start="00:03:10.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""which has my initial sort of goal.""" start="00:03:14.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""The background and the vision sort of combined""" start="00:03:18.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to lay out what my general sort of goal is.""" start="00:03:22.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I just realized... Let me kill my stream there.""" start="00:03:28.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""There we go. All right. There's another question.""" start="00:03:31.320" video="qanda-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: The product of a Tapa like squint\.org would be pure GOLD for an agent like Claude Code - have you experimented with providing an agent with the final output and letting it chew through todos?""" start="00:03:39.080" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""The product of a tapa like squint.org""" start="00:03:39.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""would be pure gold for an agent like Claude Code.""" start="00:03:41.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Have you experimented with providing an agent with a final output""" start="00:03:44.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and letting it chew through to-dos?""" start="00:03:47.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""That would be a really excellent question.""" start="00:03:50.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I actually just kind of recently""" start="00:03:53.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""got into Claude in particular.""" start="00:03:54.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I played quite a bit with GPT and""" start="00:03:58.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and a lot of 8 billion parameter local models.""" start="00:04:01.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And I was never super impressed.""" start="00:04:07.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It always felt like I was just sort of wrangling""" start="00:04:09.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to get it on the same page,""" start="00:04:13.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""whether as a result of sycophantism""" start="00:04:14.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""or really just not having enough parameters""" start="00:04:16.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in order to understand the context of what's going on.""" start="00:04:19.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Claude has completely changed my perception""" start="00:04:21.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of what an LLM can do or not.""" start="00:04:25.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It makes autonomy not seem like a total fever train.""" start="00:04:27.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I have definitely been curious about""" start="00:04:31.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""how an LLM would react to book club files.""" start="00:04:36.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that, yeah, especially like,""" start="00:04:39.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I've been daydreaming a little bit about,""" start="00:04:41.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you know, having it generate scratch artifacts""" start="00:04:43.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""or suggesting, you know, changes to the format.""" start="00:04:49.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's like, yeah, the fact that""" start="00:04:54.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""this is all like, you know, like super,""" start="00:04:58.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""The goal and the hope for all of this""" start="00:05:01.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that we're being verbose about our thinking anyway.""" start="00:05:05.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""This is sort of how, by default,""" start="00:05:08.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""deep reasoning kind of works.""" start="00:05:12.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I actually think that I totally agree.""" start="00:05:14.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It would be a great fit.""" start="00:05:15.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I have yet to personally do it,""" start="00:05:17.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""because I've always been just""" start="00:05:19.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""a little bit wary about, like, you know...""" start="00:05:21.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Well, if I'm writing a program,""" start="00:05:23.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I want to write it, you know?""" start="00:05:25.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""People often talk about, like, you know,""" start="00:05:26.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""oh, I just want to hand off""" start="00:05:29.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the boring parts to Claude.""" start="00:05:31.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""But the thing is, if I'm writing in Elisp,""" start="00:05:34.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I find the whole thing to be kind of fun.""" start="00:05:36.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'd be super interested in, you know,""" start="00:05:39.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""just sort of as a point of exercise,""" start="00:05:46.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""seeing what it's capable of.""" start="00:05:48.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Because I think, I really do think""" start="00:05:49.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that this would be kind of an ideal environment.""" start="00:05:51.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It is kind of close to, you know,""" start="00:05:54.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""native-ish, how LLMs think.""" start="00:05:55.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""There's also, like, you know, of course,""" start="00:05:59.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the, um, the privacy angle.""" start="00:06:01.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I don't necessarily want to provide""" start="00:06:03.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""a whole bunch of code verbatim that I intend to GPL3.""" start="00:06:05.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""But I believe that Claude kind of has a better policy""" start="00:06:09.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in terms of what does and does not become training data.""" start="00:06:15.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'll have to look into Claude in particular""" start="00:06:20.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""because I feel like that would be my target for it.""" start="00:06:22.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""But yeah, I think that's definitely onto something.""" start="00:06:24.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I've definitely thought about this.""" start="00:06:29.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I've definitely been really curious about this.""" start="00:06:31.440" video="qanda-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think every Tapa should have it's own Bookclub file as well? Or would you rather keep just one bookclub file in the top of the project?""" start="00:06:37.920" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Next question, do you think every Tapa""" start="00:06:37.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""should have its own book club file as well?""" start="00:06:40.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Or would you rather keep just one book club file""" start="00:06:42.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in the top of the project?""" start="00:06:45.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I think that I definitely would advise""" start="00:06:46.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that each Tapa have its own book club file.""" start="00:06:51.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""The reason being is because I find that for me personally,""" start="00:06:54.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the way that my brain kind of works""" start="00:06:59.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that out of sight, out of mind is very literal for me.""" start="00:07:00.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I find that... I find that... What am I thinking of?""" start="00:07:06.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Sorry, I just saw that I got an email""" start="00:07:16.208" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I'm like, yeah, okay, cool.""" start="00:07:18.751" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Case in point, right? We are at case in point, you know,""" start="00:07:22.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""out of sight, out of mind. Yes, no, absolutely.""" start="00:07:27.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, no, exactly. I, um, I'm definitely quite ADHD""" start="00:07:30.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and it works for my advantage""" start="00:07:35.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""because it provides all sorts of versatility.""" start="00:07:36.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""This is another great advantage of book club.""" start="00:07:38.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""If you have an ADHD mind like I do where, you know,""" start="00:07:42.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You love jumping around and working on""" start="00:07:46.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""all sorts of different pieces simultaneously.""" start="00:07:48.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You don't like sitting down""" start="00:07:51.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and doing the same thing all day""" start="00:07:53.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""unless it really latches onto you.""" start="00:07:54.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You know, you can pivot and you don't do anything.""" start="00:07:57.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It really rewards the fact that you can pivot.""" start="00:07:59.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I find that to be really excellent.""" start="00:08:02.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""But to go back to the original question,""" start="00:08:06.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would definitely recommend,""" start="00:08:08.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""at least in my circumstance,""" start="00:08:11.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I find it to be incredibly useful""" start="00:08:13.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to have each tapa be its own book club file""" start="00:08:15.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""rather than to have a unified file""" start="00:08:18.700" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that holds all of your tapas. You can definitely do this,""" start="00:08:21.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""especially if you're using org""" start="00:08:26.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to organize it hierarchically.""" start="00:08:28.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's just sort of a matter of preference""" start="00:08:31.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and style at that point.""" start="00:08:33.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So long as you're making a clear distinction between your tapas,""" start="00:08:34.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that's the main thing""" start="00:08:39.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I would recommend no matter what,""" start="00:08:40.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""because the whole hope that I have is that""" start="00:08:42.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you have a sort of separation of focus""" start="00:08:44.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""between the different you know,""" start="00:08:47.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the different focuses of your different tapas,""" start="00:08:49.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""they really should ideally feel like different programs""" start="00:08:54.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""so that you're not, you know,""" start="00:08:57.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""getting over yourself, getting ahead of yourself.""" start="00:09:00.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that, you know, on that basis,""" start="00:09:02.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would probably default to recommending""" start="00:09:05.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that tapas have their own separate book club files,""" start="00:09:07.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""because ideally they should kind of be different""" start="00:09:12.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""sort of independent but related thoughts.""" start="00:09:15.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""But at the same time, I mean, like, you know,""" start="00:09:19.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""this is coming from someone""" start="00:09:21.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""who like has a billion small, like, you know,""" start="00:09:23.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I had one giant org file for a long time""" start="00:09:26.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then realized that really didn't work for me.""" start="00:09:28.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So now I have a billion tiny ones.""" start="00:09:31.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So depending upon how you feel about, you know,""" start="00:09:34.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""should I have one really big org file""" start="00:09:38.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""or a bunch of really little org files?""" start="00:09:40.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I feel like that more or less gives your answer.""" start="00:09:42.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think it's whatever works best for you.""" start="00:09:44.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I know that far and away what works best for me""" start="00:09:48.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is having separate files. No matter what, you should have""" start="00:09:51.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""separation of concept though.""" start="00:09:55.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""But however you do that is, you know,""" start="00:09:58.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is best your judgment call.""" start="00:10:00.640" video="qanda-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How do you build habits when it comes to documentation?""" start="00:10:08.040" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Next question, how do you build habits""" start="00:10:08.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""when it comes to documentation?""" start="00:10:11.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I tend to produce lots of documentation in one go,""" start="00:10:13.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""then effectively forget to do it for long periods of time""" start="00:10:16.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and end up playing catch up,""" start="00:10:19.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""which results in a loss of precision,""" start="00:10:20.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""as you alluded to in your talk.""" start="00:10:22.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""In a work setting, when something goes on fire""" start="00:10:24.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""or priorities change, it can be hard to keep discipline.""" start="00:10:26.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Would love your thoughts. Thanks. Yes, absolutely.""" start="00:10:28.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So what I tend to do is I don't...""" start="00:10:32.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So really, so far, what I've been doing""" start="00:10:35.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that I haven't been making a conscious priority""" start="00:10:39.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of writing documentation at all.""" start="00:10:42.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And if that sounds contradictory""" start="00:10:45.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to the talk, that is correct.""" start="00:10:48.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""What I mean by this is that I go about""" start="00:10:50.260" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that when I'm writing code,""" start="00:10:55.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""when I'm writing, you know, drafts of my functions,""" start="00:11:00.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the way that I tend to approach this,""" start="00:11:03.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the way that I really emphasize the approach for it,""" start="00:11:05.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that I want to focus first and foremost""" start="00:11:07.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""on sort of like just writing down""" start="00:11:13.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what my internal monologue is""" start="00:11:15.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for what I'm doing for that pass working on the file.""" start="00:11:17.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So my document takes ultimate...""" start="00:11:23.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Distance of doc is ultimately a property""" start="00:11:25.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""from the fact that I am writing""" start="00:11:29.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what I'm doing as I'm doing it.""" start="00:11:32.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And it's more or less just I'm just""" start="00:11:35.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""mashing out the stream of consciousness""" start="00:11:37.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of what's going on inside my head as it's happening.""" start="00:11:39.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So if we go down and we take a look at,""" start="00:11:43.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""yeah, so let's go ahead and take a look back at the macro.""" start="00:11:47.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, really, this is kind of cheating,""" start="00:11:53.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""because mostly I would consider this to be self-documenting,""" start="00:11:56.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but we all kind of know that""" start="00:12:07.542" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that in and of itself is a slippery slope.""" start="00:12:09.501" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""That's not great. Because it's like, I could believe""" start="00:12:11.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that this would be self-documenting""" start="00:12:16.168" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""if this was a three-liner.""" start="00:12:17.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It is not. which, you know, also goes to show me""" start="00:12:19.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that this needs to be splitting into its own Tapas""" start="00:12:24.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I intend to, you know, write a Tapa""" start="00:12:27.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that's a sort of macro builder""" start="00:12:32.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that automatically, you know, does the gensyms for you.""" start="00:12:37.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Something along the lines of""" start="00:12:40.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what's the Common Lisp macro for that called?""" start="00:12:41.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's like, there's some Common Lisp faculty""" start="00:12:46.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that does automatic gensym binding.""" start="00:12:51.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I can't quite remember what it's called.""" start="00:12:53.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""A prior version of this talk had my live coding that,""" start="00:12:57.100" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but that ended up sort of distracting""" start="00:13:01.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""from what I kind of wanted to nail out and focus on.""" start="00:13:04.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""But really kind of what I do is that,""" start="00:13:07.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""let me see here if I can find some sort of,""" start="00:13:12.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, so I have in my research section""" start="00:13:19.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""sort of layout like what the quirks of all this sort of are.""" start="00:13:26.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think my development focuses contain""" start="00:13:36.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""a little bit of what could be ultimately""" start="00:13:39.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""considered to be documentation.""" start="00:13:41.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, as I'm looking through all of this,""" start="00:13:42.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm kind of realizing that like,""" start="00:13:47.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you know, yeah, there's stuff""" start="00:13:48.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I'm into documentation here,""" start="00:13:49.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it's all a little ad hoc.""" start="00:13:51.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You know, I would, in part,""" start="00:13:53.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the design of this particular tapa""" start="00:13:55.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is arguably not currently,""" start="00:13:57.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but is going to be simple enough such that""" start="00:13:59.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""a doc string is sufficient for documentation.""" start="00:14:02.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""That is not the case currently.""" start="00:14:04.680" video="qanda-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How do you write examples and tests? I think that you mentioned that during the talk, but I couldn't find them on a very quick look at your org file in the squint repo\.\.\.""" start="00:14:10.600" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""All right, next question is,""" start="00:14:10.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""how do you write examples and tests?""" start="00:14:12.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that you mentioned that during the talk,""" start="00:14:18.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I couldn't find them on a very quick look""" start="00:14:22.751" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""at your org file in the Squint repo.""" start="00:14:25.084" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""My use of the word test was a little bit creative.""" start="00:14:27.834" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's my validation of the code that I've written.""" start="00:14:35.209" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I more or less tend to do a,""" start="00:14:42.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I tend to try and write really small functions""" start="00:14:45.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and have really aggressive validation""" start="00:14:50.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""by just making sure that, like, you know,""" start="00:14:52.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""when I chain functions in the REPL,""" start="00:14:55.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""each step of them produces results""" start="00:14:59.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that are really quite immediately and self-verifiably seen.""" start="00:15:03.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Now, this isn't a great excuse to not use a test suite,""" start="00:15:07.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it's gotten me pretty far.""" start="00:15:11.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""What I mean by tests is that in the research sections,""" start="00:15:12.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what I've done is, so I've created a sort of tested""" start="00:15:19.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in the sense that I have created""" start="00:15:26.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""a really highly representative case""" start="00:15:29.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of the way that the program ultimately ought to behave.""" start="00:15:33.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""In doing so, I created a sort of embedded domain language""" start="00:15:38.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I have termed Animal Houses.""" start="00:15:43.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And Animal Houses is a sort of markup language""" start="00:15:46.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that has rather simple rules.""" start="00:15:51.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""This here is the entirety of the spec for Animal Houses.""" start="00:15:54.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Grammar or anything, but like, it is more or less.""" start="00:16:00.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Breadth of everything that needs to be known""" start="00:16:06.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""about how Animal Houses works.""" start="00:16:08.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And I've created Animal Houses because it is an ideal""" start="00:16:10.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and incredibly simple circumstance""" start="00:16:14.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for how to go about as-needed tests""" start="00:16:20.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for how Squint ultimately ought to work in practice.""" start="00:16:22.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So when I'm doing research,""" start="00:16:28.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what I do is I take the text of animal houses,""" start="00:16:30.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I will go ahead and insert it into a buffer.""" start="00:16:34.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And I'll just create an analog buffer.""" start="00:16:39.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I just called it awoo.""" start="00:16:46.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And then what I'll do is in my research sections, I will write...""" start="00:16:48.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Like I'll write like step-by-step""" start="00:16:55.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""instructions on how to go about with a REPL-driven detection""" start="00:17:02.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""using Animal Houses. So it does""" start="00:17:07.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""squint pass label to :with-restriction: correctly.""" start="00:17:13.844" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""The tests conducted here indicate that it does not.""" start="00:17:16.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And then I link to a development focus""" start="00:17:20.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that effectively acts as my bug report,""" start="00:17:25.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""or, sorry, my bug listing for this particular problem""" start="00:17:29.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I've identified.""" start="00:17:37.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I lay out some criteria of how to""" start="00:17:38.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""go about using the REPL to...""" start="00:17:41.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you know I identify what I believe""" start="00:17:44.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is sort of like the quarantined area""" start="00:17:47.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I found for the bug,""" start="00:17:49.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then test is that I will go about""" start="00:17:50.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""engaging with narration""" start="00:17:56.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the step-by-step of how I produce""" start="00:17:59.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the circumstances around the bug""" start="00:18:03.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""until I ultimately narrow all the way in""" start="00:18:07.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and arrive at a conclusion.""" start="00:18:10.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Something's going on with the screen share.""" start="00:18:14.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I can see your screen but""" start="00:18:16.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the server cannot see your screen updating.""" start="00:18:18.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Sorry. Oh, no. Maybe you stop sharing...""" start="00:18:25.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, and then we just redo it again. Thank you.""" start="00:18:30.750" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yes, absolutely.""" start="00:18:33.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Thanks to someone who noticed the buffer time,""" start="00:18:36.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the time in the mode line was not updating.""" start="00:18:39.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Okay, let's try that again. Now it's updating. Gotcha.""" start="00:18:42.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I hope that wasn't going on for too, too long.""" start="00:18:50.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Hopefully what I was saying""" start="00:18:55.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""wasn't completely indecipherable. Let me see here.""" start="00:18:57.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, this is the sample text for animal houses.""" start="00:19:02.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""This is the spec, not a formal grammar,""" start="00:19:06.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it is more or less the whole of the spec""" start="00:19:10.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that you need to write a parser for animal houses.""" start="00:19:12.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Most of the tests around Squint involve""" start="00:19:16.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""writing ad-hoc parsers for animal houses.""" start="00:19:19.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Just when I have it in its own buffer, you know,""" start="00:19:24.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I find, more or less, it's an excellent way""" start="00:19:27.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of going about testing""" start="00:19:29.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in an ad-hoc sort of REPL-driven manner""" start="00:19:31.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I just sort of write regular...""" start="00:19:35.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that pull out the pieces of the sections of buffer""" start="00:19:39.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that represent the different fields and data types""" start="00:19:43.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in association with the animals""" start="00:19:49.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and the houses to which they belong.""" start="00:19:51.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And then when I am engaging in research,""" start="00:19:54.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what my research section is,""" start="00:20:00.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is I'm ultimately just""" start="00:20:03.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""laying out, like, you know,""" start="00:20:05.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm thinking to myself, is this working right?""" start="00:20:06.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I feel like""" start="00:20:10.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""there's something here, something in this area.""" start="00:20:11.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And I'll ask myself, well,""" start="00:20:14.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what is it, what am I looking for?""" start="00:20:16.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And then nail down, how am I going""" start="00:20:20.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to go about looking for it?""" start="00:20:22.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""The process of working with the REPL""" start="00:20:24.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to pin down what exactly is going on""" start="00:20:30.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and come to a conclusion on...""" start="00:20:34.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Completely jumping out of order.""" start="00:20:42.868" video="qanda-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you experimented with something like whisper\.el for doing speech-to-text as you think out loud into your Bookclub?""" start="00:20:44.520" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Have you experimented with whisper.el""" start="00:20:44.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for doing speech to text""" start="00:20:47.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""as you think out loud into your book club?""" start="00:20:49.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Now I am. I love that idea. That is awesome.""" start="00:20:52.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, no, I love that.""" start="00:20:56.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""[Sacha]: Even with... I only have a CPU, no GPU on mine,""" start="00:21:00.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""it does capture things a lot faster.""" start="00:21:04.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And because it actually saves the recording to a WAV,""" start="00:21:08.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""or I guess you can configure it,""" start="00:21:12.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in case it doesn't recognize something well,""" start="00:21:14.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you can go back and check it. That's nice.""" start="00:21:16.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I like that more than a straight speech-text thing.""" start="00:21:20.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I've been mulling over the idea""" start="00:21:24.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of having a keystroke save into a background buffer""" start="00:21:27.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""so that even when I'm looking at something else,""" start="00:21:30.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I can dictate into my equivalent of the book club file.""" start="00:21:33.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""[Maddie]: Yes, yes, yes, absolutely.""" start="00:21:37.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So you can be scrolling through documentation on, like,""" start="00:21:41.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you can be scrolling through documentation on one screen""" start="00:21:44.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and you can be musing to yourself about,""" start="00:21:48.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""like, you know, is this supposed to work this way?""" start="00:21:49.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Like, you know, like, what in terms of, like,""" start="00:21:52.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you know, like, I see this function.""" start="00:21:57.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It sounds like it's what I'm looking for.""" start="00:21:59.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I don't know if the types are quite right.""" start="00:22:01.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I don't understand. It's named what I'm looking for,""" start="00:22:03.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I don't know what it's taking in.""" start="00:22:05.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You can reason through all of this.""" start="00:22:07.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You're not even writing into the buffer""" start="00:22:09.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that you're working with. That's actually so cool.""" start="00:22:10.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""[Sacha]: Or you can tie it into the org capture process""" start="00:22:14.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""so that it can pick up an annotation automatically.""" start="00:22:17.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Sorry, annotation is the link to the thing,""" start="00:22:21.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""whatever you're looking at.""" start="00:22:24.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""[Maddie]: Oh, that's super cool. Yes. No, I actually really love it.""" start="00:22:26.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I haven't, you know, hooking this all up to Org Capture at all.""" start="00:22:33.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I actually really love that idea in and of itself. Yeah.""" start="00:22:36.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""[Sacha]: Org capture will give you a lot of capture options.""" start="00:22:58.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You can capture to your currently""" start="00:23:01.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""clocked in heading. So then it just files your note""" start="00:23:03.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in the right place automatically.""" start="00:23:11.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""[Maddie]: Absolutely. I love that. Let me see.""" start="00:23:15.060" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm actually like writing a note to try that out.""" start="00:23:19.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm definitely going to have to do that.""" start="00:23:21.100" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Like the flexibility of that in particular sounds just perfect.""" start="00:23:23.126" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""[Sacha]: I'll let you finish typing noises""" start="00:23:36.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then we can ask the next question""" start="00:23:38.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for which there is one.""" start="00:23:39.680" video="qanda-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What is the largest project in terms of team size you had the chance to consult and introduce the Bookclub Tapas concept and what have been your experiences with these setups (implying larger applications / solutions a company is working on)?""" start="00:23:42.292" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""The question is, what is the largest project""" start="00:23:42.292" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in terms of team size you had the chance to consult""" start="00:23:45.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and introduce the book club tapas concept?""" start="00:23:48.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And what has been your experiences with these setups,""" start="00:23:51.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""implying larger applications or solutions""" start="00:23:53.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that company is working on?""" start="00:23:56.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So yeah, probably the largest application.""" start="00:23:57.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I have, It's been interesting.""" start="00:24:01.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So in regards to this, the largest,""" start="00:24:05.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would say two people""" start="00:24:08.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in a couple of different circumstance.""" start="00:24:10.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So it's the pair of us working in a startup context.""" start="00:24:12.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And then, you know, we both have""" start="00:24:20.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""like rather technical backgrounds.""" start="00:24:24.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""We can both more or less, you know,""" start="00:24:25.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You know, sort of reason about particularly excite,""" start="00:24:27.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""especially as we've been building up top us is that,""" start="00:24:33.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you know, well, we're both rather technical.""" start="00:24:37.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You know, I'm definitely software engineering sort of end.""" start="00:24:39.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And, you know, this partner is more.""" start="00:24:42.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I mean, he's done all sorts of different engineering,""" start="00:24:47.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but none of it in a, like, especially software context.""" start="00:24:51.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So like, you know, but what's been""" start="00:24:54.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""really cool about that is that""" start="00:24:56.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""especially as we've built up top us""" start="00:24:58.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and made clear distinctions""" start="00:24:59.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""about what they ought to do, you know,""" start="00:25:00.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""he doesn't have a ton of like really,""" start="00:25:02.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""he doesn't like experience like""" start="00:25:04.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""specifically in software engineering,""" start="00:25:10.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but because we have it all laid out""" start="00:25:12.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in this really flexible way,""" start="00:25:15.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""he's able to pick up the ball and like,""" start="00:25:17.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you know, like he's able to""" start="00:25:20.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""take the ball and run with it.""" start="00:25:21.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""because it's all laid out""" start="00:25:23.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in a way that's so intuitive.""" start="00:25:25.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Like, you know, he's able to like""" start="00:25:26.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""collaborate with me and like,""" start="00:25:28.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you know, like, you know, run off these ideas""" start="00:25:31.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and like really go for it.""" start="00:25:33.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Like, you know, almost as quickly as I can,""" start="00:25:34.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""just because we've set up a structure""" start="00:25:37.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""where like all of the different pieces""" start="00:25:39.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""have these really intuitive""" start="00:25:42.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and intrinsic and straightforward roles.""" start="00:25:43.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And that's, that's something""" start="00:25:46.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that's really exciting in of itself""" start="00:25:47.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I didn't really go over in the talk.""" start="00:25:49.045" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Like a managerial perspective,""" start="00:25:50.670" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""this is actually a really excellent way""" start="00:25:54.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of understanding the whole context""" start="00:25:56.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of like what the software stack looks like.""" start="00:26:01.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Because it's like, you know,""" start="00:26:04.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""it makes it more intuitive for developers for sure,""" start="00:26:06.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it makes it more intuitive for everyone.""" start="00:26:09.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You know, it's on that basis""" start="00:26:10.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I can't imagine clients""" start="00:26:12.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""like just a better way at this point.""" start="00:26:14.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Um, that was that was the other circumstance""" start="00:26:18.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""where I have been working with a partner.""" start="00:26:22.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""This has been with, um, you know, I would be, uh.""" start="00:26:25.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You know, sort of going back and forth""" start="00:26:29.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""with someone who had hired me.""" start="00:26:31.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Um, to, uh, like, you know, to work on contract.""" start="00:26:34.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And I would use this to sort of go""" start="00:26:40.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""over with them about, um.""" start="00:26:42.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Sort of get a solid idea of scope and function,""" start="00:26:45.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""do pre-planning as we're going into more specifics""" start="00:26:51.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""on what the overall look for the project""" start="00:26:57.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and how it ought to look""" start="00:27:03.376" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and how it all ought to be laid out.""" start="00:27:04.251" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So there's a lot of really exciting flexibility there""" start="00:27:05.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I think is really cool.""" start="00:27:11.520" video="qanda-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: People will also be curious about the mechanics of collaboration: other person uses Emacs and Org? Shipping things back and forth via git / version control? CRDT?""" start="00:27:22.000" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""People will, of course, be curious""" start="00:27:22.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""about the mechanics of that collaboration.""" start="00:27:23.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Did you get other people using Emacs in org?""" start="00:27:25.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Were you using version control? Did you try out CRDT?""" start="00:27:28.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""How did it work?""" start="00:27:32.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So all of this so far has been over screen share,""" start="00:27:33.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""where I would be stepping through the buffer by hand.""" start="00:27:39.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would love to set up some sort of an environment""" start="00:27:43.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""where I could get you know, clients and partners,""" start="00:27:47.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""like, you know, really excited""" start="00:27:52.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""about using Emacs and Org.""" start="00:27:53.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""But, you know, it's, it can be a little bit to ask,""" start="00:27:54.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would love to see if I can, like,""" start="00:27:58.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""put together some sort of a config that,""" start="00:28:00.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""like, sands off all of this and""" start="00:28:01.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""makes this this really""" start="00:28:04.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""safety-proof sort of intuitive environment""" start="00:28:08.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""just for CRDT in particular.""" start="00:28:13.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I love the idea of""" start="00:28:16.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""spawning CRDT""" start="00:28:18.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""so that the two of us can""" start="00:28:21.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""type-spec an ideas""" start="00:28:24.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and draft together on, you know,""" start="00:28:27.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""especially like the glue code Tapa""" start="00:28:31.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for a larger software stack.""" start="00:28:33.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Like, collaborating on that over CRDT,""" start="00:28:35.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""or having folks step through Tapas and""" start="00:28:38.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""unfold them and point to a particular thing...""" start="00:28:43.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And it's like, you know, what's this?""" start="00:28:46.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""What's the clock here?""" start="00:28:49.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""It looks like we're spending a lot of time,""" start="00:28:50.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I would like to get a little bit clearer""" start="00:28:52.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of an idea of what exactly we're doing here.""" start="00:28:54.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Back up a little bit because the stream just disconnected""" start="00:28:56.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and reconnected from the audio.""" start="00:29:01.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So, please repeat just the last sentence.""" start="00:29:02.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, yeah, for sure. Yeah, so I would like...""" start="00:29:06.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I love the idea of collaborating on,""" start="00:29:11.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""especially on the glue code.""" start="00:29:18.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Tapa for a particular software stack, you know,""" start="00:29:20.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""having the both of us use CRDT""" start="00:29:23.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to type into it simultaneously,""" start="00:29:26.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that would be super cool.""" start="00:29:27.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I also really love the idea of""" start="00:29:30.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""having a client or partner""" start="00:29:33.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""thumb through individual tapas in the stack""" start="00:29:37.140" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then look at and be like,""" start="00:29:41.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""well, we seem to have time on this recently,""" start="00:29:45.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""can you give me some clarification on""" start="00:29:47.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what this part is and""" start="00:29:51.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what it means for the whole""" start="00:29:55.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and what it represents""" start="00:29:57.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in terms of how all of this is going to come together.""" start="00:30:00.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that would be super cool. I love the idea of that.""" start="00:30:02.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would even consider, if not Emacs proper,""" start="00:30:06.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would love maybe a web-based Org parser""" start="00:30:11.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""or even just a read-only version""" start="00:30:17.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of the document where clients and partners""" start="00:30:21.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""just sort of thumb through with it""" start="00:30:25.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then chat with questions.""" start="00:30:26.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Make the screen sharing for""" start="00:30:28.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""peer programming process""" start="00:30:34.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""just a little bit cleaner, more intuitive on their end.""" start="00:30:36.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that'd be super cool. I love these ideas.""" start="00:30:41.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""[Sacha]: All right, theoretically, the Big Blue Button is open.""" start="00:30:50.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think we've gotten to the end""" start="00:30:55.003" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of the questions on the etherpad.""" start="00:30:57.003" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""If anyone else would like to join or ask,""" start="00:31:00.295" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm going to need a couple of minutes""" start="00:31:03.086" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then I can do closing remarks""" start="00:31:04.841" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""whenever people are ready.""" start="00:31:06.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I will meet now when people figure things out.""" start="00:31:08.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""[Maddie]: I would also be super down if, you know,""" start="00:31:19.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""anyone was curious about hearing more""" start="00:31:22.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""about some of the projects""" start="00:31:25.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I was kind of rambling""" start="00:31:29.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""at the close of the talk,""" start="00:31:30.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""if people wanted to""" start="00:31:34.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""hear more about some of my ideas""" start="00:31:36.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in regards to""" start="00:31:39.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what am I thinking at home with the...""" start="00:31:42.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""What's it called?""" start="00:31:45.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Just some of the funding for passion projects,""" start="00:31:49.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would be interested in laying out some of the ideas""" start="00:31:55.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""about how that could work mechanically.""" start="00:31:58.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And I think that that would be, you know,""" start="00:31:59.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""really cool for the whole ecosystem,""" start="00:32:02.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""because I think that there are definitely""" start="00:32:04.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""things that we could bang out, you know,""" start="00:32:06.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for getting kind of all sorts of people on that model.""" start="00:32:09.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that it would be really cool""" start="00:32:12.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to to having a funding model""" start="00:32:14.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for things that are really worth using.""" start="00:32:18.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And developing the other thing is""" start="00:32:20.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""just rattling off specifics on things""" start="00:32:29.260" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that people could potentially vote for on that,""" start="00:32:31.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and in terms of specific &quot;might want to work on&quot;...""" start="00:32:34.961" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""All right, there's a question from IRC.""" start="00:32:53.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Sorry, I just got that. Did you address that one already?""" start="00:32:56.878" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Let's see. Where is it?""" start="00:33:01.881" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I will copy it from IRC. Thank you.""" start="00:33:07.128" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Gotcha. Into the pad.""" start="00:33:12.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Perfect, perfect, perfect.""" start="00:33:14.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Let me read the question out loud so it's in the recording.""" start="00:33:27.760" video="qanda-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I guess a major pro is it has less friction as people can do (a lot, maybe not everything) in BookClub Tapas file vs\. having to log into gazillions of different systems, each one of them keeping a portion of the information\. Did I get that viewing point right from your elaboration of the collaboration between you and your team mate(s)?""" start="00:33:30.680" video="qanda-bookclub-tapas" id="subtitle"]]</div>[[!template text="""I guess a major pro is it has less friction""" start="00:33:30.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""as people can do a lot,""" start="00:33:33.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""maybe not everything in Bookclub Tapas files""" start="00:33:35.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""versus having to log into gazillions of different systems,""" start="00:33:39.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""each one of them keeping a portion of the information.""" start="00:33:42.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Did I get that viewing point right""" start="00:33:45.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""from your elaboration of the collaboration""" start="00:33:47.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""between you and your teammates?""" start="00:33:49.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yes. No, that's absolutely right.""" start="00:33:52.160" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Because my hope is that we can you know""" start="00:33:55.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""there's a lot of conflict into that...""" start="00:34:00.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""We assume that a lot of um pieces of tooling""" start="00:34:03.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and the separation between them""" start="00:34:13.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is really sort of a necessary evil""" start="00:34:14.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""i think that you know having a system""" start="00:34:16.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""where really the complexity""" start="00:34:19.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of engaging in all of the information""" start="00:34:21.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""relevant to the program.""" start="00:34:25.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""If it's in a format""" start="00:34:29.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""where you can just email it back and forth,""" start="00:34:30.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""break off pieces of it,""" start="00:34:31.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""work with those individually,""" start="00:34:33.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that that's something""" start="00:34:35.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that's incredibly rewarding.""" start="00:34:38.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Something that just dawned on me""" start="00:34:40.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I wanted to mention""" start="00:34:42.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I've been daydreaming about""" start="00:34:44.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that in a circumstance""" start="00:34:46.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""where you have multiple developers,""" start="00:34:49.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""like, you know, across a larger team,""" start="00:34:52.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""working on a book club tapas driven project,""" start="00:34:53.880" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what you can do is have, you know,""" start="00:34:57.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""a clear, you can lay out your goal,""" start="00:35:02.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then start splitting it to tapas from that point,""" start="00:35:04.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then assign each teammate their own tapa,""" start="00:35:08.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""which becomes their baby.""" start="00:35:11.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And I really love the idea""" start="00:35:13.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""of people being able to, you know,""" start="00:35:15.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""have an idea of an interface""" start="00:35:17.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""about how all of these are""" start="00:35:20.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""ultimately come back together,""" start="00:35:21.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but people have their own like agency""" start="00:35:22.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""over their own code base,""" start="00:35:26.640" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""despite the fact that they're""" start="00:35:27.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""working in collaboration.""" start="00:35:29.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that it can be incredibly motivating""" start="00:35:30.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for a team to, you know, have each person""" start="00:35:32.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in charge of their own project,""" start="00:35:36.080" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but of course it's all ultimately""" start="00:35:38.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""going to the same code base.""" start="00:35:39.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So, you know, I think that,""" start="00:35:41.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that a pursuit of beauty""" start="00:35:43.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is this really solid motivator""" start="00:35:45.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in terms of how people perceive""" start="00:35:48.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""the merits of their efforts""" start="00:35:50.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and how that lights a fire under them""" start="00:35:53.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to continue and keep going and dig deep""" start="00:35:56.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""when things get frustrating.""" start="00:35:59.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""When you have a personal stake""" start="00:36:00.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in your project,""" start="00:36:02.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that that's a really excellent time""" start="00:36:03.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to really push and move forward on it.""" start="00:36:06.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And people having ownership""" start="00:36:08.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""over this idea of their specific tapa""" start="00:36:10.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""could be a really cool way to do that""" start="00:36:12.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""in a team setting.""" start="00:36:15.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""But I pivoted off a little bit.""" start="00:36:15.760" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So yes, but I absolutely did that.""" start="00:36:20.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You know, that having a simplistic format""" start="00:36:24.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""for your information""" start="00:36:28.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""is a really solid way to have""" start="00:36:30.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""collaboration be frictionless.""" start="00:36:33.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""You have one source of information""" start="00:36:36.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and you don't have to drown in your tooling.""" start="00:36:38.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""All right, I think you've addressed""" start="00:36:40.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""all the questions on the etherpad.""" start="00:36:51.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And as you said, people can email you,""" start="00:36:54.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""even though the website looks like""" start="00:36:56.800" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""it's still not quite there yet,""" start="00:36:58.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""people can email you or ask questions""" start="00:37:00.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""to the etherpad afterwards.""" start="00:37:03.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Is there anything else that""" start="00:37:05.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""you'd like to share or shall I wrap up,""" start="00:37:07.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""introduce myself doing the closing remarks""" start="00:37:11.040" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then try to do the closing remarks?""" start="00:37:13.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yes, so I have two last thoughts.""" start="00:37:16.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yes, no, I did just want to confirm""" start="00:37:18.840" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that my email is completely working.""" start="00:37:21.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""If you want to keep up to date""" start="00:37:24.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""with the stuff that I'm working on,""" start="00:37:27.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""please shoot and I will, you know, at your request,""" start="00:37:29.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I will add you to a mailing list.""" start="00:37:35.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""which will have intermittent updates.""" start="00:37:38.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm not going to send you spam,""" start="00:37:40.480" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it will have updates for what I'm working on,""" start="00:37:42.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""what this all looks like,""" start="00:37:47.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and just context for the different things""" start="00:37:48.600" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I'm working on.""" start="00:37:52.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""My website will be going up soon enough.""" start="00:37:53.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I just got a little distracted because I'm like,""" start="00:37:57.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""oh, I'm just gonna spin up a Gux server""" start="00:38:01.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I'm gonna make it super cool""" start="00:38:05.240" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""when really I just need just""" start="00:38:07.000" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Debian and Apache real quick, just something.""" start="00:38:09.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""So the website will be going up. It's just not up yet.""" start="00:38:12.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""And the very last thing is that""" start="00:38:16.680" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would really like to thank everyone""" start="00:38:19.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that helped me to get here. I would like to thank you know,""" start="00:38:22.960" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""all of my, you know, I would like to thank my fiance.""" start="00:38:27.200" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would like to thank all of my friends.""" start="00:38:32.320" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would like to thank my, you know,""" start="00:38:34.520" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""my mentor and business partner, Sharon.""" start="00:38:39.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would like to thank Tracy, my therapist.""" start="00:38:42.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would like to thank my parents.""" start="00:38:45.120" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I invited people to come watch this thing,""" start="00:38:48.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I would like to thank all of them.""" start="00:38:53.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would like to thank everyone""" start="00:38:55.280" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""who was planning on coming to this event anyway.""" start="00:38:57.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""The Emacs community is incredible, incredibly encouraging,""" start="00:39:02.440" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""incredibly kind, incredibly smart and talented.""" start="00:39:06.360" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""Y'all make Emacs what it is, and it is so cool.""" start="00:39:09.400" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would like to thank you, Satya.""" start="00:39:13.720" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would like to thank all of the organizers""" start="00:39:15.920" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""that made this possible.""" start="00:39:19.560" video="qanda-bookclub-tapas" id="subtitle"]]
+[[!template text="""This thing is the coolest and it was, this was so cool.""" start="00:39:20.880" video="qanda-bookclub-tapas" id="subtitle"]]
+
+</div>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..988b779e
--- /dev/null
+++ b/2025/info/bookclub-tapas-before.md
@@ -0,0 +1,43 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 32-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-bookclub-tapas>
+Etherpad: <https://pad.emacsconf.org/2025-bookclub-tapas>
+Status: TO_INDEX_QA
+
+
+
+
+
+# Talk
+
+<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.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/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://toobnix.org/videos/watch/921ba954-6f90-4865-9e2c-492b6e379899">View on Toobnix</a></li><li><a href="https://youtu.be/GAOZzrm6ecA">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-bookclub-tapas"><source src="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--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-bookclub-tapas-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.opus"></audio></div><div></div>Duration: 39: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/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.m4v">Download --answers.m4v (100MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.opus">Download --answers.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.webm">Download --answers.webm (107MB)</a></li><li><a href="https://toobnix.org/videos/watch/316e6fa9-ffc7-4311-9344-a37609c501fb">View on Toobnix</a></li><li><a href="https://youtu.be/ImsdOcoXqOg">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..9cc95b9c
--- /dev/null
+++ b/2025/info/bookclub-tapas-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/gardening">Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</a>
+Next by track: <a href="/2025/talks/schemacs">One year progress update Schemacs (formerly Gypsum)</a>
+Track: <span class="sched-track General">General</span>
+</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..1972ee0d
--- /dev/null
+++ b/2025/info/calc-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 24-min talk ; Q&A: IRC Etherpad: <https://pad.emacsconf.org/2025-calc>
+Etherpad: <https://pad.emacsconf.org/2025-calc>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<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://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://toobnix.org/videos/watch/afab2272-06c3-4aa8-90e7-166092657a75">View on Toobnix</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..cd4095ba
--- /dev/null
+++ b/2025/info/calc-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/latex">LaTeX export in org-mode: the overhaul</a>
+Next by track: <a href="/2025/talks/blee-lcnt">Blee-LCNT: An Emacs-centered content production and self-publication framework</a>
+Track: <span class="sched-track General">General</span>
+</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..11b4e518
--- /dev/null
+++ b/2025/info/commonlisp-after.md
@@ -0,0 +1,798 @@
+<!-- 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
+
+<div class="transcript transcript-qanda"><a name="commonlisp-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Opening""" start="00:00:00.000" video="qanda-commonlisp" id="subtitle"]]</div>[[!template text="""Recording started.""" start="00:00:00.000" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Great. All right, you are live in Common Lisp on dev.""" start="00:00:04.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""This is Corwin back and I've got screwlisp with me,""" start="00:00:07.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""the host of the Lispy Gopher... Climate, I like to say.""" start="00:00:14.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""It used to be show.""" start="00:00:18.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""The Lispy Gopher show or the Lispy Gopher Climate.""" start="00:00:20.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Thank you so much for joining us. Minutes.""" start="00:00:24.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Yeah, we're just, we've got already""" start="00:00:31.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""a whole pad full of questions""" start="00:00:33.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and we have a unique opportunity if you,""" start="00:00:35.360" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""if you check out the etherpad,""" start="00:00:38.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""you'll see some instructions there to join on Lambda Moo,""" start="00:00:39.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""with screwlisp,""" start="00:00:42.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""but I'm hoping you will talk to us a little bit about that""" start="00:00:43.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""as well as your, your very cool project.""" start="00:00:46.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Oh yeah, so I main on Lambda, as Corwin is saying.""" start="00:00:48.880" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And Corwin was pretending not to know the name of the show,""" start="00:00:52.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""but he has in fact appeared on an episode of it""" start="00:00:55.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""in January this year, I think.""" start="00:00:59.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So he was just pretending there. I'm screwlisp of this.""" start="00:01:00.880" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""What's happening?""" start="00:01:04.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""10 minutes or less before we started going live here,""" start="00:01:06.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""they were like, remember how you said you fixed that bug?""" start="00:01:13.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And then I had to quickly recapitulate my whole talk.""" start="00:01:16.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And I introduced some new bugs while that was happening.""" start="00:01:21.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""But let's go through some of these questions.""" start="00:01:23.720" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""We're all hanging out in LambdaMoo.""" start="00:01:26.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So if you mx telnet over to lambda.moo.mud.org port 8888.""" start="00:01:29.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""This is where we're talking at the moment""" start="00:01:37.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""with people like Ed Swarthout, DM, and yduJ,""" start="00:01:40.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""who I gossiped about in the show,""" start="00:01:45.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and Sacha, and people were there a little bit as well.""" start="00:01:47.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I'm just going to read some of the questions""" start="00:01:50.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""that ggxx in LambdaMOO has been relaying to me there,""" start="00:01:53.360" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""though I hear that there are a whole bunch of them now.""" start="00:01:59.760" video="qanda-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What do you mean by "the agent is running slowly"?""" start="00:02:08.240" video="qanda-commonlisp" id="subtitle"]]</div>[[!template text="""Someone asks on the Etherpad,""" start="00:02:08.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""what do you mean when I say the agent is running slowly?""" start="00:02:09.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Yeah, so if you saw in the talk,""" start="00:02:13.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I was having the agent only attempt""" start="00:02:17.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""to act every 20 seconds.""" start="00:02:19.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""This is what I mean by the agent is acting slowly.""" start="00:02:21.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So this is quite different""" start="00:02:25.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""to what people might expect within AI""" start="00:02:26.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""if people are talking about, like the graphics card ones""" start="00:02:28.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""where you try and crunch as fast as you can,""" start="00:02:30.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""for as few seconds as you can, and then you stop.""" start="00:02:33.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""In contrast, my agent is just trying to do""" start="00:02:36.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""a simple action every 20 seconds.""" start="00:02:39.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""But if you keep going continuously""" start="00:02:42.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""at a simple action every 20 seconds""" start="00:02:45.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""without sleeping for days,""" start="00:02:47.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""it still adds up to a lot.""" start="00:02:49.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So that was the significance of it running slowly.""" start="00:02:51.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""What else are people saying? ggxx to screwtape.""" start="00:02:57.040" video="qanda-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think that it would be too hard to add a second way to send commands from Common Lisp to Emacs?""" start="00:03:00.640" video="qanda-commonlisp" id="subtitle"]]</div>[[!template text="""Someone asked on the Etherpad,""" start="00:03:00.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""do you think that it would be too hard""" start="00:03:02.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""to add a second way""" start="00:03:04.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""to send commands from Common Lisps to Emacs?""" start="00:03:06.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""No, I put three of them together""" start="00:03:09.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and I didn't talk about it""" start="00:03:12.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""because this is a kind of affected choice.""" start="00:03:14.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Right now you're using emacsclient for that.""" start="00:03:17.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""That is the simplest way to implement.""" start="00:03:20.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""How about using the slime protocol?""" start="00:03:22.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Elsewhere, I am just using the SLIME protocol.""" start="00:03:24.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So, in everyone that's SLIME-connected.""" start="00:03:28.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So, earlier on, you saw somebody""" start="00:03:31.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""running a swank server in Python.""" start="00:03:33.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Normally, you run a swank server in Common Lisp.""" start="00:03:35.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And a swank server is what Emacs SLIME,""" start="00:03:38.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Superior Lisp Interaction Mode for Emacs, connects to.""" start="00:03:41.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And then Swank comes with swank-eval in Emacs.""" start="00:03:45.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So after you've been slime connected,""" start="00:03:49.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""you can trivially send Emacs Lisp forms to Emacs""" start="00:03:50.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""using swank-eval and Emacs.""" start="00:03:55.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""The reason that I chose to use""" start="00:03:57.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Emacs server and Emacs client""" start="00:04:00.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""was that I was letting the Leonardo agent""" start="00:04:05.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""talk to Emacs using Swank, Eval, and Emacs.""" start="00:04:14.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And I wanted my ECL image to be using""" start="00:04:18.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""a different notion of a server.""" start="00:04:21.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So the ECL image, just because""" start="00:04:23.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I chose to do it like this,""" start="00:04:27.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""is using Emacs client and Emacs server going via,""" start="00:04:28.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I guess it's executing a program""" start="00:04:33.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""rather than using a shell.""" start="00:04:35.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And yeah, I was letting somebody else""" start="00:04:36.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""use Slime eval in Emacs.""" start="00:04:40.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""It would have been simpler""" start="00:04:42.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""if everybody just used Slime eval in Emacs.""" start="00:04:45.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I thought I was getting something""" start="00:04:48.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""out of adding Emacs server into the mix.""" start="00:04:50.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""What's somebody saying?""" start="00:04:56.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""yduJ is weirded out by doing get foo bar""" start="00:04:57.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""instead of get foo quote bar.""" start="00:05:00.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Yeah, that was Sandewall's choice.""" start="00:05:02.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""He was trying to pitch Lisp""" start="00:05:04.360" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""to logic notation people,""" start="00:05:06.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""so he lets people put commas in""" start="00:05:09.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and then ignores them in certain expressions,""" start="00:05:12.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and he doesn't have these Lisp-style quotes.""" start="00:05:15.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""yduJ is obviously from like Schlumberger""" start="00:05:18.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and wherever else she was at in""" start="00:05:22.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""in the kind of list of traditions.""" start="00:05:24.880" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Full of Spain is saying good observation.""" start="00:05:28.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""yduJ is shocked that she's being mentioned.""" start="00:05:30.360" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Interestingly Nosredna yduJ capitalizes Nosredna at the front,""" start="00:05:33.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""but she capitalizes yduJ at the back, just for clarity.""" start="00:05:40.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""You should read her Stanford page or her recipe site""" start="00:05:45.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""or anything if you're not clear on who yduJ is.""" start="00:05:49.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Sacha, you're looking for the word ??.""" start="00:05:58.000" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I think she ?? yduJ,""" start="00:06:00.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I think is the English phrase that you're looking for.""" start="00:06:03.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""yduJ is saying she would not,""" start="00:06:06.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""no matter what I say,""" start="00:06:08.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""she's not going to hug my software agent""" start="00:06:10.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""like she would hug a grandchild. Eyes me warily.""" start="00:06:13.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And Sacha is not going to...""" start="00:06:20.720" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""totally training a general intelligence""" start="00:06:22.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""who requires a lot of data""" start="00:06:24.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and also cuddles. Okay, so everybody who has children""" start="00:06:26.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""is disagreeing with me quoting Sandewall,""" start="00:06:28.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""who did have children and grandchildren,""" start="00:06:31.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""saying that he wanted machine intelligences""" start="00:06:33.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""to be like his grandchild.""" start="00:06:36.120" video="qanda-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What is the leonardo system?""" start="00:06:37.760" video="qanda-commonlisp" id="subtitle"]]</div>[[!template text="""GGXX is saying somebody on Etherpad""" start="00:06:37.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""is asking what the Leonardo system is.""" start="00:06:40.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Sandewall is a LISP scientist""" start="00:06:43.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""from the 60s, 70s, 80s, 90s, 90s, 10s.""" start="00:06:46.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""with things like bronze statues of him in Sweden.""" start="00:06:51.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""People outside of the Swedish-speaking sphere of science""" start="00:06:55.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""are less familiar with him.""" start="00:06:59.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I guess he famously taught Robert Strand""" start="00:07:01.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""how to program in LISP, if that places him for you.""" start="00:07:04.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""What else did he do?""" start="00:07:08.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Yeah, so he was on a kind of long trajectory of AI,""" start="00:07:10.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""which would now be called good old-fashioned AI.""" start="00:07:15.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And he was coming from the situation calculus,""" start="00:07:18.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""then activity calculus kind of direction,""" start="00:07:22.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""which are extended first order logics""" start="00:07:26.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""for reasoning about change over time.""" start="00:07:28.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And his last program he contributed to the world was this.""" start="00:07:31.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""From 2005 to 2014, he worked on""" start="00:07:35.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""this Leonardo system for his master's program.""" start="00:07:39.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""He was teaching at that time""" start="00:07:43.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""at the University of Linköping in Sweden.""" start="00:07:45.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And... Then he just kind of gradually faded from view""" start="00:07:48.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""while he wrote his unpublished books""" start="00:07:53.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""on reasoning and change, I guess, between 2010 and 2014.""" start="00:07:55.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And then I just kind of noticed this eventually.""" start="00:08:01.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And I brought that software back. And that's what this is.""" start="00:08:03.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And that's why it kind of weirdly exists.""" start="00:08:07.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Welcome to Khaki Guest. Magenta Guest is gone.""" start="00:08:10.000" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Pink Guest is gone.""" start="00:08:15.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Blue Guest has arrived. Great. Somebody order six.""" start="00:08:16.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Everybody orders sake from Emily.""" start="00:08:23.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""We're hanging out in Jay Lamott's sushi bar in Lambda,""" start="00:08:26.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""which is on the model railway""" start="00:08:29.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""on the table in the second guest bedroom in Lambda House""" start="00:08:31.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""where we're all hanging out.""" start="00:08:35.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Oh, I think GGXX is ordering people up things.""" start="00:08:36.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""You know, just teach people about this.""" start="00:08:43.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""All right, I'm going to try looking""" start="00:08:49.540" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""at the etherpad manually.""" start="00:08:50.959" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""[Corwin]: Sorry, I can read you.""" start="00:08:54.130" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So the next question you have,""" start="00:08:55.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""somebody says, I found Eduardo's blog.""" start="00:08:57.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""OK, you just got through that.""" start="00:09:00.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And then we were also, a question you answered""" start="00:09:03.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""is the other one that I see here, just about Lambda Moo.""" start="00:09:06.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And I think you started to answer in the pad.""" start="00:09:10.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""But if you want to kind of read that out.""" start="00:09:14.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""[screwlisp]: I definitely haven't written anything in the pad.""" start="00:09:16.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I'm going to just talk to Khaki Guest in Lambda.""" start="00:09:19.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Sure, so why don't you do a little bit""" start="00:09:23.720" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and just read this question.""" start="00:09:25.880" video="qanda-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What is LambdaMOO, and how do we use it?""" start="00:09:27.280" video="qanda-commonlisp" id="subtitle"]]</div>[[!template text="""The question was, what is LambdaMOO and how do we use it?""" start="00:09:27.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""LambdaMOO is a module introduction,""" start="00:09:31.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and you can tell that to it.""" start="00:09:33.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""There's instructions in the pad.""" start="00:09:35.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I'll go ahead and drop that in the gen channel""" start="00:09:36.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""or in the dev channel chat right now.""" start="00:09:40.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And I see it is already in there.""" start="00:09:42.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""But down at the bottom""" start="00:09:46.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""of the discussion links feedback area,""" start="00:09:49.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""you'll see a set of detailed instructions""" start="00:09:53.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""that screwlisp has provided us to get in there.""" start="00:09:55.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I think that was actually GGXX""" start="00:09:58.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""who might have written that for us.""" start="00:10:01.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Several changes evolved in the last 10 minutes""" start="00:10:03.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""before we went live here.""" start="00:10:08.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""But yeah, so LambdaMOO is""" start="00:10:09.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""the world's longest-running virtual reality.""" start="00:10:12.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I guess it started in the end of October in 1990""" start="00:10:14.880" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and has run continuously to today.""" start="00:10:19.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""You can get there, ideally, with a MUD client.""" start="00:10:21.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Technically, it's a MUD, comma, object-oriented.""" start="00:10:24.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""This is just where I hang out some degree of the week.""" start="00:10:27.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""yduJ is the wizard yduJ, or sorry,""" start="00:10:30.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""yduJ is also the wizard Nosredna of Lambdomoo, for example.""" start="00:10:36.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""It kind of fits into quite less history.""" start="00:10:40.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I guess Pavel Curtis would have started in 1990""" start="00:10:44.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""for Xerox PARC, originally. Just to go to what Khaki Guest""" start="00:10:47.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""has been continuing to talk about.""" start="00:10:52.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Welcome to Brown Guest as well, I guess.""" start="00:10:54.840" video="qanda-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: It seems like you're trying to build a more restrictive Turing test using the input / output logs of an emacs conversation\. Is that accurate?""" start="00:11:01.340" video="qanda-commonlisp" id="subtitle"]]</div>[[!template text="""Aki Guest says, to Screwtape,""" start="00:11:01.340" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""it seems like you're trying to build""" start="00:11:03.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""a more restrictive Turing test""" start="00:11:04.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""using the input output logs of an Emacs conversation.""" start="00:11:07.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Is that accurate?""" start="00:11:11.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Can you explain this idea of if it is intelligent,""" start="00:11:12.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I'd like it to be like me?""" start="00:11:15.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Otherwise, I don't know what intelligence is.""" start="00:11:17.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Doesn't that seem a little egocentric?""" start="00:11:20.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Is that a joke or a genuine definition of intelligence?""" start="00:11:21.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Why do you think the link between""" start="00:11:25.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""input-output of Emacs human input-output""" start="00:11:27.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""is stronger than other forms of Turing tests?""" start="00:11:30.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So I'm going to misread Turing tests""" start="00:11:33.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""for a moment as Turing-complete.""" start="00:11:36.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And Sandewall's system is very specifically""" start="00:11:37.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Our first-order logic, if we don't extend it,""" start="00:11:40.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""is not Turing-complete, for starters.""" start="00:11:45.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And things like situation calculus,""" start="00:11:49.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""McCarthy's situation calculus,""" start="00:11:51.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""which I guess is prior to""" start="00:11:53.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Sandewall's Leonardo's calculus,""" start="00:11:55.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""are extended first-order logics""" start="00:11:58.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""for reasoning about change.""" start="00:12:02.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And so they're slightly""" start="00:12:03.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""more restricted than conventional,""" start="00:12:05.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""than general-purpose computer programs.""" start="00:12:07.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And then what you're saying is, if it's intelligent,""" start="00:12:10.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I'd expect it to be like me.""" start="00:12:14.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I'm really just paraphrasing what Sandewall says about,""" start="00:12:16.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""well, he thinks his grandchildren are intelligent.""" start="00:12:19.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So if a computer is intelligent,""" start="00:12:23.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""he thinks the computer will have to be""" start="00:12:24.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""similar to his grandchildren.""" start="00:12:26.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""This is in contrast to people""" start="00:12:28.040" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""who are using the terms AI""" start="00:12:32.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""to mean something a graphics card does""" start="00:12:33.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""with extremely specialized bulk matrix multiplication""" start="00:12:37.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""for a very short period of time""" start="00:12:41.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""on absolutely gigantic electrical""" start="00:12:43.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and kind of memory and computing resources,""" start="00:12:47.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""which doesn't look at all like what""" start="00:12:50.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Sandewall's grandchildren were doing.""" start="00:12:51.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And this is why I'm kind of saying,""" start="00:12:55.000" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""well, if I have an agent,""" start="00:12:56.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And my agent is quite simple.""" start="00:12:57.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""It uses Emacs server and Emacs client""" start="00:13:00.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""to send lines of basically extended""" start="00:13:04.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""first-order logic to the agent,""" start="00:13:07.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and the agent then takes a kind of""" start="00:13:09.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""first-order logic-y action.""" start="00:13:12.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And I was making the point""" start="00:13:15.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""that this looks more like me computing""" start="00:13:21.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""using of REPL-driven development like EEV,""" start="00:13:23.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""where in EEV, I have basically a log""" start="00:13:27.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""of something I've previously done,""" start="00:13:30.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and I can tap F8 and execute""" start="00:13:32.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""line after line after line.""" start="00:13:34.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And I think if I see an agent doing that,""" start="00:13:36.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I can clearly understand""" start="00:13:38.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and relate to what the agent is doing.""" start="00:13:40.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And so I'm not classifying""" start="00:13:43.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Like, I never do gigabytes and gigabytes""" start="00:13:45.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and gigabytes of matrix multiplications,""" start="00:13:49.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""so I can't relate to this as an idea of intelligence.""" start="00:13:52.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Sorry. Welcome to GreenGuest teleporting in.""" start="00:13:54.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""FullSpain is saying, no one truly knows what intelligence is.""" start="00:13:57.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""All right. I kind of wished that this was working,""" start="00:14:02.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""because just before we went live, they said,""" start="00:14:10.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""hey, just have your example working quickly.""" start="00:14:13.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Then I downloaded my example from my blog,""" start="00:14:15.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and I'd double escaped some characters""" start="00:14:19.000" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""so that the escaped characters would show up in my blog.""" start="00:14:22.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""And I caused a lot of rampant chaos.""" start="00:14:26.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""If anyone else has a question.""" start="00:14:29.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Guest has said, but. So. Great.""" start="00:14:32.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I guess I could go back and try it.""" start="00:14:40.760" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I probably should have jumped in a couple of minutes ago""" start="00:14:47.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and just said the live stream did cut over,""" start="00:14:50.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""but we're continuing to record this""" start="00:14:53.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and the whole session will be published""" start="00:14:54.920" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""along with the video on the website.""" start="00:14:57.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Oh, well. Sorry about that. I tried that.""" start="00:14:58.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I just lost a couple of minutes there""" start="00:15:04.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and failed to give you the smooth warning.""" start="00:15:06.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Oh, no, no. That's fine. I was just kind of rambling.""" start="00:15:08.880" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Listen. Don't download a web page""" start="00:15:14.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and try and convert it to an org file on the fly""" start="00:15:16.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and just before you go live somewhere""" start="00:15:19.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""is the kind of moral here.""" start="00:15:21.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""You know, just saying that's pretty graphics, but it's long.""" start="00:15:23.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""She's dropping. See you later. Yeah.""" start="00:15:27.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Let's, let's, let's all get out of here.""" start="00:15:29.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Basically. I'm going to go see""" start="00:15:31.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""if I can look at this ether pad one last time""" start="00:15:32.400" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and see if there are any questions""" start="00:15:36.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""just to not leave anyone else.""" start="00:15:37.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Anyone out much to their chagrin possibly.""" start="00:15:39.360" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Um, how to connect to LambdaMOO, seems great.""" start="00:15:43.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Oh, interesting guides, somebody wrote that.""" start="00:15:47.640" video="qanda-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What do you mean by slowly?""" start="00:15:52.160" video="qanda-commonlisp" id="subtitle"]]</div>[[!template text="""What do you mean by slowly? Yeah, so I'm saying taking""" start="00:15:52.160" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""a simple action every 20 seconds,""" start="00:15:55.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""this still adds up to a lot over time.""" start="00:15:57.280" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Question, do you think that it would be,""" start="00:15:59.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""yeah, well, if you've used Slime,""" start="00:16:01.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and hence you're using Swank,""" start="00:16:04.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""you can just Swank, Eval,""" start="00:16:05.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and Emacs would be the more trivial way.""" start="00:16:07.240" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I felt like I was getting something bonus""" start="00:16:08.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""by using, um, Emacs server.""" start="00:16:10.720" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Somebody has a link to Eduardo's blog,""" start="00:16:13.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""which I think has been misspelled.""" start="00:16:17.360" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""It should be anggtwu with no dot there,""" start="00:16:19.840" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""dot net, sharp sign EEV. (https://anggtwu.net/#eev)""" start="00:16:23.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So, Eduardo is the author of EEV mode.""" start="00:16:27.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I found Eduardo's thing.""" start="00:16:31.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Oh, this was the question, what is the Leonardo system,""" start="00:16:33.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""which I just answered.""" start="00:16:36.200" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""What is LambdaMOO? How do you use it?""" start="00:16:38.480" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""It's a mud, comma, object-oriented.""" start="00:16:42.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""So it's a multi-user dungeon kind of classical video game,""" start="00:16:45.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""still popular, but with extended object-oriented facilities.""" start="00:16:49.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Companies like Harlequin, which yduJ""" start="00:16:52.800" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and Ken Pitman, for example, were at, I think, in the 90s.""" start="00:16:57.360" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Instead of modernly, you'd have Slack web apps or something.""" start="00:17:00.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""People used to have these MOOs and things.""" start="00:17:05.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Okay, the music that's replaced me is evidently quite nice.""" start="00:17:08.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Yes, get the hints. Thanks for being here.""" start="00:17:15.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Well, let's continue this diatribe""" start="00:17:22.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""possibly on the Mastodon or something like that.""" start="00:17:29.360" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""We'll do some kind of...""" start="00:17:33.640" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Let me thank you one more time for preparing this talk""" start="00:17:36.000" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and for all that you do for the Free Software community""" start="00:17:40.520" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and especially for Emacs. particularly appreciate you.""" start="00:17:44.360" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Thank you for all you do for the Free Software community""" start="00:17:47.880" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and particularly Emacs, Corwin and Bruce.""" start="00:17:50.440" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I'm still waiting for a working demo of Dungeon Mode.""" start="00:17:53.320" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""My joke that I was setting up and never had a chance for""" start="00:17:56.080" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""was that I was going to say""" start="00:17:58.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I wanted my agent to be using Dungeon Mode in Emacs.""" start="00:17:59.960" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""How's that? Okay, well, we'll work on that.""" start="00:18:03.600" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""That could be a project for the two of us in our copious free time.""" start="00:18:06.000" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""Definitely. Yeah. Okay. I'll let you go.""" start="00:18:10.120" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""I'm gonna abandon this stream.""" start="00:18:13.560" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""All right. I'll end out the recording""" start="00:18:14.680" video="qanda-commonlisp" id="subtitle"]]
+[[!template text="""and thanks to all who participated. Okay. See you later.""" start="00:18:17.040" video="qanda-commonlisp" 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%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..f0488b0f
--- /dev/null
+++ b/2025/info/commonlisp-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 26-min talk ; Q&A: IRC Etherpad: <https://pad.emacsconf.org/2025-commonlisp>
+Etherpad: <https://pad.emacsconf.org/2025-commonlisp>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<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://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://toobnix.org/videos/watch/0b194054-17d9-4ede-9dad-d1cf1050a117">View on Toobnix</a></li><li><a href="https://youtu.be/hy5i6Qb6fYE">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-commonlisp"><source src="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers.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--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--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-commonlisp" data="""
+00:00.000 Opening
+02:08.240 Q: What do you mean by "the agent is running slowly"?
+03:00.640 Q: Do you think that it would be too hard to add a second way to send commands from Common Lisp to Emacs?
+06:37.760 Q: What is the leonardo system?
+09:27.280 Q: What is LambdaMOO, and how do we use it?
+11:01.340 Q: It seems like you're trying to build a more restrictive Turing test using the input / output logs of an emacs conversation. Is that accurate?
+15:52.160 Q: What do you mean by slowly?
+
+"""]]<div></div>Duration: 18:24 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-commonlisp">Open Etherpad</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--answers--chapters.vtt">Download --answers--chapters.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--answers.json">Download --answers.json</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--answers.m4v">Download --answers.m4v (33MB)</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--answers.tsv">Download --answers.tsv</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--answers.txt">Download --answers.txt</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--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers.webm">Download --answers.webm (32MB)</a></li><li><a href="https://toobnix.org/videos/watch/a3c47c0d-9ad7-4800-adee-bd9c42be727f">View on Toobnix</a></li><li><a href="https://youtu.be/GGpKmWu54K4">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..b8775dd3
--- /dev/null
+++ b/2025/info/commonlisp-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/private-ai">Emacs and private AI: a great match</a>
+Next by track: <a href="/2025/talks/graphics">Modern Emacs/Elisp hardware/software accelerated graphics</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2025/info/completion-after.md b/2025/info/completion-after.md
new file mode 100644
index 00000000..09eb4361
--- /dev/null
+++ b/2025/info/completion-after.md
@@ -0,0 +1,518 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="completion-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Nice to have you here on this talk.""" start="00:00:00.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""This is my second talk this year.""" start="00:00:02.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""First one was on things that I've done to Org Mode.""" start="00:00:04.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Just as a side note, this presentation""" start="00:00:09.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that I'm going to share with you""" start="00:00:13.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""about my work on Corfu and Yasnippet.""" start="00:00:16.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I've prepared that on Org Mode""" start="00:00:19.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and exported that with a work I've been doing""" start="00:00:21.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to the latest exporter.""" start="00:00:25.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Anyhow, what is my talk going to be about?""" start="00:00:26.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""It's going to be about Corfu and Yasnippet,""" start="00:00:31.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which I thought would be difficult to integrate,""" start="00:00:34.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and it was much easier than I thought.""" start="00:00:36.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So just a short outline, my motivation,""" start="00:00:42.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""step-by-step of the things that I've been investigating,""" start="00:00:46.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and some takeaways.""" start="00:00:49.960" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Motivation""" start="00:00:52.516" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So my motivation, yasnippet is old.""" start="00:00:52.516" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So I've tried another. I've tried Tempel""" start="00:00:55.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and other template management packages,""" start="00:00:59.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but it was really not my cup of tea. So mainly why?""" start="00:01:02.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Mainly because I have a nice base of yasnippets""" start="00:01:08.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I have generated for my needs.""" start="00:01:10.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So it's not that I've been importing snippets""" start="00:01:14.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""from packages which are out there.""" start="00:01:17.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""No, they are my snippets. I'm used to them.""" start="00:01:20.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And of course, migration counts as a cost.""" start="00:01:23.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I've been using Company as my completion point function GUI for years,""" start="00:01:26.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but with the time coming in features and so on,""" start="00:01:32.640" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""it was not as easy to set up as I wanted for my needs.""" start="00:01:38.168" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So I had been working,""" start="00:01:44.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I've been playing with Eglot already some time""" start="00:01:47.182" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""for a language server protocol.""" start="00:01:49.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I had read about how easy it was to integrate with Corfu,""" start="00:01:53.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which was really nice, and I had given it a try,""" start="00:01:57.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but I'm using both graphical user interface mode in Emacs""" start="00:02:02.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and text mode,""" start="00:02:10.251" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and for text mode you need corfu-terminal,""" start="00:02:11.001" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which was yet another package that I didn't download.""" start="00:02:13.043" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Well, and I didn't really find a quick way""" start="00:02:16.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to get rid of company to get yasnippet.""" start="00:02:21.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So at the end, when, at the beginning,""" start="00:02:24.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""when I was using Corfu and Eglot,""" start="00:02:26.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I also needed to load company""" start="00:02:30.108" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to have yasnippet support,""" start="00:02:33.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which was really like sort of weird""" start="00:02:35.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because I wanted to get rid of yasnippet.""" start="00:02:37.640" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Anyhow, while I try now, I'm following the mailing list,""" start="00:02:40.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""the development mailing list,""" start="00:02:47.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I got interested when I heard something about""" start="00:02:48.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""TTY child frames being announced for master.""" start="00:02:51.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""That would mean less packages to download""" start="00:02:57.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because I thought I could get rid of Corfu,""" start="00:02:59.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I wanted to try if I could get rid of corfu-terminal""" start="00:03:04.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and run Corfu without that.""" start="00:03:07.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So, there were some hints there in that mailing list""" start="00:03:11.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that made it interesting for me.""" start="00:03:18.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And at the end, I'm also like a &quot;why not try&quot;ing man,""" start="00:03:21.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so I said, let's give it a try.""" start="00:03:26.640" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""My requirements""" start="00:03:29.120" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""My requirements, I'm working always on a new Emacs,""" start="00:03:29.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""a decently new Emacs, normally from master, vanilla,""" start="00:03:33.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""completely vanilla, and I don't have any extras""" start="00:03:36.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""like Doom or things like that.""" start="00:03:41.210" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So I'm only vanilla. And one of the things""" start="00:03:42.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that I don't want is that on this vanilla recent Emacs,""" start="00:03:45.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I don't want a corfu-terminal. I need yasnippet.""" start="00:03:50.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm basically an old man.""" start="00:03:55.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Old dog doesn't do new tricks and snippets must,""" start="00:03:57.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""in my way of working, must be easy and quick to configure,""" start="00:04:02.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and tempel or others that I've seen are not.""" start="00:04:06.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I don't want any reminiscence of company in my setup.""" start="00:04:10.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And of course, don't forget that I've embraced""" start="00:04:13.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""the language protocol implementations and basically Eglot.""" start="00:04:18.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""My main focus now is Python and LaTeX,""" start="00:04:24.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I have pylsp and texlab.""" start="00:04:28.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I don't want to have to stop using them.""" start="00:04:31.720" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Basic setup: corfu + eglot""" start="00:04:37.600" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So basic setup for Corfu and Eglot.""" start="00:04:37.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""You can find it everywhere you look for it.""" start="00:04:40.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""It's really easy.""" start="00:04:43.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And actually, I also do something somehow naughty,""" start="00:04:46.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which is to set this variable,""" start="00:04:51.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""the corfu-auto variable to true,""" start="00:04:53.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""although I know it's not recommended, blah, blah, blah.""" start="00:04:55.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""But I use that because I'm a bit lazy in that.""" start="00:04:58.400" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Looking at completion-at-point functions""" start="00:05:02.960" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So next step was looking at completion at point functions.""" start="00:05:02.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So the information there, if you go through, is scattered""" start="00:05:07.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and sometimes a bit cryptic.""" start="00:05:10.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""At the end I came up with something like the thing""" start="00:05:13.740" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that you see there on the screen.""" start="00:05:16.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""It's a function for yas-completion-at-point.""" start="00:05:18.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I need my list of keywords,""" start="00:05:21.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so that I'm going to be talking later,""" start="00:05:24.640" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I have my bounds, which is normally a word,""" start="00:05:30.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and from that, I get the start and the end""" start="00:05:34.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""of the thing that I want to""" start="00:05:37.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""be my seed for looking and bringing up Corfu,""" start="00:05:40.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and of course, I need some completion properties here.""" start="00:05:47.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""This looked like this is what you need to do,""" start="00:05:52.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but I had to dig quite deep""" start="00:05:55.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to create a yasnippet keyword test""" start="00:05:57.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and to understand the completion props.""" start="00:06:01.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And as an update of what I've been doing in the last weeks,""" start="00:06:04.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I've created a bound of things at point for me""" start="00:06:11.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""with a different thing""" start="00:06:17.607" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that doesn't skip over non-blank characters,""" start="00:06:18.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that only skips over non-blank characters.""" start="00:06:22.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Why? Because 'word was confusing LaTeX,""" start="00:06:25.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because the backslash,""" start="00:06:29.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""like in the example for the teletype text,""" start="00:06:30.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""was not taken into account by 'word.""" start="00:06:35.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So I had to create my own one,""" start="00:06:38.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which was a bounds-of-thing-at-point,""" start="00:06:39.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and then my thing is non-blanks.""" start="00:06:42.120" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Making my own (basic) c-a-p-f for yasnippet: the completion properties""" start="00:06:44.880" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Completion at point properties, what are they?""" start="00:06:44.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""They allow Emacs to know how to handle the information""" start="00:06:51.180" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""for a specific completion time.""" start="00:06:56.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So you normally will have an annotation,""" start="00:06:58.900" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which then can disappear if you use nerd-icons-corfu,""" start="00:07:03.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which is what I'm doing currently,""" start="00:07:08.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but I keep it commented just in case I get tired of Corfu""" start="00:07:11.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I want to have my completion function.""" start="00:07:17.901" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Then the :company-kind is actually not something""" start="00:07:20.001" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that comes from the company package, but does not require.""" start="00:07:24.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And that's going to allow nerd-icons-corfu to identify""" start="00:07:31.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and put the right icon there in the completion list,""" start="00:07:39.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""as you will see in a couple of minutes.""" start="00:07:44.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So it's a snippet key.""" start="00:07:47.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So basically what this is telling you""" start="00:07:50.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""is that this is a snippet keyword.""" start="00:07:52.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""These two lines, either line,""" start="00:07:54.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""tell you that this is a snippet keyword,""" start="00:07:56.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and that it should be added to the other completions""" start="00:08:00.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that you already have in your list.""" start="00:08:05.280" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Getting yas-kw-list right: What do I want?""" start="00:08:10.900" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Problems. Looking... Now, next step,""" start="00:08:10.900" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""once I had the completion props""" start="00:08:15.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which was relatively easy was to go""" start="00:08:18.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and get the keyword list right.""" start="00:08:21.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I've been looking at pre-existing solutions""" start="00:08:24.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""like, for example, how the menu""" start="00:08:27.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""is built in by yasnippet""" start="00:08:29.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and it looked a bit like Mission Impossible,""" start="00:08:32.540" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because the approach by all the things""" start="00:08:34.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that I have seen and I have examined""" start="00:08:40.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""is to get the keys and the names""" start="00:08:43.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and then further process them.""" start="00:08:48.660" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""My take was, do I really need both?""" start="00:08:50.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""At the end, if I use my own snippets,""" start="00:08:55.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm going to be using something""" start="00:08:58.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I would call meaningful keys for them,""" start="00:09:00.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""or at least meaningful for... These keys are meaningful for me,""" start="00:09:02.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I try not to repeat them,""" start="00:09:06.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because it makes little sense to repeat a keyword.""" start="00:09:07.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So why not center everything around the keys only,""" start="00:09:09.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and can that help simplify my code?""" start="00:09:13.920" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Diving in yasnippet""" start="00:09:18.880" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So I started to dive into yasnippet""" start="00:09:18.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I found a lot of useful semi-hidden functions there.""" start="00:09:23.640" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I discovered that getting the list,""" start="00:09:27.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""the list of keys for a given mode was not that difficult.""" start="00:09:30.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And at the end, what I started doing""" start="00:09:34.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""is get all the snippet tables used by a major mode""" start="00:09:40.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and get the lists of the keys that you have in each table.""" start="00:09:43.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Sometimes the list is empty""" start="00:09:48.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so it's going to return a nil and that you have to discard.""" start="00:09:50.376" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""When you're using structured snippets""" start="00:09:54.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""like snippets and submenus and so on""" start="00:09:57.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to get a structured menu.""" start="00:10:02.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""You also get some non-strings that you need to filter out""" start="00:10:06.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""in order to get a workable keyword list.""" start="00:10:09.835" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""At the end of the day, what I had was something like this.""" start="00:10:15.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I have, for a mode, I went through all modes.""" start="00:10:21.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""through all modes associated to that, and then I went,""" start="00:10:29.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I got my results from all the tables that I had""" start="00:10:38.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""for a given time, for a given table.""" start="00:10:42.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So what you do is you get the tables""" start="00:10:45.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that are associated to a mode, because, surprise, surprise,""" start="00:10:48.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""some modes have more than one table.""" start="00:10:53.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And then what you do is you filter out all non strings""" start="00:10:55.959" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""from each of the keys list that you have for each table.""" start="00:11:00.918" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So as you see, it's a 1, 2, 3, 4, 5, 6, 7 liner,""" start="00:11:07.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which was not too much.""" start="00:11:12.380" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""By the way, if someone from Yasnippet is around,""" start="00:11:14.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I sent a pull request to include this""" start="00:11:20.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""as a public function in Yasnipit""" start="00:11:26.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because it might be nice to have it in the package""" start="00:11:29.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""in order to do this kind of things.""" start="00:11:32.320" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Fine-tuning: adding cape""" start="00:11:33.840" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So fine-tuning. Just adding a yas completion""" start="00:11:33.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to the completion point functions was not enough.""" start="00:11:41.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I don't really know,""" start="00:11:44.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but :exclusive no didn't seem to work how I wanted""" start="00:11:46.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so I needed to escape... Sorry. Yeah.""" start="00:11:51.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I was saying I was getting rid of packages,""" start="00:11:54.550" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I had to add one package""" start="00:11:57.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""in order to get a function, which is very, very, nice,""" start="00:12:00.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and which is part of the cape function of the cape package,""" start="00:12:04.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and that's cape-capf-super.""" start="00:12:08.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So at the end, using that, you define an alias,""" start="00:12:12.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which, for that, where you use cape-capf-super""" start="00:12:16.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to have a list of what you want...""" start="00:12:23.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So in this case, for example, for the demo""" start="00:12:25.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm going to make, I'm using yas completion""" start="00:12:29.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and then the elisp-completion-at-point function""" start="00:12:31.420" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""provided by Emacs.""" start="00:12:36.173" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I combine them using cape-capf-super,""" start="00:12:37.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and with that, I create a completion point,""" start="00:12:44.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""a new completion point function which I call cape-lisp-mode,""" start="00:12:47.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and then I add this alias to the completion functions list,""" start="00:12:53.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and with that, it is enough.""" start="00:12:58.520" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Automatic snippet expansion""" start="00:13:03.804" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Snippet expansion.""" start="00:13:03.804" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""If you want to have your snippets expanded automatically,""" start="00:13:05.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""you have to add an exit function to the, I'm sorry,""" start="00:13:13.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to the completion properties.""" start="00:13:28.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Yet another functionality you have to add.""" start="00:13:30.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And to avoid this automatic selection to be too eager,""" start="00:13:34.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""you need to add this setq corfu-on-exact-match to nil""" start="00:13:39.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because otherwise, you will always get the snippet expanded,""" start="00:13:47.974" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""even if you don't want it. Basically, why?""" start="00:13:51.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Basically, because this would be suboptimal""" start="00:13:55.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because the key can appear as part of a variable name.""" start="00:13:57.640" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Themes""" start="00:14:05.360" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Another nice thing, I'm also creating my own themes.""" start="00:14:05.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm trying to have very sleek themes""" start="00:14:10.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that only cover the modes that I use""" start="00:14:13.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and for that I have my own theme creator fork""" start="00:14:16.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""from the original theme creator.""" start="00:14:22.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""In my personal fork that I'm running at home,""" start="00:14:26.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I only have the faces for the modes I use.""" start="00:14:29.293" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I don't want to overload the thing""" start="00:14:33.860" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""with too much different things.""" start="00:14:38.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Looking at this, I really didn't need, as you will see now,""" start="00:14:41.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I don't need to add anything to my themes,""" start="00:14:46.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because the default faces for Corfu""" start="00:14:50.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""adapt quite well to most of the themes.""" start="00:14:53.280" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""My check-list""" start="00:14:58.320" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So if I go back to my checklist,""" start="00:14:58.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""decently new Emacs, yes,""" start="00:15:01.479" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""compiled. The one you'll see""" start="00:15:02.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""in the demo I'm doing is a master""" start="00:15:06.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""compiled the day before yesterday""" start="00:15:09.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I don't need corfu-terminal there.""" start="00:15:12.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I need yasnippet,""" start="00:15:15.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and you're going to see that in a second""" start="00:15:16.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""with a couple of snippets that I can expand here.""" start="00:15:20.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I don't want any reminiscence of a company in my setup,""" start="00:15:24.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and there's none. Well, actually, :company-kind is there""" start="00:15:27.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""you see the company there,""" start="00:15:32.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but it isn't defined by company strictly speaking,""" start="00:15:33.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and for... I don't want... I need Eglot integration""" start="00:15:39.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which I will also be showing you.""" start="00:15:44.680" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Takeaways""" start="00:15:48.584" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Takeaways from all this,""" start="00:15:48.584" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""if you accept the extra burden""" start="00:15:50.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""of corfu-terminal for Emacs 30 or earlier Emacs 30s,""" start="00:15:55.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""it's not too difficult to get this set up running.""" start="00:16:02.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Corfu was easier to integrate and configure than Company,""" start="00:16:07.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and it's much lighter in terms""" start="00:16:11.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""of number of lines, et cetera. I learned a lot.""" start="00:16:13.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Well, actually, yes, with the help of Cape,""" start="00:16:20.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but it is much lighter and much easier""" start="00:16:25.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to integrate and configure.""" start="00:16:27.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I've learned a lot about computational functions in the process,""" start="00:16:30.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which is, something that is always nice to learn new things""" start="00:16:34.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and the nerd-icons-corfu makes the...""" start="00:16:40.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""at least, at this point in time... I might get tired of it,""" start="00:16:45.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but at this point in time, it makes""" start="00:16:48.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""a very nice overall look and feel for Emacs.""" start="00:16:50.400" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Requests (to whom it may concern)""" start="00:16:58.040" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Requests (to whom it may concern): cape has nice features""" start="00:16:58.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that maybe could make their way into emacs.""" start="00:17:02.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm thinking basically about""" start="00:17:06.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""this super cape functionality""" start="00:17:08.065" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which is very nice, and overcomes the problem of linking,""" start="00:17:12.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and this :exclusive and all this kind of things""" start="00:17:18.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that we have currently in Corfu""" start="00:17:22.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""with the completion-at-point functions.""" start="00:17:26.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Corfu is also really nice to have, and it's not too big.""" start="00:17:28.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So is there any possibility""" start="00:17:32.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that it makes its way into Emacs?""" start="00:17:35.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Please keep yasnippet alive.""" start="00:17:40.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm not saying here that my pull request should be there,""" start="00:17:42.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but it would be nice if someone took a look""" start="00:17:48.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and made it part of Yasnippet.""" start="00:17:51.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And P.S., currently on master,""" start="00:17:57.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""there's a lot of semantic highlighting going on,""" start="00:18:01.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which is very, very nice. No criticism on that.""" start="00:18:04.293" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""But you may need to add to your snippet hook""" start="00:18:07.126" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""this simple local value for elisp-fontify-semantically,""" start="00:18:12.418" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""because at least in my case, I felt that""" start="00:18:25.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""the faces were a bit too pushy,""" start="00:18:30.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so I had to make the snippet mode""" start="00:18:32.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""use the old Emacs Lisp fontification.""" start="00:18:37.334" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""This would be my talk.""" start="00:18:43.580" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Any initial reactions to this? There's a question here.""" start="00:18:46.280" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Did you try yasnippet-capf? If so, what did you miss from it that this approach has? Thanks! https://github\.com/elken/yasnippet-capf""" start="00:18:55.000" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Someone asked, did you try yasnippet-capf?""" start="00:18:55.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""If so, what did you miss from this approach? I tried that.""" start="00:18:59.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And it's not that I missed anything.""" start="00:19:05.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""It was more or less that I wanted to do it myself.""" start="00:19:11.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So I wanted to see what was behind it. That's my answer.""" start="00:19:15.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""There are lots of packages there,""" start="00:19:24.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but I try to keep learning. So, this was a nice objective""" start="00:19:26.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""to learn a bit more about Emacs. And now, just a second.""" start="00:19:31.720" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""A small demo""" start="00:19:40.160" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Now, a small demo. This is the interaction.""" start="00:19:40.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And as you see, I have the snippet there.""" start="00:19:44.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I have a couple of snippets.""" start="00:19:47.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So, for example, if I would like to say""" start="00:19:52.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I want to define a function, I can go like this.""" start="00:19:55.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And what you see here is that""" start="00:19:58.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I have two snippets appearing and then some variables.""" start="00:20:00.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So, I could go for defun or if I want a key map, for def-keymap,""" start="00:20:04.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which would be something like this.""" start="00:20:09.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And then when I press enter, I get directly into the map""" start="00:20:11.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I could say like, show off map.""" start="00:20:18.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Then it sets out directly a :prefix t,""" start="00:20:26.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which is something that I asked for in Emacs master.""" start="00:20:30.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So with :prefix t, for those who prefix it true,""" start="00:20:35.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""for those who don't know it,""" start="00:20:39.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""it makes integrating this into keymaps""" start="00:20:41.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""in use-package much easier.""" start="00:20:49.043" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So the next thing would be,""" start="00:20:52.126" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I would like to write a description,""" start="00:20:54.168" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""like, for example, a cool show-off keymap,""" start="00:20:56.501" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and then my keys are my functions, and that would be it.""" start="00:21:05.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Of course, you also have like this define function.""" start="00:21:08.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And of course you can say, that's nice,""" start="00:21:15.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but you're not showing the integration""" start="00:21:21.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""with Eglot, and you're right.""" start="00:21:23.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So I'm going just to open up a small program""" start="00:21:25.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that I'm currently developing in Python.""" start="00:21:30.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""This is a tool to do things in MP3.""" start="00:21:33.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And here I would have, like, all these things.""" start="00:21:38.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""As you see here in the bottom,""" start="00:21:42.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""server is running, file is local, eglot is active.""" start="00:21:45.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So I have my eglot stop and then I go down.""" start="00:21:49.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And I want to add a new argument here.""" start="00:21:57.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I would go like for it. I would go like add flag.""" start="00:22:00.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""For example, I would add a flag""" start="00:22:08.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I would get a new flag to add here.""" start="00:22:13.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Oops. Of course, this is integrated into Eglot,""" start="00:22:27.860" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so I'm getting your information about what I have.""" start="00:22:33.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I could... I don't have os, so I would need to import here,""" start="00:22:42.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but I can go up just to see...""" start="00:22:52.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""If I would like to, for example,""" start="00:22:59.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""create a new regular expression,""" start="00:23:01.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm getting this information that you see right now on call.""" start="00:23:11.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm getting that from Eglot.""" start="00:23:15.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So you see there's the integration""" start="00:23:17.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""with Eglot too in Python.""" start="00:23:18.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I have Eglot, and as you've seen""" start="00:23:20.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I also have the... and all these are snippets. Fine.""" start="00:23:23.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""More reactions and questions?""" start="00:23:30.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Because that would be my show off here.""" start="00:23:38.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Any questions? Any more questions on the pad?""" start="00:23:54.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but anyhow I'm going to try,""" start="00:24:09.380" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm going to try yasnippet too""" start="00:24:11.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I'm going to be answering this question more""" start="00:24:13.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""yeah time is good okay fine""" start="00:24:16.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so I would be done if there's no more reactions...""" start="00:24:21.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Thank you so much. You're welcome.""" start="00:24:30.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""If you have any other questions, folks,""" start="00:24:33.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""you can always follow up on the pad.""" start="00:24:34.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""That was a great demonstration, and I'm sure lots of people""" start="00:24:37.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""are looking forward to trying it out.""" start="00:24:39.640" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Oh, I see some questions coming in now.""" start="00:24:43.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""You may go ahead if you like.""" start="00:24:45.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Okay, fine. There's someone asking:""" start="00:24:46.200" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do special characters in yasnippets work well too? example &lt;FD ?""" start="00:24:51.880" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Do special characters in your snippets work well too?""" start="00:24:51.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""what kind of... I don't use special characters in the key name,""" start="00:24:57.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so in this case everything works quite nicely,""" start="00:25:02.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and then I'm passing, I'm passing the control to yasnippet,""" start="00:25:05.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so if there's any problem in yasnippet""" start="00:25:11.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""with special characters,""" start="00:25:13.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that, I don't know. I don't use that as a key.""" start="00:25:15.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm just using for key names.""" start="00:25:24.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I normally use a... I only use letters, but that should work.""" start="00:25:30.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I mean, let's, uh, let's give it a trial.""" start="00:25:38.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Let's kill here. Yes. I don't want, I don't want to touch this.""" start="00:25:43.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Ugh. Let's go into this one.""" start="00:25:58.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Let's say I'm going to define this, for example, like this,""" start="00:26:01.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I'm going to create a new snippet.""" start="00:26:06.959" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm going to create a new snippet""" start="00:26:10.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and use this. For example, when you look at this,""" start="00:26:15.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""if you have the new way of the new Emacs""" start="00:26:18.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""semantical highlighting working,""" start="00:26:31.043" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""this would be quite cramped. This is why I'm using,""" start="00:26:37.668" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""this is why I said the snippet, the...""" start="00:26:40.626" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So is this more or less what you're talking about?""" start="00:26:44.900" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""This is what you're talking about. Snippet. Save the snippet.""" start="00:26:55.140" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Snippet, load and put window.""" start="00:27:12.580" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Enable interaction mode. Yes, I'm going to save.""" start="00:27:15.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And I'm going to save that as fd test in the file.""" start="00:27:21.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""No, I'm going to save this. Load. Load input window.""" start="00:27:31.060" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm going to put this in Emacs Lisp mode. I want to save it. No.""" start="00:27:41.480" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm going to write that directly into Emacs Lisp mode.""" start="00:27:53.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Going to go back into scratch buffer,""" start="00:28:27.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and here I have it. We have it here. But anyhow...""" start="00:28:30.640" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And I'm just going to try to see, if I feel like...""" start="00:28:43.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Empty? Of course, there's only one.""" start="00:28:46.935" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""It will not show in Corfu.""" start="00:28:52.664" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""but I mean, I don't have any problems""" start="00:28:58.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""with that, as you see. Was that what you were meaning?""" start="00:29:01.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Yeah, I guess that works. Fine.""" start="00:29:21.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""All right, shall we wrap up here""" start="00:29:24.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so that you can have supper""" start="00:29:29.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and have lunch and other things? Okay, fine for me.""" start="00:29:31.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I was hoping to see the drop down. Just a second.""" start="00:29:40.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I think we can do that too. Two seconds.""" start="00:29:46.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""How can we do that with a drop down?""" start="00:29:49.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Yeah, if I say something like this.""" start="00:29:52.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And then I go and save it.""" start="00:29:57.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And I'm going to go and write this""" start="00:30:04.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""into, with a second, fine.""" start="00:30:08.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And now I need to quit here, sorry.""" start="00:30:16.720" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And I'm going to come back in a second with another remark.""" start="00:30:18.180" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Well, I'm bringing back and now let's see.""" start="00:30:26.640" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Let's see what we have in yasnippet.""" start="00:30:31.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""It's not there. Why not? Just a second. Let's see if I go.""" start="00:30:34.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I don't know if it matters that the name was""" start="00:30:44.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""that didn't have the characters in the beginning.""" start="00:30:47.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Just a second. I think I know what is happening here.""" start="00:30:52.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Do I have them? I'm going to clean.""" start="00:31:05.700" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Sacha]: Oh, you're back in your home directories is why.""" start="00:31:21.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""cd - to get back in.""" start="00:31:28.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Yeah. That's right.""" start="00:31:35.005" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So you see how the name also has...""" start="00:31:35.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""it doesn't have the same as the keys.""" start="00:31:37.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I don't know if that affects what shows up.""" start="00:31:39.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Pedro]: Yeah, we we can try that.""" start="00:31:41.040" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""That's a quick one. This is my...""" start="00:31:44.881" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Fine, now that I have this,""" start="00:31:50.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which is going to be quicker, we check again.""" start="00:31:51.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""They both seem to be the same now""" start="00:31:55.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I don't know if that affects, but anyhow, let's try it.""" start="00:31:57.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I go and then I look at the yasnippet, if it's there.""" start="00:32:03.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""Yes, it is.""" start="00:32:07.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Sacha]: Yeah, it's there.""" start="00:32:09.957" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Pedro]: And then if I say there, there you are. Oh, look at that.""" start="00:32:11.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""It doesn't seem to be affecting.""" start="00:32:18.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Sacha]: Fantastic.""" start="00:32:22.168" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Pedro]: And by the way, it is there.""" start="00:32:24.160" video="mainVideo-completion" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Emacs Lisp""" start="00:32:32.120" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""[Sacha]: Yeah, I really should spend time""" start="00:32:32.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""getting more templates set up with yasnippet.""" start="00:32:34.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I really love the fact that""" start="00:32:36.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""you can evaluate Emacs Lisp in it too.""" start="00:32:37.640" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Pedro]: Yeah, I mean, just to make it bigger,""" start="00:32:40.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""try that because if I go into my, for example,""" start="00:32:43.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""into my org mode stuff""" start="00:32:51.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and in my org mode, I go to the article,""" start="00:32:55.680" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which is one of the big ones.""" start="00:32:59.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I have things like, for example,""" start="00:33:03.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I defined a couple of functions here to do if it's empty,""" start="00:33:05.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""if that is empty, just add a white space.""" start="00:33:09.200" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""If one is empty, add a white space.""" start="00:33:16.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""add a white space here so it becomes a comment.""" start="00:33:19.600" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I have functions to do more things on that,""" start="00:33:23.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and I also have menus to see""" start="00:33:27.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""what language I want to choose for""" start="00:33:29.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""my spell checking and so on.""" start="00:33:31.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And that's all... As you see,""" start="00:33:33.251" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""this is Lisp being evaluated.""" start="00:33:35.481" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So yes, do. I really encourage you""" start="00:33:39.418" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Sacha]: I've also heard people use it,""" start="00:33:45.120" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""like, especially if they're working""" start="00:33:46.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""in different programming languages,""" start="00:33:47.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""so they can just have the syntax""" start="00:33:49.920" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""for the different languages""" start="00:33:52.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""be condensed into a consistent abbreviation.""" start="00:33:54.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Pedro]: Yeah. And look, this is my article. I have another.""" start="00:33:58.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""This is when I'm writing articles. I have another one.""" start="00:34:01.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I have another one for writing letters""" start="00:34:07.800" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""in org mode and so on. So, it's like letter, block,""" start="00:34:10.280" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and you have the complete infrastructure""" start="00:34:14.400" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and you don't have to type it by hand.""" start="00:34:16.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So, it's really, really nice.""" start="00:34:20.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Sacha]: Hmm, I think it might be nice to have""" start="00:34:22.880" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""a future Emacs carnival, you know,""" start="00:34:25.960" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""shared blogging theme thing be around""" start="00:34:28.080" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""having people share their snippets.""" start="00:34:31.240" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Pedro]: Yasnippets and other things. Like for example,""" start="00:34:33.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""this is something stupid.""" start="00:34:39.360" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm switching my themes. All right.""" start="00:34:41.320" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""And of course, there you see,""" start="00:34:44.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I have also, this is also with,""" start="00:34:48.640" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""this is my way of switching buffers,""" start="00:34:51.440" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""which is with the shift control and tab,""" start="00:34:55.793" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I can switch different families""" start="00:34:58.160" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""and then when I'm in a family,""" start="00:35:00.560" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I can go and switch with control tab between the different,""" start="00:35:02.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm using tab line by the way. I'm not using the other one.""" start="00:35:07.000" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I'm using the old plain tab line with my themes.""" start="00:35:13.660" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So that's more or less everything.""" start="00:35:20.840" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Sacha]: Thank you for the peek into your workflow.""" start="00:35:23.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I will work on getting the recordings for the live talks""" start="00:35:26.520" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""sorted out at some point very soon.""" start="00:35:30.760" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""I might even be able to get them out next week.""" start="00:35:34.459" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""So thanks again. All right. Have a nice supper.""" start="00:35:37.085" video="mainVideo-completion" id="subtitle"]]
+[[!template text="""[Pedro]: Same to you.""" start="00:35:43.668" video="mainVideo-completion" id="subtitle"]]
+
+</div>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..e878def5
--- /dev/null
+++ b/2025/info/completion-before.md
@@ -0,0 +1,33 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 37-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-completion>
+Etherpad: <https://pad.emacsconf.org/2025-completion>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<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--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--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-completion" data="""
+00:00.000 Introduction
+00:52.516 Motivation
+03:29.120 My requirements
+04:37.600 Basic setup: corfu + eglot
+05:02.960 Looking at completion-at-point functions
+06:44.880 Making my own (basic) c-a-p-f for yasnippet: the completion properties
+08:10.900 Getting yas-kw-list right: What do I want?
+09:18.880 Diving in yasnippet
+11:33.840 Fine-tuning: adding cape
+13:03.804 Automatic snippet expansion
+14:05.360 Themes
+14:58.320 My check-list
+15:48.584 Takeaways
+16:58.040 Requests (to whom it may concern)
+18:55.000 Q: Did you try yasnippet-capf? If so, what did you miss from it that this approach has? Thanks! https://github.com/elken/yasnippet-capf
+19:40.160 A small demo
+24:51.880 Q: Do special characters in yasnippets work well too? example &lt;FD ?
+32:32.120 Emacs Lisp
+
+"""]]<div></div>Duration: 36:04 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/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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.m4v">Download --main.m4v (95MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.opus">Download --main.opus (5.2MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.webm">Download --main.webm (79MB)</a></li><li><a href="https://toobnix.org/videos/watch/5da3b360-0752-4594-8d64-1613a07f6164">View on Toobnix</a></li><li><a href="https://youtu.be/NtxoiRdp2qc">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/completion-nav.md b/2025/info/completion-nav.md
new file mode 100644
index 00000000..2305904c
--- /dev/null
+++ b/2025/info/completion-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/weights">Weightlifting tracking with Emacs on Android</a>
+Next by track: <a href="/2025/talks/zettelkasten">Zettelkasten for regular Emacs hackers</a>
+Track: <span class="sched-track General">General</span>
+</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..2326981f
--- /dev/null
+++ b/2025/info/gardening-before.md
@@ -0,0 +1,25 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!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>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<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://toobnix.org/videos/watch/ae150d45-a014-4b7d-a344-7cf5c70d5abe">View on Toobnix</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..fc9f5c26
--- /dev/null
+++ b/2025/info/gardening-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/hyperboleqa">Questions and answers to help you fly with Hyperbole</a>
+Next by track: <a href="/2025/talks/bookclub-tapas">Bookclub tapas</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2025/info/gmail-after.md b/2025/info/gmail-after.md
new file mode 100644
index 00000000..9668bdee
--- /dev/null
+++ b/2025/info/gmail-after.md
@@ -0,0 +1,765 @@
+<!-- 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><div class="transcript transcript-qanda"><a name="gmail-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Feedback: Consider using similar background (dark-only / light-only) throughout to help with eye strain\.""" start="00:00:00.000" video="qanda-gmail" id="subtitle"]]</div>[[!template text="""I first of all want to address the feedback.""" start="00:00:00.000" video="qanda-gmail" id="subtitle"]]
+[[!template text="""You're absolutely right. I should have stuck to one theme.""" start="00:00:02.220" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Unfortunately, I was using vanilla Emacs""" start="00:00:06.100" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and not my own config.""" start="00:00:09.100" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So to show that it can work, apologies for that.""" start="00:00:10.300" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I will keep that in mind the next time I do such a demo.""" start="00:00:13.460" video="qanda-gmail" id="subtitle"]]
+[[!template text="""The first question, I mean, the feedback was considered""" start="00:00:18.420" video="qanda-gmail" id="subtitle"]]
+[[!template text="""using similar background, dark only""" start="00:00:21.540" video="qanda-gmail" id="subtitle"]]
+[[!template text="""or light only throughout""" start="00:00:23.820" video="qanda-gmail" id="subtitle"]]
+[[!template text="""to help with eye strain.""" start="00:00:25.420" video="qanda-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Should I know all my contact's email addresses by heart? Or is some kind of contact list?""" start="00:00:29.860" video="qanda-gmail" id="subtitle"]]</div>[[!template text="""The question, the first question is,""" start="00:00:29.860" video="qanda-gmail" id="subtitle"]]
+[[!template text="""should I know all my contact email address by heart""" start="00:00:31.820" video="qanda-gmail" id="subtitle"]]
+[[!template text="""or is some kind of contact list?""" start="00:00:35.420" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Unfortunately, right now, this is just to get started.""" start="00:00:38.500" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So it is, you have to know it by heart,""" start="00:00:42.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""but I take this as feedback.""" start="00:00:45.860" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I will write this down for myself as a feature request.""" start="00:00:47.620" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I will make sure that all contacts""" start="00:00:51.340" video="qanda-gmail" id="subtitle"]]
+[[!template text="""or some kind of tab support is present for email addresses.""" start="00:00:53.780" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I do not use the Org system for replying so much.""" start="00:00:58.420" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I use it for knowing the context.""" start="00:01:03.660" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So I don't really reply using the org mode itself to reply.""" start="00:01:06.260" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So I did not focus on that feature. But this is doable.""" start="00:01:12.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""We can certainly add a tab support""" start="00:01:16.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""for any contacts that you may have, org-contacts.""" start="00:01:18.740" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Or I don't know if there's any other package that does that.""" start="00:01:24.620" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So if it is, let me know.""" start="00:01:28.060" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Org contacts is what comes to my mind.""" start="00:01:29.700" video="qanda-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What would it take to use the org pieces of this with, e\.g\., offlineimap or other non-Gmail mail setups?""" start="00:01:33.900" video="qanda-gmail" id="subtitle"]]</div>[[!template text="""The second question is: &quot;What would it take""" start="00:01:33.900" video="qanda-gmail" id="subtitle"]]
+[[!template text="""to use the Org pieces of this with""" start="00:01:36.740" video="qanda-gmail" id="subtitle"]]
+[[!template text="""OfflineIMAP or other non-Gmail mail setups?""" start="00:01:40.140" video="qanda-gmail" id="subtitle"]]
+[[!template text="""(I use Fastmail.)&quot;""" start="00:01:45.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Currently, I use only Gmail because that's my workflow""" start="00:01:46.060" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and it works with a Gmail API,""" start="00:01:52.780" video="qanda-gmail" id="subtitle"]]
+[[!template text="""which means the Python script that goes along with it""" start="00:01:58.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""only works with Gmail and no other system for now.""" start="00:02:00.860" video="qanda-gmail" id="subtitle"]]
+[[!template text="""This is the current package.""" start="00:02:05.180" video="qanda-gmail" id="subtitle"]]
+[[!template text="""However, yes, I will note this down.""" start="00:02:06.940" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I don't know what it will take""" start="00:02:09.460" video="qanda-gmail" id="subtitle"]]
+[[!template text="""to include this OfflineIMAP setup""" start="00:02:12.060" video="qanda-gmail" id="subtitle"]]
+[[!template text="""or any other non-Gmail setup.""" start="00:02:16.380" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Let me tinker with it and find out what it will involve.""" start="00:02:18.500" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So give me some time, maybe I will get to it.""" start="00:02:23.140" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Sorry, sorry. Oops. Okay. Okay. May I continue?""" start="00:02:30.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Hi, Bala. Yes, please. Sorry for the confusion.""" start="00:02:43.740" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Hi, Amin. All right.""" start="00:02:46.740" video="qanda-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you worry about sending some info to a wrong person? Due to some unseen technical issues, for example, due to memory overflow\.""" start="00:02:50.764" video="qanda-gmail" id="subtitle"]]</div>[[!template text="""So the next one is,""" start="00:02:50.764" video="qanda-gmail" id="subtitle"]]
+[[!template text="""do you worry about sending some info to a wrong person""" start="00:02:53.180" video="qanda-gmail" id="subtitle"]]
+[[!template text="""due to some unseen technical issues,""" start="00:02:56.940" video="qanda-gmail" id="subtitle"]]
+[[!template text="""for example, due to memory overflow?""" start="00:02:58.900" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Again, I have not been focusing""" start="00:03:03.300" video="qanda-gmail" id="subtitle"]]
+[[!template text="""on replying from within Emacs.""" start="00:03:05.740" video="qanda-gmail" id="subtitle"]]
+[[!template text="""so much, or using my package,""" start="00:03:07.140" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I usually do it through the Gmail interface.""" start="00:03:09.660" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I usually use this to get the context within the project,""" start="00:03:13.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""download all the emails, make sure that I have acted on emails""" start="00:03:18.300" video="qanda-gmail" id="subtitle"]]
+[[!template text="""which Gmail doesn't do so well.""" start="00:03:22.060" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I don't know what the action is.""" start="00:03:23.860" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I don't want to use Gmail as a to-do list.""" start="00:03:25.100" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Org Mode is great at this.""" start="00:03:28.500" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Any work I have to do, any reports I have to compile,""" start="00:03:30.147" video="qanda-gmail" id="subtitle"]]
+[[!template text="""all of that Org Mode does. I don't use it for replying""" start="00:03:32.647" video="qanda-gmail" id="subtitle"]]
+[[!template text="""or doing its actions around the email, which I focus on.""" start="00:03:39.100" video="qanda-gmail" id="subtitle"]]
+[[!template text="""But point taken, let me see""" start="00:03:43.460" video="qanda-gmail" id="subtitle"]]
+[[!template text="""if there is a like Gmail offers.""" start="00:03:45.860" video="qanda-gmail" id="subtitle"]]
+[[!template text="""you know, for 10 seconds or something you can still undo""" start="00:03:47.780" video="qanda-gmail" id="subtitle"]]
+[[!template text="""so that it doesn't go out of your email""" start="00:03:52.220" video="qanda-gmail" id="subtitle"]]
+[[!template text="""if you made a mistake or if there's a problem with your,""" start="00:03:54.740" video="qanda-gmail" id="subtitle"]]
+[[!template text="""you know, Gmail or email sending should sort of stop.""" start="00:03:59.660" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Let me think about that.""" start="00:04:04.620" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So, I've not paid attention to that,""" start="00:04:07.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""but I'll take your point.""" start="00:04:09.397" video="qanda-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Comment: You should say what org-gmail is and is not, goals and non goals "which in this case is more helpful" to help people get their head around this\.""" start="00:04:11.105" video="qanda-gmail" id="subtitle"]]</div>[[!template text="""The next one, you should say what org-gmail is""" start="00:04:11.105" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and not its goals and non-goals,""" start="00:04:17.540" video="qanda-gmail" id="subtitle"]]
+[[!template text="""which in this case is more helpful""" start="00:04:20.220" video="qanda-gmail" id="subtitle"]]
+[[!template text="""to help people get their head around this.""" start="00:04:22.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""You had some good ones in your slides,""" start="00:04:24.740" video="qanda-gmail" id="subtitle"]]
+[[!template text="""but not your GitHub page. Okay, great.""" start="00:04:26.380" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Okay, so I will definitely take""" start="00:04:28.860" video="qanda-gmail" id="subtitle"]]
+[[!template text="""the information from the slides""" start="00:04:30.580" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and give it to, I mean, put it back into my README.""" start="00:04:33.780" video="qanda-gmail" id="subtitle"]]
+[[!template text="""It's been a while since I updated README,""" start="00:04:38.500" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and you're absolutely right.""" start="00:04:40.180" video="qanda-gmail" id="subtitle"]]
+[[!template text="""It probably doesn't say why you need org email.""" start="00:04:42.180" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So that would be definitely something that I can do.""" start="00:04:45.780" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Wanting to add the goal is an easier way""" start="00:04:49.060" video="qanda-gmail" id="subtitle"]]
+[[!template text="""to add one-off email into org mode""" start="00:04:51.660" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and org agenda workflows and first.""" start="00:04:53.820" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Love seeing a different way""" start="00:04:56.420" video="qanda-gmail" id="subtitle"]]
+[[!template text="""of looking at and working with email.""" start="00:04:57.780" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Thank you so much for that.""" start="00:04:59.540" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Yes, that's the idea here is if we can integrate email""" start="00:05:00.660" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and I think there is memacs, you know,""" start="00:05:05.620" video="qanda-gmail" id="subtitle"]]
+[[!template text="""that's one package that I love.""" start="00:05:08.340" video="qanda-gmail" id="subtitle"]]
+[[!template text="""It can integrate all of the other stuff into your org mode.""" start="00:05:11.580" video="qanda-gmail" id="subtitle"]]
+[[!template text="""That worked, but I like email and dealing with email.""" start="00:05:17.100" video="qanda-gmail" id="subtitle"]]
+[[!template text="""That is my single source of truth outside of org mode.""" start="00:05:21.540" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So that's the only one I need for now.""" start="00:05:26.100" video="qanda-gmail" id="subtitle"]]
+[[!template text="""And I like seeing the action""" start="00:05:28.820" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and the history on my org agenda.""" start="00:05:32.660" video="qanda-gmail" id="subtitle"]]
+[[!template text="""That's one of the reasons why I built this package.""" start="00:05:35.100" video="qanda-gmail" id="subtitle"]]
+[[!template text="""And I hope that answers that.""" start="00:05:37.260" video="qanda-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How does it handle attachments? If it doesn't, do you have a plan to add this feature?""" start="00:05:43.700" video="qanda-gmail" id="subtitle"]]</div>[[!template text="""There is one more saying, how does it handle attachments?""" start="00:05:43.700" video="qanda-gmail" id="subtitle"]]
+[[!template text="""If it doesn't, do you have a plan to add this feature?""" start="00:05:49.460" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Attachments is a bit tricky for me right now""" start="00:05:52.820" video="qanda-gmail" id="subtitle"]]
+[[!template text="""because I don't understand org-attach so well.""" start="00:05:55.860" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I don't use org-attach, but you're absolutely right.""" start="00:05:58.620" video="qanda-gmail" id="subtitle"]]
+[[!template text="""It does make sense to have org-attach also.""" start="00:06:01.300" video="qanda-gmail" id="subtitle"]]
+[[!template text="""And it's definitely in my plan to include org-attach.""" start="00:06:05.340" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I don't think I talked about it in my talk,""" start="00:06:08.260" video="qanda-gmail" id="subtitle"]]
+[[!template text="""but I definitely have that idea.""" start="00:06:12.460" video="qanda-gmail" id="subtitle"]]
+[[!template text="""First I have to wrap myself, my head""" start="00:06:14.740" video="qanda-gmail" id="subtitle"]]
+[[!template text="""around the idea of org-attach and how it,""" start="00:06:17.340" video="qanda-gmail" id="subtitle"]]
+[[!template text="""because I don't like, what I don't like about org-attach,""" start="00:06:21.340" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I'll tell you, is default is,""" start="00:06:26.060" video="qanda-gmail" id="subtitle"]]
+[[!template text="""it opens a new folder called data""" start="00:06:28.900" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and there are, it uses a unique code""" start="00:06:31.700" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and there are subfolders in it, which I do not appreciate""" start="00:06:34.380" video="qanda-gmail" id="subtitle"]]
+[[!template text="""because I want all those files also to be within the same context.""" start="00:06:37.860" video="qanda-gmail" id="subtitle"]]
+[[!template text="""of my project or area.""" start="00:06:43.660" video="qanda-gmail" id="subtitle"]]
+[[!template text="""And that's one of the reasons I, and I'm sure you can customize that.""" start="00:06:45.780" video="qanda-gmail" id="subtitle"]]
+[[!template text="""There are ways to do that,""" start="00:06:50.860" video="qanda-gmail" id="subtitle"]]
+[[!template text="""but I have to pay more attention to this.""" start="00:06:52.100" video="qanda-gmail" id="subtitle"]]
+[[!template text="""Right now, all of the attachments are dealt with in Gmail,""" start="00:06:55.380" video="qanda-gmail" id="subtitle"]]
+[[!template text="""which is not a good system to handle that""" start="00:06:58.730" video="qanda-gmail" id="subtitle"]]
+[[!template text="""because it's so out of context.""" start="00:07:01.220" video="qanda-gmail" id="subtitle"]]
+[[!template text="""And there are like 25 contexts in the same inbox,""" start="00:07:03.580" video="qanda-gmail" id="subtitle"]]
+[[!template text="""which I do not appreciate.""" start="00:07:06.380" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So even the attachments are like that.""" start="00:07:08.420" video="qanda-gmail" id="subtitle"]]
+[[!template text="""But Org Mode has a much better way of handling it,""" start="00:07:11.060" video="qanda-gmail" id="subtitle"]]
+[[!template text="""or Emacs has a much better way of handling it.""" start="00:07:13.540" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I will definitely put my attention""" start="00:07:16.100" video="qanda-gmail" id="subtitle"]]
+[[!template text="""to this and get this feature out.""" start="00:07:20.340" video="qanda-gmail" id="subtitle"]]
+[[!template text="""This is all customer feedback for me, so to speak.""" start="00:07:22.220" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So I would definitely request all of you to try it out.""" start="00:07:25.300" video="qanda-gmail" id="subtitle"]]
+[[!template text="""And tell me, you know, good""" start="00:07:30.180" video="qanda-gmail" id="subtitle"]]
+[[!template text="""or bad things about the package.""" start="00:07:32.180" video="qanda-gmail" id="subtitle"]]
+[[!template text="""And you've been very candid so far. Please be so.""" start="00:07:34.940" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So, you know, so be it that be candid with your feedback""" start="00:07:38.620" video="qanda-gmail" id="subtitle"]]
+[[!template text="""and I will get to know how to go with this.""" start="00:07:43.540" video="qanda-gmail" id="subtitle"]]
+[[!template text="""With so much, I mean, I'm not an expert in Elisp,""" start="00:07:46.700" video="qanda-gmail" id="subtitle"]]
+[[!template text="""but I have a workaround, which is I have generative AI support,""" start="00:07:49.700" video="qanda-gmail" id="subtitle"]]
+[[!template text="""which has done well with me.""" start="00:07:57.020" video="qanda-gmail" id="subtitle"]]
+[[!template text="""I test the software better, so I can use the generative AI""" start="00:07:58.340" video="qanda-gmail" id="subtitle"]]
+[[!template text="""to help me with the coding,""" start="00:08:03.660" video="qanda-gmail" id="subtitle"]]
+[[!template text="""but I can test it so that it works for me.""" start="00:08:05.140" video="qanda-gmail" id="subtitle"]]
+[[!template text="""And I would request your help""" start="00:08:08.540" video="qanda-gmail" id="subtitle"]]
+[[!template text="""also in testing this software.""" start="00:08:10.740" video="qanda-gmail" id="subtitle"]]
+[[!template text="""So for sure. Thank you so much for your question.""" start="00:08:13.260" video="qanda-gmail" id="subtitle"]]
+[[!template text="""If there are any more, I can definitely answer them.""" start="00:08:16.180" video="qanda-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..fde21f06
--- /dev/null
+++ b/2025/info/gmail-before.md
@@ -0,0 +1,54 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 24-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-gmail>
+Etherpad: <https://pad.emacsconf.org/2025-gmail>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<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/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://toobnix.org/videos/watch/254af947-bb60-493b-bb72-dea055703c9e">View on Toobnix</a></li><li><a href="https://youtu.be/8P93UBYrUB8">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-gmail"><source src="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.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--answers.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--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-gmail" data="""
+00:00.000 Feedback: Consider using similar background (dark-only / light-only) throughout to help with eye strain.
+00:29.860 Q: Should I know all my contact's email addresses by heart? Or is some kind of contact list?
+01:33.900 Q: What would it take to use the org pieces of this with, e.g., offlineimap or other non-Gmail mail setups?
+02:50.764 Q: Do you worry about sending some info to a wrong person? Due to some unseen technical issues, for example, due to memory overflow.
+04:11.105 Comment: You should say what org-gmail is and is not, goals and non goals "which in this case is more helpful" to help people get their head around this.
+05:43.700 Q: How does it handle attachments? If it doesn't, do you have a plan to add this feature?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-gmail-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.opus"></audio></div><div></div>Duration: 08:21 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/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers--chapters.vtt">Download --answers--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--answers.json">Download --answers.json</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--answers.m4v">Download --answers.m4v (43MB)</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--answers.opus">Download --answers.opus (7.3MB)</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--answers.tsv">Download --answers.tsv</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--answers.txt">Download --answers.txt</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--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.webm">Download --answers.webm (18MB)</a></li><li><a href="">View on Toobnix</a></li><li><a href="https://youtu.be/vjkQ9kJUR44">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..57a28521
--- /dev/null
+++ b/2025/info/gmail-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/reference">Emacs as a fully-fledged reference manager</a>
+Next by track: <a href="/2025/talks/gnus">Reading and writing emails in GNU Emacs with Gnus</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2025/info/gnus-after.md b/2025/info/gnus-after.md
new file mode 100644
index 00000000..f9658316
--- /dev/null
+++ b/2025/info/gnus-after.md
@@ -0,0 +1,801 @@
+<!-- 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
+
+<div class="transcript transcript-qanda"><a name="gnus-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I noticed that it took a considerable amount of time to send email\. Is it possible to configure gnus to use an external smtp client to send emails?""" start="00:00:00.000" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""Okay, so first question.""" start="00:00:00.000" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I noticed that it took considerable amount of time to send email.""" start="00:00:02.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Is it possible to configure to use an external SMTP client""" start="00:00:05.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to send emails? Right, yes, it definitely is possible.""" start="00:00:09.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""In fact, in the past, I've used, I believe, MSMTP,""" start="00:00:14.358" video="qanda-gnus" id="subtitle"]]
+[[!template text="""which is a small SMTP implementation""" start="00:00:18.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that's independent of Emacs. So you can do that.""" start="00:00:23.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""It's also possible to, pointed""" start="00:00:27.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to have it use the sendmail binary on your system.""" start="00:00:30.758" video="qanda-gnus" id="subtitle"]]
+[[!template text="""If you have a local MTA mail transfer agents""" start="00:00:34.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""like Exim or Postfix installed and configure.""" start="00:00:41.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I believe that should also dispatch""" start="00:00:46.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and return instantaneously""" start="00:00:50.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and then have Postfix or Exim""" start="00:00:51.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""deal with sending the message on their terms""" start="00:00:55.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""without blocking Emacs. I don't know, it depends.""" start="00:00:57.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Normally it's not always that slow. Sometimes it is.""" start="00:01:02.198" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I think it also depends on the load on your mail server.""" start="00:01:04.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Sometimes it's instantaneous, sometimes not.""" start="00:01:11.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So I hope that helps.""" start="00:01:14.918" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is the dovecot workaround actually a solution?""" start="00:01:17.838" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""Let's see, is the Dovecot workaround""" start="00:01:17.838" video="qanda-gnus" id="subtitle"]]
+[[!template text="""actually a solution?""" start="00:01:20.598" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I haven't tried it, but if it works smoothly,""" start="00:01:21.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I'll surely do so. It is, it really is.""" start="00:01:24.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I've actually been using that setup for many years.""" start="00:01:27.478" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I can't remember. Oh, I believe it's Eric Abramson""" start="00:01:31.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""who first shared instructions on how to set this up.""" start="00:01:45.838" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Let's see if I can find it. There we go. Yeah, this is it.""" start="00:01:49.078" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I'll share this on IRC as well.""" start="00:02:04.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah, so Dovecot is very, very efficient.""" start="00:02:06.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""It's written in C. And yeah, when you point Gnus""" start="00:02:15.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to an IMAP server like Dovecot,""" start="00:02:21.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""dealing with email is pretty instantaneous.""" start="00:02:23.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""This article or post by Eric is great.""" start="00:02:25.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Although I will say that""" start="00:02:29.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""there was a recent major release of Dovecot.""" start="00:02:32.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I can't remember if it's 2.4 or 2.5.""" start="00:02:34.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and it's a breaking change.""" start="00:02:37.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""They change a lot of the configuration syntax,""" start="00:02:39.598" video="qanda-gnus" id="subtitle"]]
+[[!template text="""so there's a high likelihood""" start="00:02:42.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that this drop-in configuration won't work,""" start="00:02:44.078" video="qanda-gnus" id="subtitle"]]
+[[!template text="""even though that's what I used""" start="00:02:47.478" video="qanda-gnus" id="subtitle"]]
+[[!template text="""as my starting point a couple years ago.""" start="00:02:49.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I will be writing an article on my personal site""" start="00:02:51.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to go over how to configure recent versions of Dovecot""" start="00:02:56.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""for such a setup, for a local setup.""" start="00:03:02.718" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you have experience with mu4e or Notmuch, and why would you say Gnus is worth using compared to these?""" start="00:03:07.118" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""Let's see. Do you have experience with Mu4e or not much?""" start="00:03:07.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And why would you say Gnus is worth using compared to these?""" start="00:03:15.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I do have experience with these,""" start="00:03:22.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""although it goes back many years,""" start="00:03:23.838" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and I'm sure both of these have evolved since,""" start="00:03:25.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and they're great pieces of software in their own rights.""" start="00:03:27.758" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And actually I did use them in that order.""" start="00:03:31.838" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Like I first tried Mu4e in Emacs,""" start="00:03:33.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""when I started using email in Emacs,""" start="00:03:37.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""then I tried Notmuch for a while, and then I went to Gnus.""" start="00:03:40.278" video="qanda-gnus" id="subtitle"]]
+[[!template text="""They're great. They have like pros and cons.""" start="00:03:44.278" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Mu4e, I believe, has""" start="00:03:51.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""excellent maildir handling directly,""" start="00:03:52.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""if I'm not mistaken, unlike Gnus,""" start="00:03:55.358" video="qanda-gnus" id="subtitle"]]
+[[!template text="""so you can point it directly""" start="00:03:58.358" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to your maildirs locally,""" start="00:04:00.838" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and it should work fine,""" start="00:04:03.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""if I'm remembering correctly.""" start="00:04:06.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""NotMuch is also excellent.""" start="00:04:08.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""The thing with Notmuch""" start="00:04:11.478" video="qanda-gnus" id="subtitle"]]
+[[!template text="""is that it uses Xapien""" start="00:04:12.478" video="qanda-gnus" id="subtitle"]]
+[[!template text="""for indexing and searching email.""" start="00:04:13.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""It's tag-based, so you can tag messages.""" start="00:04:17.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And then, yeah, it's amazing""" start="00:04:20.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""for tagging and searching capabilities,""" start="00:04:24.078" video="qanda-gnus" id="subtitle"]]
+[[!template text="""very powerful search features.""" start="00:04:26.198" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And my reason for trying Gnus""" start="00:04:28.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and then, I don't know, eventually""" start="00:04:31.678" video="qanda-gnus" id="subtitle"]]
+[[!template text="""liking it was couple of years ago,""" start="00:04:33.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I went through this kind of phase""" start="00:04:37.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""of trying and trying to like use""" start="00:04:38.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and stick with packages""" start="00:04:40.598" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that are built into GNU Emacs""" start="00:04:43.358" video="qanda-gnus" id="subtitle"]]
+[[!template text="""as much as possible.""" start="00:04:45.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""No particular reason that I would like,""" start="00:04:47.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""you know, recommend people do that per se,""" start="00:04:51.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""but yeah, that's just what I wanted to do.""" start="00:04:54.198" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Cause I noticed my configurations""" start="00:04:57.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""were like growing unwieldy.""" start="00:05:00.598" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So I, like many others declared, Emacs in its bankruptcy,""" start="00:05:02.278" video="qanda-gnus" id="subtitle"]]
+[[!template text="""in its file bankruptcy, and configure things from scratch""" start="00:05:07.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and try to use whatever that Emacs had to offer""" start="00:05:11.678" video="qanda-gnus" id="subtitle"]]
+[[!template text="""built in itself, and then only reach for a couple""" start="00:05:15.718" video="qanda-gnus" id="subtitle"]]
+[[!template text="""of external packages here and there.""" start="00:05:18.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So that's what I went to. That's how I ended up on Gnu's.""" start="00:05:20.278" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And it's been very nice.""" start="00:05:24.718" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I've tried a few other email clients""" start="00:05:26.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""since then, temporarily,""" start="00:05:29.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""like I tried AERC, A-E-R-C,""" start="00:05:31.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""which is not built into Emacs,""" start="00:05:33.198" video="qanda-gnus" id="subtitle"]]
+[[!template text="""but I don't know,""" start="00:05:36.198" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I keep coming back to Gnus.""" start="00:05:36.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""It's great to have it all, to be able to do all these things""" start="00:05:38.198" video="qanda-gnus" id="subtitle"]]
+[[!template text="""from within GNU Emacs. Let's see, some notes and feedback.""" start="00:05:42.758" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Thank you for all the kind words folks, appreciate it.""" start="00:05:47.678" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I'm glad that you found the presentation helpful""" start="00:05:52.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""or somewhat useful. Let's see, new question.""" start="00:05:56.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Oh, and I will check IRC as well.""" start="00:05:59.158" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: At my organization, we're forced to use OAuth with outlook and they've also blacklisted all email clients except thunderbird (but they don't support it, only the webmail or the outlook app)\. Do you know if this is something that can be circumvented in Gnus?""" start="00:06:05.320" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""Let's see, at my organization,""" start="00:06:05.320" video="qanda-gnus" id="subtitle"]]
+[[!template text="""we're forced to use OAuth with Outlook,""" start="00:06:06.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and they've also blacklisted""" start="00:06:09.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""all email clients except Thunderbird,""" start="00:06:11.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""but they don't support it,""" start="00:06:13.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""only the Webmail or the Outlook app.""" start="00:06:15.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Do you know if this is something""" start="00:06:17.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that can be circumvented in Gnus? Let's see.""" start="00:06:18.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So if I'm pretty sure, at least with the recent Emacs versions,""" start="00:06:23.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Gnus does support xOAuth as a backend.""" start="00:06:29.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So I think you should be able to do that""" start="00:06:37.678" video="qanda-gnus" id="subtitle"]]
+[[!template text="""even with just the things, the machinery built into Emacs.""" start="00:06:41.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Even so, I think there are external packages and programs.""" start="00:06:45.678" video="qanda-gnus" id="subtitle"]]
+[[!template text="""One of them I think comes from this Cyrus IMAP world""" start="00:06:53.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""of things that implement like XOAuth.""" start="00:06:58.718" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So you should be able to do that.""" start="00:07:02.358" video="qanda-gnus" id="subtitle"]]
+[[!template text="""You should be able to use that to get authenticated""" start="00:07:04.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to your organization's mail server.""" start="00:07:09.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""But I've never tried that myself.""" start="00:07:12.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""In terms of like blacklisting all email clients,""" start="00:07:15.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I don't know how they would do it outside of, you know,""" start="00:07:22.838" video="qanda-gnus" id="subtitle"]]
+[[!template text="""this kind of authentication thingy.""" start="00:07:27.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""If, you know, they check""" start="00:07:29.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""the user agent header or something,""" start="00:07:32.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that's pretty easy to customize and set.""" start="00:07:34.640" video="qanda-gnus" id="subtitle"]]
+[[!template text="""With Gnus, you can set, define a posting style""" start="00:07:37.280" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to set a custom user agent.""" start="00:07:40.880" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So, yeah, that's as far as I know.""" start="00:07:43.280" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Thunderbird is pretty nice too.""" start="00:07:48.720" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Like I reach out for it sometimes""" start="00:07:50.080" video="qanda-gnus" id="subtitle"]]
+[[!template text="""when I'm in a rush or can't,""" start="00:07:54.160" video="qanda-gnus" id="subtitle"]]
+[[!template text="""don't have the time to like set up Gnus with""" start="00:07:55.800" video="qanda-gnus" id="subtitle"]]
+[[!template text="""like some new like IMAP server or something.""" start="00:08:00.160" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I reach for it sometimes, but yeah,""" start="00:08:04.040" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I primarily use Gnus. I see.""" start="00:08:05.520" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So the question says they tried it""" start="00:08:10.360" video="qanda-gnus" id="subtitle"]]
+[[!template text="""with not much and it never worked.""" start="00:08:11.720" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Even KML on Android didn't work.""" start="00:08:13.280" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Right. Yeah, I'm not sure.""" start="00:08:20.000" video="qanda-gnus" id="subtitle"]]
+[[!template text="""If you can like provide maybe more details""" start="00:08:23.520" video="qanda-gnus" id="subtitle"]]
+[[!template text="""as to like what doesn't work""" start="00:08:27.040" video="qanda-gnus" id="subtitle"]]
+[[!template text="""or if you get any particular error messages""" start="00:08:29.320" video="qanda-gnus" id="subtitle"]]
+[[!template text="""or like how they're trying to like prevent you from using it,""" start="00:08:32.080" video="qanda-gnus" id="subtitle"]]
+[[!template text="""then maybe folks could have some ideas""" start="00:08:37.360" video="qanda-gnus" id="subtitle"]]
+[[!template text="""of maybe how to get around that.""" start="00:08:38.440" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah. Let's see, I'm going to go""" start="00:08:42.000" video="qanda-gnus" id="subtitle"]]
+[[!template text="""over and take a look at IRC. Yes, scoring is great.""" start="00:08:46.000" video="qanda-gnus" id="subtitle"]]
+[[!template text="""In it for bankruptcy,""" start="00:08:59.960" video="qanda-gnus" id="subtitle"]]
+[[!template text="""they have mail to use outlook from Gnus, right?""" start="00:09:02.960" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah, there are various like solutions and workarounds.""" start="00:09:06.560" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah, let's see. How's the schedule looking?""" start="00:09:12.000" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I think the next talk""" start="00:09:23.520" video="qanda-gnus" id="subtitle"]]
+[[!template text="""is gonna start pretty soon, if I'm not mistaken.""" start="00:09:24.520" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah, so I believe that's about all the time""" start="00:09:30.520" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that we have on the stream for the Q&A,""" start="00:09:34.280" video="qanda-gnus" id="subtitle"]]
+[[!template text="""but of course I'll hang around here on big blue button""" start="00:09:36.800" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and IRC for a while if folks would like to ask more questions.""" start="00:09:40.760" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And also feel free to email me,""" start="00:09:45.280" video="qanda-gnus" id="subtitle"]]
+[[!template text="""bandali@gnu.org""" start="00:09:47.280" video="qanda-gnus" id="subtitle"]]
+[[!template text="""or at kelar.org with any questions.""" start="00:09:49.100" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Thanks again for the kind words folks, appreciate it.""" start="00:10:31.540" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah, I myself also wish""" start="00:10:35.720" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that there were like some tutorials or something""" start="00:10:38.400" video="qanda-gnus" id="subtitle"]]
+[[!template text="""when I was getting started with Gnus,""" start="00:10:41.320" video="qanda-gnus" id="subtitle"]]
+[[!template text="""but we didn't have that. So, and I've been meaning""" start="00:10:43.680" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to like record a talk like this for years for EmacsConf,""" start="00:10:46.120" video="qanda-gnus" id="subtitle"]]
+[[!template text="""but yeah, funnily enough, after like 10 years of,""" start="00:10:50.000" video="qanda-gnus" id="subtitle"]]
+[[!template text="""at my 10th anniversary""" start="00:10:53.040" video="qanda-gnus" id="subtitle"]]
+[[!template text="""of being involved with the conference,""" start="00:10:54.920" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I finally put together a talk of my own""" start="00:10:55.880" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to talk about configuring Gnus.""" start="00:10:58.000" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Let's see. Oh, I see, I see.""" start="00:11:08.200" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So the organization is doing some kind of check""" start="00:11:25.960" video="qanda-gnus" id="subtitle"]]
+[[!template text="""during setting up of OAuth.""" start="00:11:29.720" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So I think how that works is""" start="00:11:41.240" video="qanda-gnus" id="subtitle"]]
+[[!template text="""sometimes these email clients,""" start="00:11:45.640" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I think at least this is the case for Gmail or something,""" start="00:11:47.400" video="qanda-gnus" id="subtitle"]]
+[[!template text="""where a project such as Thunderbird""" start="00:11:50.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""needs to apply for some kind of token""" start="00:11:55.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to be able to authenticate""" start="00:12:00.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and connect its users to a mail server.""" start="00:12:02.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So all I will say is""" start="00:12:05.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that Thunderbird is free software""" start="00:12:10.198" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and the sources are available""" start="00:12:12.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and you might be able to find""" start="00:12:13.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""the token that they use and yeah.""" start="00:12:15.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Right, so yeah, I'm just reading this comment here.""" start="00:12:19.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""You're very welcome again.""" start="00:13:13.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I hope you find it useful in some way.""" start="00:13:16.078" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Comment: Liked how I started with a clean setup""" start="00:13:18.798" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""So they say that they like the fact""" start="00:13:18.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that I started with a clean setup and built from that.""" start="00:13:21.598" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Reading and writing emails in Emacs""" start="00:13:25.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""is definitely not straightforward.""" start="00:13:27.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And I find it frustrating""" start="00:13:28.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that there are so many pieces to put together""" start="00:13:30.358" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and a bunch of documentation to read.""" start="00:13:32.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And they admit that they find Gnus overwhelming.""" start="00:13:34.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I sympathize and empathize.""" start="00:13:39.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I've been in that very same situation.""" start="00:13:42.758" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And yeah, it's totally okay to feel like that.""" start="00:13:45.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I mean, email itself is kind of complex,""" start="00:13:50.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""even on the server side.""" start="00:13:55.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""If you've ever looked or have been interested""" start="00:13:57.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""in self-hosting your email,""" start="00:14:00.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""you know that there are so many moving parts and pieces.""" start="00:14:02.678" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So yeah, I hope that this short video""" start="00:14:06.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""can be a useful first step""" start="00:14:14.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""of getting you set up to""" start="00:14:18.278" video="qanda-gnus" id="subtitle"]]
+[[!template text="""at least be able to read your emails""" start="00:14:19.758" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and compose and send them within Emacs""" start="00:14:22.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""so that you can see that it's possible""" start="00:14:26.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and get that positive feedback loop going""" start="00:14:30.838" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and get the encouragement and then go from there.""" start="00:14:34.838" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah, Gnus is most definitely very extensible.""" start="00:14:41.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""It already has a lot of backends built into GNU Emacs,""" start="00:15:06.598" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and there are other ones""" start="00:15:10.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that people have written externally""" start="00:15:12.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""on various code hosting forges""" start="00:15:14.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that you can download and set up. Yeah, thank you all.""" start="00:15:18.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""It's nice to see that the talk""" start="00:15:27.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""has kind of resonated with so many folks.""" start="00:15:30.718" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And, yeah, it is encouragement""" start="00:15:33.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""for me to finally get around to starting""" start="00:15:41.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""perhaps either a tutorial series""" start="00:15:44.198" video="qanda-gnus" id="subtitle"]]
+[[!template text="""or like a video series like this""" start="00:15:47.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""concretely showing and walking through""" start="00:15:50.478" video="qanda-gnus" id="subtitle"]]
+[[!template text="""how to like set up and configure these different aspects.""" start="00:15:54.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""There were so many other things that I wanted to show,""" start="00:15:57.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""but didn't have the time""" start="00:16:00.278" video="qanda-gnus" id="subtitle"]]
+[[!template text="""or couldn't squeeze it into""" start="00:16:04.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""the 15, 20 minute format for the conference.""" start="00:16:06.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah. I'm going to hang out here for a few more minutes.""" start="00:16:09.038" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Comment: They would have liked to see a quick demo of Gnus while it is fully configured and tweaked""" start="00:17:34.660" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""Another comment, they would have liked""" start="00:17:34.660" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to see a quick demo of Gnus""" start="00:17:36.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""while it is fully configured and tweaked.""" start="00:17:38.718" video="qanda-gnus" id="subtitle"]]
+[[!template text="""That's kind of a teaser.""" start="00:17:41.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I can definitely do that sometime after the conference.""" start="00:17:43.358" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Truth be told, I don't customize the looks of it heavily.""" start="00:17:52.358" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I use the default layout""" start="00:17:59.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""for the summary and article buffers.""" start="00:18:01.758" video="qanda-gnus" id="subtitle"]]
+[[!template text="""With Gnus, you can even reconfigure that""" start="00:18:03.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to arrange these in your preferred location or layout.""" start="00:18:12.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I don't really do any of that.""" start="00:18:15.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""For the most part, my setup is pretty simple.""" start="00:18:18.718" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""My init file""" start="00:18:22.798" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""I can actually maybe show my init file here. Let's see.""" start="00:18:22.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah, so this is, I guess, part of my Gnus configuration.""" start="00:18:27.758" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I configure a couple of mail servers,""" start="00:18:58.718" video="qanda-gnus" id="subtitle"]]
+[[!template text="""set up these expiry targets""" start="00:19:01.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""so that I can hit capital E on a message""" start="00:19:04.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and then have it be archived. You can have it be immediate.""" start="00:19:07.598" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I do that for work messages""" start="00:19:12.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""or you can use the default seven day,""" start="00:19:15.478" video="qanda-gnus" id="subtitle"]]
+[[!template text="""where if a message is older than seven days,""" start="00:19:17.678" video="qanda-gnus" id="subtitle"]]
+[[!template text="""like once it reaches that age""" start="00:19:21.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and it's been marked as expired and it'll be moved into,""" start="00:19:23.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""like for example, this yearly archive directory,""" start="00:19:26.358" video="qanda-gnus" id="subtitle"]]
+[[!template text="""like archive. For example, 2025.""" start="00:19:29.598" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Mail splitting""" start="00:19:34.080" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""Yeah, you can do like mail splitting,""" start="00:19:34.080" video="qanda-gnus" id="subtitle"]]
+[[!template text="""automatically filing email.""" start="00:19:35.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""The fancy splitting is the more powerful variant.""" start="00:19:38.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""You can use like all kinds of regular expressions""" start="00:19:44.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and move email around depending on""" start="00:19:46.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""what field or what header""" start="00:19:48.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""matches what regular expression.""" start="00:19:50.878" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Gnus parameters""" start="00:19:52.638" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""What else? Gnus has things,""" start="00:19:52.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""has a facility like Gnus parameters""" start="00:20:00.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""for configuring individual groups or directories.""" start="00:20:03.478" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Like if you file all the mailing or the mails""" start="00:20:07.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""for a particular mailing list into a certain group.""" start="00:20:11.478" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And for example, if they add""" start="00:20:15.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""the name of the mailing list""" start="00:20:20.238" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to the, subject header.""" start="00:20:22.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""They prefix the subject header with the name of the list.""" start="00:20:26.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""You can set that here""" start="00:20:28.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and Gnus will automatically""" start="00:20:30.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""hide that for you. So, let's see.""" start="00:20:32.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""There's a news agent,""" start="00:20:39.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""which I won't even get into because it's a rabbit hole.""" start="00:20:54.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""It's pretty cool. Definitely check it out.""" start="00:20:58.918" video="qanda-gnus" id="subtitle"]]
+[[!template text="""You can define what MIME parts should be buttonized""" start="00:21:01.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""so that you can like easily toggle them""" start="00:21:07.518" video="qanda-gnus" id="subtitle"]]
+[[!template text="""when displaying the article.""" start="00:21:09.278" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Yeah, you can customize the list""" start="00:21:11.078" video="qanda-gnus" id="subtitle"]]
+[[!template text="""of the headers that are displayed and the order of them.""" start="00:21:14.838" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Like I showed in the sample init file that I provided.""" start="00:21:17.598" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Gnus can integrate with Dired.""" start="00:21:22.998" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Custom signatures""" start="00:21:31.020" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""You can set like custom signatures like here.""" start="00:21:31.020" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I might define something""" start="00:21:35.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and then I use it later in the posting,""" start="00:21:37.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""in the posting, the news posting styles variable.""" start="00:21:44.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I set a signature to that. Yeah.""" start="00:21:48.518" video="qanda-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Other customizations""" start="00:22:05.020" video="qanda-gnus" id="subtitle"]]</div>[[!template text="""You can write custom like functions to move email around.""" start="00:22:05.020" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So I have this like Gnus chunk article function""" start="00:22:09.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that I bind to v s,""" start="00:22:13.920" video="qanda-gnus" id="subtitle"]]
+[[!template text="""so v is the prefix came up that I defined,""" start="00:22:19.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""and then s, so you can do things like that.""" start="00:22:22.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""You can customize the format of the topic lines,""" start="00:22:29.758" video="qanda-gnus" id="subtitle"]]
+[[!template text="""so if I actually launch Gnus with my own configuration,""" start="00:22:34.198" video="qanda-gnus" id="subtitle"]]
+[[!template text="""this is how it might look like, so.""" start="00:22:39.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""You can define archive decoders""" start="00:22:43.398" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to let you like automatically decode""" start="00:22:58.438" video="qanda-gnus" id="subtitle"]]
+[[!template text="""inside the Gnus article buffer,""" start="00:23:02.318" video="qanda-gnus" id="subtitle"]]
+[[!template text="""how to extract certain archive formats.""" start="00:23:04.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Like for example, I defined this one for Gzip.""" start="00:23:10.158" video="qanda-gnus" id="subtitle"]]
+[[!template text="""You can set like discouraged alternatives""" start="00:23:13.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""to like, for example, hide HTML email by default,""" start="00:23:18.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""especially if there is a plain text version. I do that.""" start="00:23:22.078" video="qanda-gnus" id="subtitle"]]
+[[!template text="""GNU says machinery around like encrypting emails.""" start="00:23:26.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""It has a bunch of customizations.""" start="00:23:34.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""that you can configure and have Gnus behave a certain way.""" start="00:23:41.760" video="qanda-gnus" id="subtitle"]]
+[[!template text="""For example, when replying to signed or encrypted emails.""" start="00:23:44.798" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And yeah. Anyway. That's about it.""" start="00:23:48.638" video="qanda-gnus" id="subtitle"]]
+[[!template text="""So yeah, thanks again for hanging out with me, folks.""" start="00:24:01.958" video="qanda-gnus" id="subtitle"]]
+[[!template text="""I appreciate all the kind words.""" start="00:24:04.558" video="qanda-gnus" id="subtitle"]]
+[[!template text="""comments and yeah, I'm also""" start="00:24:08.878" video="qanda-gnus" id="subtitle"]]
+[[!template text="""looking forward to trying and putting together""" start="00:24:13.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""more videos or articles about Gnus.""" start="00:24:17.038" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Definitely one about configuring Dovecot for local mail.""" start="00:24:21.998" video="qanda-gnus" id="subtitle"]]
+[[!template text="""And yeah, take it from there. Thanks again.""" start="00:24:28.118" video="qanda-gnus" id="subtitle"]]
+[[!template text="""Hope you enjoy the rest of the conference.""" start="00:24:31.158" video="qanda-gnus" id="subtitle"]]
+
+</div>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..429d0a81
--- /dev/null
+++ b/2025/info/gnus-before.md
@@ -0,0 +1,50 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 22-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-gnus>
+Etherpad: <https://pad.emacsconf.org/2025-gnus>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<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/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://toobnix.org/videos/watch/5479ce14-5021-4619-b703-bccda7327806">View on Toobnix</a></li><li><a href="https://youtu.be/0Pu8oqdsSig">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-gnus"><source src="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.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--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--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-gnus" data="""
+00:00.000 Q: I noticed that it took a considerable amount of time to send email. Is it possible to configure gnus to use an external smtp client to send emails?
+01:17.838 Q: Is the dovecot workaround actually a solution?
+03:07.118 Q: Do you have experience with mu4e or Notmuch, and why would you say Gnus is worth using compared to these?
+06:05.320 Q: At my organization, we're forced to use OAuth with outlook and they've also blacklisted all email clients except thunderbird (but they don't support it, only the webmail or the outlook app). Do you know if this is something that can be circumvented in Gnus?
+13:18.798 Comment: Liked how I started with a clean setup
+17:34.660 Comment: They would have liked to see a quick demo of Gnus while it is fully configured and tweaked
+18:22.798 My init file
+19:34.080 Mail splitting
+19:52.638 Gnus parameters
+21:31.020 Custom signatures
+22:05.020 Other customizations
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-gnus-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.opus"></audio></div><div></div>Duration: 24:33 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/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers--chapters.vtt">Download --answers--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--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.m4v">Download --answers.m4v (62MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.opus">Download --answers.opus (21MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.txt">Download --answers.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--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.webm">Download --answers.webm (58MB)</a></li><li><a href="">View on Toobnix</a></li><li><a href="https://youtu.be/iu0iqBd9qSo">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..bc14240a
--- /dev/null
+++ b/2025/info/gnus-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/gmail">org-gmail: A deep integration of Gmail into your Org Mode</a>
+Next by track: <a href="/2025/talks/latex">LaTeX export in org-mode: the overhaul</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2025/info/graphics-after.md b/2025/info/graphics-after.md
new file mode 100644
index 00000000..526fa59d
--- /dev/null
+++ b/2025/info/graphics-after.md
@@ -0,0 +1,43 @@
+<!-- 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 narration. ]""" start="00:00:00.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""space box intro (elisp model matrix pipeline c dynamic module)""" start="00:00:05.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""space box intro (elisp model matrix pipeline c dynamic module)""" start="00:00:05.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""parallel (sdl/linux multicore pthreads)""" start="00:01:59.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""parallel (sdl/linux multicore pthreads)""" start="00:01:59.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""bad snake (oop eieio)""" start="00:02:04.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""bad snake (oop eieio)""" start="00:02:04.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""solar (ecs)""" start="00:03:30.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""solar (ecs)""" start="00:03:30.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""60 fps 1 (opengl cpu)""" start="00:04:32.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""60 fps 1 (opengl cpu)""" start="00:04:32.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""earth (grid ascii)""" start="00:05:36.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""earth (grid ascii)""" start="00:05:36.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""studio (image unicode)""" start="00:06:02.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""studio (image unicode)""" start="00:06:02.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""60 fps 2 (gpu)""" start="00:09:32.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""60 fps 2 (gpu)""" start="00:09:32.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""rgb triangle (glsl vertex/fragment shaders)""" start="00:11:57.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""rgb triangle (glsl vertex/fragment shaders)""" start="00:11:57.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""ansi cube (software functional shader)""" start="00:13:09.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""ansi cube (software functional shader)""" start="00:13:09.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""horizon (gradient)""" start="00:13:33.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""horizon (gradient)""" start="00:13:33.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""shell color table (zsh)""" start="00:15:16.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""shell color table (zsh)""" start="00:15:16.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""luki-lisp (macros)""" start="00:16:13.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""luki-lisp (macros)""" start="00:16:13.000" video="mainVideo-graphics" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""incal & rave dave outro (debug text triangles)""" start="00:18:25.000" video="mainVideo-graphics" id="subtitle"]]</div>[[!template text="""incal & rave dave outro (debug text triangles)""" start="00:18:25.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..6f3cd416
--- /dev/null
+++ b/2025/info/graphics-before.md
@@ -0,0 +1,29 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 23-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-graphics>
+Etherpad: <https://pad.emacsconf.org/2025-graphics>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<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 />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--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-graphics" data="""
+00:05.000 space box intro (elisp model matrix pipeline c dynamic module)
+01:59.000 parallel (sdl/linux multicore pthreads)
+02:04.000 bad snake (oop eieio)
+03:30.000 solar (ecs)
+04:32.000 60 fps 1 (opengl cpu)
+05:36.000 earth (grid ascii)
+06:02.000 studio (image unicode)
+09:32.000 60 fps 2 (gpu)
+11:57.000 rgb triangle (glsl vertex/fragment shaders)
+13:09.000 ansi cube (software functional shader)
+13:33.000 horizon (gradient)
+15:16.000 shell color table (zsh)
+16:13.000 luki-lisp (macros)
+18:25.000 incal & rave dave outro (debug text triangles)
+
+"""]]<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/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--chapters.vtt">Download --main--chapters.vtt</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://toobnix.org/videos/watch/be8c63a5-56da-44b7-a308-77ad85885c6e">View on Toobnix</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..51e5bd7b
--- /dev/null
+++ b/2025/info/graphics-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/commonlisp">Common Lisp images communicating like-a-human through shared Emacs slime and eev</a>
+Next by track: <a href="/2025/talks/sat-close">Saturday closing remarks / open session</a>
+Track: <span class="sched-track Development">Development</span>
+</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..e3374b3c
--- /dev/null
+++ b/2025/info/greader-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 5-min talk ; Q&A: IRC Etherpad: <https://pad.emacsconf.org/2025-greader>
+Etherpad: <https://pad.emacsconf.org/2025-greader>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<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://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://toobnix.org/videos/watch/6db316ed-b237-4773-a42e-a42be62af2bc">View on Toobnix</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..90ccb361
--- /dev/null
+++ b/2025/info/greader-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/blee-lcnt">Blee-LCNT: An Emacs-centered content production and self-publication framework</a>
+Next by track: <a href="/2025/talks/open-mic">Open session</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2025/info/hyperboleqa-after.md b/2025/info/hyperboleqa-after.md
new file mode 100644
index 00000000..9304899b
--- /dev/null
+++ b/2025/info/hyperboleqa-after.md
@@ -0,0 +1,786 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="hyperboleqa-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+[[!template text="""All right, you're good to go. Are people here?""" start="00:00:00.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me read the first question to you since I'm here.""" start="00:00:12.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I'm excited to know opinion on current state of using MCP and AI for PKM and PIEs\. Since they do carry lot of burden out of us and ease lot of process\. How does hyperbole stand with coming days?""" start="00:00:15.640" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""The first question here is,""" start="00:00:15.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I'm excited to know opinion and current state""" start="00:00:17.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""of using MCP and AI for PKMs and PIEs.""" start="00:00:20.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Since they do carry a lot of burden out of us, it means a lot of process.""" start="00:00:23.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""How does our pipeline stand with the coming days?""" start="00:00:28.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Thanks for the question.""" start="00:00:33.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""AI is obviously on everybody's mind.""" start="00:00:35.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""We haven't done a lot of integration""" start="00:00:40.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with any of the popular AI engines,""" start="00:00:43.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but I think as you'll see through this Q&A session,""" start="00:00:47.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Hyperbole's function is really to interlink""" start="00:00:50.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""your information everywhere throughout Emacs.""" start="00:00:54.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And so, whether you're using a chatbot""" start="00:00:57.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""in a specific buffer,""" start="00:01:02.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you can use hyperbole implicit links, implicit buttons""" start="00:01:04.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to activate different actions there as well.""" start="00:01:11.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So sometimes it takes a bit of customization,""" start="00:01:17.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""a small amount of two to seven lines of code to do that.""" start="00:01:20.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""As we get to working with more of these engines,""" start="00:01:26.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""we'll build that into the core part of Hyperbole.""" start="00:01:30.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But right now, that's left as an extension""" start="00:01:34.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""for users who are heavily using MCP""" start="00:01:40.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or other protocols right now.""" start="00:01:43.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""We have, for example, integrated""" start="00:01:45.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with LSPs, you know, for coding and have that interface through xref""" start="00:01:50.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and basically using the single key, the action key,""" start="00:01:57.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which is made a return.""" start="00:02:01.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can jump around to any of your source definitions""" start="00:02:02.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""from any reference in almost any language""" start="00:02:07.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that anybody uses today. So you can extrapolate from that""" start="00:02:11.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""how that might work with AI as well.""" start="00:02:14.876" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And I think you'll see later when we talk about HyWiki""" start="00:02:17.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that we're now enabling just just wiki words""" start="00:02:23.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to be buttons in hyperbole.""" start="00:02:26.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So those could be part of your chat with an AI""" start="00:02:30.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you just click on it and you jump right to all your references""" start="00:02:34.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""associated with that terminology. Thanks for the question.""" start="00:02:37.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Should I just go through the second question?""" start="00:02:49.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I thought people would be glad.""" start="00:02:51.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: As a normal user who codes and takes notes, I really want to deep-dive and learn Hyperbole, but always end up winding back up to embark and org-mode being the better system\. For me hyperbole looks like over-engineered (or over-configured) system which other individual packages do well\. And outside emacs there is no system supporting hyperbole nor any usability\.""" start="00:02:54.200" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""As a normal user who codes and takes notes,""" start="00:02:54.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I really want to deep dive and learn Hyperbole,""" start="00:02:56.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but always end up winding back up to Embark""" start="00:02:58.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and Org Mode being the better system.""" start="00:03:02.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""For me, Hyperbole looks over engineering""" start="00:03:04.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or over the peer system,""" start="00:03:06.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which other individual packages do well.""" start="00:03:08.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And outside Emacs, there's no system supporting Hyperbole or any usability.""" start="00:03:10.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And I think you've cited answering""" start="00:03:15.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that already, so go ahead.""" start="00:03:17.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Right, Hyperbole is large, but there's reasons behind that.""" start="00:03:21.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""We're just trying to link all your information in Emacs.""" start="00:03:26.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I think you can see my screen here in Emacs.""" start="00:03:30.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So for example, you can take any Lisp expression,""" start="00:03:38.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""even a variable like here we have in Hyperbole,""" start="00:03:45.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""hyperb:dir variable,""" start="00:03:49.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and I just hit the action key M-RET,""" start="00:03:50.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and in my minibuffer, I see the value of that variable,""" start="00:03:53.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but I could just as well take any other expression""" start="00:03:57.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and take the outer parens off""" start="00:04:01.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and change them to angle brackets""" start="00:04:03.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and now that's a live hyperbutton.""" start="00:04:05.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Could be in a comment in a programming buffer in this case.""" start="00:04:08.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It's in Koutliner buffer,""" start="00:04:12.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which is a an auto-numbered outliner part of hyperbole.""" start="00:04:15.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So let's just try this and say M-RET.""" start="00:04:19.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I pressed and it ran occur and found all the occurrences of buttons.""" start="00:04:23.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And similarly in here, I could just jump and go""" start="00:04:28.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to any of these lines directly""" start="00:04:31.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""by hitting M-RET in that buffer as well.""" start="00:04:35.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So all your text, all your sort of""" start="00:04:37.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""what we call implicit links become live in Hyperbole.""" start="00:04:40.761" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And you didn't have to learn much.""" start="00:04:44.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You just learn, you know, if you know a little Lisp""" start="00:04:46.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or how to type any expression,""" start="00:04:48.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""then you just change the outer brackets.""" start="00:04:50.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And all of a sudden, you have hyperbuttons.""" start="00:04:52.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So Hyperbole, you can learn a little bit at a time.""" start="00:04:55.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And although it seems daunting at first""" start="00:05:01.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""because it has so much functionality,""" start="00:05:04.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""very large and rich architecture.""" start="00:05:06.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But what we do is teach people one piece at a time.""" start="00:05:09.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Implicit buttons""" start="00:05:13.640" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""So just to continue on that a little bit,""" start="00:05:13.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""implicit buttons are buttons""" start="00:05:17.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that exist just from the text pattern in the buffer.""" start="00:05:19.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you saw an example of changing Lisp into implicit buttons right there.""" start="00:05:23.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I could do keystrokes.""" start="00:05:28.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can just type them out in my buffer""" start="00:05:30.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and surround them with braces.""" start="00:05:33.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So here's something, let's see,""" start="00:05:34.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""this is actually a command in the Koutliner""" start="00:05:37.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to jump to the cell numbered four. So let's just do that.""" start="00:05:41.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And it took me right there, right?""" start="00:05:45.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I'm just pressing M-RET to activate these buttons.""" start="00:05:47.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Similarly, any sort of, this is a complex example,""" start="00:05:51.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but any path name I can surround with double quotes,""" start="00:05:56.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it's a live hyperbutton.""" start="00:05:59.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""In this case, I want to jump to a path name called readme.md,""" start="00:06:01.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but it's in a directory that's specified""" start="00:06:05.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""by an actual list variable. And then I want to go directly""" start="00:06:08.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to a headline within that file called Hyperbole manual.""" start="00:06:13.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And within that headline, I wanna go""" start="00:06:17.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to the eighth line relative to that.""" start="00:06:19.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So all I have to do, M-RET again,""" start="00:06:22.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and boom, I'm in that, I'm directly linked to that.""" start="00:06:24.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And Hyperbole has ways that you can just split your windows like this""" start="00:06:28.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and create that reference in the source buffer right there.""" start="00:06:33.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You just press a few keys and it'll embed that link.""" start="00:06:38.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""We'll see that a little later.""" start="00:06:42.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Getting help""" start="00:06:43.840" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""Another example, so all of these buttons,""" start="00:06:43.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""if I just show you here,""" start="00:06:47.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you can press C-h A anytime.""" start="00:06:49.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it will show you exactly""" start="00:06:52.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""what M-RET will do in that context.""" start="00:06:54.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""In this case, it's an implicit button,""" start="00:06:56.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it shows you even where the button starts and ends,""" start="00:06:59.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""what type of action it will run,""" start="00:07:03.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it's a link to a file line,""" start="00:07:06.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then what arguments it takes.""" start="00:07:08.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So Hyperbole extracts all this meta information""" start="00:07:10.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""just from the text in your buffer""" start="00:07:14.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and displays it to you conveniently""" start="00:07:16.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""so you can know before you ever touch a hyper button""" start="00:07:19.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""if it will do something that you want it to do.""" start="00:07:22.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Here we have a fairly advanced button""" start="00:07:24.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that's very simple to do. You just specify a bug in Emacs""" start="00:07:28.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that you want to reference to.""" start="00:07:31.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Notice no delimiters, just bug pound, whatever, M-RET.""" start="00:07:34.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And I'm in Gnus reading the conversation for that bug.""" start="00:07:40.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And I can just, you know, move""" start="00:07:45.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""through all the conversation.""" start="00:07:48.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can quit out of there and go back to where I was.""" start="00:07:50.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So very, very easy to use these implicit buttons""" start="00:07:56.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""because they're already there""" start="00:07:59.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""throughout your Emacs buffers.""" start="00:08:00.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I described the C-h A, what that does.""" start="00:08:03.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And there's other types of buttons""" start="00:08:06.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that we can get into as questions go on,""" start="00:08:09.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but you can create your own explicit buttons""" start="00:08:11.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that have a little slightly different delimiter than you see""" start="00:08:14.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""in the implicit buttons.""" start="00:08:18.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And this one I just put in here to show you that""" start="00:08:19.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""If you use it and you go, this is the hyperbole to do list,""" start="00:08:24.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which is an org buffer.""" start="00:08:30.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But I wanted to show in here that similarly,""" start="00:08:31.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""we have implicit buttons for TODOs in the work.""" start="00:08:35.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And when we hit M-RET,""" start="00:08:37.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it just changes the state of that to do.""" start="00:08:39.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And I can cycle through those""" start="00:08:42.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but even better with the prefix argument""" start="00:08:44.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""if I have multiple sequences of TODOs""" start="00:08:47.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""because there's Bob and Mats that maintain hyperbole""" start="00:08:50.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""so I can shift to Bob's TODOs""" start="00:08:53.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with C-u M-RET""" start="00:08:56.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then cycle through the states for me""" start="00:08:57.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So very very easy to use,""" start="00:09:00.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you know something that's a little bit more difficult to do""" start="00:09:05.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I think in org without it.""" start="00:09:08.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Explicit buttons""" start="00:09:12.080" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""So that's an explicit button""" start="00:09:12.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""where I had to actually say I want to create this button,""" start="00:09:16.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and I had to specify what type it is.""" start="00:09:19.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""If I show you the information there again,""" start="00:09:21.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you see it has a little different type""" start="00:09:23.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""called a keyboard key, which runs just the key sequence.""" start="00:09:25.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you're starting to see already""" start="00:09:29.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that explicit buttons have a type""" start="00:09:34.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that's connected to an action""" start="00:09:36.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that an implicit button can do as well.""" start="00:09:38.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So all of this ties back together.""" start="00:09:41.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Homepage""" start="00:09:42.960" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""And finally, there's a homepage that Hyperbole has,""" start="00:09:42.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""a personal homepage that you have.""" start="00:09:47.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You hit C-h h, which is our mini-buffer menu,""" start="00:09:49.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then you hit what is it, b for button file""" start="00:09:53.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then p for personal file.""" start="00:09:58.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And that just brings you to basically a set of links""" start="00:10:01.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that you can create buttons in any format you want.""" start="00:10:05.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There's no structure that you see here.""" start="00:10:10.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But the nice thing is that all of these buttons that have these names, as we call them,""" start="00:10:12.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with the delimiters here,""" start="00:10:18.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""can be referenced now as what we call global buttons""" start="00:10:20.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""wherever you are in Emacs. So I'm in a separate buffer here""" start="00:10:23.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and say I want to jump to that to-do button""" start="00:10:28.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that's labeled td on line 10 down there.""" start="00:10:30.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""No matter what I have on screen,""" start="00:10:33.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can hit C-h h g for global button,""" start="00:10:35.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""a for activate, and then it gives me a list of those.""" start="00:10:39.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I know it's td, I just put td in.""" start="00:10:43.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Okay, that's a path link problem I have,""" start="00:10:47.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but when I fix the link, it would go to it.""" start="00:10:52.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you can create buttons""" start="00:10:56.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that you can access in any mode, anywhere,""" start="00:10:58.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and just give them quick names, and it's very easy.""" start="00:11:01.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So that kind of gives you an idea""" start="00:11:05.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""of how you can get very productive""" start="00:11:08.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with hyperbole with just a few simple techniques.""" start="00:11:11.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You still there Sacha? Yep, I'm still here.""" start="00:11:15.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I have too many tabs.""" start="00:11:30.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I've been using "activities\.el" and "Bufferlo" to save dedicated workspaces (open buffers, window positions) in tabs and frames for tasks/projects across Emacs sessions\. Could I do something similar with Hyperbole?""" start="00:11:41.540" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""So the question is, I've been using activities.el""" start="00:11:41.540" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and bufferlo to save dedicated workplaces,""" start="00:11:46.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""open buffers, and decisions in tabs and frames""" start="00:11:48.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""for tasks and projects across the next sessions.""" start="00:11:52.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Can I do something similar with Hyperbole? Yes, you can.""" start="00:11:54.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And activities is a nice package from alphapapa.""" start="00:12:00.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""We've actually been working with it lately.""" start="00:12:03.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So we're probably in the next month or so""" start="00:12:07.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""we'll have a specific integration""" start="00:12:11.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to activities built into Hyperbole.""" start="00:12:13.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But right now, we don't. But of course, you can call""" start="00:12:16.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""any of its functions or key bindings""" start="00:12:21.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""using the techniques that I just showed you earlier.""" start="00:12:23.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But what we do have built in if you go to the menu again.""" start="00:12:26.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you see C-h h,""" start="00:12:33.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then there's a w, Windows, WinConfig menu,""" start="00:12:35.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and there's two types of window configurations that you can save here.""" start="00:12:43.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""They are, right now, they're per Emacs session.""" start="00:12:48.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""They're not stored beyond that,""" start="00:12:52.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but we'll probably add that in as well,""" start="00:12:55.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or we'll use activities for that.""" start="00:12:58.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""so the two types are you can either""" start="00:12:59.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""just save a window configuration in a frame...""" start="00:13:03.166" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Actually, it stores the frame configuration""" start="00:13:07.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to a ring just like the kill ring.""" start="00:13:10.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you have the three commands at the right.""" start="00:13:13.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you can save with an s, you can pop one off the ring with p,""" start="00:13:16.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or you can just yank and keep cycling through with a y""" start="00:13:21.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it will restore the frame configuration that you saved.""" start="00:13:25.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Similarly, you can just do it by name,""" start="00:13:31.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you can say &quot;I want to add a name&quot;""" start="00:13:35.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then just give it a name again, winc,""" start="00:13:36.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and store it and it stores it there""" start="00:13:43.668" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then you can get back to it by name as well.""" start="00:13:45.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So fairly easy to use as well""" start="00:13:48.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and again integrated in the same simple menu system.""" start="00:13:51.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So thanks for that question.""" start="00:13:55.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Should I just go to the next question?""" start="00:14:05.020" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How well do Hyperbole and org-mode work together? Is there any kind of integration?""" start="00:14:07.120" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""How well do hyperbole and org mode work together?""" start="00:14:07.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Is there any kind of integration?""" start="00:14:10.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Yes, in fact, that's really good.""" start="00:14:12.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I'll just mention something. Let me go back to my homepage.""" start="00:14:18.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I just stored that here. So we gave a talk at an earlier""" start="00:14:22.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Emacs conference right here on org""" start="00:14:26.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and hyperbole integration.""" start="00:14:31.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So that's a good one to go back to.""" start="00:14:33.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And I believe it's in this files""" start="00:14:35.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""included with hyperbole as well.""" start="00:14:39.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you can learn various techniques""" start="00:14:41.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""of how the action key helps you in org.""" start="00:14:45.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It does special things in tables.""" start="00:14:48.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And there's some nice support for, for example, working with code blocks.""" start="00:14:51.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me see where that is. Okay, so right back here.""" start="00:15:00.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you can run them with the action key.""" start="00:15:02.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can refresh the output and do things like that.""" start="00:15:09.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So again, if I just hit C-h A,""" start="00:15:15.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it'll tell me that it's in smart org,""" start="00:15:17.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it'll give me all the different contexts""" start="00:15:20.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that that operates within.""" start="00:15:22.929" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So there's a lot that it does in here.""" start="00:15:24.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And you can see it would point""" start="00:15:26.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""on the dir value of a code block definition""" start="00:15:28.174" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that will actually display a summary""" start="00:15:30.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and all sorts of functionality.""" start="00:15:33.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So the integration is quite tight.""" start="00:15:35.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And one of the things we do""" start="00:15:37.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""since M-RET is used in org,""" start="00:15:39.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""we have a customization setting, c then o.""" start="00:15:41.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And you have these three settings where you can say,""" start="00:15:44.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I want M-RET to... I want hyperbole to control that""" start="00:15:48.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and everything that the action key does I want to happen,""" start="00:15:53.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or I only want hyperbole to control""" start="00:15:57.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""when I'm over a hyperbole implicit/explicit button,""" start="00:16:00.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or I want org to control that key and never use hyperbole.""" start="00:16:03.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you just set that once,""" start="00:16:09.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it's persistent across sessions and you're good to go.""" start="00:16:10.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And again, it's built right into the menus.""" start="00:16:13.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Hywiki""" start="00:16:16.400" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""But even following that we've the latest addition to hyperbole is something,""" start="00:16:16.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and this is the first time""" start="00:16:23.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""we're really showing it publicly, is the Hywiki,""" start="00:16:25.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which is a new subsystem as we call it,""" start="00:16:29.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and this is I think the best wiki capability in Emacs.""" start="00:16:33.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Now what it does is it automatically highlights...""" start="00:16:39.164" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me turn it on. I have to turn on hywiki mode.""" start="00:16:44.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And you see those wiki words now got highlighted,""" start="00:16:48.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""so any any wiki word""" start="00:16:52.759" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which is the capitalized alpha word you know,""" start="00:16:54.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""so you can have multiple capitals in there""" start="00:16:58.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it'll get recognized, can be used as a wiki word.""" start="00:17:01.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So for example when I just type HyWiki here,""" start="00:17:06.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it automatically recognizes it,""" start="00:17:09.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you see it turned it into a hyperlink button,""" start="00:17:11.751" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which again, C-h a will tell me exactly what it does there.""" start="00:17:14.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But I can just hit the action key, M-RET,""" start="00:17:18.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it'll display my hywiki.org file.""" start="00:17:21.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""All wiki pages are org files.""" start="00:17:26.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So we're using that for the wikis, and you have""" start="00:17:30.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can export an entire wiki""" start="00:17:35.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""using essentially the org export capability""" start="00:17:40.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with a little extra set of features that we've added in,""" start="00:17:43.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but let's say, even better. You see""" start="00:17:47.540" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I have this heading here, so let me just change this.""" start="00:17:50.084" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You go back here, and I'll say go to heading,""" start="00:17:54.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""so you just put a pound on it,""" start="00:17:59.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and now that whole thing is a reference to a specific org section.""" start="00:18:01.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Notice there's no org IDs here.""" start="00:18:05.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There's nothing other than the text that you're seeing.""" start="00:18:08.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There's not even a delimiter.""" start="00:18:11.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So we have automatic implicit hyper buttons""" start="00:18:13.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""being added in any buffer.""" start="00:18:17.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Could be a comment in a programming buffer with all you""" start="00:18:20.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You don't have to add anything.""" start="00:18:23.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I'll show you how to create a new page in a minute.""" start="00:18:26.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But you see I can link to any org section without any IDs.""" start="00:18:32.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And then I can also do like org-roam does,""" start="00:18:35.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but without the indexing or database that it requires.""" start="00:18:38.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can scan over all of my wiki files and headings.""" start="00:18:42.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""find a match really quickly.""" start="00:18:46.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So we can get into some of that a little later as well.""" start="00:18:48.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But, you know, very convenient.""" start="00:18:53.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There's nothing that you change on org to do this.""" start="00:18:55.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So how do I create a wiki word?""" start="00:18:58.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Well, let's say I wanted, you know, wiki word for me.""" start="00:19:00.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So that's already, that was a wiki word,""" start="00:19:07.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but now this is a new one. So you see it doesn't highlight""" start="00:19:10.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""because I haven't created a wiki page yet.""" start="00:19:12.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So all I hit is the action key, and boom.""" start="00:19:16.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Now it created it as a new wiki word.""" start="00:19:20.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It created the .org file.""" start="00:19:23.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""If I don't edit this file, it won't save it,""" start="00:19:24.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it'll not become a word in case you made an accident.""" start="00:19:28.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But let's just say I want to say it.""" start="00:19:32.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So, you know, heading. That's it. I'm just in org mode.""" start="00:19:34.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Now anytime that hywiki mode is active,""" start="00:19:39.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""in any buffer essentially,""" start="00:19:42.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can type that out and it'll recognize it.""" start="00:19:46.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Notice so that's not a wiki word.""" start="00:19:50.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So it's highlighting and it's unhighlighting""" start="00:19:53.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""right as I type.""" start="00:19:55.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So, again, you can embed these as org links in org.""" start="00:19:56.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There's a special format like this, HyWiki word""" start="00:20:03.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that you can make an org link""" start="00:20:09.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""if I was in org mode, just like that.""" start="00:20:11.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So there's all sorts of compatibility,""" start="00:20:13.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but basically it's just words,""" start="00:20:16.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and HyWiki takes care of the rest for you.""" start="00:20:18.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So there's a directory where all these, it's HyWiki,""" start="00:20:21.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""hywiki, ~/hywiki is the default place""" start="00:20:26.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""where all these would be found,""" start="00:20:31.207" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and there's a menu now in hyperbole for hywiki, h,""" start="00:20:32.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you can see, it has a lot of capabilities.""" start="00:20:36.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But I can say, b, go into the directory of all the files,""" start="00:20:40.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""just pull them up, and any of these you'll see...""" start="00:20:44.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me give you one like this.""" start="00:20:47.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Okay. So you can see the other wiki words""" start="00:20:56.590" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""being highlighted in here.""" start="00:20:58.474" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It's very fast too. There's almost no delay for anything,""" start="00:20:59.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and yet very flexible,""" start="00:21:04.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you have this ability""" start="00:21:07.130" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""where you could type emacs#section-1-2""" start="00:21:09.916" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and if you didn't have delimiters around it,""" start="00:21:14.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but you can put any delimiters""" start="00:21:16.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""like double quotes or parentheses,""" start="00:21:18.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then it'll match without you""" start="00:21:20.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""having to change the header at all""" start="00:21:23.503" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with the spaces included, and all of those""" start="00:21:25.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""will get recognized.""" start="00:21:28.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I don't know if the section exists right there.""" start="00:21:31.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So anyway a lot of capability you can see that here""" start="00:21:35.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""where I did the hy...""" start="00:21:40.455" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it actually highlights as an org link""" start="00:21:41.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""because it is an org link,""" start="00:21:45.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it'll operate just like any other org link""" start="00:21:46.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""even though it's a hywiki word link as well.""" start="00:21:50.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So very powerful stuff""" start="00:21:54.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and totally integrated with Org Mode throughout.""" start="00:21:55.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Great. There's another question.""" start="00:22:00.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Are there any talks from this year's emacsconf that discussed things that would work well with Hyperbole?""" start="00:22:06.440" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""Are there any talks from this year's Emacs Conf""" start="00:22:06.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that discuss things that would work well with Hyperbole?""" start="00:22:09.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""No. Unfortunately, I had to work yesterday, so I haven't""" start="00:22:12.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""been following the conference as much as I do.""" start="00:22:19.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Maybe somebody else could comment on that.""" start="00:22:22.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But I think, you know, again,""" start="00:22:25.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it's like pick your favorite mode,""" start="00:22:29.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""pick your favorite type of information.""" start="00:22:31.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Can hyperbole work with that?""" start="00:22:34.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You know, the answer is almost always yes.""" start="00:22:36.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So, you know, if I show you just a little bit,""" start="00:22:40.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""if I show you some of these implicit button types,""" start="00:22:44.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""just so you know the amount of code""" start="00:22:48.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""involved to create a type.""" start="00:22:50.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So here's like a mail, recognizing""" start="00:22:53.709" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""an email address as a button.""" start="00:22:59.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It's a little long, so that it creates a lot of things,""" start="00:23:01.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but you know it's less than 15 lines of code for that.""" start="00:23:05.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Path names are complicated, so that's a longer one,""" start="00:23:09.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but let's look at...""" start="00:23:12.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So here's one recognizing a bibliography entry.""" start="00:23:14.300" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So it can be between two and 20 lines of code""" start="00:23:18.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to create an entirely new button type.""" start="00:23:24.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And you create it once,""" start="00:23:27.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you just add it to the set of types,""" start="00:23:29.819" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""just like at the fun,""" start="00:23:32.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""except it's done with this macro""" start="00:23:33.923" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""called def implicit button type, and defib.""" start="00:23:35.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And it's part of your hyperlinking system forever then.""" start="00:23:39.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So say you got dumped with 5,000 documents""" start="00:23:45.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that were in this weird text format,""" start="00:23:49.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and they all had cross-references among them,""" start="00:23:51.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but it was, again, using a weird format.""" start="00:23:54.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You could just write your own little type for that,""" start="00:23:56.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then those 5,000 documents are hyperlinked for you""" start="00:23:59.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""every time you're browsing them in Emacs automatically.""" start="00:24:04.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So we do that all the time, create small things,""" start="00:24:08.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but all of these are built into Hyperbole.""" start="00:24:11.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Markdown links, texinfo links, all of that's automatic.""" start="00:24:15.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I could even be in a shell mode, and I just say ls,""" start="00:24:20.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and these are hyperlinks that Hyperbole understands, right?""" start="00:24:26.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It just jumps right to the file.""" start="00:24:30.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So grep -n, you know, looking at any line numbers,""" start="00:24:33.126" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you don't have to remember""" start="00:24:37.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""all these different commands anymore.""" start="00:24:39.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You just hit M-RET,""" start="00:24:41.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and Hyperbole does the right thing""" start="00:24:44.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""in all these different contexts,""" start="00:24:46.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""including following cross-references in code.""" start="00:24:48.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I would say that's your answer.""" start="00:24:52.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Most things that people are talking about,""" start="00:24:56.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""we've already probably integrated with Hyperbole""" start="00:24:58.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or with a little bit of custom coding.""" start="00:25:02.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can do it.""" start="00:25:04.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I think that's the end of the etherpad questions for now,""" start="00:25:08.403" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but I see a number of people in the room,""" start="00:25:11.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""so you can continue the conversation.""" start="00:25:12.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""We'll be on the stream for another five minutes or so,""" start="00:25:15.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but yes, please go ahead. Great. Yeah.""" start="00:25:18.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I mean, people, does everybody have, can talk on the conference?""" start="00:25:22.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I was expecting to just talk with people here.""" start="00:25:27.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let's see. Yeah. Can anybody say anything here?""" start="00:25:31.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Hi, Bob. I can say something. Hey, Matt. Hi. Yeah.""" start="00:25:40.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Maybe you want to bring up a topic.""" start="00:25:52.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I think I... Yes. Sorry, Bob.""" start="00:25:55.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I think I saw a question here on IRC. It was like this.""" start="00:25:56.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Interesting, but the many different link formats makes reading and analyzing my notes much harder and less usable outside Emacs\.""" start="00:26:05.840" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""Interesting, but the many different link formats""" start="00:26:05.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""makes reading and analyzing my notes""" start="00:26:08.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""much harder and less usable outside Emacs.""" start="00:26:11.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I don't know if you have some comment on that.""" start="00:26:14.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Well, I mean, the different formats that you're saying,""" start="00:26:18.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""like angle brackets or curly braces,""" start="00:26:22.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""are just so that you can utilize many different types.""" start="00:26:24.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""of buttons, but if you just want to use key sequences,""" start="00:26:31.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""there's only one markup format.""" start="00:26:35.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""With org, you've got the square brackets,""" start="00:26:37.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which are consistent, but in order to have different types,""" start="00:26:41.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you have to type a prefix name,""" start="00:26:44.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""like you see the HY for the HyWiki buttons in org mode.""" start="00:26:47.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I think the trade-off is pretty much the same,""" start="00:26:53.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but Hyperbole always, always works""" start="00:26:57.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to minimize the amount of markup.""" start="00:27:02.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Markdown is pretty simple. A lot of people like that.""" start="00:27:04.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But I think you'll find in hyperbole texts,""" start="00:27:07.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""they read just like regular language.""" start="00:27:10.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I mean, the delimiters are fairly invisible.""" start="00:27:15.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I'm not sure what the issue is there.""" start="00:27:19.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And again, you can choose your own.""" start="00:27:23.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can make your own types with your own delimiters.""" start="00:27:24.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There's even a custom macro""" start="00:27:27.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that instead of using that defib""" start="00:27:31.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""where you have to type out Lisp code,""" start="00:27:33.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you can use regular expressions.""" start="00:27:35.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And in one line, you can define your own type of button""" start="00:27:37.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with its own delimiters.""" start="00:27:41.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So, you know, depending on what works well for your eyes,""" start="00:27:42.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you can make Hyperbole adapt quite well to that.""" start="00:27:47.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And again, if you start using the HyWiki,""" start="00:27:51.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""there's literally zero markup on that.""" start="00:27:54.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you're just reading text,""" start="00:27:57.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and when you want something hyperlinked,""" start="00:27:59.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it's like a glossary or a dictionary entry.""" start="00:28:01.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It's just there, and it's just highlighted in the text.""" start="00:28:04.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I don't see much barrier to using it with many different types of documents.""" start="00:28:09.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me go back to the Emacs here.""" start="00:28:17.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""If there are any other questions.""" start="00:28:23.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me see. Let me go back to that. This Koutline here.""" start="00:28:27.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So we covered HyWiki.""" start="00:28:36.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""We're in the... I'll just show you some things""" start="00:28:38.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that we wanted to highlight""" start="00:28:43.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""if people didn't have specific questions.""" start="00:28:44.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But feel free to jump in anytime""" start="00:28:46.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""if you want to ask something.""" start="00:28:48.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Koutliner""" start="00:28:51.400" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""So what we're looking at here is a Koutliner document.""" start="00:28:51.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There's, you know, hyperbole is pretty well documented.""" start="00:28:57.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There's a large manual. There's interactive""" start="00:29:00.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""demos of it, and there are videos as well.""" start="00:29:04.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But the Koutliner is unique in Emacs,""" start="00:29:09.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""because it can do like full legal auto numbering.""" start="00:29:12.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You just say, I want to create a new headline,""" start="00:29:17.259" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you can see. Or I could create four,""" start="00:29:21.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I could say I want to create three more of these,""" start="00:29:23.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and I can do it all at once with one key.""" start="00:29:26.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can then just tab to make sublevels here.""" start="00:29:29.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And you see this is using a specific outline format that we have""" start="00:29:33.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but if we do . in the view specs here,""" start="00:29:40.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it changes to legal outlining. So it's really that simple.""" start="00:29:43.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""All of these numbers are automatically maintained.""" start="00:29:48.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""As I move stuff around, I can use Org mode alt arrow keys""" start="00:29:51.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to move things up and down, right?""" start="00:29:56.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And just move them around.""" start="00:30:00.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And when I run out, you know, when it can't go any higher,""" start="00:30:00.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it gives me an error.""" start="00:30:04.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And then it's just fre- form typing here with auto-wrapping.""" start="00:30:06.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""The nice thing is that""" start="00:30:11.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""there's actually these hidden,""" start="00:30:13.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""let's get, hidden what are called ID stamps.""" start="00:30:17.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So these are permanent hyperlink anchors""" start="00:30:22.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that are assigned to each cell.""" start="00:30:24.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So as this cell moves in the outline,""" start="00:30:26.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you notice that this 29 didn't change.""" start="00:30:29.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you can move and all those other auto numbers shift""" start="00:30:32.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to represent the actual outline structure.""" start="00:30:37.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But this ID stamp of 29 stays the same.""" start="00:30:40.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you can embed that in links and say,""" start="00:30:44.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I want to link to cell 29.""" start="00:30:47.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""If I go, let me just go to the Koutliner example.""" start="00:30:51.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And I'll show you one of those, which is really cool.""" start="00:30:56.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Because what you can do is say, I want to link""" start="00:30:59.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me find that. It's down here somewhere.""" start="00:31:02.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I think there's 3A. Where was it? Yeah, okay.""" start="00:31:07.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So see right here, this is an internal link""" start="00:31:12.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with just the pound and then the relative ID, as we call it, 3B.""" start="00:31:16.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But of course, somebody may have moved 3B in the outline.""" start="00:31:21.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So when Hyperbole inserts a link,""" start="00:31:25.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it puts this equal with the ID stamp in it automatically.""" start="00:31:27.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So if... What'll happen is when I reference this,""" start="00:31:32.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""okay, it's still the same.""" start="00:31:35.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But if it had changed, it would update this link""" start="00:31:37.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and would change the 3B to say it was 3D now""" start="00:31:40.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""based on this permalink, the 08 that's hidden away in here.""" start="00:31:44.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you don't have to do anything.""" start="00:31:50.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It's just that you have these automatic hyperlink anchors""" start="00:31:52.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that are embedded in your outlines again.""" start="00:31:56.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""sort of like org IDs, but you have to manually place those in org.""" start="00:31:58.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And it just makes linking much simpler.""" start="00:32:04.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And you can reference this.""" start="00:32:09.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can reference the file and the cell number.""" start="00:32:10.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And again, you don't put this...""" start="00:32:13.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Hyperbole will put this in.""" start="00:32:15.488" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And then you can even have these view specs, which say,""" start="00:32:17.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I want to clip the display to one line,""" start="00:32:20.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and I want to delete ellipses.""" start="00:32:25.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So here we see a view over the same outline""" start="00:32:27.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that's all in one mode. So it's just incredibly capable.""" start="00:32:31.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So here we've said, you know,""" start="00:32:37.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""there's no blank lines between cells.""" start="00:32:40.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Now I change the view spec and put a blank line in there,""" start="00:32:42.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it's all changed. So lots of consistency that you get.""" start="00:32:46.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""When you change a node in the outline,""" start="00:32:51.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""the whole tree shifts, and all of this is maintained,""" start="00:32:55.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""all of the structure is maintained automatically by Hyperbole.""" start="00:32:58.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org tables""" start="00:33:02.840" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""You can embed Org tables in here as well.""" start="00:33:02.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So if I just press M-RET action key again on this... Org disabled.""" start="00:33:09.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Okay. So now I enabled Org mode here,""" start="00:33:17.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and where you see, like, tab here shifts a cell.""" start="00:33:21.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""When I'm inside the table,""" start="00:33:25.341" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""tab just operates like normal Org tables.""" start="00:33:27.607" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I can do all of the things""" start="00:33:31.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that I can do in org table mode as well within this koutline.""" start="00:33:33.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So it seems pretty useful to me,""" start="00:33:40.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but of course, I helped write it.""" start="00:33:43.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But I think you see some of the benefits""" start="00:33:48.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that can accrue by using that format.""" start="00:33:51.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But this is just one piece of Hyperbole,""" start="00:33:53.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""a major mode that you can choose to use or ignore entirely,""" start="00:33:57.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you know, dependent on your needs.""" start="00:34:02.180" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""If you're writing requirements, documents,""" start="00:34:04.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or anything that needs structure,""" start="00:34:06.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I think that's where this is really ideal.""" start="00:34:08.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can write a legal document,""" start="00:34:12.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you've got auto-numbering,""" start="00:34:14.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which is always, if you've ever used Word""" start="00:34:16.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or any of those word processors,""" start="00:34:18.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it's really a pain to maintain those hierarchies""" start="00:34:21.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""in those compared to here.""" start="00:34:24.590" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Okay, so that was just showing you the Koutliner.""" start="00:34:26.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Does anybody have any questions""" start="00:34:32.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or I'll just continue down a bit?""" start="00:34:35.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Selecting between delimiters""" start="00:34:43.280" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""Okay, so some other capabilities""" start="00:34:43.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that we've fairly recently put in.""" start="00:34:48.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Well, this has been here for a long time.""" start="00:34:49.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can, I think the binding I use is C-c m.""" start="00:34:52.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I forget what it is.""" start="00:34:58.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""No, sorry, that's C-c C-m.""" start="00:35:00.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Now let's C-c \.""" start="00:35:07.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Okay, so what I wanted to show you here is that the action key""" start="00:35:14.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""on any double quote, single quote, usually,""" start="00:35:21.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or paired delimiters will select that whole thing.""" start="00:35:26.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There is this capability, and I probably just select bigger""" start="00:35:30.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and bigger chunks of text,""" start="00:35:33.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but this is really nice that you can just go anywhere""" start="00:35:35.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""in pretty much any mode and hit M-RET.""" start="00:35:39.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And so in Lisp, you can be on the trailing paren""" start="00:35:42.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it will select the whole expression, or the opening""" start="00:35:46.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and it'll select just that piece,""" start="00:35:50.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but even better when you're copying, pasting,""" start="00:35:52.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can... Now if there's no region selected, C-w, M-w,""" start="00:35:56.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""will act on the structured entity""" start="00:36:02.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that you're at the beginning or ending delimiter for""" start="00:36:05.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""without you having to highlight the region""" start="00:36:09.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So if I hit M-RET, it would highlight it,""" start="00:36:12.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but let's just do M-w to cut that""" start="00:36:14.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then I'll yank it here.""" start="00:36:19.086" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And you see it grabbed the whole expression""" start="00:36:20.918" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and just let you yank it.""" start="00:36:23.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So it's a nice add on to the basic Emacs commands""" start="00:36:25.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that just let you operate a lot more efficiently.""" start="00:36:29.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can do something similar in C mode.""" start="00:36:33.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You know, on the braces, you can select the whole function""" start="00:36:35.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with one key press,""" start="00:36:39.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""M-RET, and then copy it somewhere.""" start="00:36:40.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Ace-window""" start="00:36:43.080" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""And Hyperbole integrates with Ace Window if you use that.""" start="00:36:43.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So let me split this a few ways. And let's do it over here.""" start="00:36:50.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""We'll just go to scratch. Okay. And then I can go,""" start="00:36:56.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it's sort of interesting,""" start="00:37:06.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it works with Dired as well.""" start="00:37:08.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I can go here and say, I want to... So if I do M-o,""" start="00:37:11.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Ace-window will show me the labels to use, a, d, or s, to do something.""" start="00:37:16.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Like I can move to any of those windows.""" start="00:37:22.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But what Hyperbole lets you do""" start="00:37:24.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""is say I want to throw with t,""" start="00:37:27.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""like this glass.org file over to the bottom window.""" start="00:37:30.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I go M-o to invoke it. I say I want a t to throw it.""" start="00:37:36.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Then where do I want to throw it to? s, the window, and""" start="00:37:42.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""then you see it's now displaying glass.org.""" start="00:37:46.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I can do that with files. I can do it with regions of text.""" start="00:37:49.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can replace things in a buffer,""" start="00:37:55.764" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or throw the whole thing to the window.""" start="00:37:58.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Dired""" start="00:38:01.200" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""So a couple extra commands""" start="00:38:01.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that it extends ace window with...""" start="00:38:02.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you can even, I think, well, we also have this command,""" start="00:38:05.035" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I think it's C-c @, yeah.""" start="00:38:12.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So what it did there was it just selected the files""" start="00:38:16.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that I had marked in Dired,""" start="00:38:21.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it selected and created a window grid out of all of them.""" start="00:38:22.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You know, so I hit like three keystrokes.""" start="00:38:26.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""That's kind of convenient if you want to see""" start="00:38:29.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""a lot of information all at once.""" start="00:38:35.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And so we covered all that. I won't go into it too much,""" start="00:38:38.160" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Controlling windows or frames""" start="00:38:42.240" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""but there's a whole 'nother window and frame control system""" start="00:38:42.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""under the screen menu here if you type C-h h s.""" start="00:38:46.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""then you can select either controlling windows or frames.""" start="00:38:50.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let's do windows.""" start="00:38:54.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And it has this menu where it's just sort of showing you.""" start="00:38:56.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can like split my windows vertically or horizontally.""" start="00:39:00.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can widen by a pixel or I can say, or character.""" start="00:39:07.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I can say, use my prefix argument to change that to 10.""" start="00:39:13.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And then when I shrink it, shrinks it up by 10""" start="00:39:18.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or it narrows it width by 10 or it widens it by 10.""" start="00:39:22.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So it has this concept of prefix arguments that persist""" start="00:39:27.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you just type in the number""" start="00:39:33.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then you can issue any number of the commands.""" start="00:39:35.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So you could move windows or frames""" start="00:39:38.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or create them, delete them, cycle through them,""" start="00:39:41.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""all sorts of things, including relative to movement,""" start="00:39:44.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""relative to the edges of your screens.""" start="00:39:48.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So if you have multiple screens""" start="00:39:50.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and many frames that you use,""" start="00:39:52.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""it just makes management very convenient.""" start="00:39:54.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And then you just q to quit out of there""" start="00:39:59.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you're back wherever you were.""" start="00:40:02.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Documentation""" start="00:40:04.960" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""So, finally, we have a lot of documentation.""" start="00:40:04.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""This is just a link to the videos,""" start="00:40:10.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which is in the readme and in the manuals.""" start="00:40:12.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""There's two demos or tutorials. One to get you started.""" start="00:40:16.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Notice I'm using these implicit buttons, so keystrokes,""" start="00:40:21.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and I can just M-RET on that.""" start="00:40:24.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And that takes me to, here's all the videos.""" start="00:40:26.880" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And you can get started with that""" start="00:40:30.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""or just interact with this demo that we have.""" start="00:40:34.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And there's one for the Koutliner as well.""" start="00:40:38.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Videos""" start="00:40:41.520" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""One of the things that... If you're into videos""" start="00:40:41.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and you need to link to them,""" start="00:40:45.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""notice what you're seeing here. This is a hyperbole feature""" start="00:40:46.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""which is very difficult to achieve any other way that I've seen""" start="00:40:50.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""where you want a specific start and stop time""" start="00:40:54.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""in a video that you want to play.""" start="00:40:59.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Hyperbole has a built-in link type for that.""" start="00:41:01.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""as you see here. So this is the name of the link""" start="00:41:05.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that you can reference it by,""" start="00:41:08.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and then this is the actual link expression.""" start="00:41:10.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So I could just go and play a video right here,""" start="00:41:14.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and this is from one long intro to hyperbole that we did.""" start="00:41:17.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So it's just linking to the specific sections.""" start="00:41:22.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But that's something, again,""" start="00:41:25.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""this could be embedded anywhere.""" start="00:41:27.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""in any file and it would start to play.""" start="00:41:29.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Uh, I guess I could try YouTube.""" start="00:41:33.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Well, I don't want to. Yeah. Okay. It's on my other screen.""" start="00:41:36.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So, but it did, it did, uh, link to it.""" start="00:41:43.240" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So, um, yeah, just, you know, tremendous capability""" start="00:41:48.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to interlink your information that way.""" start="00:41:53.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And, uh, You know, again, you learn it bit by bit.""" start="00:41:56.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""You can study one particular section right here.""" start="00:42:00.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Just jump directly to that if you want to know about it.""" start="00:42:04.280" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Manual""" start="00:42:09.040" video="mainVideo-hyperboleqa" id="subtitle"]]</div>[[!template text="""The manual is interlinked, has an extensive glossary,""" start="00:42:09.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""cross-references of sections.""" start="00:42:13.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And if you go in there, this is the hyperlinked manual.""" start="00:42:16.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So this is the structure of it""" start="00:42:23.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with all the subsystems documented.""" start="00:42:25.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""But one of the sections we've added""" start="00:42:27.800" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""is developing with hyperbole.""" start="00:42:31.520" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So if you are or you want to create your own button types,""" start="00:42:33.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""this explains how to do it.""" start="00:42:37.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Creating types, you can create your own action""" start="00:42:38.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and implicit button types.""" start="00:42:42.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And if you look in here, there are three ways""" start="00:42:45.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""to create implicit button types from simpler to harder.""" start="00:42:48.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So like, here's an example""" start="00:42:55.040" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""where pressing C-x after this expression""" start="00:42:59.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""defines a new action button link type called pilot.""" start="00:43:03.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So let's say, I don't know if I have this set up, but we can try it.""" start="00:43:07.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Yeah, I don't have the variable setup,""" start="00:43:13.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""but basically, you know, it can get you.""" start="00:43:22.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""This is a one line definition of a new action type.""" start="00:43:25.760" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""that can get you to a Python file""" start="00:43:31.360" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""based on whatever your Python path is set to""" start="00:43:36.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""with this simple syntax right here.""" start="00:43:39.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And here we're going to the file.""" start="00:43:42.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So we have no idea where this is on the file system.""" start="00:43:45.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And the same way like if you use man path, Python path,""" start="00:43:48.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""you can embed buttons. Let's just go to scratch buffer.""" start="00:43:54.960" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""My first read-only. It doesn't want me to go.""" start="00:44:08.600" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It must be kind of strange.""" start="00:44:17.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Something with this key window that I have over here.""" start="00:44:25.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me just move off there. Look at that.""" start="00:44:32.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Maybe it's just activating that.""" start="00:44:35.680" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Yeah, it keeps jumping back there.""" start="00:44:38.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I don't know. I have to get this straight.""" start="00:44:46.320" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Yeah, it's not letting me type the buttons.""" start="00:44:49.543" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me see if I can turn off the key casting.""" start="00:44:53.959" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Yeah, maybe that'll help. I don't know, that put me in some strange...""" start="00:44:57.876" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Just going to exit out of here if I can.""" start="00:45:24.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Does anybody have any questions they want to cover?""" start="00:45:30.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I was just gonna show you yeah a little more on type definitions""" start="00:45:33.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""if there was any interest OK, there's nobody piping up.""" start="00:45:39.080" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Let me see if there's any other questions.""" start="00:45:53.120" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Hi, Bob. I haven't seen any more questions.""" start="00:45:57.000" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Yeah, so maybe it's you, me, and someone called Max is here in the channel.""" start="00:46:04.440" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""OK. Okay, so if Max doesn't have any questions""" start="00:46:10.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""and there aren't other people, we can just end it there.""" start="00:46:19.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""I don't want to have an audience of zero or talk to that.""" start="00:46:24.840" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So, but I think that was a good overview, Max, right?""" start="00:46:34.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""Yes, definitely covered a lot in a short time.""" start="00:46:37.920" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And hopefully, you know, just try it out.""" start="00:46:45.480" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""At the top here, it shows you how to install it.""" start="00:46:48.640" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""It's pretty simple, basic package and installation.""" start="00:46:52.400" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And we're happy to help anybody get started if they need to.""" start="00:46:56.560" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""So thanks, everyone.""" start="00:47:02.720" video="mainVideo-hyperboleqa" id="subtitle"]]
+[[!template text="""And we'll answer any further questions on the Etherpad after this.""" start="00:47:05.200" video="mainVideo-hyperboleqa" id="subtitle"]]
+
+</div>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..e4af9fdf
--- /dev/null
+++ b/2025/info/hyperboleqa-before.md
@@ -0,0 +1,35 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 48-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-hyperboleqa>
+Etherpad: <https://pad.emacsconf.org/2025-hyperboleqa>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-hyperboleqa"><source src="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--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-hyperboleqa" data="""
+00:15.640 Q: I'm excited to know opinion on current state of using MCP and AI for PKM and PIEs. Since they do carry lot of burden out of us and ease lot of process. How does hyperbole stand with coming days?
+02:54.200 Q: As a normal user who codes and takes notes, I really want to deep-dive and learn Hyperbole, but always end up winding back up to embark and org-mode being the better system. For me hyperbole looks like over-engineered (or over-configured) system which other individual packages do well. And outside emacs there is no system supporting hyperbole nor any usability.
+05:13.640 Implicit buttons
+06:43.840 Getting help
+09:12.080 Explicit buttons
+09:42.960 Homepage
+11:41.540 Q: I've been using "activities.el" and "Bufferlo" to save dedicated workspaces (open buffers, window positions) in tabs and frames for tasks/projects across Emacs sessions. Could I do something similar with Hyperbole?
+14:07.120 Q: How well do Hyperbole and org-mode work together? Is there any kind of integration?
+16:16.400 Hywiki
+22:06.440 Q: Are there any talks from this year's emacsconf that discussed things that would work well with Hyperbole?
+26:05.840 Interesting, but the many different link formats makes reading and analyzing my notes much harder and less usable outside Emacs.
+28:51.400 Koutliner
+33:02.840 Org tables
+34:43.280 Selecting between delimiters
+36:43.080 Ace-window
+38:01.200 Dired
+38:42.240 Controlling windows or frames
+40:04.960 Documentation
+40:41.520 Videos
+42:09.040 Manual
+
+"""]]<div></div>Duration: 47:09 minutes<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/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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main--chapters.vtt">Download --main--chapters.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--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.m4v">Download --main.m4v (108MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.tsv">Download --main.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.webm">Download --main.webm (100MB)</a></li><li><a href="https://toobnix.org/videos/watch/77cae324-b5be-4777-905d-586928519c1e">View on Toobnix</a></li><li><a href="https://youtu.be/oGFyHe8SpE4">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/hyperboleqa-nav.md b/2025/info/hyperboleqa-nav.md
new file mode 100644
index 00000000..2e396846
--- /dev/null
+++ b/2025/info/hyperboleqa-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/zettelkasten">Zettelkasten for regular Emacs hackers</a>
+Next by track: <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>
+</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..93831d28
--- /dev/null
+++ b/2025/info/juicemacs-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 20-min talk ; Q&A: Etherpad
+Etherpad: <https://pad.emacsconf.org/2025-juicemacs>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<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://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://toobnix.org/videos/watch/696562bd-0b65-44f7-81bb-81812a93e9e3">View on Toobnix</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..d3c4fa92
--- /dev/null
+++ b/2025/info/juicemacs-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/schemacs">One year progress update Schemacs (formerly Gypsum)</a>
+Next by track: <a href="/2025/talks/swanky">Swanky Python: Interactive development for Python</a>
+Track: <span class="sched-track Development">Development</span>
+</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..2f77e2f8
--- /dev/null
+++ b/2025/info/latex-after.md
@@ -0,0 +1,493 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="latex-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.140" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""Okay. Good afternoon, morning or evening,""" start="00:00:00.140" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""whatever it is in your time zone.""" start="00:00:04.457" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I'm Pedro Aranda and I'm going to be talking about""" start="00:00:06.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""what I've been doing""" start="00:00:10.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""with the latest backend in Org Mode""" start="00:00:12.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and the different... Sorry... and the way it treats fonts.""" start="00:00:17.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Just a couple of words before""" start="00:00:24.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I am going to go through motivation,""" start="00:00:28.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""the evolution and get you an idea of what you can get""" start="00:00:30.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""from the feature branch that I have started""" start="00:00:35.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and give a couple of demos.""" start="00:00:38.080" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Motivation""" start="00:00:41.400" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""Actually, my motivation is I was using ox-latex currently""" start="00:00:41.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and ox-beamer for as a foundation for my activities,""" start="00:00:47.780" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""mainly for lecture notes and lecture slides""" start="00:00:51.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""so I came from pure LaTeX and beamers""" start="00:00:54.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and for me the real cool use case,""" start="00:01:01.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""or I would say this was""" start="00:01:04.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""the killer use case for me was""" start="00:01:05.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I have a programming lecture,""" start="00:01:07.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is sort of a Python 101,""" start="00:01:09.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and when I'm live in the lecture,""" start="00:01:12.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I can go, and if the pupils ask me, I can modify code,""" start="00:01:14.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""show modified code and results on the fly,""" start="00:01:18.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and that's something that really impresses the kids""" start="00:01:21.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and makes them understand what we are talking about.""" start="00:01:25.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""From my pro... subjective point of view, in some,""" start="00:01:30.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""mainly in ox-beamer, some of the things that I was missing""" start="00:01:34.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is that emojis would really break the monotony""" start="00:01:38.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I missed the support for emojis and stock Beamer themes.""" start="00:01:41.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And some fonts I also found were suboptimal""" start="00:01:47.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""or difficult to adapt in case they need an adaptation.""" start="00:01:52.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So, for example, people who need special fonts""" start="00:01:56.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because of their special capabilities,""" start="00:02:01.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""it's difficult to get those fonts from the stock themes""" start="00:02:05.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and from the stock font implementations you have there.""" start="00:02:11.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So, requirements from the Emacs side to do this is none,""" start="00:02:17.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because basically, okay, the only thing I want""" start="00:02:21.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is to work on a vanilla Emacs,""" start="00:02:25.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is more or less recent,""" start="00:02:27.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because yes, I'm a bit of a freak""" start="00:02:28.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I compile it every two, three...""" start="00:02:30.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I get it from master and compile it every two, three days.""" start="00:02:32.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And yahoo, I had to change to a new Mac,""" start="00:02:36.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I'm able now to get my vanilla Emacs within four.""" start="00:02:40.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So that was a big accomplishment in these last days.""" start="00:02:47.360" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Evolution""" start="00:02:53.360" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""What is the evolution?""" start="00:02:53.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I mean my personal evolution and my take of ox-latex""" start="00:02:55.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""was I put everything in a in a LaTeX file""" start="00:03:00.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I input it through the LaTeX header, and that's it.""" start="00:03:05.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""But that was not very beginner-friendly,""" start="00:03:09.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and once I had some people interested in this,""" start="00:03:12.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""&quot;oh wow, I can modify the code on the fly""" start="00:03:15.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and see the results on the fly,&quot;""" start="00:03:19.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""it was more difficult for them to give it a go.""" start="00:03:21.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So I just... Because they,""" start="00:03:26.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""there are people who have not that big,""" start="00:03:32.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that much experience with LaTeX""" start="00:03:36.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and it can even be a bridge to introduce people into LaTeX.""" start="00:03:41.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So, in any case, it was not very beginner-friendly""" start="00:03:44.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I had complaints on that.""" start="00:03:48.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So, what I think was, we can do better.""" start="00:03:52.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""My first attempt was something that was completely neutral""" start="00:03:57.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""to Babel or Polyglossia.""" start="00:04:00.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and it was made basically for font LaTeX""" start="00:04:02.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""although some of the things can... for lualatex""" start="00:04:06.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and some of the things can also be used with xelatex.""" start="00:04:08.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So overriding template fonts""" start="00:04:14.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and taking into account fallback fonts""" start="00:04:16.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""was something that I learned""" start="00:04:21.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""when we started this conversation,""" start="00:04:23.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and the only problem with this""" start="00:04:27.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is that fallback fonts only work for lualatex""" start="00:04:29.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because xelatex doesn't support them.""" start="00:04:34.408" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Actually, fallback fonts is a lua feature.""" start="00:04:36.308" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""There was already something in the list""" start="00:04:40.541" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""regarding script detection which helped me a lot.""" start="00:04:45.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So big recognition to Juan M. Macias for that,""" start="00:04:48.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and for his publishing the algorithm or the script""" start="00:04:52.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in the org mode mailing list.""" start="00:04:57.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And then came my sort of little nightmare,""" start="00:05:04.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which was when we started talking""" start="00:05:11.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""about internationalization or localization.""" start="00:05:14.175" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Looking back, I have a very strange feeling""" start="00:05:19.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""about a blurring target there.""" start="00:05:21.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Because the reality, being very, very frank, did I need it?""" start="00:05:22.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Really no, because I just needed""" start="00:05:29.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""to add Spanish with Babel and that was it.""" start="00:05:34.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Well actually for me it still is""" start="00:05:40.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you can put the British, German or Italian""" start="00:05:43.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""it continues to be true for me,""" start="00:05:46.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""so I had personally, I had little interest in doing that,""" start="00:05:48.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""but I took it as a challenge""" start="00:05:51.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which has shown to be really tough.""" start="00:05:55.320" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What do you get from the feature branch?""" start="00:06:02.480" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""What do you get from the feature branch?""" start="00:06:02.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""The feature branch adds font management for fontspec,""" start="00:06:04.956" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is not strictly needed""" start="00:06:09.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""when you are on Latin, Cyrillic, and Greek scripts""" start="00:06:10.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""as long as the fonts in your template support them.""" start="00:06:14.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""But again, it's a nice way to get better support here.""" start="00:06:18.580" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""You don't need it if you're happy with the fonts you get""" start="00:06:28.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""from the templates that you use both for Beamer""" start="00:06:33.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and the document classes in LaTeX.""" start="00:06:38.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""If you don't want to use alternative fonts,""" start="00:06:40.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you don't need it, but you would need it.""" start="00:06:43.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Of course, if you don't want things like,""" start="00:06:48.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for example, emojis or need emojis,""" start="00:06:50.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you really don't need fallback fonts.""" start="00:06:55.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So my idea is that the next thing that you can add""" start="00:06:59.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is Babel and Polyglossia here""" start="00:07:05.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for enhanced localization and multilingual documents there.""" start="00:07:07.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And at the end, my vision was that the keywords involved""" start="00:07:13.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""would be language, the main language.""" start="00:07:17.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And then a nice idea from Ihor""" start="00:07:19.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""was to put all the secondary languages there too.""" start="00:07:23.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Then specify the LaTeX compiler.""" start="00:07:27.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Then what I've added is a keyword""" start="00:07:30.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is `#+LATEX_MULTI_LANG:`""" start="00:07:32.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which can be fontspec or babel or polyglossia""" start="00:07:34.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for localized documents.""" start="00:07:37.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""By default, this thing is nil and when it is nil,""" start="00:07:40.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you get the behavior from Org Mode""" start="00:07:45.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that you already are used to if you don't want to switch.""" start="00:07:51.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Jing Huang was there and I was really,""" start="00:07:56.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""was chirped into the conversation""" start="00:08:00.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and really helpful and a big thanks to him""" start="00:08:03.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because he also had an easy idea""" start="00:08:06.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""to support Chinese and Japanese documents,""" start="00:08:10.975" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""so that the only thing that you need is to add the language""" start="00:08:13.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that you're going to write your document in.""" start="00:08:17.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Very, very big thank you for that,""" start="00:08:21.860" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because that was really a challenge""" start="00:08:23.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""not being able to decipher""" start="00:08:25.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""what I was what I was coding there""" start="00:08:29.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in terms of: I have a document,""" start="00:08:32.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I copy and paste it from some place,""" start="00:08:34.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and from there, I get my answer, I get my PDF,""" start="00:08:37.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I compare whether it is correct or not.""" start="00:08:40.040" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Behind the scenes: \.dir-locals\.el""" start="00:08:47.280" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""So what is behind the scenes?""" start="00:08:47.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I've always suggested that in order""" start="00:08:50.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""to use the feature branch efficiently,""" start="00:08:52.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you create a file with the default values""" start="00:08:55.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you need for your variables,""" start="00:08:59.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and that's this famous .dir-locals.el files.""" start="00:09:02.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""What I do is, I have a generic one""" start="00:09:06.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in my home documents directory,""" start="00:09:10.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and this is used for all the org documents""" start="00:09:12.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that are in subdirectories from there.""" start="00:09:16.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Why? Because normally you will not be""" start="00:09:20.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""changing your fonts that often,""" start="00:09:24.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and if you need, you can always go""" start="00:09:26.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and have your configuration locally.""" start="00:09:29.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So it's this point where I'm collecting""" start="00:09:33.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""my font configuration and""" start="00:09:38.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for me, this gives me a very, very nice quick start""" start="00:09:40.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for new documents and presentations.""" start="00:09:47.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And there you can even configure a lot of compiler""" start="00:09:49.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and font language management too,""" start="00:09:54.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""so you have everything in a file.""" start="00:09:56.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And the other nice thing for that""" start="00:10:00.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is that you can also include that in a subdirectory.""" start="00:10:04.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And if this subdirectory is something that you're sharing""" start="00:10:08.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in a project with other people,""" start="00:10:13.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you are already configuring the, say,""" start="00:10:14.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""quote, unquote, corporate look and feel for your documents""" start="00:10:17.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in that project for everyone""" start="00:10:23.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and no one else has to care about""" start="00:10:26.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""how this document has to be configured.""" start="00:10:28.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""One of the things that I really like in this approach""" start="00:10:35.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is that it is a grow-as-you-go.""" start="00:10:38.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So, for example, you can start with something like that,""" start="00:10:40.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is I have my fonts, my basic fonts for main,""" start="00:10:44.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is the serif font, for sans,""" start="00:10:48.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is the sans serif font, for maths,""" start="00:10:51.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and for the mono, with some features like to make them scale.""" start="00:10:54.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""This is something that is provided by you""" start="00:10:58.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""through the fontspec package,""" start="00:11:03.740" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you're happy with it, and you work with it,""" start="00:11:05.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and in a given moment,""" start="00:11:08.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you go and you have your own problems""" start="00:11:11.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""or your own challenge,""" start="00:11:14.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you need to have, for example, emojis for one of the fonts,""" start="00:11:15.780" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and what you do is, in this case, you just add the emojis""" start="00:11:20.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""as a fallback font in the font that where you want to replace this.""" start="00:11:24.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""This is what I'm doing right now for this presentation, and you will see...""" start="00:11:31.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""You can always, as I've said,""" start="00:11:37.340" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you can always have your dir-locals,""" start="00:11:39.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you can copy that into a working directory""" start="00:11:42.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which needs special adaptations or has special needs,""" start="00:11:46.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and from there, you have that directory""" start="00:11:49.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""with your modified or customized dir-locals.el file.""" start="00:11:54.120" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""When fontspec is not enough""" start="00:11:59.080" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""So, fontspec is normally enough,""" start="00:11:59.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""but sometimes, you can't control all the fonts""" start="00:12:05.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""with fontspec only, and there you have a polyglot here""" start="00:12:09.380" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and babel coming to your help.""" start="00:12:15.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""This may also be the case""" start="00:12:19.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that you are working in an intended language,""" start="00:12:21.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I don't know which, but an intended language, and you found,""" start="00:12:25.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you wanted to see how that was configured,""" start="00:12:28.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you found the latest example""" start="00:12:31.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that used Babel or Polyglossia.""" start="00:12:35.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""The exporter provides you variables""" start="00:12:38.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""to configure both fontspec, Polyglossia and Babel.""" start="00:12:42.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So just as an example of how I picture this is,""" start="00:12:48.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""uh, you find it in the Internet,""" start="00:12:56.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""something like that, uh, something like this,""" start="00:12:59.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because you have your document and you need Thai.""" start="00:13:01.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So, and I found an example in the internet""" start="00:13:05.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that tells me that I'm going to be using Babel.""" start="00:13:10.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Main is going to be English.""" start="00:13:13.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And I'm also going to have Thai.""" start="00:13:15.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And then they tell me that, for English,""" start="00:13:20.340" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I'm going to be using Noto Serif for the main,""" start="00:13:23.841" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for the main of the serif font,""" start="00:13:26.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Noto Sans for the sans font,""" start="00:13:30.083" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and then when I'm writing things in Thai,""" start="00:13:31.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I'm going to be using Noto Serif Thai and Noto Sans Thai.""" start="00:13:35.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""That's what I see in the Internet.""" start="00:13:41.107" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So what you can always do, what you would do in this case,""" start="00:13:42.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is I'm going to get and map the font configurations""" start="00:13:47.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""from the latest into this variable.""" start="00:13:54.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Things that you have to take into account here""" start="00:13:59.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is, for example, the language.""" start="00:14:03.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""The language here is Thai. You have the language""" start="00:14:05.108" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that you're intending this font for is Thai.""" start="00:14:07.775" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So this appears here. In case you don't have any language,""" start="00:14:10.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""like in the first two lines,""" start="00:14:16.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you just say that the language is nil,""" start="00:14:19.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is the language for the default language.""" start="00:14:21.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""The other thing is in my example,""" start="00:14:23.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in this example that I found in the Internet,""" start="00:14:26.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I have my properties for the fonts in this part in LaTeX,""" start="00:14:29.375" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I put them as properties here.""" start="00:14:40.175" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""That's the whole idea behind the feature branch.""" start="00:14:43.908" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""The babelprovide part is generated or is also integrated""" start="00:14:53.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""from the Org header, mainly from the language line.""" start="00:15:01.641" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""We have a variable in case you need to tweak it,""" start="00:15:11.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""but normally the defaults provided by Org are good enough.""" start="00:15:14.640" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Rationale behind my take at LaTeX font management""" start="00:15:21.080" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""So what is the rationale behind my take at LaTeX font management?""" start="00:15:21.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""That's something that might be something very personal.""" start="00:15:27.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""When am I using fontspec?""" start="00:15:31.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I'm using fontspec when I'm with Lua- or xelatex,""" start="00:15:33.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I want fonts that are different""" start="00:15:37.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""from those specified in the LaTeX class.""" start="00:15:40.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""That's point number one. I will also go for fontspec""" start="00:15:42.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""when I need to support scripts,""" start="00:15:49.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""but I'm missing in the fonts I use,""" start="00:15:52.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I can use fallback fonts for that. I have two.""" start="00:15:54.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""The only limitation I have here is the following:""" start="00:15:59.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""all languages must be left to right.""" start="00:16:05.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And if you don't say anything at all,""" start="00:16:09.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""the LaTeX backend assumes that you want the dates,""" start="00:16:12.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""standard names for the abstract and so on""" start="00:16:16.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in American English, if you're using them.""" start="00:16:18.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""In many cases, you're not using any sort of""" start="00:16:21.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""abstract, table of contents, and so on,""" start="00:16:24.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you don't need that.""" start="00:16:26.275" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""The important thing is maybe date management.""" start="00:16:27.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""If you need dates, headings""" start="00:16:34.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""or anything in any other language or locale,""" start="00:16:36.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""then yes, then you need to use Babel or Polyglossia.""" start="00:16:40.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Choice, Depends. Can use polyglossia here,""" start="00:16:46.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""or you can use Babel, whatever you want.""" start="00:16:52.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Also, in some cases, it will depend""" start="00:16:56.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""if you've been researching a bit""" start="00:16:58.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""of how this is done with pure LaTeX,""" start="00:17:00.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""it will be also depending on, uh,""" start="00:17:02.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""on the examples that you get.""" start="00:17:05.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So, what can you, when you are using""" start="00:17:07.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Babel or Polyglossia here, what do you have?""" start="00:17:11.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""You have your dates, your headings, and so on.""" start="00:17:12.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""You might need to control the text""" start="00:17:16.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in the sense that what passage""" start="00:17:21.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is written in what language.""" start="00:17:22.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""For example, for things like hyphenation""" start="00:17:24.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and some ways of writing the hyphens in a""" start="00:17:29.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and direct speech and things like that.""" start="00:17:37.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And the other place where you need""" start="00:17:42.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""other Babel or Polyglossia here,""" start="00:17:45.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you will see that, because all examples""" start="00:17:47.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that you can get for later, in this case,""" start="00:17:50.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""is when you have a language""" start="00:17:53.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that uses right to left alignment""" start="00:17:56.141" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""like Arabic, Hebrew and others.""" start="00:17:59.408" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So one note of, I would say, care is you always use the,""" start="00:18:06.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""if you use Unicode fonts""" start="00:18:14.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that includes the scripts as you need,""" start="00:18:16.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you will have done, that will be a great leap for you""" start="00:18:19.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because that simplifies the configuration a lot.""" start="00:18:28.240" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demonstrations""" start="00:18:34.480" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""Now, a couple of demos.""" start="00:18:34.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I don't know if you've noticed""" start="00:18:36.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""first demo is that I'm using""" start="00:18:39.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""fonts that are not the official fonts""" start="00:18:43.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in this Beamer template,""" start="00:18:47.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is by the way Boadilla.""" start="00:18:48.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""This would be the first thing.""" start="00:18:51.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So I've been using other fonts,""" start="00:18:53.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and they are, at least from what I get in class,""" start="00:18:56.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""they are more readable than the official...""" start="00:19:01.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""than the default fonts in Polyglossia,""" start="00:19:03.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that you get in Babel for the Boadilla theme.""" start="00:19:06.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Another thing is what I've told you,""" start="00:19:12.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I have my own things like emojis.""" start="00:19:14.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Now, if you allow me for a second,""" start="00:19:18.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I'm going to switch to the Emacs""" start="00:19:22.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is running behind the scenes to show you what.""" start="00:19:27.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Okay, fine. So, this is the presentation.""" start="00:19:36.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that I have here, and as you see,""" start="00:19:42.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I'm using Lua LaTeX and just fontspec,""" start="00:19:44.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""given I don't know why I would need this,""" start="00:19:54.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""this is an English presentation,""" start="00:19:59.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""but just to show you what you can do,""" start="00:20:01.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""if I go back here, and I go to the beginning of the presentation,""" start="00:20:03.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and now what...""" start="00:20:09.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""[Ihor]: I don't think you're showing anything""" start="00:20:11.172" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""[Pedro]: Oh, thank you.""" start="00:20:12.941" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Okay, this is the presentation, right?""" start="00:20:18.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So what I'm going to do is, I'm going to go back""" start="00:20:21.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I'm going to show the full screen.""" start="00:20:23.541" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And in this full screen,""" start="00:20:31.201" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you see the presentation on one side""" start="00:20:32.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you see Emacs on the other side. Oh, still nothing.""" start="00:20:34.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Yeah, we're not seeing your screen at the moment, sorry.""" start="00:20:40.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Oh, thank you. Thank you for that.""" start="00:20:44.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Now it's starting to come. Okay. Yay! Fine.""" start="00:20:47.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So this presentation, I've done it with Lua LaTeX,""" start="00:20:52.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and what I add here is fontspec and English language.""" start="00:21:00.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Just to show you, but with the same configuration,""" start="00:21:06.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""with the same fontspec configuration,""" start="00:21:10.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""but adding Polyglossia.""" start="00:21:11.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I just have enough with adding Polyglossia""" start="00:21:20.474" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""with the Spanish language to get my dates correctly,""" start="00:21:23.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and this is something... I'm going to see the date in English,""" start="00:21:28.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and if I now go and recompile it, in a couple of seconds,""" start="00:21:32.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you will see that the date is in Spanish.""" start="00:21:46.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""We are using the same... Which I can show, by the way.""" start="00:21:49.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I see just by adding polyglossia here,""" start="00:21:53.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I can get my dates in Spanish.""" start="00:21:58.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""What... I have included the dir-locals""" start="00:22:02.340" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""in these lines, but just to discuss it a bit more.""" start="00:22:09.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I have it for all the presentations.""" start="00:22:16.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I think it was here. No. For the demo,""" start="00:22:19.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for the presentations I use for Emacs conferences,""" start="00:22:24.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I have it, and it's something like this.""" start="00:22:28.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Actually, you don't need a fallback""" start="00:22:33.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for the main font here""" start="00:22:37.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because the presentations are done with the sans font,""" start="00:22:40.108" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""so the only thing that I would really need""" start="00:22:44.608" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""would be something like this.""" start="00:22:46.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""This can be commented, and the same happens here""" start="00:22:48.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""with the mono. This can be also commented.""" start="00:22:53.920" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo: Emoji""" start="00:22:57.475" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""The only thing where I would really need""" start="00:22:57.475" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""a fallback font is here,""" start="00:23:00.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and what this is telling me is that""" start="00:23:02.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you have a fallback for the emoji,""" start="00:23:04.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for the emoji script,""" start="00:23:07.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and you need to use the Apple Color Emoji font""" start="00:23:09.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""with a modifier,""" start="00:23:14.741" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which in this case is that you need""" start="00:23:15.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""to have the Harfbuzz renderer.""" start="00:23:18.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""That's the only thing that you really need.""" start="00:23:22.875" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Where do I get all these things from?""" start="00:23:24.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""All these things I get from the different parts""" start="00:23:26.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and from different scripts in the Internet.""" start="00:23:29.040" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo: Letter""" start="00:23:33.180" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""I also have a couple of other things to show.""" start="00:23:33.180" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""For example, first of all, I do not need this.""" start="00:23:38.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""This is a letter that I've been writing this morning""" start="00:23:42.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I'm not using the feature branches at all,""" start="00:23:44.750" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""because I just needed a sans font,""" start="00:23:55.641" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and it's going to be a letter that I'm writing in""" start="00:23:58.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""with the sans font, and the only thing I need""" start="00:24:02.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""was Spanish polyglossia for the date.""" start="00:24:06.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Anyhow, how did... What was my first thing that I did""" start="00:24:08.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""with the back end? Back in I think it was April,""" start="00:24:14.720" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""we had a... this comes from the mailing list,""" start="00:24:19.640" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""we had someone who had this problem right,""" start="00:24:23.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and he wanted to add emojis,""" start="00:24:26.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and he had problems with the verbatim font,""" start="00:24:29.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and that's how everything got started.""" start="00:24:33.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""If you now go and I get my LaTeX for that running.""" start="00:24:35.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Well, I actually, all my LaTeX is supported for that.""" start="00:24:43.860" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And this was what I showed in one of the Emacs, Org Mode meetups.""" start="00:24:50.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And there you see that we have the emojis.""" start="00:24:58.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""We had the fonts for the different things. We had maps.""" start="00:25:00.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And you could even go and add scripts""" start="00:25:06.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and little passages and different scripts.""" start="00:25:13.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And this was done with the same principles that I want.""" start="00:25:16.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I have my main font. I have the emojis.""" start="00:25:22.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I want, I have my son's phone and I have the emojis,""" start="00:25:25.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""the Han for Japanese and the Kana for Japanese,""" start="00:25:30.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""so that these characters here,""" start="00:25:32.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""both in the sons and in the serif passages""" start="00:25:36.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""are included correctly in the PDF.""" start="00:25:40.680" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo: Side by side""" start="00:25:44.400" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""And a third thing of what you can do...""" start="00:25:44.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I've also shown this, so this is more""" start="00:25:50.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for people who have not seen it.""" start="00:25:53.440" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""This is a side-by-side passage of...""" start="00:25:55.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""well, actually, the beginning of the analysis by Xenophon""" start="00:26:01.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""both in in Greek and in German, with some comments.""" start="00:26:04.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And if I go... This is done with Polyglossia.""" start="00:26:12.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""If I go once again and produce""" start="00:26:18.680" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""the PDF for this... Just a second...""" start="00:26:24.241" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Come on. There you are. You get this.""" start="00:26:38.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And there you see different fonts.""" start="00:26:41.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Which fonts am I using for this?""" start="00:26:46.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I'm using for the main font for me is FreeSerif.""" start="00:26:48.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""This listing is produced with DejaVu Sans Mono.""" start="00:26:53.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And using Polyglossia here, I'm able to go and define""" start="00:27:01.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""the Greek polyton for the variant,""" start="00:27:12.900" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for the serif variant with the Noto Serif font,""" start="00:27:15.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""just to differentiate it from the German text.""" start="00:27:18.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And nice thing is that both in the German text""" start="00:27:26.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you see for example here, and with the Greek text,""" start="00:27:30.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""everything is scaled to match""" start="00:27:37.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""the lower case of the main font, which is FreeSerif.""" start="00:27:40.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So that everything looks""" start="00:27:44.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""extremely uniform and nice to read.""" start="00:27:45.880" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""So that's what you want to do.""" start="00:27:49.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""That's what you can do with this.""" start="00:27:53.760" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Just a couple of final words on this.""" start="00:27:56.520" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Thanks""" start="00:28:12.600" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""I want to thank once again Juan Manuel Macias and Jing Huang""" start="00:28:12.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for what they have shared.""" start="00:28:16.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And I also want to thank everybody""" start="00:28:19.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""for productive contributions to the discussion.""" start="00:28:24.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I'm saying this because I think I need a longer rest""" start="00:28:26.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and I'm going to be leaving""" start="00:28:32.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""the feature font untouched for a couple of months""" start="00:28:37.040" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""so that people can take... the feature branch""" start="00:28:39.608" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""untouched for a couple of months""" start="00:28:42.221" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""to see if people want to use it, and how they want to use it,""" start="00:28:43.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and then maybe in the future, we can discuss""" start="00:28:47.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""if we want to integrate it or not,""" start="00:28:49.920" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""or if people need it and all that. Now questions, comments?""" start="00:28:52.560" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""[Ihor]: I think there was one question on Etherpad for...""" start="00:29:24.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""[Pedro]: Beautiful. I think that goes beyond fonts right.""" start="00:29:39.241" video="mainVideo-latex" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What about video (mp4) support for ox-latex?""" start="00:29:47.120" video="mainVideo-latex" id="subtitle"]]</div>[[!template text="""Someone is asking what about how is about video""" start="00:29:47.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""mainly MP4 support on ox-latex.""" start="00:29:52.840" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""&quot;I started the presentations with many videos.""" start="00:29:56.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""This is something that really pushed me back using ox-latex.&quot;""" start="00:29:58.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""What I would say to this is, I mean this goes beyond""" start="00:30:14.740" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""what we're discussing here with fonts.""" start="00:30:18.800" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I would advise you to go and get the same""" start="00:30:24.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""or have the same thing that I did,""" start="00:30:29.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which was, first of all, try to write it in LaTeX,""" start="00:30:35.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and then, once you have the minimal working examples,""" start="00:30:42.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""you can get the LaTeX parts""" start="00:30:49.600" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""integrated into your own presentation.""" start="00:30:53.160" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""That's what I've been doing.""" start="00:31:00.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""By the way, I still do it, for example, not in this,""" start="00:31:01.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""but for my lectures,""" start="00:31:04.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""I have a lot of... I'm using a lot of ticks""" start="00:31:06.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""to do graphs and animated graphs.""" start="00:31:09.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And that's `#+begin_export latex` `#+end_export` LaTeX.""" start="00:31:12.480" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""That's what I'm doing.""" start="00:31:18.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""[Ihor]: Videos are generally a bit tricky because you cannot...""" start="00:31:24.280" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Not every viewer will play them.""" start="00:31:27.275" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""so I think there is something called pdfpc that can,""" start="00:31:31.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""this provides a LaTeX package""" start="00:31:35.120" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""where you can include videos,""" start="00:31:37.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and then they can be played through that specific program.""" start="00:31:39.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And JavaScript embedding,""" start="00:31:44.400" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""that can only be done through Acrobat Reader,""" start="00:31:46.240" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""which is like also finicky. Sure, yes.""" start="00:31:50.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""[Pedro]: As you said, there are many things that need to be changed.""" start="00:31:54.520" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""But I mean it's always a thing of taking it""" start="00:32:04.000" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and trying to see what you can do""" start="00:32:07.200" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and what the specifics are.""" start="00:32:11.360" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""Maybe this can be done with Acrobat""" start="00:32:13.320" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""and with a couple of extra packages and who knows.""" start="00:32:17.080" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""And you can always keep it as as LaTeX""" start="00:32:23.960" video="mainVideo-latex" id="subtitle"]]
+[[!template text="""as fragments inside Org, I think. Any other questions?""" start="00:32:26.360" video="mainVideo-latex" id="subtitle"]]
+
+</div>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..3c1f77b7
--- /dev/null
+++ b/2025/info/latex-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 33-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-latex>
+Etherpad: <https://pad.emacsconf.org/2025-latex>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-latex"><source src="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--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-latex" data="""
+00:00.000 Introduction
+00:41.400 Motivation
+02:53.360 Evolution
+06:02.480 What do you get from the feature branch?
+08:47.280 Behind the scenes: .dir-locals.el
+11:59.080 When fontspec is not enough
+15:21.080 Rationale behind my take at LaTeX font management
+18:34.480 Demonstrations
+22:57.475 Demo: Emoji
+23:33.180 Demo: Letter
+25:44.400 Demo: Side by side
+28:12.600 Thanks
+29:47.120 Q: What about video (mp4) support for ox-latex?
+
+"""]]<div></div>Duration: 32:34 minutes<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/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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.webm">Download --main.webm (65MB)</a></li><li><a href="https://toobnix.org/videos/watch/9be33a61-e67c-4eee-8fbd-3aca2ce13dab">View on Toobnix</a></li><li><a href="https://youtu.be/4nkFEd73UOE">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/latex-nav.md b/2025/info/latex-nav.md
new file mode 100644
index 00000000..6bd2357a
--- /dev/null
+++ b/2025/info/latex-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/gnus">Reading and writing emails in GNU Emacs with Gnus</a>
+Next by track: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a>
+Track: <span class="sched-track General">General</span>
+</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..c0499c46
--- /dev/null
+++ b/2025/info/llm-after.md
@@ -0,0 +1,919 @@
+<!-- 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
+
+<div class="transcript transcript-qanda"><a name="llm-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Q: My biggest question with AI code editors trying to integrate with Emacs is -- are the AI code editors able to read unsaved buffers and not just saved files?""" start="00:00:00.000" video="qanda-llm" id="subtitle"]]</div>[[!template text="""So let's, I'm just going to answer""" start="00:00:00.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""the questions as I see them on the pad.""" start="00:00:01.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""So yeah, this first question is really good.""" start="00:00:04.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I think it's actually this great thing""" start="00:00:07.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""that I did not mention is that like,""" start="00:00:09.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""if you have unsaved buffers,""" start="00:00:12.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""which is, you know, when you're actually doing editing,""" start="00:00:14.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""most buffers are unsaved.""" start="00:00:17.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""really you need something tightly integrated with Emacs""" start="00:00:22.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""to deal with that.""" start="00:00:25.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""So things like, you know,""" start="00:00:27.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""I demonstrated Copilot,""" start="00:00:29.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""I demonstrated Gptel,""" start="00:00:30.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""things like those things, things like Ellama,""" start="00:00:32.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""these things will all work with unsaved buffers""" start="00:00:35.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""because they work via, you know, the input is the buffer.""" start="00:00:38.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""as opposed to a file.""" start="00:00:43.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""Things like Claude Code, Gemini Code, et cetera,""" start="00:00:45.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""those are working with files.""" start="00:00:48.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""They have no idea what is going on with your buffers.""" start="00:00:49.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""And it could be that you can solve this problem""" start="00:00:51.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""by using this thing called MCP,""" start="00:00:55.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""which kind of gives the coding agent""" start="00:00:56.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""a way to see anything in particular.""" start="00:01:02.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""In this case, it would be Emacs""" start="00:01:05.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""and the state of your buffers.""" start="00:01:06.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""But I think that's not a particularly great solution""" start="00:01:07.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""if that's how you want to work.""" start="00:01:11.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""But I think that's kind of like""" start="00:01:13.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""if you're in the Claude Code""" start="00:01:15.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""that kind of world where you know things are happening,""" start="00:01:17.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""basically through a terminal.""" start="00:01:19.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's okay, like you typically""" start="00:01:24.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""would not be doing a mix of things.""" start="00:01:26.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""You would just be doing things either""" start="00:01:28.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""in one place or the other place.""" start="00:01:30.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""You know, it could be that you switch off""" start="00:01:32.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""from one place to another,""" start="00:01:33.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""but you wouldn't be doing both at the same time.""" start="00:01:34.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""And it's kind of a, you tend to just fall into one,""" start="00:01:36.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know,""" start="00:01:40.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""editing outside the editor or editing inside the editor.""" start="00:01:41.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I find myself switching between the two""" start="00:01:44.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""when I use those kinds of tools.""" start="00:01:47.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""So David, let me interrupt you for just one moment.""" start="00:01:48.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""I want to just take care to read out""" start="00:01:51.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""the question that we're answering.""" start="00:01:53.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""The question was, my biggest question with AI code editors""" start="00:01:55.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""trying to integrate with Emacs is,""" start="00:01:59.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""are the AI code editors able to read unsaved buffers""" start="00:02:01.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""and not just saved files?""" start="00:02:04.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""Sorry. Yes. Yeah. Thank you for reminding me to.""" start="00:02:06.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""I will read the questions from now on.""" start="00:02:11.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""But yes, that's what I think about.""" start="00:02:13.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""that interesting questions about unsaved buffers.""" start="00:02:16.600" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Personally I don't agree with the comment you made about VS Code usage dying out because I see companies/products pushing for tightly-integrated VS-Code agents/products like Windsurf\. Thoughts?""" start="00:02:20.320" video="qanda-llm" id="subtitle"]]</div>[[!template text="""The next question is,""" start="00:02:20.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""I don't agree with the comment you made""" start="00:02:22.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""about VS Code usage dying out""" start="00:02:23.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""because I see companies and products""" start="00:02:25.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""pushing for tightly integrated agent""" start="00:02:26.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""and products like Windsurf.""" start="00:02:28.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""So thoughts on that?""" start="00:02:31.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""Yeah, I mean, it's really hard""" start="00:02:33.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""to be certain of anything,""" start="00:02:35.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""like things are changing very fast""" start="00:02:37.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""and it's very hard to predict the future.""" start="00:02:38.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""But the trend I see is that um,""" start="00:02:40.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""the sort of outside editing experience""" start="00:02:47.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""where you just kind of instruct a model,""" start="00:02:50.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""what to do is getting better.""" start="00:02:53.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""And as long as that keeps getting better,""" start="00:02:56.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think that's going to lessen the demand""" start="00:02:58.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""for these tightly integrated editing experiences.""" start="00:03:00.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""So it could be that, um, a lot of people,""" start="00:03:04.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""especially in, you know, corporate environments""" start="00:03:10.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""just start using,""" start="00:03:12.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""they're going to use whatever is""" start="00:03:14.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""going to make the most productive.""" start="00:03:15.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I think right now, it's not clear that that will be,""" start="00:03:17.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, the very agent-based, you know,""" start="00:03:22.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""command line-centric way of doing things.""" start="00:03:25.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""But it certainly, the trend is, if that continues,""" start="00:03:27.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think it probably will be like that.""" start="00:03:31.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I think we'll have to see.""" start="00:03:33.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""I don't think your opinion is unreasonable.""" start="00:03:35.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""I guess I'm kind of cautiously saying""" start="00:03:37.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think it's gonna be the opposite, but I guess we'll see.""" start="00:03:40.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like, let's reconvene in a year and see what happens.""" start="00:03:43.200" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you have any thoughts about the environmental cost of using LLMs - either the training of models we can download and use locally, or the larger, commercial models used from the cloud?""" start="00:03:47.760" video="qanda-llm" id="subtitle"]]</div>[[!template text="""Uh, the 3rd question answer,""" start="00:03:47.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""do you have any thoughts about the environmental costs""" start="00:03:49.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""of using either the training""" start="00:03:55.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""of the models are we can download or use locally""" start="00:03:57.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""or the larger commercial models used from the cloud.""" start="00:03:59.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""Um, I think. The, you know, I'm on social media,""" start="00:04:02.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""probably a little bit more than I should be.""" start="00:04:09.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I do see a lot of discussion there""" start="00:04:13.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""and a lot of concern about the environmental costs of using LLMs.""" start="00:04:15.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""I've looked into this as I'm also concerned""" start="00:04:18.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""about keeping my environmental footprint personally down.""" start="00:04:22.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I do this in many ways,""" start="00:04:27.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I certainly don't want to kind of like blow that all the water""" start="00:04:29.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""because I'm using LLMs so much.""" start="00:04:31.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think that the concerns are mostly overblown.""" start="00:04:35.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""There's a concern that, well, it uses a lot of energy.""" start="00:04:38.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""In aggregate, the total amount of energy""" start="00:04:41.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""used by the data centers in the US is a few percent.""" start="00:04:46.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""And this is a fraction. I think this is like LM's account""" start="00:04:50.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""for something like 20% now""" start="00:04:53.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""of all data center usage, which is a lot.""" start="00:04:56.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""But Those data centers are doing lots of things.""" start="00:05:02.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""They all need to be water cooled.""" start="00:05:03.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""Um, if you like per LLM prompt,""" start="00:05:05.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""the costs are relatively small""" start="00:05:08.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""and by relatively small, I mean,""" start="00:05:11.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, people have said online,""" start="00:05:13.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""well, it's like a few bottles of water per prompt.""" start="00:05:15.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""That, that is not true. It is much, much less than that.""" start="00:05:17.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's a fraction of that.""" start="00:05:20.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""So, uh, I don't think the answer is nothing,""" start="00:05:21.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I would say it's, I would say you probably,""" start="00:05:25.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""if you want the most bang for your environmental buck,""" start="00:05:28.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""probably the best thing for you to do""" start="00:05:30.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""is take less flights and things like that.""" start="00:05:32.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like, yes, you can cut down on this,""" start="00:05:35.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I think it's pretty marginal at the moment.""" start="00:05:37.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""We do probably need to think about the total costs""" start="00:05:40.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""like of humanity using all of this.""" start="00:05:43.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like a lot of stuff you'll see""" start="00:05:44.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""corporations are using a lot of these things.""" start="00:05:46.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""And so like, just like if you look""" start="00:05:48.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""at water usage or energy uses in total,""" start="00:05:52.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""it's like really corporations that are using this.""" start="00:05:54.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""So there might, there's a lot of leverage there""" start="00:05:56.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""to make things more efficient as opposed to personal use.""" start="00:05:58.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I think it's wise to be cautious,""" start="00:06:01.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I think it's okay, I think, at least for personal use.""" start="00:06:06.120" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I must say, I liked your conclusion, but I differ insofar as you said that VS Code differ from Emacs because the former is not as easy to adapt as the latter\. Why should Microsoft not adapt VS Code as we adapt Emacs for the new era of coding? And why would VS Code be harder hit? Could you please elaborate on this point?""" start="00:06:09.080" video="qanda-llm" id="subtitle"]]</div>[[!template text="""The next question is another,""" start="00:06:09.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""yeah, this is also disagreeing with me about VS Code,""" start="00:06:13.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""but it says, I must say I liked your conclusion,""" start="00:06:20.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I differ insofar as you said that VS Code differs from Emacs""" start="00:06:23.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""because the former is not as easy to adapt as the latter.""" start="00:06:26.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""But why should Microsoft not adapt VS Code""" start="00:06:30.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""as we adapt Emacs for the new era of coding?""" start="00:06:33.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""And why would VS Code be harder hit?""" start="00:06:35.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""Could you please elaborate on this point? Yeah, thanks.""" start="00:06:38.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""This is a good question.""" start="00:06:43.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think maybe I wasn't as sharp on my point as I could be.""" start="00:06:46.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""Because I think the core""" start="00:06:50.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""of what I'm saying is like, there is a going to be a trend.""" start="00:06:51.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""I believe there will be a trend away from editing.""" start="00:06:56.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""And if we are going to be editing less,""" start="00:06:58.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think VS Code, like people will be in editors less.""" start="00:07:01.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""And that means people will be in VS Code less,""" start="00:07:04.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""people will probably be in Emacs less.""" start="00:07:06.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""And yes, I think you can, VS Code""" start="00:07:09.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""is to some degree extensible.""" start="00:07:13.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I think there's less of a community, or that is,""" start="00:07:15.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think the people using Emacs""" start="00:07:21.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""have used Emacs for a long time.""" start="00:07:23.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""They're going to continue to use Emacs.""" start="00:07:25.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""I speak for myself, but I know""" start="00:07:27.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""a lot of people here are kind of like this,""" start="00:07:28.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""and they're going to just, like,""" start="00:07:30.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""we have a lot of momentum to keep doing things in Emacs,""" start="00:07:33.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""and especially because we have a lot of things""" start="00:07:37.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""that we already do in Emacs.""" start="00:07:41.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""We do to-do lists and, you know, with org mode""" start="00:07:42.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""and some people read email""" start="00:07:45.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""and some people are using""" start="00:07:47.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""shells in Emacs and all these things,""" start="00:07:49.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think will make Emacs""" start="00:07:50.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""kind of a better environment""" start="00:07:53.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""if you want to do various editing like things in Emacs.""" start="00:07:55.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""In, you know, in an editing environment,""" start="00:07:59.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""because I think just emails can edit""" start="00:08:05.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""more types of things I think will naturally""" start="00:08:07.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""be a bit more useful than VS code,""" start="00:08:09.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""which people are really just using to edit code""" start="00:08:10.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""and if people find it less useful to edit code.""" start="00:08:14.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think it's VS Code will be harder hit than emails""" start="00:08:16.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""because that's its whole, like, that's in the name,""" start="00:08:20.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""like the whole reason for it""" start="00:08:24.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""to be doing things as to edit code.""" start="00:08:25.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I think that it's it's vulnerable""" start="00:08:27.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""in a way that Emacs isn't""" start="00:08:30.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""just because Emacs is so very...""" start="00:08:31.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, it's, it could do so many things""" start="00:08:34.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""and and people use it for so many different kinds of things""" start="00:08:40.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""that it's I think it's going to be""" start="00:08:42.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""a little bit more resilient.""" start="00:08:46.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""But as I said with the present.""" start="00:08:47.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""For those of us that are using Emacs,""" start="00:08:48.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""it's everywhere for us.""" start="00:08:52.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""Not necessarily everyone is an I live in Emacs person,""" start="00:08:55.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""but whatever you're using Emacs for,""" start="00:08:58.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""it is the thing you reach for to do that thing.""" start="00:09:00.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""Is that touching on the point?""" start="00:09:03.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""Yeah, that's a great way to say it.""" start="00:09:06.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""Thank you. Thank you, Corwin. Yeah.""" start="00:09:09.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""Thank you. Thank you for that question.""" start="00:09:12.440" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think that we are falling behind in productivity as Emacs users? Compared to all these VSCode forks that have 1000 buttons and textboxes everywhere (i\.e\. much richer UIs which are basically webpages)\.""" start="00:09:14.040" video="qanda-llm" id="subtitle"]]</div>[[!template text="""Do you think we're falling behind in productivity as Emacs users""" start="00:09:14.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""compared to all these VS code forks""" start="00:09:18.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""that have a thousand button and text boxes everywhere,""" start="00:09:19.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""which are basically much richer UIs,""" start="00:09:21.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""which are basically web pages?""" start="00:09:24.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""I do think Emacs is falling behind in some ways.""" start="00:09:25.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""I mean, it's definitely showing its age a little bit,""" start="00:09:28.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""especially you mentioned richer UIs""" start="00:09:32.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""that are basically web pages.""" start="00:09:35.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""I mean, this I think is one of the big problems Emacs has""" start="00:09:36.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""is that it uses a very, you know, a much more ancient way""" start="00:09:41.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""of kind of doing UIs that is not particularly flexible""" start="00:09:46.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""and not particularly comfortable for any modern UI coder.""" start="00:09:49.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I think if you look at the Emacs stuff out there,""" start="00:09:55.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""like, yes, you can do a few things with UIs.""" start="00:09:58.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""You can have some amount of UI richness,""" start="00:10:01.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""but it's pretty limited.""" start="00:10:04.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I kind of, if there's one thing""" start="00:10:06.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""I could wish for in Emacs,""" start="00:10:07.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""it's sort of like, I kind of wish Emacs could be on a,""" start="00:10:09.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""could be built on top of basically like Atom or something like that,""" start="00:10:12.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""where it's like a web framework""" start="00:10:18.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""that allows us to write actual rich pages,""" start="00:10:20.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""rich UIs in a modern style using things like CSS""" start="00:10:24.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""instead of the kinds of things Emacs lets you do.""" start="00:10:29.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""But that said, that is an advantage""" start="00:10:33.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""of VS Code and other editors like that.""" start="00:10:37.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think that Emacs does a good job""" start="00:10:38.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""of eventually catching up""" start="00:10:45.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""to all sorts of things people are doing in other editors.""" start="00:10:46.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's often that other editors get there first,""" start="00:10:49.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""but there's a lot of momentum""" start="00:10:52.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""to kind of keep Emacs fresh, keep it modern.""" start="00:10:55.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""And it's pretty easy to- I love that.""" start="00:10:57.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""I forgot about the lag. We do have a little bit of lag,""" start="00:11:00.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I just, I find that very captivating.""" start="00:11:05.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""We have with technologies""" start="00:11:08.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""like Apache Cassandra in the database world,""" start="00:11:10.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""we have this idea of eventual concurrency.""" start="00:11:12.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""And you make me think with Emacs,""" start="00:11:14.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""we have this idea of eventual feature parity, right?""" start="00:11:17.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""If a feature stays desirable long enough,""" start="00:11:21.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""Emacs will eventually grow it.""" start="00:11:23.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think that's a very contagious idea. Yeah, yeah, thanks.""" start="00:11:25.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""I hope that idea makes sense. And I hope it's correct,""" start="00:11:32.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""because I think that I do want Emacs to continue to succeed.""" start="00:11:35.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I personally, using Emacs,""" start="00:11:39.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""do not feel myself falling behind in productivity.""" start="00:11:43.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""That said, there's a lot of ways that Emacs can improve""" start="00:11:46.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""and should improve on this front.""" start="00:11:51.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""And a lot of these ways are pretty fundamental.""" start="00:11:53.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I kind of hope people pay a lot of attention""" start="00:11:56.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""to some of these more fundamental lower-level Emacs things""" start="00:11:59.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""that really allows the packages""" start="00:12:02.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""to do more richer and better things.""" start="00:12:04.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""Sorry, you have a ton of questions.""" start="00:12:07.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""I shouldn't be doing so much active listening.""" start="00:12:10.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""No, no, I appreciate your input.""" start="00:12:12.280" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I've been using Claude Code extensively\. I recently switched to Agent Shell with Claude Code\. Have you tried it, what are your thoughts?""" start="00:12:17.480" video="qanda-llm" id="subtitle"]]</div>[[!template text="""OK, next is I've been using Claude Code extensively.""" start="00:12:17.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""I recently switched to Agent Shell with Claude Code.""" start="00:12:23.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""Have you tried it? And what are your thoughts?""" start="00:12:25.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""I actually have tried Agent Shell.""" start="00:12:28.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""And currently, I recorded this video like three months ago.""" start="00:12:30.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""So Agent Shell did not exist then.""" start="00:12:34.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""If Agent Shell did exist,""" start="00:12:38.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""I probably would have demoed it as well.""" start="00:12:39.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""Agent shell is great in the sense of it's...""" start="00:12:41.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""It does use comint, which is the way that I think all Emacs users""" start="00:12:45.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""would prefer to interact with something like Claude Code,""" start="00:12:53.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""or any of those types of tools, which is like, I don't.""" start="00:12:57.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""Um, the other,""" start="00:13:00.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""but it's a trade-off it uses like on the back""" start="00:13:02.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""and it's, it has a common buffer.""" start="00:13:05.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""And then on the back end, it's using a protocol""" start="00:13:06.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""to talk to agent, uh, to Claude Code and other things.""" start="00:13:08.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""The problem is this has a lot of problems.""" start="00:13:11.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""For example, like you don't have""" start="00:13:15.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""completion of slash commands.""" start="00:13:16.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""You don't have, um, if you ask to see the, in Claude Code,""" start="00:13:18.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""you can get a visual representation of. the context window.""" start="00:13:22.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""But you can't do this. I mean, last time I tried,""" start="00:13:24.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""I couldn't do this in agent shell.""" start="00:13:30.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's progressing rapidly.""" start="00:13:31.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""But it's not as rich in functionality""" start="00:13:33.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""as using Claude Code directly.""" start="00:13:37.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""On the other hand, because it's letting Emacs be Emacs""" start="00:13:40.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""and using comint, it's a much better experience""" start="00:13:44.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""to actually give instructions.""" start="00:13:49.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think the maximum power, though, is, to me,""" start="00:13:50.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""the best way is still like, you know,""" start="00:13:56.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""do your editing in org mode,""" start="00:13:58.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""and then just tell, you could have,""" start="00:13:59.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, the richer experience of using""" start="00:14:02.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""of using Claude Code in, in it's more like shell like form""" start="00:14:06.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""where everything is, it's much, you know,""" start="00:14:13.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""designed to be used in the terminal,""" start="00:14:15.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""but you don't have to type in that much""" start="00:14:17.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""because you're really doing your typing""" start="00:14:18.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""in order to me, I think there's""" start="00:14:20.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""kind of the sweet spot that I like.""" start="00:14:21.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""Um, but agent-shell is a great step forward""" start="00:14:23.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""and I think it's, uh, it's quite good to use.""" start="00:14:26.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I, I personally use it a lot.""" start="00:14:29.880" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: In terms of agent selection, what has your experience been with different agents, and have you had any success with hosting your own models and using open weights?""" start="00:14:32.120" video="qanda-llm" id="subtitle"]]</div>[[!template text="""Um, OK, so in terms of, next question,""" start="00:14:32.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""in terms of agent selection,""" start="00:14:40.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""what has been your experience with different agents?""" start="00:14:41.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""And have you had any success with hosting your own models""" start="00:14:44.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""and using open weights?""" start="00:14:48.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think there's, you know, many people""" start="00:14:49.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""have many different opinions on this.""" start="00:14:54.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think Claude Code is, most people I know""" start="00:14:56.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""would say Claude Code is probably,""" start="00:15:00.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""sorry, Claude is probably the best for coding right now.""" start="00:15:03.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""Gemini can be very hit and miss even with 3.0,""" start="00:15:07.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""but Claude is quite good.""" start="00:15:09.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""4.5 Opus is actually relatively cheap""" start="00:15:12.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""compared to the previous version of 4.1 Opus.""" start="00:15:16.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""There's other models out there,""" start="00:15:21.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I think most people just stick with Claude""" start="00:15:24.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""because it's very reliable, it's very good,""" start="00:15:29.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""and nothing is obviously better than that.""" start="00:15:34.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""And as far as DeepSeek is pretty good as well,""" start="00:15:36.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""and then much cheaper.""" start="00:15:41.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""I've had some good luck using that locally,""" start="00:15:42.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""but actually the problem is for my day-to-day machine,""" start="00:15:46.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""like my personal machine,""" start="00:15:50.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""it's not powerful enough to run anything locally.""" start="00:15:53.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""And my work machine, it is powerful enough,""" start="00:15:55.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I can spend my company's money at will""" start="00:15:58.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""on more powerful models.""" start="00:16:02.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""So there's really not a lot of incentive""" start="00:16:03.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""for me to run locally.""" start="00:16:05.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think, as far as I know, I haven't heard""" start="00:16:06.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""of local models being incredible,""" start="00:16:12.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I think you can get reasonable quality with them.""" start="00:16:14.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""That is, especially if you're doing""" start="00:16:16.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""relatively simple things,""" start="00:16:19.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think it's pretty reasonable to be using those.""" start="00:16:20.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""Also, they tend to be slower""" start="00:16:25.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""than the models that are elsewhere""" start="00:16:29.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""just because they just have more horsepower,""" start="00:16:33.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""they can churn through those tokens a little quicker.""" start="00:16:36.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Corwin]: So, I'll just break in here to say,""" start="00:16:38.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""we've got about 7 minutes left""" start="00:16:44.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""before we're cutting over this great discussion so far.""" start="00:16:46.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'm very happy to keep going.""" start="00:16:49.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""There's no time limit, but at a certain point,""" start="00:16:50.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""I may have to leave""" start="00:16:55.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""to jump in and prep with the next speaker,""" start="00:16:56.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""but you'll be able to keep going""" start="00:16:58.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""as long as you have the steam for it.""" start="00:17:00.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Andrew]: Yeah, I think we have 3 questions. Yeah, thanks.""" start="00:17:04.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think we have 3 questions.""" start="00:17:06.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""Let's see if we can get through them""" start="00:17:08.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""all in that time period.""" start="00:17:09.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""OK, this one is interesting talk.""" start="00:17:13.268" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'll start by asking it for everything, but is it editing?""" start="00:17:17.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think there's more of a comment than a question.""" start="00:17:20.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""So yes, let us all ask, but is it editing?""" start="00:17:23.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""All right. I can move on to the comment area.""" start="00:17:29.720" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I'm reading angst in your thinking about AI/editing\. What are you excited about?""" start="00:17:33.440" video="qanda-llm" id="subtitle"]]</div>[[!template text="""I'm reading angst in your thinking about AI editing.""" start="00:17:33.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think that's true.""" start="00:17:40.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""It says, and the question continues with,""" start="00:17:41.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""what are you excited about?""" start="00:17:44.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""Wow, that's an interesting question.""" start="00:17:45.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""I mean, I think there are possibilities.""" start="00:17:48.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like, yes, people are going in sort of a relatively obvious direction""" start="00:17:53.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""with LLMs right now.""" start="00:17:58.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I think there's lots of opportunities,""" start="00:18:01.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""clever opportunities to do things""" start="00:18:04.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""we couldn't have thought of... Things that are useful,""" start="00:18:07.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""but in ways that are not super obvious to us,""" start="00:18:11.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""and I think I'm still excited""" start="00:18:14.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""about the possibilities of using them in ways that are super helpful""" start="00:18:17.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""and different than normal. I'll give you an example.""" start="00:18:22.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""This is something that I intend to, I think,""" start="00:18:29.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""post on Reddit in a few days,""" start="00:18:33.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I have a extension to eshell""" start="00:18:36.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""where you can prefix a command with at,""" start="00:18:39.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""and then just tell it what you want to do,""" start="00:18:43.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""and it will substitute the command""" start="00:18:45.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""that you are thinking of. Because often, I do not remember.""" start="00:18:46.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""I never remember, like, how do you find a file in a directory tree,""" start="00:18:51.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, recursing? Who can remember how to do that?""" start="00:18:56.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's like a find, and there's like a dash print there somewhere.""" start="00:19:00.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""Yes. There are some smart people who remember this""" start="00:19:04.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I am not one of them.""" start="00:19:10.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""And so I think, like, something like this is like, you just type out,""" start="00:19:11.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""find me this file, and it will substitute""" start="00:19:13.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""the correct command.""" start="00:19:17.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think this is, there's a lot of little,""" start="00:19:18.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""little tweaks you could do like, you know, if you want the AI,""" start="00:19:21.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""it could be there for you, and it will help you.""" start="00:19:24.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""And if you don't want it,""" start="00:19:26.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""it's not going to get in your way.""" start="00:19:27.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I think this is where Emacs can really shine.""" start="00:19:28.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""It can really take advantage of LLMs,""" start="00:19:30.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""but still remain true to its kind of editing experience,""" start="00:19:33.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""because it's not forcing you to use LLMs all the time.""" start="00:19:35.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""So thank you for that great question.""" start="00:19:39.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""And then the final question. Yep.""" start="00:19:43.920" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Why does it matter to have a richer UI? All that is left is basically writing and getting the results\.""" start="00:19:47.920" video="qanda-llm" id="subtitle"]]</div>[[!template text="""This final question is, why does it matter to have a richer UI?""" start="00:19:47.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""All this left is basically running and getting the results.""" start="00:19:50.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think maybe this is a response to me complaining""" start="00:19:53.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""about Emacs not having a richer UI before,""" start="00:19:56.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I think it does matter a lot for all sorts of things.""" start="00:19:58.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's hard to kind of explain succinctly,""" start="00:20:03.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""because I'm talking about UI""" start="00:20:07.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""and I'd have to show you things.""" start="00:20:08.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""But it should be just something like, oh I have an error,""" start="00:20:09.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""and I'm using flymake and I'm,""" start="00:20:14.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'm using the... I have options""" start="00:20:15.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""where it'll show me the error in line""" start="00:20:17.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""by underlining things and having a little message,""" start="00:20:19.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""but like, you know what, that message""" start="00:20:22.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""doesn't appear quite right a lot of the times.""" start="00:20:24.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""Or here's another one like. I program in Python a lot.""" start="00:20:26.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""And Python, it's super hard to program in""" start="00:20:30.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""unless you have these little vertical lines""" start="00:20:33.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""that shows you what the indents are. At least I find it.""" start="00:20:35.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""There are two packages that do that.""" start="00:20:37.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""None of them do it particularly well,""" start="00:20:40.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""just because Emacs at its base""" start="00:20:43.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""does not allow you to do this.""" start="00:20:44.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""And so you kind of have to hack it in.""" start="00:20:45.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""And there's lots of ways to mess it up.""" start="00:20:47.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""And when editing, you'll find yourself""" start="00:20:49.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""messing this thing up regularly.""" start="00:20:52.157" video="qanda-llm" id="subtitle"]]
+[[!template text="""So it doesn't look quite clean.""" start="00:20:55.261" video="qanda-llm" id="subtitle"]]
+[[!template text="""And like, there's little artifacts,""" start="00:20:57.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""or, you know, there's little ways that it,""" start="00:20:59.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""it kind of gets things wrong,""" start="00:21:01.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""or you can get things wrong with it.""" start="00:21:02.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I think that, like,""" start="00:21:03.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""there's a lot of issues with that sort of thing.""" start="00:21:07.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""And also, like, you know,""" start="00:21:13.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""what if you want to do something like play a video inline,""" start="00:21:15.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""like, I don't know, you might should be able to do that,""" start="00:21:17.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""you might should be able to do anything.""" start="00:21:19.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""But right now, it just can't. I think""" start="00:21:21.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""a lot of the reason as well...""" start="00:21:23.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, we wanted to be compatible""" start="00:21:25.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""with TRS 80 machines or something like that.""" start="00:21:26.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""This is important, this really is important,""" start="00:21:29.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I hope there's some way""" start="00:21:33.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""that we can kind of eventually figure out""" start="00:21:34.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""how to get the best of both compatibility and""" start="00:21:36.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""more modern UIs. So, you know, we can have more modern UIs""" start="00:21:39.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""for people that have modern machines and other people""" start="00:21:44.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""either do without that functionality""" start="00:21:49.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""or sort of fall back to some reasonable default.""" start="00:21:51.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""So we have about 30 seconds or a minute.""" start="00:21:54.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""I know there's one more question.""" start="00:21:59.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'd love for you to get to it.""" start="00:22:00.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""I just want to make sure that""" start="00:22:01.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""while we're still live on stream,""" start="00:22:02.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""you get a chance to share""" start="00:22:04.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""any closing remarks you might have.""" start="00:22:05.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""Thank you for that. Um, yes.""" start="00:22:06.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""So first of all, I want to thank everyone involved for listening.""" start="00:22:10.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I want to thank the core when I think thanks for moderating this.""" start="00:22:14.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""And Sacha, thank you for putting that together.""" start="00:22:18.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I know there's more people""" start="00:22:21.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""that are working behind the scenes.""" start="00:22:21.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""So thank you all for putting this together.""" start="00:22:23.320" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:22:25.080" video="qanda-llm" id="subtitle"]]</div>[[!template text="""I'm so happy that we all are here. We care about Emacs.""" start="00:22:25.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""We're pushing Emacs forward.""" start="00:22:29.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""We are I think Emacs remains""" start="00:22:31.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""this really remarkable achievement.""" start="00:22:35.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like it's amazing that it exists. It continues to exist.""" start="00:22:37.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""It hasn't got... It's hard.""" start="00:22:41.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's like, really, there's a lot of work to go into it.""" start="00:22:43.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I think let's all just appreciate everyone""" start="00:22:45.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""who contributes and makes all of this possible.""" start="00:22:47.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""Cause it's, if you ever read""" start="00:22:50.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""the emacs-devel mailing list,""" start="00:22:52.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""it's a lot of work, a lot of deep thinking,""" start="00:22:53.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""a lot of careful thinking.""" start="00:22:55.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I think this is really important.""" start="00:22:56.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""So thank you, especially to the maintainers of Emacs""" start="00:22:58.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""and everyone who's contributing to the core experience,""" start="00:23:02.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""all the libraries, all the LLM stuff we mentioned before.""" start="00:23:04.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""You're all doing such a fantastic job.""" start="00:23:07.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's exciting to be here.""" start="00:23:09.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Corwin]: Thank you for your talk, Andrew.""" start="00:23:12.324" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's been just fascinating.""" start="00:23:13.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""If you don't mind, I'd love to jump""" start="00:23:16.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""right over to the last question. OK, let's do that.""" start="00:23:19.760" video="qanda-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I have 45+ years editing, programming\. I'm not sure I can think about things without thinking of buffers, editors etc\. Is this a handicap/should we just have people with no experience with code learn to prompt?""" start="00:23:23.880" video="qanda-llm" id="subtitle"]]</div>[[!template text="""It says, I have 45 plus years editing programming.""" start="00:23:23.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'm not sure I can think about things""" start="00:23:27.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""without thinking of buffers, editors, et cetera.""" start="00:23:29.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""Is this the handicap?""" start="00:23:31.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""Should we have people with no experience""" start="00:23:31.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""with code learning to prompt?""" start="00:23:34.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Andrew]: Well, this is something I do have a strong opinion about.""" start="00:23:35.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""I feel like I do not want to see people that have no experience""" start="00:23:38.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""with code learning to prompt. I think it's very limited""" start="00:23:42.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""what you could do right now with that.""" start="00:23:44.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like you could do, if you could sort of one-shot it,""" start="00:23:46.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""that is like, I have something that's relatively easy,""" start="00:23:48.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""And it could do it, and I'm going to tell it to do it,""" start="00:23:52.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""and then I'm going to give feedback.""" start="00:23:54.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""OK, as long as this is for relatively short-lived things,""" start="00:23:56.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think that works well. But for people who really care""" start="00:24:00.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""about the longevity of their code,""" start="00:24:02.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""really care about software engineering,""" start="00:24:04.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""which is software engineering is very different than just writing code.""" start="00:24:06.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""Software engineering is about maintainability.""" start="00:24:09.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""Software engineering is making sure everything is scalable""" start="00:24:11.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""and all sorts of things that it's unlikely,""" start="00:24:15.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think, that an LLM is going to get right.""" start="00:24:19.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I've seen a lot of bad cases""" start="00:24:21.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""where people who don't understand code""" start="00:24:25.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""are doing things and it's not working well,""" start="00:24:27.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""because they don't understand""" start="00:24:31.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""some of the complexities""" start="00:24:33.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""or some of the concerns that that you might have""" start="00:24:35.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""in maintaining a piece of code.""" start="00:24:36.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I think those people who have lots of experience""" start="00:24:43.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""are the best people to use this.""" start="00:24:45.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I think that's what we're seeing""" start="00:24:46.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""in the industry as well,""" start="00:24:48.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""where more senior people are doing quite well""" start="00:24:49.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""because they're able to use LLMs""" start="00:24:51.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""more effectively than junior people.""" start="00:24:54.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""That may all even out because LLMs get even better,""" start="00:24:56.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""but for now hasn't happened.""" start="00:25:01.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I think, you know, I also have a ton of experience,""" start="00:25:03.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""not 45 years, but a lot. And, and I think that it's those,""" start="00:25:06.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""those years of experience will only help you.""" start="00:25:13.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I think it's great to dip your toes in the water""" start="00:25:14.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""and see what you can do.""" start="00:25:19.640" video="qanda-llm" id="subtitle"]]
+
+</div>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..278178b3
--- /dev/null
+++ b/2025/info/llm-before.md
@@ -0,0 +1,32 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 21-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-llm>
+Etherpad: <https://pad.emacsconf.org/2025-llm>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<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/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://toobnix.org/videos/watch/f6b36893-1f91-4f1a-925f-0d18de0a2433">View on Toobnix</a></li><li><a href="https://youtu.be/U3kbEabBJ_s">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-llm"><source src="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--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-llm" data="""
+00:00.000 Q: My biggest question with AI code editors trying to integrate with Emacs is -- are the AI code editors able to read unsaved buffers and not just saved files?
+02:20.320 Q: Personally I don't agree with the comment you made about VS Code usage dying out because I see companies/products pushing for tightly-integrated VS-Code agents/products like Windsurf. Thoughts?
+03:47.760 Q: Do you have any thoughts about the environmental cost of using LLMs - either the training of models we can download and use locally, or the larger, commercial models used from the cloud?
+06:09.080 Q: I must say, I liked your conclusion, but I differ insofar as you said that VS Code differ from Emacs because the former is not as easy to adapt as the latter. Why should Microsoft not adapt VS Code as we adapt Emacs for the new era of coding? And why would VS Code be harder hit? Could you please elaborate on this point?
+09:14.040 Q: Do you think that we are falling behind in productivity as Emacs users? Compared to all these VSCode forks that have 1000 buttons and textboxes everywhere (i.e. much richer UIs which are basically webpages).
+12:17.480 Q: I've been using Claude Code extensively. I recently switched to Agent Shell with Claude Code. Have you tried it, what are your thoughts?
+14:32.120 Q: In terms of agent selection, what has your experience been with different agents, and have you had any success with hosting your own models and using open weights?
+17:33.440 Q: I'm reading angst in your thinking about AI/editing. What are you excited about?
+19:47.920 Q: Why does it matter to have a richer UI? All that is left is basically writing and getting the results.
+22:25.080 Wrapping up
+23:23.880 Q: I have 45+ years editing, programming. I'm not sure I can think about things without thinking of buffers, editors etc. Is this a handicap/should we just have people with no experience with code learn to prompt?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-llm-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.opus"></audio></div><div></div>Duration: 25:20 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/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.m4v">Download --answers.m4v (94MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.opus">Download --answers.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.webm">Download --answers.webm (91MB)</a></li><li><a href="https://toobnix.org/videos/watch/5243f3a6-3e1e-47db-816d-23434410acff">View on Toobnix</a></li><li><a href="https://youtu.be/K14Beypjarc">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..ef42733a
--- /dev/null
+++ b/2025/info/llm-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/python">Interactive Python programming in Emacs</a>
+Next by track: <a href="/2025/talks/private-ai">Emacs and private AI: a great match</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2025/info/modern-after.md b/2025/info/modern-after.md
new file mode 100644
index 00000000..5d2e542d
--- /dev/null
+++ b/2025/info/modern-after.md
@@ -0,0 +1,482 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="modern-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""New title page (EmacsConf, dec/2025)""" start="00:00:00.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""Hi, my name is Eduardo Ochs,""" start="00:00:00.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and this is my video for the EmacsConf 2025.""" start="00:00:02.360" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Its title is Some Problems of Modernizing Emacs,""" start="00:00:06.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and that is the same title as a video""" start="00:00:09.800" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that I tried to record in March.""" start="00:00:12.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""But my video from March had a good &quot;beginning&quot; and a bad &quot;rest&quot;,""" start="00:00:16.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and I thought, I can't release that because the rest is very bad.""" start="00:00:19.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I need to replace... to re-record the last part of the video.""" start="00:00:23.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""But I never did that.""" start="00:00:27.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So this video is going to be the first 12 minutes""" start="00:00:29.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""of that other video, with another ending.""" start="00:00:33.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And in this other ending, I'm going to show some things""" start="00:00:37.960" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that are very easy to test. And, if people are interested,""" start="00:00:41.440" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""then the rest of the old video will make more sense.""" start="00:00:46.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Anyway, let me start.""" start="00:00:51.800" video="mainVideo-modern" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Old title page (march/2025)""" start="00:00:55.000" video="mainVideo-modern" id="subtitle"]]</div>[[!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"]]
+
+<div class="transcript-heading">[[!template new="1" text="""1\. The main themes of this video""" start="00:01:05.000" video="mainVideo-modern" id="subtitle"]]</div>[[!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 deleted some line breaks here.""" start="00:05:24.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And another thing that I want 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"]]
+
+<div class="transcript-heading">[[!template new="1" text="""2\. Anyone can learn Lisp in one day""" start="00:06:41.000" video="mainVideo-modern" id="subtitle"]]</div>[[!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:44.541" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this is a part of a bigger quote""" start="00:06:46.675" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that I took from a keynote presentation""" start="00:06:50.421" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by Abelson and Sussman, who""" start="00:06:53.041" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""are two dinosaurs of Computer Science...""" start="00:06:54.721" 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"]]
+
+<div class="transcript-heading">[[!template new="1" text="""3\. Lambdas for beginners""" start="00:07:39.000" video="mainVideo-modern" id="subtitle"]]</div>[[!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.775" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""because of this line here, and if we""" start="00:08:32.575" 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.841" 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:53.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""if we did that and if we ran""" start="00:08:57.600" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this expression here, (foo foo)...""" start="00:09:00.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Emacs would do this: it would""" start="00:09:02.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""replace the first `foo` by this""" start="00:09:04.600" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""anonymous function here, it would replace""" start="00:09:06.001" 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:12.041" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and it would evaluate this, and the""" start="00:09:14.460" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""result would be 420.""" start="00:09:16.775" video="mainVideo-modern" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""4\. Lambdas for beginners broken""" start="00:09:20.000" video="mainVideo-modern" id="subtitle"]]</div>[[!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:46.475" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""would be this anonymous function here...""" start="00:09:49.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and now we get this strange thing here.""" start="00:09:52.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So, this is an &quot;old-style lambda&quot;,""" start="00:09:56.320" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this is a &quot;vector-like lambda&quot;,""" start="00:10:00.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and until the middle of 2024""" start="00:10:04.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""beginners could learn a lot of Lisp""" start="00:10:07.600" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by thinking only in terms of""" start="00:10:09.400" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""objects like these...""" start="00:10:11.360" 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:26.340" 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.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to mean all the new objects,""" start="00:10:46.475" 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"]]
+
+<div class="transcript-heading">[[!template new="1" text="""5\. Lambdas for beginners broken (2)""" start="00:10:58.000" video="mainVideo-modern" id="subtitle"]]</div>[[!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.675" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that is very powerful but that is""" start="00:11:37.041" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""very difficult to understand...""" start="00:11:39.641" 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. Note that I said &quot;black box&quot; here.""" start="00:11:44.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Let me explain the term.""" start="00:11:51.340" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""We can open what's inside of `foo`...""" start="00:11:53.401" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""we can open `foo` to see the contents of""" start="00:11:57.540" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the symbol `foo`, and we can try to see""" start="00:12:00.141" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""what's in the function cell of the""" start="00:12:03.008" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""symbol `foo`...""" start="00:12:06.621" 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.941" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and so I'm going to say that""" start="00:12:13.375" 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:24.580" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""so we declare that that is black.""" start="00:12:27.375" 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:36.575" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and in this video I'm going to pretend""" start="00:12:38.975" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that I was not the only person""" start="00:12:41.975" 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:47.008" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that are not so elegant""" start="00:12:51.241" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""as the ones that we had before.""" start="00:12:52.000" video="mainVideo-modern" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""A quick demo (version for the EmacsConf 2025)""" start="00:12:54.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""Anyway... In the beginning of the video,""" start="00:12:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I said that I was going to replace""" start="00:13:00.600" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the second part of my video from March""" start="00:13:02.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by something that was very easy to test.""" start="00:13:06.360" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So this is a quick demo for the _very_ impatient.""" start="00:13:08.800" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I'm recording this in December for the EmacsConf 2025.""" start="00:13:11.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""This is the demo that I'm going to present.""" start="00:13:16.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""The idea is that people can run the demo a first time""" start="00:13:19.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""just to check that everything works""" start="00:13:21.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and to have a notion of how things look like,""" start="00:13:24.400" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and then, in a second moment,""" start="00:13:27.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""they can rerun the demo more slowly""" start="00:13:29.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to understand what each step does.""" start="00:13:32.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So... we are in a file called &quot;00-try-this&quot;...""" start="00:13:34.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and the idea is that we can execute most of this file""" start="00:13:38.800" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""just by typing `f8`​s in the right places.""" start="00:13:42.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Remember that when we type `f8`""" start="00:13:45.360" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""on a line that starts with two red stars,""" start="00:13:47.480" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""eev treats that line as a comment.""" start="00:13:49.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So I'm going to start here... Note that it says in the bottom""" start="00:13:53.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""of the screen that this is a comment.""" start="00:13:58.008" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""We are going to run this to download some files...""" start="00:13:59.741" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Now the files are there...""" start="00:14:09.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""This `find-2a` here shows a certain file""" start="00:14:12.960" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""at the window at the right,""" start="00:14:17.320" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but we don't need to pay attention to that.""" start="00:14:19.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And this thing `load`​s that file.""" start="00:14:22.480" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So when we load that file, it defines some functions here""" start="00:14:24.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that are going to be used by the rest of the examples.""" start="00:14:27.520" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Now we can run this thing here... Note that""" start="00:14:29.800" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""we just defined some functions""" start="00:14:34.020" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and then we ran these functions here... `find-eoutput-2a`...""" start="00:14:34.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and they show some things in the window at the right.""" start="00:14:39.360" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""These things are boring.""" start="00:14:42.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""When we run `adt-insert` with argument 42,""" start="00:14:45.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""it just shows a 42, in this way...""" start="00:14:49.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""The other ones show other numbers... and so on.""" start="00:14:52.400" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And... what happens when we modify""" start="00:14:55.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this function here, `adt-2`,""" start="00:14:59.480" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by adding and removing advices to it?""" start="00:15:02.360" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""The idea is that people can run""" start="00:15:05.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this thing here several times,""" start="00:15:06.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""watching the window at the right,""" start="00:15:08.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""because the results are going to be shown there.""" start="00:15:10.800" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So, in the first moment, when we run...""" start="00:15:14.720" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""no, no, sorry, sorry, let me run it again.""" start="00:15:17.800" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""In the first moment when we run `adt-2`""" start="00:15:21.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""it just shows a 2, and then we modify it in a certain way,""" start="00:15:24.040" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and we run it again,""" start="00:15:28.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and now before showing the 2 it shows a 1, mysteriously,""" start="00:15:29.480" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and then we add something to be run after the 2,""" start="00:15:33.800" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And we run it again,""" start="00:15:37.120" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and now `adt-2` shows these three things.""" start="00:15:38.480" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And then we remove the advices,""" start="00:15:41.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""we remove these other things,""" start="00:15:43.960" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and when we run `adt-2` again, it shows only `;; --&gt; 2`.""" start="00:15:45.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""It's impossible to understand that in the first time,""" start="00:15:49.080" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""so we can run that several times... to see how things work.""" start="00:15:51.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And now we want to understand""" start="00:15:57.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""what changes in the function `adt-2`...""" start="00:16:02.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""how it is modified internally.""" start="00:16:04.960" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I'm calling that the internal view of the function,""" start="00:16:08.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and we are going to compare""" start="00:16:11.480" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""several internal views of the function `adt-2`.""" start="00:16:13.600" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I'm going to reset the function `adt-2`""" start="00:16:16.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by removing the advices and placing the advices on it again...""" start="00:16:20.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and if we just pretty-print this function here,""" start="00:16:25.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the symbol... the value of this symbol here as a function,""" start="00:16:28.508" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""it is something very ugly.""" start="00:16:36.320" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""But if we print it in another way, with `cl-prin1`,""" start="00:16:38.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""then we get something that is much nicer...""" start="00:16:43.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but that is not indented. And if we use this thing here,""" start="00:16:47.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""`cl-prin2` instead of `cl-prin1`, it becomes indented.""" start="00:16:51.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So let's try it again.""" start="00:16:55.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Here is the current view of what is `adt-2`.""" start="00:17:00.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So, the original `adt-insert` is here...""" start="00:17:06.800" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and here are some modifications""" start="00:17:10.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that were added by the advices.""" start="00:17:11.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And we can run these things many times""" start="00:17:13.520" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to understand what each step does.""" start="00:17:16.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""But my suggestion is: in the first time""" start="00:17:19.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""just run everything very quickly...""" start="00:17:21.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and then you run it again,""" start="00:17:23.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""paying attention to the parts that look more interesting.""" start="00:17:25.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Now, I'm going to... Remember that here""" start="00:17:29.120" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I printed the contents of `adt-2` in several different ways,""" start="00:17:37.374" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and now I'm going to show how we can do the same idea""" start="00:17:42.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""of printing something in different ways for lambdas...""" start="00:17:47.120" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that is something that I explained""" start="00:17:51.600" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""in the first part of the video.""" start="00:17:52.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""In this part of the demo we define a function `foo`...""" start="00:17:54.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this `setq` here defines `o` as""" start="00:18:00.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the contents of the function cell of `foo`...""" start="00:18:06.361" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And now we are going to print""" start="00:18:08.960" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that `o` in several different ways.""" start="00:18:13.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""The default way is this one, it's very ugly,""" start="00:18:15.400" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but we can redefine how these things are printed""" start="00:18:19.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by just running these lines...""" start="00:18:22.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and if we pay attention at what's happening""" start="00:18:24.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""at the window at the right,""" start="00:18:28.720" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""we can see that we have several different""" start="00:18:30.520" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""printed representations for the same thing...""" start="00:18:33.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and then at the last step,""" start="00:18:35.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""we reset the printer to the default representation.""" start="00:18:36.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And the details are here.""" start="00:18:41.080" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""If we run these lines here,""" start="00:18:43.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""they show the definitions at the window at the right.""" start="00:18:45.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And this... now comes the difficult part,""" start="00:18:48.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""in which we have to do something""" start="00:18:53.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""besides just running things with F8. We need""" start="00:18:56.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""a help buffer with buttons...""" start="00:19:02.080" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""buttons in the traditional sense,""" start="00:19:04.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and we need to choose a certain button there,""" start="00:19:08.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""or any button there,""" start="00:19:11.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and run `M-x ee-set-button` on that button.""" start="00:19:13.440" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So, let me define a `struct` here,""" start="00:19:17.941" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and this is some help on what is that structure.""" start="00:19:24.720" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I'm going to choose this button here""" start="00:19:29.360" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and I'm going to type `M-x ee-set-button`.""" start="00:19:33.600" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""The message is a bit obscure.""" start="00:19:40.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And now we have something that displays""" start="00:19:43.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""a lot of information about that button...""" start="00:19:47.960" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And we can also run that with just `F8`s.""" start="00:19:51.080" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""By the way, if we want to understand""" start="00:19:53.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the code that's behind these things,""" start="00:20:00.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""we can run this sexp here.""" start="00:20:02.320" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""It is going to show the code here at the right.""" start="00:20:04.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""But anyway, these first lines here...""" start="00:20:07.220" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""they display the output in the echo area... Let's try...""" start="00:20:10.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And each one of them extracts a different part""" start="00:20:15.480" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""of the information on that button.""" start="00:20:20.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And these other lines here create a three-window setting""" start="00:20:22.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""in which the help buffer is shown here,""" start="00:20:26.040" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and the result of some other thing""" start="00:20:29.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""is shown in the third window. Let's try...""" start="00:20:33.120" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So now that we have... well... I said""" start="00:20:39.980" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that we needed to choose a certain button""" start="00:20:46.108" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and run `M-x ee-set-button` there. We have done that...""" start="00:20:48.408" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""so now this variable `ee-button`""" start="00:20:53.440" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""contains information about the button...""" start="00:20:55.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And now we can run this part here""" start="00:20:58.440" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""as many times as we want to...""" start="00:21:01.120" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""try to understand what are the values of these things here...""" start="00:21:03.480" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and how some things start with a value that is very complex""" start="00:21:07.480" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and very difficult to understand,""" start="00:21:11.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and then we extract the more interesting parts.""" start="00:21:13.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And the details, as I said, are here.""" start="00:21:16.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""That was the end of the demo, and my question is,""" start="00:21:22.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""what was your reaction to that?""" start="00:21:26.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""If your reaction was more like &quot;wow&quot; than like &quot;blergh&quot;""" start="00:21:28.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""then you might like the last part of the video that I recorded in March,""" start="00:21:32.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that was very technical...""" start="00:21:37.040" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""When I recorded it, I thought, oh my god, this video is very bad...""" start="00:21:38.400" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""only the hardcore eev users are going to like that,""" start="00:21:42.720" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and there are less than five hardcore""" start="00:21:47.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""eev users in the world...""" start="00:21:51.040" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""But anyway, if you saw that introduction""" start="00:21:52.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and you think that these things are interesting,""" start="00:21:56.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""you can execute any one of these S-expressions here""" start="00:21:59.080" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and take a look at the final part of that video""" start="00:22:03.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that describes how I wrote some functions""" start="00:22:06.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""for exploring buttons. If you execute this sexp here,""" start="00:22:09.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""it plays a part of the video starting from that position.""" start="00:22:14.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""If you execute this one, you go to the subtitles in HTML...""" start="00:22:19.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and if you run this one, you go""" start="00:22:26.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to the subtitles in another format. And... that's it!""" start="00:22:30.560" video="mainVideo-modern" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Mr\. Jingles: My working memory is small""" start="00:22:36.160" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""No, no, sorry, I said &quot;that's it&quot;,""" start="00:22:36.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but I forgot a very important part...""" start="00:22:40.120" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I had prepared this slide here""" start="00:22:42.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to explain some design decisions behind eev""" start="00:22:45.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and why there are so few users of eev... and let me do that.""" start="00:22:48.508" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""The thing is that my working memory is very small,""" start="00:22:53.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and I need examples that are easy to visualize...""" start="00:22:57.920" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""ideally, examples that are easy to run""" start="00:23:01.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and that I can compare the outputs""" start="00:23:04.960" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""of different ways of running them.""" start="00:23:10.308" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""For me, understanding specifications""" start="00:23:12.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""in an API is not enough... examples work much better for me.""" start="00:23:16.360" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Also, I make lots of mistakes when I type...""" start="00:23:20.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""so I need ways to run my executable notes""" start="00:23:24.440" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by just typing `f8` and `M-e`...""" start="00:23:28.400" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and... most people in the #emacs channel and in other places""" start="00:23:31.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""recommend executing sexps by typing `M-:`, like this...""" start="00:23:37.040" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""But I hate that... I think that `M-:` and IELM are""" start="00:23:44.520" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""for people who type well, so not me...""" start="00:23:49.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And also, 99% of what I do is scratch code.""" start="00:23:54.560" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Very few things that I do go""" start="00:23:58.840" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""into &quot;production&quot; - between quotes.""" start="00:24:01.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So most of my tests are not automated tests.""" start="00:24:05.800" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""They are just things that I run with F8,""" start="00:24:10.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and they don't include the expected result.""" start="00:24:12.440" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Many people feel that this is very, very, very wrong.""" start="00:24:15.880" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Tests MUST MEAN automated tests.""" start="00:24:19.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Also, and this is very frustrating,""" start="00:24:23.280" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""eev has lots of &quot;non-users&quot;,""" start="00:24:25.640" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I mean, people who have tried to use it,""" start="00:24:28.400" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but they said that they couldn't figure out how to use it.""" start="00:24:31.520" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""They couldn't understand""" start="00:24:34.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""what would be the workflows for eev.""" start="00:24:36.160" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And that's the same that happens with me with code blocks in Org...""" start="00:24:38.080" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I'm still at the point in which code blocks in Org just feel wrong.""" start="00:24:43.680" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I still don't understand how to organize my workflows around code blocks.""" start="00:24:48.760" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I said that eev has very few users,""" start="00:24:55.200" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and they are all very weird and very busy,""" start="00:24:59.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and I decided that all my blog-ish posts about eev""" start="00:25:02.240" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""would be things that they can run in a few minutes...""" start="00:25:06.360" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""just like the demo that I showed a few minutes ago.""" start="00:25:09.720" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I said &quot;like the examples in the rest of the video&quot;,""" start="00:25:13.040" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but I forgot this slide,""" start="00:25:16.120" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and I'm recording this after the demo.""" start="00:25:17.400" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So... that's it. Thanks!""" start="00:25:19.640" 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..33154112
--- /dev/null
+++ b/2025/info/modern-before.md
@@ -0,0 +1,24 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 26-min talk ; Q&A: IRC Etherpad: <https://pad.emacsconf.org/2025-modern>
+Etherpad: <https://pad.emacsconf.org/2025-modern>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-modern"><source src="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--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-modern" data="""
+00:00.000 New title page (EmacsConf, dec/2025)
+00:55.000 Old title page (march/2025)
+01:05.000 1. The main themes of this video
+06:41.000 2. Anyone can learn Lisp in one day
+07:39.000 3. Lambdas for beginners
+09:20.000 4. Lambdas for beginners broken
+10:58.000 5. Lambdas for beginners broken (2)
+12:54.000 A quick demo (version for the EmacsConf 2025)
+22:36.160 Mr. Jingles: My working memory is small
+
+"""]]<div></div>Duration: 25:22 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-modern">Open Etherpad</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--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.opus">Download --main.opus (13MB)</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></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://toobnix.org/videos/watch/87e70f9b-0464-449a-9dc0-805b6b374337">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=Y75Q2IN8Y_M">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/modern-nav.md b/2025/info/modern-nav.md
new file mode 100644
index 00000000..ac44fb51
--- /dev/null
+++ b/2025/info/modern-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/sun-open">Sunday opening remarks</a>
+Next by track: <a href="/2025/talks/reader">An introduction to the Emacs Reader</a>
+Track: <span class="sched-track General">General</span>
+</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..e00f6105
--- /dev/null
+++ b/2025/info/open-mic-after.md
@@ -0,0 +1,1029 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="open-mic-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+[[!template text="""All right, so yes, we have a little bit of time""" start="00:00:00.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""while we are waiting for the dev track to finish,""" start="00:00:03.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and we could just declare this as a break,""" start="00:00:05.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or if anyone's got any interesting last-minute stuff,""" start="00:00:08.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you can come and share it here,""" start="00:00:12.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where Karthik is also hanging out.""" start="00:00:17.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I think every time I read one of your long blog posts,""" start="00:00:20.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Karthik, I'm like, mm, life goals.""" start="00:00:23.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Someday I want to write something with nice diagrams""" start="00:00:25.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and, you know, deep Emacs interestingness.""" start="00:00:28.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I have not yet gotten the hang of even using avy""" start="00:00:31.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to nearly the extent that you do.""" start="00:00:34.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But yes, I have, I have always looked""" start="00:00:38.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""at your diagrams very longingly""" start="00:00:40.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and wondered how you make them.""" start="00:00:42.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""With a lot of sweat and cursing, unfortunately.""" start="00:00:44.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's all very nice. Yeah.""" start="00:00:51.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I, I, I've seen your interactive SVGs,""" start="00:00:54.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which is just wizardry. I have no idea how you do that.""" start="00:00:58.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You can hover over different elements in the SVG""" start="00:01:02.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and do interesting things.""" start="00:01:06.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, so it turns out if you just think of them as XML,""" start="00:01:08.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which Emacs will let you""" start="00:01:11.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because you can just control C, control C,""" start="00:01:13.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and it'll switch back to text mode, right?""" start="00:01:15.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Then you can be like, oh, yeah, I can work with this""" start="00:01:16.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""using the DOM Emacs list library.""" start="00:01:20.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then you can add title elements to it to get the hovers,""" start="00:01:23.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or you can add hyperlinks.""" start="00:01:28.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So in fact, the emacs-conf schedule""" start="00:01:31.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is very naturally generated from emacs-lisp itself,""" start="00:01:35.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because there was no way I was going to handle""" start="00:01:41.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""two track schedules by hand.""" start="00:01:43.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And that's just SVG so that you can then have the hovers.""" start="00:01:45.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The important thing is that when you're exporting it to HTML,""" start="00:01:49.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it has to be an inline SVG to get the fancy behaviors.""" start="00:01:53.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you're linking it in as an image, then it doesn't work.""" start="00:01:57.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It has to be inline. So for example, for my org mode,""" start="00:02:02.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I have my exports for images checked first if it's an SVG.""" start="00:02:09.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And unless I have an attribute""" start="00:02:14.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""on it that says, no, just link to it because it's large and not interactive,""" start="00:02:15.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it actually inlines all of that markup""" start="00:02:20.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""into the exported HTML, if that makes sense.""" start="00:02:22.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""That does, that does make sense.""" start="00:02:26.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's a little less mysterious now.""" start="00:02:34.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""On the plus side, once it is in there as inline HTML,""" start="00:02:36.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""well, inline, you know, it's an inline markup,""" start="00:02:40.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you can actually play around with it""" start="00:02:42.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""using JavaScript or CSS. That's really neat.""" start="00:02:44.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I had a question about some other SVG wizardry I've seen you do.""" start="00:03:01.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You have these SVGs that grow, right?""" start="00:03:07.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Like they accumulate elements, almost like a slideshow.""" start="00:03:09.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Am I remembering that correctly? Yeah, yeah, yeah.""" start="00:03:15.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I started using that for one""" start="00:03:20.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of the EmacsConf presentations.""" start="00:03:22.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Well, the one EmacsConf presentation""" start="00:03:24.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I've done in recent history,""" start="00:03:26.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because it's nice to be able to add things gradually, right?""" start="00:03:27.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Especially as you're giving a presentation.""" start="00:03:31.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And that's also done with Emacs Lisp.""" start="00:03:35.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""What I do is, first I make the image, and then in Inkscape,""" start="00:03:38.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I can group together the elements""" start="00:03:43.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that I want to appear at the same time.""" start="00:03:46.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then I can use Emacs to, I think I just changed the,""" start="00:03:49.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I just add some CSS to them to make them dimmer.""" start="00:03:54.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and you just iterate through the different groups in that level,""" start="00:04:01.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and you write out the intermediate SVG files,""" start="00:04:04.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then you can use Inkscape""" start="00:04:09.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to convert them into PNGs if you want,""" start="00:04:12.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like images of each step""" start="00:04:14.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that are in PNG format instead of SVG.""" start="00:04:16.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But the basic idea is you group""" start="00:04:18.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the elements together that you want in one step,""" start="00:04:20.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then you can manipulate it""" start="00:04:24.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""using the Emacs DOM.EL library,""" start="00:04:25.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because it's just an XML document.""" start="00:04:30.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So you can say, all right, hide everything or have everything visible""" start="00:04:32.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then remove the last one or something like that, you know, iterated.""" start="00:04:38.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Show them one at a time and then write your resulting document object model""" start="00:04:43.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to a new file each step. Do you have, that makes sense.""" start="00:04:50.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So do you just write the e-list,""" start="00:05:05.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like is this on a case-by-case basis?""" start="00:05:09.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Like every time you need to do this,""" start="00:05:12.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""do you write fresh e-list to step through the SVG this way?""" start="00:05:13.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Or do you have some kind of package""" start="00:05:18.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or library to do this more?""" start="00:05:22.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Let me go see if this is the one.""" start="00:05:27.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's probably just buried in my config.""" start="00:05:33.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If I do it again, I'm sure I will find another thing""" start="00:05:39.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that I've completely forgotten about""" start="00:05:46.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and therefore have to recode or fix or whatever.""" start="00:05:51.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But let me go see. Can you see my screen? Yep. OK.""" start="00:05:56.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, oh, yeah, yeah, this one. Nice, I remember that one.""" start="00:06:03.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""OK, so we get this SVG, and then this animateSVGPaths""" start="00:06:07.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is just a function I have. It takes the file name.""" start="00:06:13.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It makes an output there. It adds one path back at a time.""" start="00:06:16.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And it just creates a lot of these numbered frames.""" start="00:06:22.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So as you can see here,""" start="00:06:25.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm just saying, OK, take the whole thing.""" start="00:06:27.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then I think, yeah, maybe I said it like,""" start="00:06:30.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you know, take the whole thing,""" start="00:06:34.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""make everything transparent,""" start="00:06:37.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then one at a time, make them opaque""" start="00:06:40.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and save that, save that to the frame, to the image.""" start="00:06:45.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this theoretically is a somewhat reusable function""" start="00:06:50.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that takes the SVG and just fills the directory with it.""" start="00:06:54.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""What's the order in which it reveals things?""" start="00:07:01.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Top to bottom or bottom to top, it's whatever the SVG has.""" start="00:07:03.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And so if you're grouping things together,""" start="00:07:12.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you can rearrange things in Inkscape.""" start="00:07:15.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you've given them IDs,""" start="00:07:17.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which I have another function for in Emacs list""" start="00:07:22.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that just highlights something""" start="00:07:25.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and lets me put an ID for it,""" start="00:07:26.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""then you can rearrange them yourself""" start="00:07:28.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""by looking at the markup, I guess.""" start="00:07:30.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Or I think I actually have some code also""" start="00:07:32.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that will rearrange the path""" start="00:07:35.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""based on a list of IDs that I give it.""" start="00:07:37.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and sequence so this one is animating""" start="00:07:39.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""one element at a time here""" start="00:07:42.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""um it's kind of like interesting effect""" start="00:07:44.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but for larger things like for this one""" start="00:07:47.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""i can split this up into groups""" start="00:07:49.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because i don't want to necessarily animate them letter by letter and that one""" start="00:07:52.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh yes, this is the function that I have""" start="00:07:59.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for identifying the paths""" start="00:08:03.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and it highlights it and then it asks me for a name.""" start="00:08:05.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And this is the one that reorders it.""" start="00:08:08.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I can say, this is the sequence""" start="00:08:11.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that I want it animated in. And it will, yeah, good.""" start="00:08:14.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So you don't actually need Inkscape at all, right?""" start="00:08:19.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Because you have an elisp function""" start="00:08:23.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that will let you assign the order interactively.""" start="00:08:25.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, so if you're doing just all the elements one after the other,""" start="00:08:28.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Inkscape is helpful for combining the different shapes,""" start="00:08:34.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""well, breaking it apart,""" start="00:08:39.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because when I get the PDF and I convert it,""" start="00:08:41.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it's like one big element that has a very complex path.""" start="00:08:44.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And if I want to animate it element by element,""" start="00:08:48.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I have to break it apart""" start="00:08:52.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then recombine it so that, you know, so that this O looks like it's hollow""" start="00:08:53.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""instead of like a circle.""" start="00:08:59.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So there's a little bit of Inkscape""" start="00:09:01.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""cleaning up before then,""" start="00:09:02.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I really dislike the mouse heavy stuff of Inkscape""" start="00:09:04.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for assigning IDs and things like that.""" start="00:09:08.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I haven't quite gotten the hang of it.""" start="00:09:12.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this is what it looks like""" start="00:09:14.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""before you group the elements together""" start="00:09:16.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and you combine paths,""" start="00:09:17.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which is what you have to do Inkscape for,""" start="00:09:20.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because I can't make sense of the numbers in Emacs someday.""" start="00:09:22.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So just combine, combine, combine. But once it's there,""" start="00:09:24.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I don't like having to set the ID in this""" start="00:09:30.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""object properties on the right side,""" start="00:09:32.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because there's a lot of clicking.""" start="00:09:34.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""press escape and tab and tab, it's not reliable.""" start="00:09:36.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So that's why I have this function""" start="00:09:40.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and it lets me identify the paths and animate them""" start="00:09:42.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""from within Emacs, because Emacs is a text editor.""" start="00:09:46.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, in name only, but anyway.""" start="00:09:51.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So the groups, if you've already assigned groups in Inkscape,""" start="00:09:55.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Then when you run it through this function in Emacs,""" start="00:10:02.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you can assign an ordering to the groups,""" start="00:10:06.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the order in which it will be revealed.""" start="00:10:09.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah. What I did was I gave it all IDs.""" start="00:10:10.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I gave each group an ID.""" start="00:10:15.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then when I have the ID, I can say, you know, maybe when I group it,""" start="00:10:17.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm doing it in a bit of a haphazard way,""" start="00:10:26.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""not grouping the first thing first,""" start="00:10:28.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then the second thing, and the third thing.""" start="00:10:30.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So it's a bit of a mess.""" start="00:10:32.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And this one just resorts it by, I think,""" start="00:10:34.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""just looking everything up, storing it,""" start="00:10:38.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then putting it back in order.""" start="00:10:41.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I probably have the code for this somewhere,""" start="00:10:45.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and if it's not, it's in the source code.""" start="00:10:49.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""There should be a source.""" start="00:10:52.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yes, so this is an org source for this post,""" start="00:10:53.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and if it's not in there, then it should be in my config,""" start="00:10:57.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the definition of this function.""" start="00:11:01.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We are to pass. Here we are. Yeah, there you go.""" start="00:11:03.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So there, it just, it takes it, it looks for it,""" start="00:11:11.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and it adds it to the first layer.""" start="00:11:17.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay, you've just explained the magic,""" start="00:11:19.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which makes it less magical,""" start="00:11:29.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but also something I could try. Yeah, this is interesting.""" start="00:11:31.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, S2G is surprisingly powerful. Yeah, I know.""" start="00:11:36.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I know it can do a lot more""" start="00:11:41.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""than what we typically use it for.""" start="00:11:43.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So you also had this feature where, I think you used CSS,""" start="00:11:46.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where if you mouse over something in the SVG,""" start="00:11:53.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""something is highlighted in your webpage.""" start="00:11:56.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh yeah, yeah, yeah. Like in the organizer's notebook.""" start="00:11:58.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I have a draft schedule here.""" start="00:12:04.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, we've been doing all this stuff live, that schedule,""" start="00:12:07.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where if you have, let's pick someone's talk.""" start="00:12:10.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, yeah, highlight.""" start="00:12:16.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I think, oh, maybe it's the other way around.""" start="00:12:22.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I need to put this stuff here first. Oh yeah, okay.""" start="00:12:26.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So you'll notice here how if I add some JavaScript,""" start="00:12:30.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it takes a look at what's in the URL.""" start="00:12:33.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And if so, then it can highlight a specific thing""" start="00:12:36.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""using just, maybe CSS might be it.""" start="00:12:38.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Actually, I think it's JavaScript setting the CSS style on it.""" start="00:12:41.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But yeah, you can play around with CSS.""" start="00:12:47.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""See, this one has a slightly darker,""" start="00:12:51.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""slightly thicker background. So SVGs are great for that.""" start="00:12:53.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And if you inspect it,""" start="00:12:59.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which I don't think I have shared here,""" start="00:13:01.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but if you inspect it, I will share my inspect.""" start="00:13:03.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I have too many windows open,""" start="00:13:07.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so I don't want to share my whole thing.""" start="00:13:10.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But one of these, oh, I don't even know which, how do I find, okay,""" start="00:13:12.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it's the developer tools window.""" start="00:13:19.075" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Do I even have developer tools? Oh, I can't see it. OK.""" start="00:13:20.367" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you inspect the page on the developer thingy,""" start="00:13:25.325" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""then it will show the SVG element. Yeah.""" start="00:13:29.492" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And unfortunately, I can't share it easily right now.""" start="00:13:38.117" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Maybe just say inspect. Oh, this is actually, I think,""" start="00:13:41.241" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""how also the individual talks have current ones, right?""" start="00:13:46.617" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I just have this image over here,""" start="00:13:55.117" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then you just have that one,""" start="00:14:00.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that specific talk styled differently.""" start="00:14:01.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""How did you generate this SVG,""" start="00:14:06.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the one showing the schedule?""" start="00:14:13.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, okay, okay. Emacs. Book, book, book, book.""" start="00:14:14.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Emacs publish, I think. Let me share it. Emacs conf pub.""" start="00:14:24.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""One of these windows. Okay, let's see.""" start="00:14:29.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Slow down, look at all the windows.""" start="00:14:36.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay, I'm just gonna share the whole screen.""" start="00:14:39.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Screen two, no, screen one. All right, and okay.""" start="00:14:40.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I think this is the one. Is it sharing my screen?""" start="00:14:50.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It is not sharing my screen. I'm going to try this again.""" start="00:15:05.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay. All right. So, the schedule. The schedule.""" start="00:15:08.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""This is the actual function""" start="00:15:23.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that creates the SVG rectangles for the talks.""" start="00:15:24.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oops. My screen share ended. Let me do that again.""" start="00:15:28.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, and as you can see,""" start="00:15:35.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it's just a little bit of math for the X, the Y,""" start="00:15:41.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""we color it differently""" start="00:15:45.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""depending on whether I'm making the schedule for the public view.""" start="00:15:48.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So we just, you know, do we do developer, development talk""" start="00:15:52.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or general talk as colors,""" start="00:15:58.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or if I want to color it for the backstage view,""" start="00:15:59.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I can keep track of the talk's status.""" start="00:16:02.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Anyway, so SDG track takes the track""" start="00:16:04.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and all the talk information,""" start="00:16:07.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and it makes all the little rectangles.""" start="00:16:09.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And this is the thing that adds a little hover""" start="00:16:11.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for the times and titles as well.""" start="00:16:15.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, Emacs's API for dealing with this is actually pretty good.""" start="00:16:17.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, and of course, I have a hook here that modifies it.""" start="00:16:22.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You can just run through a different function,""" start="00:16:27.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""different functions to tweak it.""" start="00:16:30.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I could say, okay, color it in case my time constraints are,""" start="00:16:32.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you know, not being met.""" start="00:16:36.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then I can paint about this somewhere.""" start="00:16:37.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And the nice thing about this""" start="00:16:40.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is it's actually, it's, you can, hang on a second, let me do this carefully.""" start="00:16:51.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, here you go.""" start="00:17:06.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's super nice to be able to refer to it within Emacs itself""" start="00:17:08.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because Emacs has SVG support.""" start="00:17:13.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this is, for example, the organizer view""" start="00:17:15.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""inside an org mode file. And it just has all those SVGs.""" start="00:17:19.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It don't have the hover things,""" start="00:17:24.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because it's just an image in it.""" start="00:17:25.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But yeah, SVGs, Emacs, awesome. Oh, that's very cool.""" start="00:17:27.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You're actually drawing the rectangles from scratch.""" start="00:17:37.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It took a little bit of figuring out,""" start="00:17:40.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""especially since I realized""" start="00:17:45.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I wanted horizontal on the wiki pages""" start="00:17:46.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so that it fits on people's screens,""" start="00:17:49.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I wanted vertical in my organized review""" start="00:17:51.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so that I don't have to keep tilting my head sideways.""" start="00:17:56.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and this is the code for that.""" start="00:18:09.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""See, I'm just directly adding G nodes for groups""" start="00:18:12.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or A nodes for the hyperlinks and rep as well.""" start="00:18:19.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I think the SVG library also has functions""" start="00:18:23.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for adding rectangles and things like that,""" start="00:18:27.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but sometimes I vaguely remember""" start="00:18:31.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""sometimes you can't return the node that I'm expecting.""" start="00:18:32.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, it's okay to just use the DOM functions directly.""" start="00:18:35.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then the whole thing gets SVG printed afterwards.""" start="00:18:40.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I can just say SVG printed, and then it's good to go.""" start="00:18:46.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Let me see. Actually, do I have SVG?""" start="00:18:54.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Let's schedule for track SVG.""" start="00:18:57.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's a shame that you can't visually interact""" start="00:19:05.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with parts of an SVG in Emacs the way you can in Emacs.""" start="00:19:08.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, some people have some interesting experiments with that.""" start="00:19:11.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I haven't dug into it much,""" start="00:19:16.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but people have figured out how to use the mouse events""" start="00:19:18.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then figure out what the, like there's LEC draw, right?""" start="00:19:21.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So lecdraw is a package that lets you draw SVGs""" start="00:19:26.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and you can drag things and whatever. So that's very cool.""" start="00:19:30.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And there's also an org related package""" start="00:19:33.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that lets you visualize your schedule as boxes.""" start="00:19:37.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'd like, yeah, that's a thing also.""" start="00:19:43.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So people have experimented""" start="00:19:45.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with mouse interaction and it's cool,""" start="00:19:46.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I haven't had the brain space to do that yet,""" start="00:19:49.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but it would be nice. Yeah, you're right.""" start="00:19:51.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I remember using easy draw""" start="00:19:55.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and being surprised at what it can do.""" start="00:19:58.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The only thing I think I discovered""" start="00:20:02.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is that it ends up creating lots of new SVGs,""" start="00:20:05.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""kind of the way that you do""" start="00:20:10.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""when you show elements one by one,""" start="00:20:13.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you are essentially creating one SVG for each state,""" start="00:20:14.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""one full SVG for each intermediate state of the presentation, let's say.""" start="00:20:19.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""That's kind of what ELEasyDraw does.""" start="00:20:24.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I thought that's not good for performance.""" start="00:20:26.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And it is kind of on the slow side,""" start="00:20:30.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""if you compare it to like Inkscape or anything else.""" start="00:20:33.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But yeah, what it can do is pretty amazing.""" start="00:20:37.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you can dynamically modify an SVG object,""" start="00:20:40.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and it will automatically get updated in Emacs,""" start="00:20:44.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which is a technique that I use a lot in FFNS in subbed.""" start="00:20:48.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So for example, if I have waveform show all in this,""" start="00:20:52.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it will, like, it's very easy to just move one element, for example,""" start="00:20:57.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or make an element larger or smaller.""" start="00:21:03.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And that's the... It might be pretty efficient, I don't know,""" start="00:21:08.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I'm certainly not like writing it to disk each time and reloading it.""" start="00:21:13.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Eric and I demoed in 2020 EmacsConf for Dungeon Mode Works,""" start="00:21:20.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where we demonstrated, you know, showing parts of the map""" start="00:21:25.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then, you know, different characters""" start="00:21:29.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""have different abilities that show,""" start="00:21:31.650" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that allow you to see different dungeon features.""" start="00:21:33.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then if your last character,""" start="00:21:36.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you know, of that class or race dies,""" start="00:21:38.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""then you suddenly can't see""" start="00:21:42.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""secret doors or whatever anymore.""" start="00:21:44.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And so just make that disappear""" start="00:21:46.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""between one turn and the next""" start="00:21:48.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is just working with just simply update the SVG""" start="00:21:50.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and there goes the screen. No, no, no bus, no bus.""" start="00:21:54.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's pretty awesome. So this is an example""" start="00:21:57.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of how I'm using it to kind of show where we are in the, in the track.""" start="00:22:01.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then here's mouse, mouse interaction, right?""" start="00:22:07.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I can change my timestamp right from there. Which is fine.""" start="00:22:09.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, I'm curious how this works exactly.""" start="00:22:21.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""To effect any kind of change in the SVG,""" start="00:22:28.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you have to use the DOM library, right? Yes.""" start="00:22:31.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay, so, but that means that it's going to be,""" start="00:22:36.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""anytime you make a change, it's going to read in the XML,""" start="00:22:39.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""convert it to an Elisp DOM, right?""" start="00:22:43.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then you modify that tree.""" start="00:22:48.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, you keep the DOM, like, well, in this case, for example,""" start="00:22:50.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm actually constructing it using Emacs list objects directly.""" start="00:22:55.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you were working with an external SVG,""" start="00:23:00.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you would parse it first, yes,""" start="00:23:02.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""using XML parse file or something like that.""" start="00:23:05.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then you would have it in memory.""" start="00:23:07.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""When you insert the image,""" start="00:23:12.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you insert the list document object model that you have,""" start="00:23:14.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then any changes you make to that document object model""" start="00:23:18.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""automatically get updated in the image somehow.""" start="00:23:21.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, that's fantastic. Yeah. Yeah. I'll show you the code. Yeah.""" start="00:23:25.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I was under the impression""" start="00:23:33.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that there's a round trip to XML involved""" start="00:23:38.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to do anything like to go from displayed""" start="00:23:40.097" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to in-memory to in-memory modified back""" start="00:23:42.299" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to display all around trip.""" start="00:23:46.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah. So let me see where's my thing that changes it.""" start="00:23:47.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So when it's the time.""" start="00:23:52.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's probably some kind of hook that I'm listening to here.""" start="00:23:59.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Playback position hook. Oh, it's this update current bar.""" start="00:24:07.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, so what update current bar does""" start="00:24:12.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is it moves the bar to the right place.""" start="00:24:16.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And you see here how this SVG,""" start="00:24:19.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm actually just reading it off the text property""" start="00:24:21.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so that I know which one is the current one in the overlay.""" start="00:24:24.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I remove the old one, just the element.""" start="00:24:28.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I don't have to mess around with the image.""" start="00:24:31.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I removed the old one for some reason,""" start="00:24:34.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""just to make sure, I guess.""" start="00:24:35.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You can actually just update the attribute on it.""" start="00:24:36.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, I think this is just so that I don't have to worry""" start="00:24:38.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""about whether there is one or there isn't.""" start="00:24:42.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then I add a bar at the right position""" start="00:24:45.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then it makes that little animated sweeping thingy.""" start="00:24:47.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So you see how I'm not recreating the SVG at this point.""" start="00:24:52.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm just getting it from the overlay.""" start="00:24:55.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, that's very interesting. I wonder what it's doing.""" start="00:25:02.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""what it's actually doing under the hood when you run SVG removal.""" start="00:25:07.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, I don't know, too. I think it's RSVG is tied""" start="00:25:09.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""into the display engine, so to speak. Yeah, that it is.""" start="00:25:19.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But RSVG, the library,""" start="00:25:32.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""can only deal with actual SVGs, right, like XML SVGs,""" start="00:25:33.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but we're dealing with the ELISP DOM of an SVG.""" start="00:25:39.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So the display engine can re-enter the LISP.""" start="00:25:43.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I do know that the display engine""" start="00:25:47.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""can re-enter the LISP engine,""" start="00:25:49.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so I think that may be the answer.""" start="00:25:51.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, you can just SVG insert image the object itself.""" start="00:25:53.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So here, for example, SVG create just creates,""" start="00:25:58.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it actually just creates a DOM model.""" start="00:26:01.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this is Lisp, and it's not,""" start="00:26:04.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""it doesn't get printed to string representation or anything.""" start="00:26:06.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then you can SVG insert image,""" start="00:26:09.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or you can set the display and, you know,""" start="00:26:13.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and use pass it like as an SVG image.""" start="00:26:15.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""SVG image gives you an image object""" start="00:26:20.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""if you want to do the like the regular""" start="00:26:22.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""sort of display thingy. Actually, that one says it turns it""" start="00:26:24.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""into a string representation.""" start="00:26:31.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Or at least maybe that's just how it gets retrained.""" start="00:26:34.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Anyhow, some kind of magic happens,""" start="00:26:36.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I don't have to worry about it.""" start="00:26:38.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It just stays on my side. Yeah, but I was thinking about it""" start="00:26:39.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because I expect that if it's converting to XML all the time, every time you make a change,""" start="00:26:44.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""then that's going to be the bottleneck""" start="00:26:49.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for any kind of heavy interactive SVG editing or modification in Emacs.""" start="00:26:52.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The kind that ELEasyDraw does.""" start="00:26:58.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But maybe if we make it compelling enough,""" start="00:27:01.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""then the folks upstream can say, all right,""" start="00:27:03.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like the way that JSON got a lot faster.""" start="00:27:07.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Who knows? Maybe we can get that to be faster too. Yeah.""" start="00:27:10.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I see a lot of potential for better UIs in Emacs""" start="00:27:13.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with using SVGs. Yeah.""" start="00:27:19.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Nicolas Rougier has all those experiments, right?""" start="00:27:22.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, but all of those, I think, are bound by the limitations""" start="00:27:26.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of how deeply SVGs are embedded in the display engine,""" start="00:27:30.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because that's kind of what we're discussing.""" start="00:27:33.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We want to avoid going to XML,""" start="00:27:36.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I mean, going from XML to Elisp DOM""" start="00:27:38.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to modified Elisp DOM back to XML.""" start="00:27:41.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We want to avoid that round trip. Yeah, for sure.""" start="00:27:44.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Or make that as fast as possible, yeah.""" start="00:27:50.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Does anyone else have anything they want to share?""" start="00:28:04.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I've always got stuff I can share,""" start="00:28:11.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I pretty happily defer. I've already seen what I made.""" start="00:28:13.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Karthik? Oh, I'm a fly on a wall here. I'm not.""" start="00:28:17.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay. I didn't come in with the intent to share anything.""" start="00:28:28.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah. How about you, Sacha?""" start="00:28:32.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Do you have other stuff you haven't shown off recently?""" start="00:28:34.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Aside from all the panicking""" start="00:28:38.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""about getting EmacsConf together this year?""" start="00:28:39.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I just wanted to bring it up.""" start="00:28:42.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, let's see, what do I have in my recent, like, fiddled with?""" start="00:28:45.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I have a project called...""" start="00:28:50.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I have a project called Ufta, which is a little bit fun.""" start="00:28:54.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Let me pull it up here before I share.""" start="00:28:56.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You can see my messy, messy desktop. Okay, there it is.""" start="00:29:00.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And that's supposed to want a shell. Probably that one.""" start="00:29:08.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And we'll just bootroot. keeping in mind that graphics""" start="00:29:21.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is going to end in about five minutes. Ooh, perfect.""" start="00:29:29.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""That'll keep me from from being my normal long-winded self.""" start="00:29:33.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Have you already made contact with Emmanuel? I was not.""" start="00:29:38.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay, I'm going to quickly do a check in.""" start="00:29:47.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay, sounds good. Did you hear back from him?""" start="00:29:50.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Assume that's a yes.""" start="00:30:00.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, I'll go ahead and share screen here""" start="00:30:01.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and just take a look, a very brief look at this.""" start="00:30:04.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Assuming I can present. I had a question for Sacha.""" start="00:30:08.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I had a question for Sacha and you, Corbin.""" start="00:30:16.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Hello. Yeah, you're good. Go for it. Yeah, yeah.""" start="00:30:22.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So in past years, in the EmacsConf,""" start="00:30:28.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""there was a talk by someone,""" start="00:30:33.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""usually John Wheatley, or I think Philip last year,""" start="00:30:36.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""about new developments in Emacs.""" start="00:30:41.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yes, and that is kind of at the whim""" start="00:30:44.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of the Emacs developers,""" start="00:30:48.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""whether that is included in the in the conference.""" start="00:30:50.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's kind of up to the, you know, how busy folks are""" start="00:30:56.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and whether somebody can follow up the time to prepare it.""" start="00:30:59.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I see. Yeah, I noticed that there wasn't one for this year.""" start="00:31:02.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I know of at least one improvement""" start="00:31:07.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or one change to Emacs.""" start="00:31:10.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's small, but I'm guessing it's very crucial""" start="00:31:12.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for a certain class of Emacs users.""" start="00:31:17.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I can talk about that, just that one thing.""" start="00:31:20.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But you can, you can, you can go right.""" start="00:31:24.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I can't share anything and we've got about one minute.""" start="00:31:29.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So have that. Okay. Um, so the change is that, uh,""" start="00:31:32.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""in the development version of Emacs,""" start="00:31:39.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""sorry, child frames are now supported""" start="00:31:41.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""in terminal in the terminal.""" start="00:31:46.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I suspect that not many people know about it yet,""" start="00:31:53.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but basically this means something like Corfu is going to work fine""" start="00:31:56.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""when you're running Emacs in a terminal,""" start="00:32:03.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""as well as pause frames or anything that shows like a little pop-up window""" start="00:32:05.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that previously did not work in Terminal Emacs.""" start="00:32:14.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""That's it. That's the update. Cool.""" start="00:32:19.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay, there I have a share screen button.""" start="00:32:27.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We'll see if I think we're just about to cut away,""" start="00:32:29.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I'll go ahead and see if I can get this going.""" start="00:32:32.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'll just share my whole screen""" start="00:32:34.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and this will be a little ugly as it comes in.""" start="00:32:36.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this is a project that I think is a little bit fun.""" start="00:32:39.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's called Oopda. And basically what this does,""" start="00:32:44.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you can see it on my source site,""" start="00:32:47.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that's sr.ht tilde mplscorewin slash Oopda.""" start="00:32:49.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""O-F-D-A, and this is a very simple approach""" start="00:32:55.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to using an org file as a replacement for SQLite.""" start="00:32:59.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's very simple, but it does support like a dot style path and notation.""" start="00:33:04.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So you can get at deeply nested data""" start="00:33:12.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and just gives a little,""" start="00:33:16.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""there's a shell script wrapper that comes with it.""" start="00:33:19.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right.""" start="00:33:24.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Theoretically, this is the Q&A for the graphics talk.""" start="00:33:26.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oops, I have to unmute over here. Sorry.""" start="00:33:32.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, I had a little audio bleed through,""" start="00:33:38.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""my apologies, can you still hear me?""" start="00:33:53.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, I'm gonna guess,""" start="00:34:02.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because I still see us live on the screen""" start="00:34:03.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that we're still live. All right, so I'll just press on.""" start="00:34:05.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So what we're looking at here is a project called Upta.""" start="00:34:12.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Here's the Emacs Lisp source port.""" start="00:34:18.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You can see it's not real impressive""" start="00:34:21.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""even with all of its boilerplate.""" start="00:34:23.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's under 200 lines of code.""" start="00:34:24.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And this is kind of a proof of concept,""" start="00:34:27.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""giving us the ability to use a org.org file""" start="00:34:30.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""as a flat file database. The intention here is to get""" start="00:34:35.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""a kind of transition from SQLite,""" start="00:34:38.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which is using a flat text file as a database,""" start="00:34:40.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to being able to have more of a literate database""" start="00:34:44.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where we can intermix documentation about the data""" start="00:34:48.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with the data itself,""" start="00:34:52.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then by giving a path on the command line.""" start="00:34:54.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'll go back to the README, just take a look at that.""" start="00:34:57.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And you can see there's a couple of kind of examples here""" start="00:35:02.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where we're, here we would be querying a path.""" start="00:35:05.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We can also provide a value""" start="00:35:11.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and that'll set data into the file.""" start="00:35:15.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It also has an optional first parameter""" start="00:35:20.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to specify the specific org file by default.""" start="00:35:23.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It looks for a file called data.org.""" start="00:35:26.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And of course that can be used inside Emacs as well,""" start="00:35:29.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""although the value of that may be a little bit limited""" start="00:35:34.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""compared to more sophisticated""" start="00:35:37.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""technologies like org-element.""" start="00:35:39.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""This is not an implementation""" start="00:35:41.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that mirrors all of org-element""" start="00:35:43.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or any of the more complex functionality of org.""" start="00:35:47.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's really as simple as possible proof of concept""" start="00:35:50.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to just to be able to kind of work""" start="00:35:52.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with the data inside an org file""" start="00:35:57.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and get it back out on the command line.""" start="00:35:59.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So we'll see if we can make it work here.""" start="00:36:01.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Corwin, could you increase the font size?""" start="00:36:07.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I surely will. All right. How's that?""" start="00:36:13.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""That's my picture. Yeah. Okay. Cool.""" start="00:36:27.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, let's see if we do have a, well, we can probably make it.""" start="00:36:31.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Let's do this.""" start="00:36:39.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, and then in theory, this just works.""" start="00:37:00.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So we'll cut.""" start="00:37:05.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So we'll just create a data file called data.org.""" start="00:37:42.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Make sure that works. Looks reasonable.""" start="00:37:45.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Let's try adding some data to it. Hmm, not so happy.""" start="00:37:50.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay, let's try it the hard way.""" start="00:38:13.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'll come back over here to my usage""" start="00:38:17.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and we'll just try running it.""" start="00:38:21.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Is Emacs, is finding Emacs really the issue?""" start="00:38:23.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It seems to me it's not, it's not liking my path.""" start="00:38:37.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's not finding out that I do EO and PWD.""" start="00:38:41.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It wants it to be on the log. I see.""" start="00:38:44.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I may have to even mess with that further,""" start="00:38:49.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but we'll just try it.""" start="00:38:54.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this should retrieve the value if it works.""" start="00:38:55.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, and let's take a take a simple""" start="00:39:04.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, add-to-list takes a symbol.""" start="00:39:17.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We're going to have issues with bash quoting,""" start="00:39:47.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so you should escape the quoting side.""" start="00:39:52.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Gotcha. You're kidding.""" start="00:39:58.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm not letting go. Whoa. That might work.""" start="00:40:27.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I got my parents right. Never demo live. How exciting. OK.""" start="00:40:36.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Without batch, though, we may not get our output. OK.""" start="00:41:02.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Well, that's as far as I'm going to take it.""" start="00:41:13.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I should have prepped a demo environment.""" start="00:41:20.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I wasn't really prepared to demo. No worries.""" start="00:41:21.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Couple of questions about this feature.""" start="00:41:26.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The first question is, do you use it? I do use it, yeah.""" start="00:41:30.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I should have gotten onto the environment""" start="00:41:37.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where I'm using it. It's a little messy.""" start="00:41:41.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It gets into another project""" start="00:41:45.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that's way too complicated to get into.""" start="00:41:47.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, but what kinds of things do you use it for?""" start="00:41:48.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's sort of hard to answer""" start="00:41:53.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that without getting into my other project,""" start="00:41:57.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but essentially I've got a web development tool chain""" start="00:41:59.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that is kind of a web-based REPL""" start="00:42:02.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that is kind of a literate compute environment, if you will,""" start="00:42:05.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""allowing me to use a bunch of virtual machines""" start="00:42:10.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""as one big computer. That project is called Ghost Wheel.""" start="00:42:13.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And so in order to show off the homepage,""" start="00:42:19.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So on this page, you can see the list of machines,""" start="00:42:23.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then you'll also see there's these state indicators.""" start="00:42:30.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And right now, as a matter of fact,""" start="00:42:34.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""what I've been hacking on""" start="00:42:38.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is trying to get support for org tables.""" start="00:42:41.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Right now, I support only changing all of the data""" start="00:42:44.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""within some heading, subheading, or whatever.""" start="00:42:48.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""What I'd like to be able to do is specify,""" start="00:42:51.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""using org table fm syntax, the particular row column.""" start="00:42:55.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So find a particular named table,""" start="00:43:01.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""find a particular row, you know,""" start="00:43:03.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""column one, you know, row two, column one,""" start="00:43:06.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then set the value from the command.""" start="00:43:08.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Currently, I just use it for very simple stuff.""" start="00:43:11.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I don't really want to show that off.""" start="00:43:18.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I've got another page that lists all of the DNS names""" start="00:43:20.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that are associated that are hosted on Ghostwheel.""" start="00:43:23.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And so I use that to add items to the list.""" start="00:43:26.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Does it make sense? Yeah, it sounds useful.""" start="00:43:29.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So one thing that I would like,""" start="00:43:40.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I guess it's easy enough to write,""" start="00:43:47.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but is a tool exactly like this""" start="00:43:51.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where I can query my org files from the command line?""" start="00:43:58.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, that's exactly what it says.""" start="00:44:03.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, but it's going to be more""" start="00:44:06.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like a database query where, you know, I say select, select all headings where, you know,""" start="00:44:14.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that contain this string or that have this tag, right?""" start="00:44:23.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The kinds of things that you can do with org-ql from outside, from inside Emacs, right?""" start="00:44:27.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""To be able to do those from the command line with,""" start="00:44:38.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm going to invoke SQL here, like SQL SELECT statements,""" start="00:44:41.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but it doesn't have to be that syntax, right?""" start="00:44:48.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Just that capability.""" start="00:44:50.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yeah, I can see that being useful as a command line tool.""" start="00:44:52.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I don't even care about write,""" start="00:44:57.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like the ability to write or manipulate the file.""" start="00:44:59.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Just query. the command line that sounds yeah yeah exactly""" start="00:45:02.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to be able to dig a piece of data out of an org file as well""" start="00:45:11.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for my purpose it's very useful to be able to replace it""" start="00:45:15.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because then i can deal with submit the form you know""" start="00:45:18.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and that might be like a sign up form""" start="00:45:21.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then i just add the user add up an entry into the org file""" start="00:45:24.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for that user right what it doesn't do is a relational data""" start="00:45:29.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So everything, it's essentially a document data store.""" start="00:45:35.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Like a Mongo kind of. True. So over on IRC, ScrewLisp asks,""" start="00:45:40.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""what does it mean to query an ARC file?""" start="00:45:53.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Is the data in a table? Is it in an ELISP nested list view""" start="00:45:57.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of a table that has a name in ARC?""" start="00:46:01.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And my answer to that is that if you ever used RQL,""" start="00:46:06.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""written by Alpha Papa,""" start="00:46:10.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""then that's the kind of thing I'm talking about.""" start="00:46:14.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, you query based on one of a set of attributes.""" start="00:46:18.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And these attributes are anything that's recognized by ARC.""" start="00:46:23.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""For example, the to-do status, the dates,""" start="00:46:30.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the outline path, the headings, a full text search.""" start="00:46:35.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""There are several more.""" start="00:46:40.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The presence or absence of certain properties.""" start="00:46:43.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""using any combination of those if you want to dig down""" start="00:46:46.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and find some data in an art file.""" start="00:46:50.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""That's the kind of query I'm talking about.""" start="00:46:52.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It is somewhat equivalent""" start="00:46:56.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to being able to write SQL queries""" start="00:46:58.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where you match on things just for your art files.""" start="00:47:02.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Okay. I think we might have figured out our problem.""" start="00:47:09.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It was DOS encoding. See if that works.""" start="00:47:21.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I switched the development track over""" start="00:47:38.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to just watching the gen track since I couldn't find it.""" start="00:47:47.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Also, Eludo wants to mention""" start="00:47:53.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the Emacs Carnival theme for December.""" start="00:47:57.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Yes, the people of Emacs,""" start="00:48:00.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of which you are all very awesome.""" start="00:48:02.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Thank you so much for your patience.""" start="00:48:04.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Today has been very interesting.""" start="00:48:05.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But yes, at some point we can show that too.""" start="00:48:08.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And we can basically wrap up anytime we like""" start="00:48:13.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or hang out for as much time as we like also.""" start="00:48:17.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""okay so this is okay at least i got""" start="00:48:19.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""as far as a working demo here""" start="00:48:23.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so now you can kind of see what's going on um""" start="00:48:24.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and i'll just wrap that into uh""" start="00:48:26.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""into a little prettier output""" start="00:48:31.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And you can see that it modified the value.""" start="00:48:40.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So it's pretty darn simple.""" start="00:48:53.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Again, all it's doing is completely replacing all of this content""" start="00:48:59.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with whatever new value is given as its final argument""" start="00:49:06.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""after naming the data path.""" start="00:49:11.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So the one refinement we can do just to get a little more complex example going.""" start="00:49:14.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We'll deepen our structure a little bit. And try that.""" start="00:49:23.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So here now we'll say test two.""" start="00:49:32.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And we can take a look at the data file""" start="00:49:38.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and see that it has adjusted that""" start="00:49:47.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because test2 was completely unique, that worked fine.""" start="00:49:51.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If that were not the case,""" start="00:49:55.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""we would have had to specify the path""" start="00:50:00.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""using dot notation like this. And that's pretty much it.""" start="00:50:02.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It took me much longer to figure out""" start="00:50:17.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""why it wasn't just working than it did to demo it.""" start="00:50:20.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And again, what I really like about this program,""" start="00:50:23.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""besides the fact that I find it quite useful""" start="00:50:29.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to just be able to stuff values into an org file""" start="00:50:31.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""from the command line using shell script,""" start="00:50:34.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is what I really like about this""" start="00:50:36.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is that it's a whopping 190 lines of code,""" start="00:50:41.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""including all the boilerplate.""" start="00:50:46.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I will share the project into the chat.""" start="00:50:47.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, Corwin, you're not using org-element for this, are you?""" start="00:50:55.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""No. Yeah, that's a great question.""" start="00:51:02.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Let's just dig a little into the code here.""" start="00:51:06.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Or maybe it would be more fun to actually""" start="00:51:10.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So the only real requires here, I do use cl-lib mostly.""" start="00:51:21.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm directly using the macros from org.""" start="00:51:26.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Particularly, I'm extremely fond of this function.""" start="00:51:33.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'd love to see this just promoted to promoted""" start="00:51:36.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""somewhere deeper into Emacs proper,""" start="00:51:41.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so that I don't have to load all of the org macros""" start="00:51:43.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to get to this particularly useful one,""" start="00:51:47.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which just tells me whether ignoring whitespace""" start="00:51:50.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""a string has any characters, has greater than zero length.""" start="00:51:54.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Isn't that just string blank B?""" start="00:51:59.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this is a little different.""" start="00:52:04.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""This deals with... I may struggle to remember the details,""" start="00:52:09.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and it's possible that the non-org specific version""" start="00:52:14.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""has even been improved or I didn't use it correctly,""" start="00:52:21.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I believe my experience was it didn't handle new lines, for example, quite the same way.""" start="00:52:23.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So getting into what this actually does,""" start="00:52:29.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""most of the program is finding the relevant part of the file.""" start="00:52:38.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You'll see that we start out by doing a depth-based search,""" start="00:52:43.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""capture the value that we're looking for.""" start="00:52:49.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then finally, we widen the buffer""" start="00:52:51.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and keep handling the case where we might be being called""" start="00:52:58.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""from within Emacs in a narrowed buffer.""" start="00:53:01.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""This is another what should be documented at the top.""" start="00:53:05.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So that is obviously going to load org.""" start="00:53:11.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Just double-check that. Yeah, it is going to load org.""" start="00:53:13.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And we can see that because it didn't find the function.""" start="00:53:21.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""until I loaded Org and then it did when I did C-h f""" start="00:53:30.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to get definition of a function.""" start="00:53:40.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, widen the buffer and then I just start looking for the search.""" start="00:53:45.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You can see I'm doing simple regular expression based searches here.""" start="00:53:51.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Looking for lines, ultimately, that start with a star.""" start="00:53:55.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""That was a little simpler format""" start="00:54:01.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that didn't quite work out.""" start="00:54:05.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I'm searching for, here this is a little tricky,""" start="00:54:07.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I'm searching for a number of stars""" start="00:54:25.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""equal to the depth that I want.""" start="00:54:28.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The depth that I want being calculated""" start="00:54:30.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""based on the number of dots that were in the query string.""" start="00:54:33.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""from there, you know, kind of skipping some stuff, right?""" start="00:54:38.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Once we find our starting position,""" start="00:54:47.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""then we're going to have to find the end of that,""" start="00:54:49.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the section that we're going to read or replace.""" start="00:54:53.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Text a tiny bit smaller. So I checked org-string nwp,""" start="00:54:57.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and it's the same as string blank p.""" start="00:55:12.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""exactly the same code or the same result?""" start="00:55:20.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""No, it's the same result. Well, it's the same check,""" start="00:55:26.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but string blank p will return a match object,""" start="00:55:30.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like a string match object,""" start="00:55:34.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""whereas the org version will return the string itself""" start="00:55:36.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""if it finds a match, as in if it's blank.""" start="00:55:39.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I don't remember that.""" start="00:55:46.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""As a Boolean check, they are the same.""" start="00:55:48.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you use it as, you know, is it blank or not.""" start="00:55:51.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, um, yeah, I've talked for way longer.""" start="00:55:54.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I thought I literally thought""" start="00:56:02.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""this would be a five minute thing.""" start="00:56:04.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm not sure if there are any questions on it,""" start="00:56:05.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but just to simply answer your question.""" start="00:56:08.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""No, it doesn't use org element.""" start="00:56:10.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""This is pure regex based work.""" start="00:56:11.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, the advantage of not using... Right.""" start="00:56:23.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, the advantage of not using arg element""" start="00:56:26.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is that you don't have to load arg or arg element, right?""" start="00:56:32.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And so, it's going to be faster.""" start="00:56:37.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And it's going to be faster both because you don't have to load arg element""" start="00:56:39.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and because you don't have to run arg element, like the arg parser.""" start="00:56:45.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But on the other hand,""" start="00:56:51.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you end up loading all of org anyway.""" start="00:56:52.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So at that point, it might just be better""" start="00:56:58.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to use org element because it's more robust.""" start="00:57:02.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""For example, if you have a bunch of leading stars""" start="00:57:05.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""inside a source block or something,""" start="00:57:07.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you don't want to misclassify that.""" start="00:57:09.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Matter of fact, I believe I had to do some flossing with it""" start="00:57:11.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to deal with not just that,""" start="00:57:16.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but drawers and things like that.""" start="00:57:18.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""right yeah so at the end of the day""" start="00:57:21.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that was just an extra 10 or 20 characters""" start="00:57:25.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""in the regular expression so i just shrugged and wrote them""" start="00:57:28.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you can see there are a number of i""" start="00:57:31.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""i happen to like writing regular expressions""" start="00:57:36.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and find them relatively readable so""" start="00:57:40.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So it didn't bother me doing that.""" start="00:57:42.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I've also done a bunch of work with org-element""" start="00:57:46.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with the dungeon project,""" start="00:57:49.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which of course uses that extensively""" start="00:57:51.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to pull data out of tables and so on.""" start="00:57:53.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And indeed, I think that may ultimately be my solution.""" start="00:57:57.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I've been kind of distracted on a side quest""" start="00:58:01.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to improve the org-table-fm parser.""" start="00:58:06.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""There's a post on my blog about the work that I've done there,""" start="00:58:09.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and recently started talking to Ihor,""" start="00:58:14.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the new org maintainer,""" start="00:58:19.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""who took over in the last year or so from Bastien.""" start="00:58:20.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Just about what it would take to pick that up,""" start="00:58:27.580" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or at least get it to a point""" start="00:58:32.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where somebody else could work on it.""" start="00:58:34.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's pretty dense right now.""" start="00:58:35.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this thing is a bit of a monster,""" start="00:58:39.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but at the end of the day,""" start="00:58:59.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""our goal is to extend the syntax,""" start="00:59:01.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is to be able to use this Org Table FM syntax""" start="00:59:06.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""in other contexts.""" start="00:59:12.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So if you haven't looked at board table FM,""" start="00:59:14.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""these I bar or these I markers""" start="00:59:18.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""are telling us to look for the table separator.""" start="00:59:21.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So positioning based on the location of a table separator.""" start="00:59:26.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I find that a little bit brittle""" start="00:59:29.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""just because it's really easy to go in and decide,""" start="00:59:34.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""oh, it'll look better with an additional line separator in there.""" start="00:59:38.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And then all of these formulas break everywhere.""" start="00:59:42.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So it would be a little more fun""" start="00:59:48.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to have at least variables in there.""" start="00:59:49.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And that's kind of part of the scope.""" start="00:59:53.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If we look, and here you get kind of a hint""" start="00:59:56.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of the new syntax I'd like to support,""" start="01:00:04.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""things like $star, $underscore.""" start="01:00:06.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Keyword it's it's probably a half-hour talk""" start="01:00:12.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""just to get into what every single one of these would do""" start="01:00:17.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But this post does does give some some context of that""" start="01:00:20.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And more importantly there is a as a complete test program that""" start="01:00:26.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Worked the last time I was playing with it""" start="01:00:35.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And this gives you complete examples""" start="01:00:39.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of all the syntax that the work in progress does currently support.""" start="01:00:43.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You'll see some of these items are commented out.""" start="01:00:48.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Those aren't supported yet""" start="01:00:52.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and before I would implement them now,""" start="01:00:54.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""especially now that we're talking in terms of trying to take org itself this direction, you know,""" start="01:00:56.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of kind of beefing up the the TableFM format parsing""" start="01:01:04.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so that it could be used in other contexts besides""" start="01:01:13.540" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""specifically within a formula.""" start="01:01:17.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I wouldn't want to add features""" start="01:01:19.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to it without discussing those.""" start="01:01:26.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this is just a simple, basically a literate test file""" start="01:01:33.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""if you want to call it that.""" start="01:01:37.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The perhaps key improvement here""" start="01:01:40.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""is naming all of the different capture groups.""" start="01:01:43.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""which just, if you're working""" start="01:01:49.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with really huge regular expressions, which this is,""" start="01:01:52.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""let me just make sure the whole pagex is right in here""" start="01:01:55.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so we can see it, yeah.""" start="01:01:58.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So here's the actual rewrite, scale it a little bit,""" start="01:02:00.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so you can see it's kind of a monster.""" start="01:02:05.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And that's all using Rx.""" start="01:02:14.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So hopefully that looks pretty familiar.""" start="01:02:27.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Dollars for specifying a column, at sign to specify a row.""" start="01:02:29.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And we also have the keys.""" start="01:02:35.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Anybody else want to show and tell?""" start="01:02:43.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We're going to cut over to the automated introduction""" start="01:02:58.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for the Saturday closing remarks in like four minutes.""" start="01:03:01.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, but quick, quick, quick mention of the Emacs Carnival.""" start="01:03:07.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So the Emacs Carnival is a shared blogging theme.""" start="01:03:15.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""where lots of people write about a specific theme,""" start="01:03:20.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then if you write about it,""" start="01:03:25.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you can send your link to whoever's hosting the carnival.""" start="01:03:26.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And it's a great way to discover other people's cool stuff.""" start="01:03:28.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So if I take presenter, hang on a second, take presenter.""" start="01:03:31.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Oh, actually, haha, I know,""" start="01:03:35.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'm going to make Elladom present it.""" start="01:03:39.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Haha, you are now in charge. Okay, take it away.""" start="01:03:41.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So I've been using Emacs for like 46 years now,""" start="01:03:47.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""back to TECO Emacs. And as I just said in the chat,""" start="01:03:49.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I've found that the people who use Emacs""" start="01:03:53.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""tend to be interesting people in many different ways.""" start="01:03:56.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And so this month, I'm just saying, let's give a shout out""" start="01:03:59.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to some of the interesting people we've met along the way.""" start="01:04:03.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And including some of the people""" start="01:04:06.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that are putting on this conference""" start="01:04:09.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""are some of the most interesting""" start="01:04:10.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and helpful people I've ever met.""" start="01:04:11.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So thank you. You're very kind. Thank you.""" start="01:04:13.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'll say more than that. Maybe I will.""" start="01:04:27.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I completely agree with you and I couldn't agree more.""" start="01:04:30.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I think that's how Sacha and Amin and Leo""" start="01:04:34.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""really dragged me into this,""" start="01:04:38.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you know, into being a volunteer.""" start="01:04:40.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I really, I'm sure we'll talk""" start="01:04:42.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""about this in the closing remarks,""" start="01:04:44.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but I can't recommend volunteering for this project enough.""" start="01:04:46.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's just so fun to talk backstage""" start="01:04:50.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with the presenters I don't know.""" start="01:04:54.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's an extremely engaging community.""" start="01:05:00.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's really thoughtful.""" start="01:05:11.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I like the way y'all are so patient and awesome""" start="01:05:12.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and I can be just quietly having my little freak out here""" start="01:05:15.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and everyone's fine""" start="01:05:19.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and will even help debug things live as needed.""" start="01:05:20.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this is all good.""" start="01:05:23.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Anyway, so if people want to participate,""" start="01:05:45.500" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you basically write a blog post.""" start="01:05:48.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you don't have a blog yet,""" start="01:05:49.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""there are any number of packages in Emacs,""" start="01:05:53.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""as well as web-based services,""" start="01:05:56.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but really, you can get something going with Emacs.""" start="01:05:58.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or exporting to HTML and maybe even figure out RSS,""" start="01:06:02.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or you can use a static site generator like Hugo,""" start="01:06:05.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or you can find, if you can set up WordPress,""" start="01:06:08.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that's another way to do it.""" start="01:06:11.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Or you can email me your thing and I'll post it on my blog""" start="01:06:12.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and let me know how you want to be credited for it.""" start="01:06:15.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Anyway, so you can share your story""" start="01:06:20.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or share your story about somebody else's story""" start="01:06:23.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and celebrate Emacs community.""" start="01:06:26.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And we can send it to George also.""" start="01:06:35.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We'll then make links in that blog post.""" start="01:06:39.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And on the subject of community,""" start="01:06:48.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I also heartily recommend the IRC community on Emacs.""" start="01:06:50.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Pound Emacs is another one of those things""" start="01:06:53.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that I just personally can't get enough of,""" start="01:06:55.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and I hear a lot of stories about just how it's helped people.""" start="01:06:58.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, we are now having the automated introduction""" start="01:07:05.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and then it's going to rejoin over here very soon.""" start="01:07:09.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Hang on a second. Wow, that's going.""" start="01:07:12.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Saturday close and let's arrange our screen nicely.""" start="01:07:22.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""All right, we made it to the end of the first day! Woohoo!""" start="01:07:34.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Thank you for joining us""" start="01:07:38.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for the first day of EmacsConf 2025.""" start="01:07:40.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Feel free to spread the word""" start="01:07:42.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""because there is still another day of fun talks tomorrow.""" start="01:07:44.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So hashtag EmacsConf and hashtag Emacs.""" start="01:07:48.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you do hashtag Emacs on Mastodon""" start="01:07:51.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""or Blue Sky or other places, we'll probably find it.""" start="01:07:54.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Or if I don't, you can just let me know also.""" start="01:07:58.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The prerecorded talks should be up""" start="01:08:01.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""on the talk pages already.""" start="01:08:04.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""The live talks, we'll probably actually get them up""" start="01:08:05.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""within the next week or two.""" start="01:08:09.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I think they've already started processing,""" start="01:08:11.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so I just had to sit down and then work with""" start="01:08:13.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""our wonderful army of volunteer captioners""" start="01:08:15.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to get them all nicely captioned.""" start="01:08:18.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""But anyway, so the prerecorded talks""" start="01:08:20.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""are also up on YouTube,""" start="01:08:22.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and I will eventually also upload them""" start="01:08:23.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to ToobNix, which is a PeerTube instance.""" start="01:08:25.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We will work on extracting live talks.""" start="01:08:29.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you'd like updates,""" start="01:08:31.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""please subscribe to the EmacsConf Discuss mailing list.""" start="01:08:32.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you've got ideas for making things better,""" start="01:08:35.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""we have so many ideas. I always end up with a very long""" start="01:08:37.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""to-do list after these things. Please add them to the pad.""" start="01:08:39.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I'd love to hear from you on how we can make it even smoother next year.""" start="01:08:43.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""There are about 100 people watching in gen""" start="01:08:46.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and 100 people watching in devs, which is really awesome.""" start="01:08:49.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""It's amazing to think that we can have""" start="01:08:52.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""an Emacs party for a lot of people.""" start="01:08:54.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And we can only do this because of all the wonderful speakers,""" start="01:08:56.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""volunteers, participants,""" start="01:09:00.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and very patient people in our lives""" start="01:09:02.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""who make it possible through all the time and support.""" start="01:09:04.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So this year, Corwin did most of the hosting.""" start="01:09:07.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I mean, also dropped by earlier, so that's great.""" start="01:09:10.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I hope Leo is okay. You know, we managed.""" start="01:09:13.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And I'm Sasha, by the way. I was running around backstage""" start="01:09:17.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and occasionally dropping in to go on the stream.""" start="01:09:22.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""There are lots of other volunteers who are not on air.""" start="01:09:26.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So, for example, during the proposal review process,""" start="01:09:29.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""we got a lot of wonderful comments""" start="01:09:32.720" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""from J.C. Helary, Triko, and James Endres Howell,""" start="01:09:34.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""captions from Amitav and Rodion and other people""" start="01:09:37.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""have actually started also helping""" start="01:09:41.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""with the captions as well.""" start="01:09:42.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So jay_bird just sent in some stuff today too.""" start="01:09:45.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""We are slowly working on getting a mirror in the EU set up""" start="01:09:49.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so it'll be a little faster for people.""" start="01:09:52.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So thanks to Yang3 for lending us a server.""" start="01:09:55.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Babin and Michael and Ian and Jamie""" start="01:09:58.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and Eeyore and Floyd Coulter have also helped out as well.""" start="01:10:00.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Thanks to the Free Software Foundation""" start="01:10:06.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for the mailing list, the media server, and of course, GNU Emacs itself,""" start="01:10:08.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for which an astonishing amount""" start="01:10:12.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""of the scripting is done in Emacs. It's great.""" start="01:10:15.440" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Thanks to Ry P for the server that we're using for OBS""" start="01:10:19.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so that we can just VNC into it and I can manage two tracks""" start="01:10:23.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""without making my computer melt. It's great.""" start="01:10:27.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And of course, to all the users""" start="01:10:30.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and contributors and project teams""" start="01:10:32.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that work on all the free software""" start="01:10:34.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""that this stuff is built on.""" start="01:10:36.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Emacs, Org Mode, ERC, Tramp, Magit, BigBlueButton,""" start="01:10:37.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Etherpad, IkiWiki, IceCast, OBS, The Lounge,""" start="01:10:43.640" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""LiberaChat, FFmpeg, OpenAI Whisper, WhisperX,""" start="01:10:48.240" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""the Aeneas forced alignment tool,""" start="01:10:52.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""PsiTransfer, SubEd, SubSeg, Mozilla Firefox, MPV, and Tampermonkey,""" start="01:10:55.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and other things I probably forgot to mention.""" start="01:11:00.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Thanks to Shoshin for the music,""" start="01:11:02.200" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and thanks to people also who've donated""" start="01:11:04.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""through the Working Together program,""" start="01:11:06.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""like Scott and Jonathan and other anonymous donors.""" start="01:11:08.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So that's a quick thanks. There's more tomorrow,""" start="01:11:12.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but Corwin, do you have any parting words?""" start="01:11:15.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You know, my parting words, Sacha are a thanks to you""" start="01:11:18.360" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and not just a thanks""" start="01:11:23.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""for the hundreds of hours that you put""" start="01:11:25.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""into preparing this conference,""" start="01:11:27.280" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""you know, over the years and probably just this year,""" start="01:11:29.400" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""but also for all that you do for the community you are.""" start="01:11:32.160" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""You are a real unsung hero,""" start="01:11:36.000" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""even though I do hear your praises sung.""" start="01:11:38.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""They really can't be sung enough.""" start="01:11:42.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""In fact, I just this last week""" start="01:11:43.760" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""recommended to two different people your blog""" start="01:11:45.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""as a place to get a first introduction to Emacs.""" start="01:11:48.040" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Your Emacs news is an incredible contribution,""" start="01:11:51.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and just I want you to hear us thanking you.""" start="01:11:54.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Thank you, Sacha. Emacs is a lot of fun,""" start="01:11:57.960" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and Emacs people are a lot of fun,""" start="01:12:04.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so it's all very wonderful. Yeah, we can wrap up here.""" start="01:12:07.520" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""People can keep hanging out if they want.""" start="01:12:10.880" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""I have a kiddo who is probably going to be back home soon""" start="01:12:15.080" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and will pounce on me for more hugs,""" start="01:12:21.120" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""so I will see y'all tomorrow.""" start="01:12:23.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""uh, for more probably the same kind of stuff.""" start="01:12:25.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Shut it down, save our energy for tomorrow.""" start="01:12:29.920" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Uh, we do like to run into like hours long closing tomorrow.""" start="01:12:32.680" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""So we'll work on resisting that.""" start="01:12:36.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Um, I suggest we, we look, we go get some rest""" start="01:12:38.320" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""and come, come back at it fresh tomorrow.""" start="01:12:41.560" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Anybody else, any concerns with that or shall we go for it?""" start="01:12:43.840" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""Sounds good to me.""" start="01:12:47.800" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""If you've got ideas, pop them into the etherpad.""" start="01:12:50.480" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""And thank you so much for sharing this time with us.""" start="01:12:53.600" video="mainVideo-open-mic" id="subtitle"]]
+[[!template text="""See you tomorrow.""" start="01:12:56.640" video="mainVideo-open-mic" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20open-mic%3A%20Open%20session)
+
+
+<!-- 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..cdb9e790
--- /dev/null
+++ b/2025/info/open-mic-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 74-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-open-mic>
+Etherpad: <https://pad.emacsconf.org/2025-open-mic>
+Status: TO_INDEX_QA
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-open-mic"><source src="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 1:13:00 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-open-mic">Open Etherpad</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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.m4v">Download --main.m4v (195MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.webm">Download --main.webm (156MB)</a></li><li><a href="https://toobnix.org/videos/watch/cffff616-e726-4bfc-aca4-4d3371ee96fd">View on Toobnix</a></li><li><a href="https://youtu.be/lnieSGyFRek">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/open-mic-nav.md b/2025/info/open-mic-nav.md
new file mode 100644
index 00000000..d0fb4b77
--- /dev/null
+++ b/2025/info/open-mic-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/greader">GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</a>
+Next by track: <a href="/2025/talks/sun-open">Sunday opening remarks</a>
+Track: <span class="sched-track General">General</span>
+</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..23bffdf7
--- /dev/null
+++ b/2025/info/org-babel-before.md
@@ -0,0 +1,23 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 9-min talk ; Q&A: Etherpad
+Etherpad: <https://pad.emacsconf.org/2025-org-babel>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<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://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://toobnix.org/videos/watch/ccca7c9a-94f3-4237-b216-376867f1be18">View on Toobnix</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..a0c351dd
--- /dev/null
+++ b/2025/info/org-babel-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/sat-open">Saturday opening remarks</a>
+Next by track: <a href="/2025/talks/reference">Emacs as a fully-fledged reference manager</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2025/info/private-ai-after.md b/2025/info/private-ai-after.md
new file mode 100644
index 00000000..b9faf377
--- /dev/null
+++ b/2025/info/private-ai-after.md
@@ -0,0 +1,912 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="private-ai-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""Hey, everybody. Welcome from frigid Omaha, Nebraska.""" start="00:00:00.000" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm just going to kick off my talk here,""" start="00:00:04.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and we'll see how it all goes. Thanks for attending.""" start="00:00:06.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So the slides will be available on my site, https://grothe.us,""" start="00:00:23.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""in the presentation section tonight or tomorrow.""" start="00:00:26.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This is a quick intro to one way to do private AI in Emacs.""" start="00:00:29.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There are a lot of other ways to do it.""" start="00:00:33.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This one is really just more or less the easiest way to do it.""" start="00:00:35.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's a minimal viable product""" start="00:00:38.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to get you an idea of how to get started with it""" start="00:00:40.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and how to give it a spin.""" start="00:00:42.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Really hope some of you give it a shot""" start="00:00:43.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and learn something along the way.""" start="00:00:45.820" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Overview of talk""" start="00:00:48.180" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""So the overview of the talk""" start="00:00:48.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""broke down these basic bullet points of why private AI,""" start="00:00:50.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""what do I need to do private AI, Emacs and private AI,""" start="00:00:54.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""pieces for an AI Emacs solution,""" start="00:00:58.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a demo of a minimal viable product, and the summary.""" start="00:01:02.740" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why private AI?""" start="00:01:08.060" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""Why private AI? This is pretty simple.""" start="00:01:08.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Just read the terms and conditions""" start="00:01:10.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for any AI system you're currently using.""" start="00:01:12.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you're using the free tiers, your queries,""" start="00:01:14.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""code, uploaded information""" start="00:01:17.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""is being used to train the models.""" start="00:01:18.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""In some cases, you are giving the company""" start="00:01:20.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a perpetual license to your data.""" start="00:01:22.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You have no control over this,""" start="00:01:25.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""except for not using the engine.""" start="00:01:27.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And keep in mind, the terms""" start="00:01:29.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""are changing all the time on that,""" start="00:01:30.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and they're not normally changing for our benefit.""" start="00:01:32.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So that's not necessarily a good thing.""" start="00:01:34.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you're using the paid tiers,""" start="00:01:38.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you may be able to opt out of the data collection.""" start="00:01:40.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But keep in mind, this can change,""" start="00:01:43.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""or they may start charging for that option.""" start="00:01:45.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Every AI company wants more and more data.""" start="00:01:48.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""They need more and more data to train their models.""" start="00:01:51.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It is just the way it is.""" start="00:01:53.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""They need more and more information""" start="00:01:56.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to get it more and more accurate to keep it up to date.""" start="00:01:57.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There's been a story about Stack Overflow.""" start="00:02:00.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It has like half the number of queries they had a year ago""" start="00:02:03.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because people are using AI.""" start="00:02:05.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The problem with that is now""" start="00:02:07.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""there's less data going to Stack Overflow""" start="00:02:08.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for the AI to get. Vicious cycle,""" start="00:02:10.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""especially when you start looking at""" start="00:02:12.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""newer language like Ruby and stuff like that.""" start="00:02:14.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So it comes down to being an interesting time.""" start="00:02:16.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Another reason why to go private AI is your costs are going to vary.""" start="00:02:21.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Right now, these services are being heavily subsidized.""" start="00:02:24.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you're paying Claude $20 a month,""" start="00:02:27.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it is not costing Claude, those guys, $20 a month""" start="00:02:29.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to host all the infrastructure""" start="00:02:32.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to build all these data centers.""" start="00:02:34.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""They are severely subsidizing that""" start="00:02:35.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""at a very much a loss right now.""" start="00:02:38.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""When they start charging the real costs plus a profit,""" start="00:02:41.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it's going to change.""" start="00:02:43.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Right now, I use a bunch of different services.""" start="00:02:45.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've played with Grok and a bunch of other ones.""" start="00:02:48.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But Grok right now is like $30 a month""" start="00:02:50.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for a regular Super Grok.""" start="00:02:52.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""When they start charging the real cost of that,""" start="00:02:54.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it's going to go from $30 to something a great deal more,""" start="00:02:56.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""perhaps, I think, $100 or $200""" start="00:02:59.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""or whatever really turns out to be the cost""" start="00:03:02.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""when you figure everything into it.""" start="00:03:04.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""When you start adding that cost into that,""" start="00:03:06.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a lot of people are using public AI right now""" start="00:03:07.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""are going to have no option but to move to private AI""" start="00:03:10.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""or give up on AI overall.""" start="00:03:11.900" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What do I need for private AI?""" start="00:03:16.020" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""What do you need to be able to do private AI?""" start="00:03:16.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you're going to run your own AI,""" start="00:03:18.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you're going to need a system with either some cores,""" start="00:03:21.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a graphics processor unit,""" start="00:03:23.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""or a neural processing unit, a GPU or an NPU.""" start="00:03:25.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I currently have four systems""" start="00:03:28.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm experimenting with and playing around with on a daily basis.""" start="00:03:29.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I have a System76 Pangolin AMD Ryzen 7 78040U""" start="00:03:32.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""with a Radeon 7080M integrated graphics card.""" start="00:03:37.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's got 32 gigs of RAM.""" start="00:03:41.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's a beautiful piece of hardware. I really do like it.""" start="00:03:42.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I have my main workstation,""" start="00:03:45.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it's an HP Z620 with dual Intel Xeons""" start="00:03:46.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""with four NVIDIA K2200 graphics cards in it.""" start="00:03:50.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Why the four NVIDIA K2200 graphics card on it?""" start="00:03:53.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Because I could buy four of them on eBay for $100""" start="00:03:56.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and it was still supported by the NVIDIA drivers for Debian.""" start="00:03:59.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So that's why that is. A MacBook Air with an M1 processor,""" start="00:04:02.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a very nice piece of kit I picked up a couple years ago,""" start="00:04:08.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""very cheap, but it runs AI surprisingly well,""" start="00:04:10.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and an Acer Aspire 1 with an AMD Ryzen 5700H in it.""" start="00:04:14.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This was my old laptop. It was a sturdy beast.""" start="00:04:18.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It was able to do enough AI to do demos and stuff,""" start="00:04:22.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and I liked it quite a bit for that.""" start="00:04:24.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm using the Pangolin for this demonstration""" start="00:04:25.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because it's just better.""" start="00:04:28.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Apple's M4 chip has 38 teraflops of MPU performance.""" start="00:04:30.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The Microsoft co-pilots are now requiring""" start="00:04:37.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""45 teraflops of MPU""" start="00:04:40.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to be able to have the co-pilot badge on it.""" start="00:04:41.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And Raspberry Pi's new AI top is about 18 teraflops""" start="00:04:43.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and is $70 on top of the cost of Raspberry Pi 5.""" start="00:04:48.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Keep in mind, Raspberry recently""" start="00:04:51.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""raised the cost of their Pi 5s because of RAM pricing,""" start="00:04:56.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which is going to be affecting""" start="00:04:59.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a lot of these types of solutions in the near future.""" start="00:05:00.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But there's going to be a lot of""" start="00:05:02.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""local power available in the future.""" start="00:05:05.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That's what it really comes down to.""" start="00:05:06.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""A lot of people are going to have PCs on their desks.""" start="00:05:08.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""They're going to run a decent private AI""" start="00:05:11.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""without much issue.""" start="00:05:13.460" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Emacs and private AI""" start="00:05:16.348" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""So for Emacs and private AI,""" start="00:05:16.348" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""there's a couple popular solutions.""" start="00:05:18.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Gptel, which is the one we're going to talk about.""" start="00:05:20.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's a simple interface. It's a minimal interface.""" start="00:05:22.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It integrates easily into your workflow.""" start="00:05:24.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's just, quite honestly, chef's kiss,""" start="00:05:26.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""just a beautifully well-done piece of software.""" start="00:05:29.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Ollama Buddy has more features,""" start="00:05:31.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a menu interface, has quick access""" start="00:05:33.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for things like code refactoring,""" start="00:05:36.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""text-free formatting, et cetera.""" start="00:05:37.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This is the one that you spend a little more time with,""" start="00:05:38.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but you also get a little bit more back from it.""" start="00:05:41.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Ellama is another one, has some really good features to it,""" start="00:05:43.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""more different capabilities,""" start="00:05:49.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it's a different set of rules and capabilities to it.""" start="00:05:51.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Aidermac, which is programming with your AI and Emacs.""" start="00:05:54.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The closest thing I can come up""" start="00:05:59.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to comparing this to is Cursor, except it's in Emacs.""" start="00:06:01.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's really quite well done.""" start="00:06:04.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""These are all really quite well done.""" start="00:06:05.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There's a bunch of other projects out there.""" start="00:06:07.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you go out to GitHub, type Emacs AI,""" start="00:06:08.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you'll find a lot of different options.""" start="00:06:10.820" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Pieces for an AI Emacs solution""" start="00:06:13.220" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""So what is a minimal viable product that can be done?""" start="00:06:13.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""A minimal viable product to show what an AI Emacs solution is""" start="00:06:18.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""can be done with only needing two pieces of software.""" start="00:06:23.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Llamafile, this is an amazing piece of software.""" start="00:06:27.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This is a whole LLM contained in one file.""" start="00:06:31.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And the same file runs on Mac OS X,""" start="00:06:32.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Linux, Windows, and the BSDs.""" start="00:06:36.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's a wonderful piece of kit""" start="00:06:39.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""based on these people who created""" start="00:06:42.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""this thing called Cosmopolitan""" start="00:06:44.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that lets you create and execute""" start="00:06:45.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""while it runs on a bunch of different systems.""" start="00:06:46.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And Gptel, which is an easy plug-in for Emacs,""" start="00:06:48.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which we talked about in the last slide a bit.""" start="00:06:51.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So setting up the LLM, you have to just go out""" start="00:06:56.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and just hit a page for it""" start="00:07:00.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and go out and do a wget of it.""" start="00:07:03.543" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That's all it takes there.""" start="00:07:05.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Chmodding it so you can actually execute the executable.""" start="00:07:07.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And then just go ahead and actually running it.""" start="00:07:10.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And let's go ahead and do that.""" start="00:07:12.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've already downloaded it because I don't want to wait.""" start="00:07:16.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And let's just take a look at it.""" start="00:07:18.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've actually downloaded several of them,""" start="00:07:21.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but let's go ahead and just run llama 3.2-1b""" start="00:07:22.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""with the 3 billion instructions. And that's it firing up.""" start="00:07:25.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And it is nice enough to actually be listening in port 8080,""" start="00:07:31.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which we'll need in a minute.""" start="00:07:33.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So once you do that, you have to install gptel and emacs.""" start="00:07:35.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That's as simple as firing up emacs,""" start="00:07:43.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""doing the M-x install-package,""" start="00:07:45.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and then just typing gptel,""" start="00:07:48.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if you have your repository set up right,""" start="00:07:49.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which hopefully you do.""" start="00:07:51.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And then you just go ahead and have it.""" start="00:07:52.300" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Config file""" start="00:07:56.340" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""You also have to set up a config file.""" start="00:07:56.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Here's my example config file as it currently set up,""" start="00:07:58.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""requiring, ensuring Gptel is loaded,""" start="00:08:01.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""defining the Llamafile backend.""" start="00:08:04.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You can put multiple backends into it,""" start="00:08:05.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but I just have the one defined on this example.""" start="00:08:07.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But it's pretty straightforward.""" start="00:08:09.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Llama local file, name for it, stream, protocol HTTP.""" start="00:08:12.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you have HTTPS set up, that's obviously preferable,""" start="00:08:16.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but a lot of people don't for their home labs.""" start="00:08:20.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Host is just 127.0.0.1 port 8080.""" start="00:08:22.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Keep in mind, some of the AIs run on a different port,""" start="00:08:26.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""so you may be 8081""" start="00:08:30.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if you're running OpenWebView at the same time. The key,""" start="00:08:31.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""we don't need an API key because it's a local server.""" start="00:08:34.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And the models just, uh, we can put multiple models""" start="00:08:37.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""on there if we want to.""" start="00:08:40.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So if we create one with additional stuff""" start="00:08:41.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""or like rag and stuff like that,""" start="00:08:43.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""we can actually name those models by their domain,""" start="00:08:45.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which is really kind of cool.""" start="00:08:47.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But, uh, that's all that takes.""" start="00:08:48.700" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo: Who was David Bowie?""" start="00:08:52.100" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""So let's go ahead and go to a quick test of it.""" start="00:08:52.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Oops. Alt-X, gptel. And we're going to just choose""" start="00:09:03.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""the default buffer to make things easier.""" start="00:09:11.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Going to resize it up a bit.""" start="00:09:12.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And usually the go-to question I go to is, who was David Bowie?""" start="00:09:15.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This one is actually a question""" start="00:09:19.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that's turned out to be really good""" start="00:09:24.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for figuring out whether or not AI is complete.""" start="00:09:26.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This is one that some engines do well on, other ones don't.""" start="00:09:28.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And we can just do, we can either do""" start="00:09:31.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""the alt X and send the gptel-send,""" start="00:09:33.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""or we can just do C-c and hit enter.""" start="00:09:36.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""We'll just do C-c and enter.""" start="00:09:37.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And now it's going ahead and hitting our local AI system""" start="00:09:39.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""running on port 8080. And that looks pretty good,""" start="00:09:43.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but let's go ahead and say, hey, it's set to terse mode right now.""" start="00:09:46.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Please expand upon this. And there we go.""" start="00:09:50.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""We're getting a full description""" start="00:10:03.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""of the majority of, uh, about David Bowie's life""" start="00:10:05.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and other information about him.""" start="00:10:08.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So very, very happy with that.""" start="00:10:10.140" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Hallucinations""" start="00:10:21.700" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""One thing to keep in mind is you look at things""" start="00:10:21.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""when you're looking for hallucinations,""" start="00:10:23.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""how accurate AI is, how it's compressed""" start="00:10:24.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""is it will tend to screw up on things like""" start="00:10:26.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""how many children he had and stuff like that.""" start="00:10:29.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Let me see if it gets to that real quick.""" start="00:10:30.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Is it not actually on this one?""" start="00:10:32.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Alright, so that's the first question I always ask one.""" start="00:10:39.740" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Next question: What are sea monkeys?""" start="00:10:42.180" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""The next one is what are sea monkeys?""" start="00:10:42.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It gives you an idea of the breadth of the system.""" start="00:10:44.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's querying right now. Pulls it back correctly. Yes.""" start="00:10:48.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And it's smart enough to actually detect David Bowie""" start="00:11:10.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""even referenced see monkeys in the song sea of love,""" start="00:11:12.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which came at hit single.""" start="00:11:15.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So it's actually keeping the context alive""" start="00:11:16.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and that which is very cool feature.""" start="00:11:18.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I did not see that coming.""" start="00:11:20.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Here's one that some people say is a really good one""" start="00:11:21.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to ask. Rs in &quot;strawberry.&quot;""" start="00:11:24.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""All right, now she's going off the reservation.""" start="00:11:42.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""She's going in a different direction.""" start="00:11:46.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Let me go ahead and reopen that again,""" start="00:11:48.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because it went down a bad hole there for a second.""" start="00:11:49.980" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Writing Hello World in Emacs Lisp""" start="00:11:57.180" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""Let me ask it to write hello world in Emacs Lisp.""" start="00:11:57.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Yep, that works. So the point being here,""" start="00:11:58.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that was like two minutes of setup.""" start="00:12:10.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And now we have a small AI embedded inside the system.""" start="00:12:14.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So that gives you an idea just how easy it can be.""" start="00:12:18.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And it's just running locally on the system.""" start="00:12:20.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""We also have the default system here as well.""" start="00:12:22.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So not that bad.""" start="00:12:25.260" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Pieces for a better solution""" start="00:12:32.580" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""That's a basic solution, that's a basic setup""" start="00:12:32.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that will get you to the point where you can go like,""" start="00:12:35.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it's a party trick, but it's a very cool party trick.""" start="00:12:37.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The way that Gptel works is it puts it into buffers,""" start="00:12:39.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it doesn't interfere with your flow that much,""" start="00:12:42.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it's just an additional window you can pop open""" start="00:12:45.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to ask questions and get information for,""" start="00:12:47.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""dump code into it and have it refactored.""" start="00:12:49.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Gptel has a lot of additional options""" start="00:12:51.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for things that are really cool for that.""" start="00:12:53.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But if you want a better solution,""" start="00:12:55.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I recommend Ollama or LM Studio.""" start="00:12:57.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""They're both more capable than Llamafile.""" start="00:12:59.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""They can accept a lot of different models.""" start="00:13:01.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You can do things like RAG.""" start="00:13:03.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You can do loading of things onto the GPU more explicitly.""" start="00:13:05.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It can speed stuff up.""" start="00:13:09.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""One of the things about the retrieval augmentation is""" start="00:13:10.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it will let you put your data into the system""" start="00:13:13.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""so you can start uploading your code, your information,""" start="00:13:15.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and actually being able to do analysis of it.""" start="00:13:17.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Open WebUI provides more capabilities.""" start="00:13:20.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It provides an interface that's similar""" start="00:13:23.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to what you're used to seeing""" start="00:13:24.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for ChatGPT and the other systems.""" start="00:13:25.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's really quite well done.""" start="00:13:28.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And once again, gptel, I have to mention that""" start="00:13:29.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because that's the one I really kind of like.""" start="00:13:32.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And Ollama Buddy is also another really nice one.""" start="00:13:34.780" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What about the license?""" start="00:13:36.900" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""So what about the licensing of these models?""" start="00:13:36.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Since I'm going out pulling down""" start="00:13:41.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a model and doing this stuff.""" start="00:13:42.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Let's take a look at a couple of highlights""" start="00:13:43.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""from the Meta Llama 3 community license scale.""" start="00:13:46.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If your service exceeds 700 million monthly users,""" start="00:13:49.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you need additional licensing.""" start="00:13:52.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Probably not going to be a problem for most of us.""" start="00:13:54.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There's a competition restriction.""" start="00:13:56.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You can't use this model to enhance competing models.""" start="00:13:58.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And there's some limitations on using the Meta trademarks.""" start="00:14:00.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Not that big a deal.""" start="00:14:04.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And the other ones are it's a permissive one""" start="00:14:05.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""designed to encourage innovation,""" start="00:14:09.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""open development, commercial use is allowed,""" start="00:14:10.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but there are some restrictions on it.""" start="00:14:13.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Yeah, you can modify the model,""" start="00:14:15.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but you have to rely on the license terms.""" start="00:14:17.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And you can distribute the model with derivatives.""" start="00:14:20.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And there are some very cool ones out there.""" start="00:14:22.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There's people who've done things""" start="00:14:24.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to try and make the Llama be less, what's the phrase,""" start="00:14:25.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""ethical if you're doing penetration testing research""" start="00:14:29.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and stuff like that.""" start="00:14:31.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It has some very nice value there.""" start="00:14:32.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Keep in mind licenses also vary""" start="00:14:34.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""depending on the model you're using.""" start="00:14:37.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Mistral AI has the non-production license.""" start="00:14:39.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's designed to keep it to research and development.""" start="00:14:42.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You can't use it commercially.""" start="00:14:45.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So it's designed to clearly delineate""" start="00:14:46.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""between research and development""" start="00:14:51.793" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and somebody trying to actually build""" start="00:14:52.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""something on top of it.""" start="00:14:54.260" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Are there open source data model options?""" start="00:14:56.580" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""And another question I get asked is,""" start="00:14:56.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""are there open source data model options?""" start="00:14:57.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Yeah, but most of them are small or specialized currently.""" start="00:14:59.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""MoMo is a whole family of them,""" start="00:15:02.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but there tend to be more specialized,""" start="00:15:05.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it's very cool to see where it's going.""" start="00:15:07.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And it's another thing that's just going forward.""" start="00:15:09.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's under the MIT license.""" start="00:15:11.340" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Things to know""" start="00:15:14.520" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""Some things to know to help you""" start="00:15:14.520" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""have a better experience with this.""" start="00:15:15.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Get ollama and Open WebUI working by themselves,""" start="00:15:17.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""then set up your config file.""" start="00:15:21.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I was fighting both at the same time,""" start="00:15:22.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and it turned out I had a problem with my ollama.""" start="00:15:24.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I had a conflict, so that was what my problem is.""" start="00:15:26.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Llamafile, gptel is a great way to start experimenting""" start="00:15:28.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""just to get you an idea of how it works""" start="00:15:32.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and figure out how the interfaces work. Tremendous.""" start="00:15:34.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""RAG loading documents into it is really easy with open web UI.""" start="00:15:36.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You can create models, you can put things like""" start="00:15:40.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""help desk developers and stuff like that, breaking it out.""" start="00:15:43.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The Hacker Noon has a how to build a $300 AI computer.""" start="00:15:46.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This is for March 2024,""" start="00:15:51.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it still has a lot of great information""" start="00:15:52.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""on how to benchmark the environments,""" start="00:15:55.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""what some values are like the Ryzen 5700U""" start="00:15:56.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""inside my Acer Aspire,""" start="00:16:01.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that's where I got the idea doing that.""" start="00:16:02.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Make sure you do the ROCm stuff correctly""" start="00:16:04.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to get the GUI extensions. But it's just really good stuff.""" start="00:16:06.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You don't need a great GPU or CPU to get started.""" start="00:16:09.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Smaller models like tinyllama""" start="00:16:13.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""can run on very small systems.""" start="00:16:14.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It gets you the ability to start playing with it""" start="00:16:16.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and start experimenting and figure out if that's for you""" start="00:16:19.043" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and to move forward with it.""" start="00:16:21.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The AMD Ryzen AI Max+ 395 is a mini PC""" start="00:16:23.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""makes it really nice dedicated host.""" start="00:16:29.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You used to be able to buy these for about $1200.""" start="00:16:31.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Now with the RAM price increase,""" start="00:16:34.079" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you want to get 120 gig when you're pushing two brands,""" start="00:16:35.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""so it gets a little tighter.""" start="00:16:38.459" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Macs work remarkably well with AI.""" start="00:16:40.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""My MacBook Air was one of my go-tos for a while,""" start="00:16:44.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but once I started doing anything AI,""" start="00:16:47.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I had a five-minute window""" start="00:16:49.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""before the thermal throttling became an issue.""" start="00:16:50.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Keep in mind that's a MacBook Air,""" start="00:16:52.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""so it doesn't have the greatest ventilation.""" start="00:16:54.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you get the MacBook Pros and stuff,""" start="00:16:56.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""they tend to have more ventilation,""" start="00:16:58.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but still you're going to be pushing against that.""" start="00:17:00.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So Mac Minis and the Mac Ultras and stuff like that""" start="00:17:02.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""tend to work really well for that.""" start="00:17:04.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Alex Ziskind on YouTube has a channel.""" start="00:17:06.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""He does a lot of AI performance benchmarking,""" start="00:17:09.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""like &quot;I load a 70 billion parameter model""" start="00:17:11.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""on this mini PC&quot; and stuff like that.""" start="00:17:14.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's a lot of fun and interesting stuff there.""" start="00:17:16.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And it's influencing my decision""" start="00:17:19.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to buy my next AI style PC.""" start="00:17:21.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Small domain specific LLMs are happening.""" start="00:17:22.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""An LLM that has all your code and information,""" start="00:17:27.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it sounds like a really cool idea.""" start="00:17:29.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It gives you capabilities to start training stuff""" start="00:17:31.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that you couldn't do with like the big ones.""" start="00:17:34.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Even with in terms of fine-tuning and stuff,""" start="00:17:35.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it's remarkable to see where that space is coming along""" start="00:17:38.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""in the next year or so.""" start="00:17:40.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""HuggingFace.co has pointers to tons of AI models.""" start="00:17:41.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You'll find the one that works for you, hopefully there.""" start="00:17:46.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you're doing cybersecurity,""" start="00:17:48.418" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""there's a whole bunch out there for that,""" start="00:17:50.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that have certain training on it, information.""" start="00:17:52.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's really good.""" start="00:17:54.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""One last thing to keep in mind is hallucinations are real.""" start="00:17:56.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You will get BS back from the AI occasionally,""" start="00:18:00.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""so do validate everything you get from it.""" start="00:18:02.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Don't be using it for court cases like some people have""" start="00:18:05.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and run into those problems. So, That is my talk.""" start="00:18:08.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""What I would like you to get out of that is,""" start="00:18:14.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if you haven't tried it, give Gptel and LlamaFile a shot.""" start="00:18:17.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Fire up a little small AI instance,""" start="00:18:21.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""play around with a little bit inside your Emacs,""" start="00:18:23.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and see if it makes your life better. Hopefully it will.""" start="00:18:27.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And I really hope you guys""" start="00:18:30.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""learned something from this talk. And thanks for listening.""" start="00:18:32.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And the links are at the end of the talk, if you have any questions.""" start="00:18:34.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Let me see if we got anything you want, Pat. You do.""" start="00:18:38.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You've got a few questions.""" start="00:18:42.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Hey, this is Corwin. Thank you so much. Thank you, Aaron.""" start="00:18:43.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""What an awesome talk this was, actually.""" start="00:18:48.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you don't have a camera,""" start="00:18:50.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I can get away with not having one too.""" start="00:18:52.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: I've got, I'll turn the camera on.""" start="00:18:54.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Okay. All right. I'll turn mine back on. Here I come.""" start="00:18:56.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Yeah, so there are a few questions,""" start="00:18:59.834" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but first let me say thank you""" start="00:19:03.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for a really captivating talk.""" start="00:19:04.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I think a lot of people will be empowered from this""" start="00:19:06.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to try to do more with less, especially locally.""" start="00:19:10.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""concerned about the data center footprint,""" start="00:19:15.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""environmentally concerned""" start="00:19:20.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""about the footprint of LLM inside data centers.""" start="00:19:23.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So just thinking about how we can""" start="00:19:26.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""put infrastructure we have at home to use""" start="00:19:28.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and get more done with less.""" start="00:19:32.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Yeah, the data center impact's interesting""" start="00:19:34.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because there was a study a while ago.""" start="00:19:37.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Someone said every time you do a Gemini query,""" start="00:19:39.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it's like boiling a cup of water.""" start="00:19:42.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Yeah, I've heard that one too. So do you want to, you know,""" start="00:19:45.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I don't know how much direction you want.""" start="00:19:48.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'd be very happy to read out the questions for you.""" start="00:19:51.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Yeah, that would be great.""" start="00:19:53.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm having trouble getting to that tab.""" start="00:19:55.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Okay, I'm there, so I'll put it into our chat too,""" start="00:19:57.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""so you can follow along if you'd like.""" start="00:20:02.780" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Why is the David Bowie question a good one for testing a model? e\.g\. does it fail in interesting ways?""" start="00:20:07.420" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""[Corwin]: The first question was, why is the David Bowie question""" start="00:20:07.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a good one to start with?""" start="00:20:11.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Does it have interesting failure conditions""" start="00:20:12.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""or what made you choose that?""" start="00:20:14.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: First off, huge fan of David Bowie.""" start="00:20:16.640" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But I came down to it really taught me a few things""" start="00:20:21.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""about how the models work""" start="00:20:24.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""in terms of things like how many kids he had,""" start="00:20:26.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because Deepseek, which is a very popular Chinese model""" start="00:20:28.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that a lot of people are using now,""" start="00:20:31.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""misidentifies him having three daughters,""" start="00:20:33.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and he has like one son and one, one, I think,""" start="00:20:35.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""two sons and a daughter or something like that.""" start="00:20:38.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""so there's differences on that, and it just goes over...""" start="00:20:40.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""there's a whole lot of stuff""" start="00:20:43.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because his story spans like 60 years,""" start="00:20:45.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""so it gives good feedback.""" start="00:20:47.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That's the real main reason I asked that question""" start="00:20:49.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because I just needed one... That sea monkeys, I just picked""" start="00:20:51.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because it was obscure, and just always have, write,""" start="00:20:53.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I used to have it write hello world in forth""" start="00:20:56.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because I thought was an interesting one as well.""" start="00:20:58.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's just picking random ones like that.""" start="00:21:01.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""One question I ask a lot of models is,""" start="00:21:03.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""what is the closest star to the Earth?""" start="00:21:06.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Because most of them will say Alpha Centauri""" start="00:21:09.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""or Proxima Centauri and not the sun.""" start="00:21:12.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And I have a whole 'nother talk""" start="00:21:13.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""where I just argue with the LLM""" start="00:21:15.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""trying to say, hey, the sun is a star.""" start="00:21:17.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And he just wouldn't accept it, so. What?""" start="00:21:20.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Oh, I can... You're there.""" start="00:21:26.580" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What specific tasks do you use local AI for?""" start="00:21:30.740" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""[Corwin]: So what specific tasks do you like to use your local AI?""" start="00:21:30.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: I like to load a lot of my code into""" start="00:21:34.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and actually have it do analysis of it.""" start="00:21:37.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I was actually going through some code""" start="00:21:39.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I have for some pen testing, and I was having it modified""" start="00:21:42.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to update it for the newer version,""" start="00:21:45.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because I hate to say this,""" start="00:21:47.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it was written for Python 2,""" start="00:21:48.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and I needed to update it for Python 3.""" start="00:21:49.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And the 2 to 3 tool did not do all of it,""" start="00:21:51.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but the actual tool was able to do the refactoring.""" start="00:21:53.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's part of my laziness.""" start="00:21:56.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But I use that for anything I don't want to hit the web.""" start="00:21:58.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And that's a lot of stuff when you start thinking about""" start="00:22:01.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if you're doing cyber security researching.""" start="00:22:03.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and you have your white papers""" start="00:22:04.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and stuff like that and stuff in there.""" start="00:22:06.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've got a lot of that loaded into RAG""" start="00:22:08.418" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""in one model on my Open WebUI system.""" start="00:22:10.626" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you used any small domain-specific LLMs? What are the kinds of tasks they specialize in, and how do I find and use them?""" start="00:22:16.880" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""[Corwin]: Neat. Have you used have you used""" start="00:22:16.880" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""any small domain specific LLMs? What kind of tasks?""" start="00:22:21.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If so, what kind of tasks that they specialize in?""" start="00:22:25.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And you know, how?""" start="00:22:30.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Not to be honest, but there are some out there like once again,""" start="00:22:32.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for cybersecurity and stuff like that,""" start="00:22:34.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that I really need to dig into that's on my to do list.""" start="00:22:36.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've got a couple weeks off at the end of the year.""" start="00:22:39.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And that's a big part of my plan for that.""" start="00:22:41.700" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Are the various models updated regularly? Can you add your own data to pre-built models?""" start="00:22:46.540" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""[Corwin]: Are the various models updated pretty regularly?""" start="00:22:46.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Can you add your own data to the pre-built models?""" start="00:22:49.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Yes. The models are updated pretty reasonably.""" start="00:22:52.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You can add data to a model in a couple of different ways.""" start="00:22:56.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You can do something called fine-tuning,""" start="00:22:59.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which requires a really nice GPU and a lot of CPU time.""" start="00:23:01.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Probably not going to do that.""" start="00:23:03.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You can do retrieval augmentation generation,""" start="00:23:05.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which is you load your data on top of the system""" start="00:23:07.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and put inside a database,""" start="00:23:09.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and you can actually scan that and stuff.""" start="00:23:11.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I have another talk where I go through""" start="00:23:12.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and I start asking questions about,""" start="00:23:14.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I load the talk into the engine""" start="00:23:16.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and I ask questions against that.""" start="00:23:18.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If I would have had time, I would have done that,""" start="00:23:20.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it comes down to how many... That's RAG.""" start="00:23:22.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""RAG is pretty easy to do through Open WebUI or LM studio.""" start="00:23:25.797" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's a great way, you just, like,""" start="00:23:29.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""point it to a folder and it just sucks all that state into...""" start="00:23:31.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and it'll hit that data first.""" start="00:23:34.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You have like helpdesk and stuff and...""" start="00:23:35.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The other options: there's vector databases,""" start="00:23:36.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which is, like, if you use PostgreSQL,""" start="00:23:39.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it has a pg vector that can do a lot of that stuff.""" start="00:23:41.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've not dug into that yet,""" start="00:23:43.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but that is also on that to-do list""" start="00:23:44.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've got a lot of stuff planned for...""" start="00:23:46.100" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What is your experience with RAG? Are you using them and how have they helped?""" start="00:23:48.056" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""[Corwin]: Cool. So what are your experience with RAGs?""" start="00:23:48.056" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I don't even know what that means.""" start="00:23:51.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Do you know what that means?""" start="00:23:54.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Do you remember this question again?""" start="00:23:57.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""What is your experience with RAGs?""" start="00:23:59.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: RAGs is great. That's Retrieval Augmentation Generation.""" start="00:24:03.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That loads your data first, and it hits yours,""" start="00:24:07.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and it'll actually cite it and stuff.""" start="00:24:09.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There's a guy who wrote a RAG in 100 lines of Python,""" start="00:24:11.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and it's an impressive piece of software.""" start="00:24:14.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I think if you hit one of my sites,""" start="00:24:16.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've got a private AI talk where I actually refer to that.""" start="00:24:18.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But retrieval augmentation, it's easy, it's fast,""" start="00:24:22.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it puts your data into the system,""" start="00:24:25.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Yeah, start with that and go then iterate on top of that.""" start="00:24:26.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That's one of the great things about AI,""" start="00:24:31.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""especially private AI,""" start="00:24:32.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""is you can do whatever you want to with it""" start="00:24:33.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and build up with it as you get more experience.""" start="00:24:35.626" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Thoughts on running things on AWS/digital ocean instances, etc?""" start="00:24:38.834" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""[Corwin]: Any thoughts on running things""" start="00:24:38.834" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""on AWS, DigitalOcean, and so on?""" start="00:24:44.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: AWS is not bad.""" start="00:24:49.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The DigitalOcean, they have some of their GPUs.""" start="00:24:50.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I still don't like having the data""" start="00:24:52.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""leave my house, to be honest, or at work,""" start="00:24:54.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because I tend to do some stuff""" start="00:24:57.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that I don't want it even hitting that situation.""" start="00:24:59.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But they have pretty good stuff.""" start="00:25:01.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Another one to consider is Oracle Cloud.""" start="00:25:03.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Oracle has their AI infrastructure that's really well done.""" start="00:25:05.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But I mean, once again, then you start looking at potential""" start="00:25:09.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""is saying your data is private,""" start="00:25:12.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I don't necessarily trust it.""" start="00:25:13.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But they do have good stuff, both DigitalOcean, AWS,""" start="00:25:14.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Oracle Cloud has the free service, which isn't too bad,""" start="00:25:17.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""usually a certain number of stuff.""" start="00:25:20.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And Google's also has it,""" start="00:25:21.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but I still tend to keep more stuff on local PCs,""" start="00:25:23.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because I'm just paranoid that way.""" start="00:25:26.740" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What has your experience been using AI for cyber security applications? What do you usually use it for?""" start="00:25:31.078" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""[Corwin]: Gotcha. What has your experience been using AI?""" start="00:25:31.078" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Do you want to get into that, using AI for cybersecurity?""" start="00:25:35.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You might have already touched on this.""" start="00:25:40.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Yeah, really, for cybersecurity,""" start="00:25:42.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""what I've had to do is I've dumped logs""" start="00:25:44.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to have it do correlation.""" start="00:25:46.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Keep in mind, the size of that Llama file we were using""" start="00:25:47.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for figuring out David Bowie, writing the hello world,""" start="00:25:49.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""all that stuff, is like six gig.""" start="00:25:52.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""How does it get the entire world in six gig?""" start="00:25:54.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I still haven't figured that out in terms of quantization.""" start="00:25:56.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So I'm really interested in seeing the ability""" start="00:25:59.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to take all this stuff out of all my logs,""" start="00:26:02.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""dump it all in there,""" start="00:26:05.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and actually be able to do intelligent queries against that.""" start="00:26:06.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Microsoft has a project called Security Copilot,""" start="00:26:08.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which is trying to do that in the Cloud.""" start="00:26:10.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But I want to work on something to do that more locally""" start="00:26:12.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and be able to actually drive this stuff over that.""" start="00:26:15.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That's one also on the long-term goals.""" start="00:26:19.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: So we got any other questions or?""" start="00:26:24.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Those are the questions that I see.""" start="00:26:26.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I want to just read out a couple of comments""" start="00:26:29.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that I saw in IRC though.""" start="00:26:31.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""jrootabaga says, it went very well""" start="00:26:33.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""from an audience perspective.""" start="00:26:36.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And GGundam says, respect your commitment to privacy.""" start="00:26:39.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And then somebody is telling us""" start="00:26:43.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""we might have skipped a question.""" start="00:26:45.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So I'm just going to run back to my list.""" start="00:26:46.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Updated regularly experience.""" start="00:26:50.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I just didn't type in the answer here's""" start="00:26:52.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and there's a couple more questions coming in so""" start="00:26:57.660" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there a disparity where you go to paid models becouse they are better and what problems would those be?""" start="00:26:59.660" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""Is there a disparity where you go to paid models""" start="00:26:59.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because they are better and what problems?""" start="00:27:04.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You know what would drive you to? That's a good question.""" start="00:27:08.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Paid models, I don't mind them. I think they're good,""" start="00:27:14.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but I don't think they're actually economically sustainable""" start="00:27:17.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""under their current system.""" start="00:27:21.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Because right now, if you're paying""" start="00:27:22.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""20 bucks a month for Copilot and that goes up to 200 bucks,""" start="00:27:24.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm not going to be as likely to use it.""" start="00:27:26.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You know what I mean?""" start="00:27:28.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But it does do some things in a way that I did not expect.""" start="00:27:29.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""For example, Grok was refactoring""" start="00:27:33.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""some of my code in the comments and dropped an F-bomb.""" start="00:27:35.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which I did not see coming,""" start="00:27:38.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but the other code before""" start="00:27:39.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that I had gotten off GitHub""" start="00:27:41.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""had F bombs in it.""" start="00:27:43.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So it was just emulating the style,""" start="00:27:44.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but would that be something""" start="00:27:45.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'd want to turn in a pull request? I don't know.""" start="00:27:47.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But, uh, there's, there's a lot of money""" start="00:27:49.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""going into these AIs and stuff,""" start="00:27:52.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but in terms of the ability to get a decent one,""" start="00:27:53.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""like the llama, llama 3.2,""" start="00:27:56.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and load your data into it, you can be pretty competitive.""" start="00:27:57.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You're not going to get all the benefits,""" start="00:28:01.240" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but you have more control over it.""" start="00:28:02.793" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So it's a balancing act.""" start="00:28:04.334" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Okay, and I think I see a couple more questions coming in.""" start="00:28:11.001" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What's the largest (in parameter size) local model you've been able to successfully run locally, and do you run into issues with limited context window size?""" start="00:28:14.126" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""What is the largest parameter size for local models""" start="00:28:14.126" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that you've been able to successfully run locally""" start="00:28:19.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and do you run into issues with limited context window size?""" start="00:28:22.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The top paid models will tend to have a larger ceiling.""" start="00:28:26.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Yes, yes, yes, yes, yes.""" start="00:28:29.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""By default, the context size is I think 1024.""" start="00:28:32.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But I've upped it to 8192 on this box, the Pangolin,""" start="00:28:37.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because it seems to be, for some reason,""" start="00:28:41.161" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it's just a very... working quite well.""" start="00:28:43.543" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But the largest ones I've loaded have been in the...""" start="00:28:45.209" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""have not been that huge.""" start="00:28:49.751" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've loaded this... the last biggest one I've done...""" start="00:28:51.334" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That's the reason why I'm planning""" start="00:28:55.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""on breaking down and buying a Ryzen.""" start="00:28:57.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Actually, I'm going to buy""" start="00:29:01.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""an Intel i285H with 96 gig of RAM.""" start="00:29:03.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Then I should be able to load""" start="00:29:06.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""a 70 billion parameter model in that. How fast will it run?""" start="00:29:08.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's going to run slow as dog,""" start="00:29:12.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it's going to be cool to be able to do it.""" start="00:29:13.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's an AI bragging rights thing,""" start="00:29:15.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but I mostly stick with the smaller size models""" start="00:29:17.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and the ones that are more quantitized""" start="00:29:20.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because it just tends to work better for me.""" start="00:29:22.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: We've still got over 10 minutes before we're cutting away,""" start="00:29:26.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but I'm just anticipating""" start="00:29:29.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that we're going to be going strong at the 10 minute mark.""" start="00:29:30.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So I'm just, just letting, you know,""" start="00:29:32.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""we can go as long as we like here at a certain point.""" start="00:29:34.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I may have to jump away and check in with the next speaker,""" start="00:29:37.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but we'll post the entirety of this,""" start="00:29:41.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""even if we aren't able to stay with it all.""" start="00:29:44.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Okay. And we've got 10 minutes""" start="00:29:47.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""where we're still going to stay live.""" start="00:29:49.740" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Are there "Free" as in FSF/open source issues with the data?""" start="00:29:52.380" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""So next question coming in, I see, are there free as in freedom,""" start="00:29:52.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""free as in FSF issues with the data?""" start="00:30:00.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Yes, where's the data coming from is a huge question with AI.""" start="00:30:05.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's astonishing you can ask questions""" start="00:30:11.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to models that you don't know where it's coming from.""" start="00:30:13.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That is gonna be one of the big issues long-term.""" start="00:30:16.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There are people who are working""" start="00:30:19.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""on trying to figure out that stuff,""" start="00:30:21.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it's, I mean, if you look at, God,""" start="00:30:22.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I can't remember who it was.""" start="00:30:25.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Somebody was actually out torrenting books""" start="00:30:27.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""just to be able to build it into their AI system.""" start="00:30:28.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I think it might've been Meta.""" start="00:30:30.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So there's a lot of that going on.""" start="00:30:32.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The open source of the stuff is going to be tough.""" start="00:30:34.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There's going to be there's some models""" start="00:30:38.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""like the mobile guys have got their own license,""" start="00:30:39.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but where they're getting their data from,""" start="00:30:41.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm not sure, so that's a huge question.""" start="00:30:42.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""That's a talk in itself.""" start="00:30:45.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But yeah, if you train on your RAG and your data,""" start="00:30:47.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you know what it's come, you know,""" start="00:30:51.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you have a license that""" start="00:30:53.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but the other stuff is just""" start="00:30:54.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""more lines of supplement""" start="00:30:55.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if you're using a smaller model.""" start="00:30:56.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: The comments online, I see a couple of them.""" start="00:31:01.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'll read them out in order here. Really interesting stuff.""" start="00:31:05.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Thank you for your talk.""" start="00:31:08.340" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Given that large AI companies are openly stealing IP and copyright, thereby eroding the authority of such law (and eroding truth itself as well), can you see a future where IP & copyright flaw become untenable and what sort of onwards effect might that have?""" start="00:31:09.557" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""Given that large AI companies""" start="00:31:09.557" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""are openly stealing intellectual property and copyright""" start="00:31:11.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and therefore eroding the authority of such laws""" start="00:31:14.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and maybe obscuring the truth itself,""" start="00:31:18.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""can you see a future where IP and copyright flaw become untenable?""" start="00:31:21.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I think that's a great question.""" start="00:31:26.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm not a lawyer, but it is really getting complicated.""" start="00:31:29.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It is getting to the point, I asked a question from,""" start="00:31:34.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I played with Sora a little bit, and it generated someone,""" start="00:31:37.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you can go like, oh, that's Jon Hamm,""" start="00:31:41.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that's Christopher Walken,""" start="00:31:42.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you start figuring out who the people""" start="00:31:44.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""they're modeling stuff after.""" start="00:31:45.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There is an apocalypse, something""" start="00:31:47.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""going to happen right now.""" start="00:31:48.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There is, but this is once again,""" start="00:31:52.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""my personal opinion, and I'm not a lawyer,""" start="00:31:53.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and I do not have money.""" start="00:31:56.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So don't sue me, is there's going to be""" start="00:31:57.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""the current administration tends is very AI, pro AI.""" start="00:31:58.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And there's very a great deal of lobbying by those groups.""" start="00:32:02.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And it's on both sides.""" start="00:32:05.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And it's going to be, it's gonna be interesting to see""" start="00:32:07.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""what happens to copyright the next 510 years.""" start="00:32:09.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I just don't know how it keeps up""" start="00:32:11.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""without there being some adjustments and stuff.""" start="00:32:13.340" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Comment: File size is not going to be the bottleneck, your RAM is\.""" start="00:32:18.060" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""[Corwin]: Okay, and then another comment I saw,""" start="00:32:18.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""file size is not going to be a bottleneck.""" start="00:32:20.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""RAM is. You'll need 16 gigabytes of RAM""" start="00:32:23.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to run the smallest local models""" start="00:32:25.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and 512 gigabytes of RAM to run the larger ones.""" start="00:32:28.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""You'll need a GPU with that much memory""" start="00:32:31.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if you want it to run quickly.""" start="00:32:35.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Yeah. Oh no. It also depends upon how your memory is laid out.""" start="00:32:38.319" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Like example being the Ultra i285H""" start="00:32:41.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I plan to buy, that has 96 gig of memory.""" start="00:32:45.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's unified between the GPU and the CPU share it,""" start="00:32:47.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but they go over the same bus.""" start="00:32:50.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So the overall bandwidth of it tends to be a bit less,""" start="00:32:52.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but you're able to load more of it into memory.""" start="00:32:55.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So it's able to do some additional stuff with it""" start="00:32:57.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""as opposed to come off disk.""" start="00:32:59.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's all balancing act. If you hit Ziskind's website,""" start="00:33:00.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that guy's done some great work on it.""" start="00:33:03.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm trying to figure out how big a model you can do,""" start="00:33:05.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""what you can do with it.""" start="00:33:07.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And some of the stuff seems to be not obvious,""" start="00:33:08.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because like example, being that MacBook Air,""" start="00:33:12.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""for the five minutes I can run the model,""" start="00:33:15.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it runs it faster than a lot of other things""" start="00:33:17.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that should be able to run it faster,""" start="00:33:19.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""just because of the way the ARM cores and the unified memory work on it.""" start="00:33:21.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So it's a learning process.""" start="00:33:24.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""But if you want to, Network Chuck had a great video""" start="00:33:26.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""talking about building his own system""" start="00:33:29.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""with a couple really powerful Nvidia cards""" start="00:33:30.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and stuff like that in it.""" start="00:33:34.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And just actually setting up on his system as a node""" start="00:33:35.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and using a web UI on it. So there's a lot of stuff there,""" start="00:33:38.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it is a process of learning how big your data is,""" start="00:33:41.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""which models you want to use,""" start="00:33:43.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""how much information you need,""" start="00:33:44.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it's part of the learning.""" start="00:33:46.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And you can run models, even on Raspberry Pi 5s,""" start="00:33:49.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if you want to, they'll run slow.""" start="00:33:52.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Don't get me wrong, but they're possible.""" start="00:33:54.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Okay, and I think there's other questions coming in too,""" start="00:33:59.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""so I'll just bam for another second.""" start="00:34:02.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""We've got about five minutes before we'll,""" start="00:34:04.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""before we'll be cutting over,""" start="00:34:06.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but I just want to say in case we get close for time here,""" start="00:34:09.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""how much I appreciate your talk.""" start="00:34:13.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This is another one that I'm going to""" start="00:34:14.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""have to study after the conference.""" start="00:34:15.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: We greatly appreciate, all of us appreciate""" start="00:34:18.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you guys putting on the conference.""" start="00:34:21.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's a great conference. It's well done.""" start="00:34:22.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: It's an honor to be on the stage""" start="00:34:26.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""with the brains of the project, which is you.""" start="00:34:28.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: So what else we got? Question wise.""" start="00:34:33.125" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Okay, so just scanning here.""" start="00:34:34.700" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you used local models capable of tool-calling?""" start="00:34:46.900" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""Have you used local models capable of tool calling?""" start="00:34:46.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm scared of agentic.""" start="00:34:50.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm going to be a slow adopter of that.""" start="00:34:54.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I want to do it, but I just don't have the, uh,""" start="00:34:58.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""four decimal fortitude right now to do it.""" start="00:35:02.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've had to give me the commands,""" start="00:35:04.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but I still run the commands by hand.""" start="00:35:07.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm looking into it and it's on once again,""" start="00:35:08.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it's on that list, but I just, that's a big step for me.""" start="00:35:10.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: So. Awesome. All right.""" start="00:35:20.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Well, maybe it's, let me just scroll through""" start="00:35:23.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because we might have missed one question. Oh, I see.""" start="00:35:27.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Here was the piggyback question.""" start="00:35:31.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Now I see the question that I missed.""" start="00:35:36.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So this was piggybacking on the question""" start="00:35:38.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""about model updates and adding data.""" start="00:35:41.140" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Will the models reach out to the web if they need to for more info?""" start="00:35:44.860" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""And will models reach out to the web""" start="00:35:44.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if they need more info?""" start="00:35:46.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Or have you worked with any models that work that way?""" start="00:35:47.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: No, I've not seen any models to do that""" start="00:35:52.480" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""There's there was like a group""" start="00:35:55.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""working on something like a package updater""" start="00:35:57.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""that would do different diffs on it,""" start="00:35:59.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it's so... Models change so much,""" start="00:36:02.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""even who make minor changes and fine-tuning,""" start="00:36:03.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's hard just to update them in place.""" start="00:36:05.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So I haven't seen one, but that doesn't mean""" start="00:36:07.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""they're not out there. Curious topic though.""" start="00:36:10.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Awesome.""" start="00:36:15.714" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Well, it's probably pretty good timing.""" start="00:36:16.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Let me just scroll and make sure.""" start="00:36:19.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""And of course, before I can say that,""" start="00:36:21.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""there's one more question. So let's go ahead and have that.""" start="00:36:23.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I want to make sure while we're still live, though,""" start="00:36:25.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I give you a chance to offer any closing thoughts.""" start="00:36:28.300" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What scares you most about agentic tools? How would you think about putting a sandbox around it if you adopt an agentic workflow?""" start="00:36:31.300" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""So what scares you most about the agentic tools?""" start="00:36:31.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""How would you think about putting a sandbox around that""" start="00:36:35.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if you did adopt an agentic workflow?""" start="00:36:38.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: That is a great question.""" start="00:36:41.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""In terms of that, I would just control""" start="00:36:42.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""what it's able to talk to, what machines,""" start="00:36:45.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I would actually have it be air gap.""" start="00:36:48.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I work for a defense contractor,""" start="00:36:50.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and we spend a lot of time dealing with air gap systems,""" start="00:36:52.100" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""because that's just kind of the way it works out for us.""" start="00:36:53.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So agentic, it's just going to take a while to get trust.""" start="00:36:55.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I want to see more stuff happening.""" start="00:36:58.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Humans screw up stuff enough.""" start="00:37:01.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""The last thing we need is to multiply that by 1000.""" start="00:37:02.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So in terms of that, I would be restricting what it can do.""" start="00:37:04.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you look at the capabilities,""" start="00:37:09.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if I created a user and gave it permissions,""" start="00:37:10.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I would have a lockdown through sudo,""" start="00:37:13.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""what it's able to do, what the account's able to do.""" start="00:37:15.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I would do those kind of things,""" start="00:37:17.380" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it's going to be, it's happening.""" start="00:37:18.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's just, I'm going to be one of the laggards on that one.""" start="00:37:20.860" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So air gap, jail, extremely locked down environments,""" start="00:37:25.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""like we're talking about separate physicals, not Docker.""" start="00:37:29.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Yeah, hopefully.""" start="00:37:34.900" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Tool calling can be read-only, such as giving models the ability to search the web before answersing your question\. (No write access or execute access) I'm interested to know if local models are any good at calling tools, though\.""" start="00:37:36.578" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""[Corwin]: Right, fair. So tool calling can be read-only,""" start="00:37:36.578" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""such as giving models the ability to search the web""" start="00:37:39.900" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""before answering your question,""" start="00:37:42.540" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""you know, write access, execute access.""" start="00:37:43.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I'm interested to know if local models""" start="00:37:46.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""are any good at that.""" start="00:37:49.220" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Yes, local models can do a lot of that stuff.""" start="00:37:51.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's their capabilities.""" start="00:37:55.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""If you load LM studio, you can do a lot of wonderful stuff""" start="00:37:56.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""with that or with Open Web UI with ollama.""" start="00:37:59.020" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's a lot of capabilities. It's amazing.""" start="00:38:02.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Open Web UI is actually what a lot of companies are using now""" start="00:38:05.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""to put their data behind that.""" start="00:38:08.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""They're curated data and stuff like that. So works well.""" start="00:38:10.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I can confirm that from my own professional experience.""" start="00:38:12.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Excellent.""" start="00:38:15.820" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Okay, well, our timing should be just perfect""" start="00:38:16.916" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if you want to give us like a 30-second, 45-second wrap-up.""" start="00:38:19.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Aaron, let me squeeze in mine.""" start="00:38:22.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Thank you again so much for preparing this talk""" start="00:38:24.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and for entertaining all of our questions.""" start="00:38:26.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Yeah, let me just thank you guys for the conference again.""" start="00:38:30.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""This is a great one. I've enjoyed a lot of it.""" start="00:38:33.300" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""I've only had a couple of talks so far,""" start="00:38:35.180" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but I'm looking forward to hitting the ones after this and tomorrow.""" start="00:38:37.340" video="mainVideo-private-ai" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:38:41.660" video="mainVideo-private-ai" id="subtitle"]]</div>[[!template text="""But the AI stuff is coming. Get on board.""" start="00:38:41.660" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Definitely recommend it. If you want to just try it out""" start="00:38:44.740" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and get a little taste of it,""" start="00:38:46.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""what my minimal viable product""" start="00:38:48.420" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""with just Llamafile and gptel""" start="00:38:49.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""will get you to the point where you start figuring out.""" start="00:38:51.620" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Gptel is an amazing thing. It just gets out of your way,""" start="00:38:53.140" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""but it works so well with Emacs's design because""" start="00:38:55.580" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""it doesn't take your hands off the keyboard.""" start="00:39:00.460" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's just another buffer,""" start="00:39:01.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and you just put information in there.""" start="00:39:02.500" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""It's quite a wonderful time.""" start="00:39:04.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Let's put that way. That's all I got.""" start="00:39:06.980" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Corwin]: Thank you so much for once again, and we've just cut away.""" start="00:39:10.502" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""So I'll stop the recording""" start="00:39:14.340" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and you're on your own recognizance.""" start="00:39:15.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""[Aaron]: Well, I'm gonna punch out""" start="00:39:18.260" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""if anybody has any questions or anything""" start="00:39:19.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""my email address is ajgrothe@yahoo.com or at gmail and""" start="00:39:21.060" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""thank you all for attending,""" start="00:39:24.700" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""and thanks again for the conference""" start="00:39:26.780" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Okay, I'm gonna go ahead and end the room there, thank you.""" start="00:39:29.940" video="mainVideo-private-ai" id="subtitle"]]
+[[!template text="""Excellent, thanks, bye.""" start="00:39:32.580" video="mainVideo-private-ai" id="subtitle"]]
+
+</div>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..787fcbc3
--- /dev/null
+++ b/2025/info/private-ai-before.md
@@ -0,0 +1,47 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 40-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-private-ai>
+Etherpad: <https://pad.emacsconf.org/2025-private-ai>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-private-ai"><source src="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--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-private-ai" data="""
+00:00.000 Introduction
+00:48.180 Overview of talk
+01:08.060 Why private AI?
+03:16.020 What do I need for private AI?
+05:16.348 Emacs and private AI
+06:13.220 Pieces for an AI Emacs solution
+07:56.340 Config file
+08:52.100 Demo: Who was David Bowie?
+10:21.700 Hallucinations
+10:42.180 Next question: What are sea monkeys?
+11:57.180 Writing Hello World in Emacs Lisp
+12:32.580 Pieces for a better solution
+13:36.900 What about the license?
+14:56.580 Are there open source data model options?
+15:14.520 Things to know
+20:07.420 Q: Why is the David Bowie question a good one for testing a model? e.g. does it fail in interesting ways?
+21:30.740 Q: What specific tasks do you use local AI for?
+22:16.880 Q: Have you used any small domain-specific LLMs? What are the kinds of tasks they specialize in, and how do I find and use them?
+22:46.540 Q: Are the various models updated regularly? Can you add your own data to pre-built models?
+23:48.056 Q: What is your experience with RAG? Are you using them and how have they helped?
+24:38.834 Q: Thoughts on running things on AWS/digital ocean instances, etc?
+25:31.078 Q: What has your experience been using AI for cyber security applications? What do you usually use it for?
+26:59.660 Q: Is there a disparity where you go to paid models becouse they are better and what problems would those be?
+28:14.126 Q: What's the largest (in parameter size) local model you've been able to successfully run locally, and do you run into issues with limited context window size?
+29:52.380 Q: Are there "Free" as in FSF/open source issues with the data?
+31:09.557 Q: Given that large AI companies are openly stealing IP and copyright, thereby eroding the authority of such law (and eroding truth itself as well), can you see a future where IP & copyright flaw become untenable and what sort of onwards effect might that have?
+32:18.060 Comment: File size is not going to be the bottleneck, your RAM is.
+34:46.900 Q: Have you used local models capable of tool-calling?
+35:44.860 Q: Will the models reach out to the web if they need to for more info?
+36:31.300 Q: What scares you most about agentic tools? How would you think about putting a sandbox around it if you adopt an agentic workflow?
+37:36.578 Q: Tool calling can be read-only, such as giving models the ability to search the web before answersing your question. (No write access or execute access) I'm interested to know if local models are any good at calling tools, though.
+38:41.660 Wrapping up
+
+"""]]<div></div>Duration: 39:34 minutes<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/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--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.opus">Download --main.opus (3MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.webm">Download --main.webm (88MB)</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><li><a href="https://toobnix.org/videos/watch/81550c08-5ad4-4c61-8d62-5ee8668e4382">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=zN3_vNaLheU">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/private-ai-nav.md b/2025/info/private-ai-nav.md
new file mode 100644
index 00000000..f1da6dba
--- /dev/null
+++ b/2025/info/private-ai-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/llm">Emacs, editors, and LLM driven workflows</a>
+Next by track: <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>
+</div>
diff --git a/2025/info/python-after.md b/2025/info/python-after.md
new file mode 100644
index 00000000..c870636d
--- /dev/null
+++ b/2025/info/python-after.md
@@ -0,0 +1,561 @@
+<!-- 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
+
+<div class="transcript transcript-qanda"><a name="python-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Developing Python in Emacs""" start="00:00:00.000" video="qanda-python" id="subtitle"]]</div>[[!template text="""So as we wait for people to drop""" start="00:00:00.000" video="qanda-python" id="subtitle"]]
+[[!template text="""in their questions and so on,""" start="00:00:02.840" video="qanda-python" id="subtitle"]]
+[[!template text="""I'll just kind of add a couple of thoughts.""" start="00:00:04.280" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm not personally much of a Python developer,""" start="00:00:08.720" video="qanda-python" id="subtitle"]]
+[[!template text="""so I'm just curious as to your thoughts on using Emacs""" start="00:00:12.040" video="qanda-python" id="subtitle"]]
+[[!template text="""and kind of the development methodology you showed""" start="00:00:17.760" video="qanda-python" id="subtitle"]]
+[[!template text="""as a way to learn Python.""" start="00:00:24.320" video="qanda-python" id="subtitle"]]
+[[!template text="""Yeah, I think Emacs is perfect for it.""" start="00:00:26.520" video="qanda-python" id="subtitle"]]
+[[!template text="""If you're already an Emacs user""" start="00:00:29.240" video="qanda-python" id="subtitle"]]
+[[!template text="""and you have the keyboard commands""" start="00:00:31.760" video="qanda-python" id="subtitle"]]
+[[!template text="""and everything uploaded in your brain,""" start="00:00:35.600" video="qanda-python" id="subtitle"]]
+[[!template text="""then learning Python shouldn't be too difficult,""" start="00:00:38.720" video="qanda-python" id="subtitle"]]
+[[!template text="""because there's a lot of good packages.""" start="00:00:42.600" video="qanda-python" id="subtitle"]]
+[[!template text="""For Python, I'm using a thing called elpy,""" start="00:00:44.840" video="qanda-python" id="subtitle"]]
+[[!template text="""which is really good. for Python development.""" start="00:00:51.320" video="qanda-python" id="subtitle"]]
+[[!template text="""So you have this connection to a running backend,""" start="00:00:55.680" video="qanda-python" id="subtitle"]]
+[[!template text="""the Jedi Python backend that will give you autocomplete""" start="00:01:00.040" video="qanda-python" id="subtitle"]]
+[[!template text="""and some refactoring and things like that.""" start="00:01:06.040" video="qanda-python" id="subtitle"]]
+[[!template text="""So I think Emacs is really good for Python development.""" start="00:01:09.040" video="qanda-python" id="subtitle"]]
+[[!template text="""So what are some other...""" start="00:01:14.440" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How long have you been using Emacs?""" start="00:01:16.680" video="qanda-python" id="subtitle"]]</div>[[!template text="""How long have you been using Emacs?""" start="00:01:16.680" video="qanda-python" id="subtitle"]]
+[[!template text="""Kind of a general question.""" start="00:01:18.320" video="qanda-python" id="subtitle"]]
+[[!template text="""Sorry if you covered this and I missed it.""" start="00:01:19.600" video="qanda-python" id="subtitle"]]
+[[!template text="""It's not that long actually.""" start="00:01:23.600" video="qanda-python" id="subtitle"]]
+[[!template text="""I think it was in 2019 or 2020.""" start="00:01:26.600" video="qanda-python" id="subtitle"]]
+[[!template text="""It's when I started to, I was really fortunate enough""" start="00:01:31.600" video="qanda-python" id="subtitle"]]
+[[!template text="""to join a team that had chosen to""" start="00:01:34.800" video="qanda-python" id="subtitle"]]
+[[!template text="""develop an app in Lisp, in Clojure.""" start="00:01:38.040" video="qanda-python" id="subtitle"]]
+[[!template text="""yeah and i didn't know anything about it""" start="00:01:42.920" video="qanda-python" id="subtitle"]]
+[[!template text="""i didn't know lisp at all so it was like brand new""" start="00:01:45.040" video="qanda-python" id="subtitle"]]
+[[!template text="""so i really had struggling to to learn it""" start="00:01:47.360" video="qanda-python" id="subtitle"]]
+[[!template text="""but at the same time i was looking for okay""" start="00:01:50.640" video="qanda-python" id="subtitle"]]
+[[!template text="""which editor should i pick to to do this""" start="00:01:53.560" video="qanda-python" id="subtitle"]]
+[[!template text="""and i was before that and like an ide person""" start="00:01:55.280" video="qanda-python" id="subtitle"]]
+[[!template text="""so i do use this big ideas""" start="00:02:00.240" video="qanda-python" id="subtitle"]]
+[[!template text="""and this time i figured maybe i should try something different.""" start="00:02:02.920" video="qanda-python" id="subtitle"]]
+[[!template text="""And I read this book about Clojure development""" start="00:02:07.840" video="qanda-python" id="subtitle"]]
+[[!template text="""and the author was really into Emacs""" start="00:02:10.240" video="qanda-python" id="subtitle"]]
+[[!template text="""and he was like, Clojure is really good for,""" start="00:02:13.240" video="qanda-python" id="subtitle"]]
+[[!template text="""Emacs is really good for Clojure development.""" start="00:02:17.160" video="qanda-python" id="subtitle"]]
+[[!template text="""So that's how I started.""" start="00:02:19.160" video="qanda-python" id="subtitle"]]
+[[!template text="""So I like to learn, rewired my brain""" start="00:02:20.760" video="qanda-python" id="subtitle"]]
+[[!template text="""to learn all how Emacs works""" start="00:02:24.480" video="qanda-python" id="subtitle"]]
+[[!template text="""as opposed to like the mainstream editors out there.""" start="00:02:27.640" video="qanda-python" id="subtitle"]]
+[[!template text="""So that's how it started. So like five years ago, maybe.""" start="00:02:30.960" video="qanda-python" id="subtitle"]]
+[[!template text="""Cool. Um, so did you, what were some other,""" start="00:02:33.520" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What editor were you primarily using before?""" start="00:02:39.520" video="qanda-python" id="subtitle"]]</div>[[!template text="""what, what, what editor were you primarily using before you?""" start="00:02:39.520" video="qanda-python" id="subtitle"]]
+[[!template text="""Um, um, back, back then it was like,""" start="00:02:44.000" video="qanda-python" id="subtitle"]]
+[[!template text="""I think it was like Sublime Text.""" start="00:02:49.400" video="qanda-python" id="subtitle"]]
+[[!template text="""And also some IntelliJ, sorry, JetBrains, their tools.""" start="00:02:52.720" video="qanda-python" id="subtitle"]]
+[[!template text="""And before that, I was in the Microsoft world,""" start="00:02:57.720" video="qanda-python" id="subtitle"]]
+[[!template text="""so it's like Microsoft toolings basically.""" start="00:03:04.600" video="qanda-python" id="subtitle"]]
+[[!template text="""So I moved towards open source tooling""" start="00:03:08.200" video="qanda-python" id="subtitle"]]
+[[!template text="""and also open source development. Very cool.""" start="00:03:10.880" video="qanda-python" id="subtitle"]]
+[[!template text="""So I see we've got a couple people""" start="00:03:16.680" video="qanda-python" id="subtitle"]]
+[[!template text="""that have joined on the BBB here with us""" start="00:03:19.120" video="qanda-python" id="subtitle"]]
+[[!template text="""for the live question.""" start="00:03:23.480" video="qanda-python" id="subtitle"]]
+[[!template text="""You're welcome to just throw your question in this chat,""" start="00:03:24.960" video="qanda-python" id="subtitle"]]
+[[!template text="""or if you've got a microphone connected,""" start="00:03:29.200" video="qanda-python" id="subtitle"]]
+[[!template text="""you're welcome to come off mute""" start="00:03:32.040" video="qanda-python" id="subtitle"]]
+[[!template text="""and throw a question in that way as well.""" start="00:03:34.600" video="qanda-python" id="subtitle"]]
+[[!template text="""You can join on liberachat IRC.""" start="00:03:36.760" video="qanda-python" id="subtitle"]]
+[[!template text="""You can join pound emacs comp hyphen dev,""" start="00:03:40.360" video="qanda-python" id="subtitle"]]
+[[!template text="""and we would happily take your questions there.""" start="00:03:44.120" video="qanda-python" id="subtitle"]]
+[[!template text="""Meanwhile, I've got a question""" start="00:03:47.280" video="qanda-python" id="subtitle"]]
+[[!template text="""coming in on the pad right now, so take that next.""" start="00:03:49.480" video="qanda-python" id="subtitle"]]
+[[!template text="""I'll just read it out.""" start="00:03:52.720" video="qanda-python" id="subtitle"]]
+[[!template text="""I don't quite see how your setup works with IPython.""" start="00:03:55.240" video="qanda-python" id="subtitle"]]
+[[!template text="""Sorry if you already answered this.""" start="00:03:58.240" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you have your Emacs connect to the IPython kernel over the XMPP socket that IPython sets up?""" start="00:04:00.280" video="qanda-python" id="subtitle"]]</div>[[!template text="""Do you have your Emacs connect to the IPython kernel""" start="00:04:00.280" video="qanda-python" id="subtitle"]]
+[[!template text="""over XMPP socket that IPython sets up? Oh, good question.""" start="00:04:03.520" video="qanda-python" id="subtitle"]]
+[[!template text="""So what I've done is I have two different connections.""" start="00:04:11.920" video="qanda-python" id="subtitle"]]
+[[!template text="""Like if I'm going to do this regular day-to-day Python work""" start="00:04:18.040" video="qanda-python" id="subtitle"]]
+[[!template text="""when I want to evaluate code""" start="00:04:21.360" video="qanda-python" id="subtitle"]]
+[[!template text="""without thinking about the external connection,""" start="00:04:24.400" video="qanda-python" id="subtitle"]]
+[[!template text="""then I just use IPython""" start="00:04:29.960" video="qanda-python" id="subtitle"]]
+[[!template text="""and I have my I'm using the LP Python package""" start="00:04:31.560" video="qanda-python" id="subtitle"]]
+[[!template text="""so that you can set up which of the REPLs""" start="00:04:36.800" video="qanda-python" id="subtitle"]]
+[[!template text="""you want to start when you evaluate code.""" start="00:04:39.840" video="qanda-python" id="subtitle"]]
+[[!template text="""So that's IPython. But in the second part of the talk""" start="00:04:42.800" video="qanda-python" id="subtitle"]]
+[[!template text="""where I connect to an externally running app,""" start="00:04:46.760" video="qanda-python" id="subtitle"]]
+[[!template text="""then I have set up the same configuration""" start="00:04:50.920" video="qanda-python" id="subtitle"]]
+[[!template text="""but to start Jupyter, the Jupyter console instead.""" start="00:04:55.840" video="qanda-python" id="subtitle"]]
+[[!template text="""And when I start it up, it's going to, it's like a dialogue""" start="00:05:00.960" video="qanda-python" id="subtitle"]]
+[[!template text="""that will ask for the ID of a running kernel.""" start="00:05:04.960" video="qanda-python" id="subtitle"]]
+[[!template text="""Because if you start a kernel,""" start="00:05:09.600" video="qanda-python" id="subtitle"]]
+[[!template text="""if you start something in a kernel,""" start="00:05:10.840" video="qanda-python" id="subtitle"]]
+[[!template text="""you will get this unique ID so you can connect to it.""" start="00:05:12.920" video="qanda-python" id="subtitle"]]
+[[!template text="""So that's kind of the difference.""" start="00:05:17.080" video="qanda-python" id="subtitle"]]
+[[!template text="""So I have two different ways""" start="00:05:19.680" video="qanda-python" id="subtitle"]]
+[[!template text="""of starting up the Python kernel. REPLs, either PyPython,""" start="00:05:21.640" video="qanda-python" id="subtitle"]]
+[[!template text="""which I do for most of my daily work,""" start="00:05:26.600" video="qanda-python" id="subtitle"]]
+[[!template text="""or if I want this connection to a running app,""" start="00:05:29.560" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm using the Jupyter console, basically.""" start="00:05:32.240" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Not sure if you've explored Org Babel, but what are the benefits of using your approach over Org?""" start="00:05:38.480" video="qanda-python" id="subtitle"]]</div>[[!template text="""Have you explored Org Babel at all?""" start="00:05:38.480" video="qanda-python" id="subtitle"]]
+[[!template text="""Can you talk about your approach""" start="00:05:45.200" video="qanda-python" id="subtitle"]]
+[[!template text="""compared to the Babel workflow? Oh, interesting.""" start="00:05:48.200" video="qanda-python" id="subtitle"]]
+[[!template text="""No, I haven't actually, I haven't done that,""" start="00:05:52.280" video="qanda-python" id="subtitle"]]
+[[!template text="""but I think it's similar to Jupyter notebooks,""" start="00:05:54.880" video="qanda-python" id="subtitle"]]
+[[!template text="""so you can do some interactive, you can run Python there,""" start="00:05:59.120" video="qanda-python" id="subtitle"]]
+[[!template text="""but I haven't,""" start="00:06:02.360" video="qanda-python" id="subtitle"]]
+[[!template text="""I have too little knowledge about it to elaborate on that.""" start="00:06:03.280" video="qanda-python" id="subtitle"]]
+[[!template text="""Sorry. Very good. All right.""" start="00:06:08.120" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm just going to peek over to the other chats""" start="00:06:24.160" video="qanda-python" id="subtitle"]]
+[[!template text="""and make sure I'm not missing questions.""" start="00:06:27.000" video="qanda-python" id="subtitle"]]
+[[!template text="""Sorry, I got a lot of screens. A little dance here.""" start="00:06:28.840" video="qanda-python" id="subtitle"]]
+[[!template text="""All right, and I do see a few people in the chat.""" start="00:06:35.520" video="qanda-python" id="subtitle"]]
+[[!template text="""I'll just say again, if you've joined us on the BBB,""" start="00:06:41.240" video="qanda-python" id="subtitle"]]
+[[!template text="""you're more than welcome to jump in with your questions""" start="00:06:44.560" video="qanda-python" id="subtitle"]]
+[[!template text="""or put questions into the chat here.""" start="00:06:47.000" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm not a big Python person,""" start="00:06:50.120" video="qanda-python" id="subtitle"]]
+[[!template text="""so I can't get into the really interesting questions""" start="00:06:52.880" video="qanda-python" id="subtitle"]]
+[[!template text="""that are probably more relevant,""" start="00:06:57.600" video="qanda-python" id="subtitle"]]
+[[!template text="""just because a lot of it's kind of over my head.""" start="00:07:01.640" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you seen marimo\.io notebooks? It uses standard Python\.""" start="00:07:05.800" video="qanda-python" id="subtitle"]]</div>[[!template text="""Have you seen the marimo.io notebooks?""" start="00:07:05.800" video="qanda-python" id="subtitle"]]
+[[!template text="""These use standard Python?""" start="00:07:12.880" video="qanda-python" id="subtitle"]]
+[[!template text="""Oh, yes, I've seen, I haven't tried it myself,""" start="00:07:15.280" video="qanda-python" id="subtitle"]]
+[[!template text="""but I've seen it.""" start="00:07:18.120" video="qanda-python" id="subtitle"]]
+[[!template text="""It's very, I think it's a very interesting approach""" start="00:07:19.360" video="qanda-python" id="subtitle"]]
+[[!template text="""that probably will solve a lot of these things""" start="00:07:22.640" video="qanda-python" id="subtitle"]]
+[[!template text="""with interactive development in general,""" start="00:07:26.280" video="qanda-python" id="subtitle"]]
+[[!template text="""but because I think it's basically Python files""" start="00:07:28.840" video="qanda-python" id="subtitle"]]
+[[!template text="""and not the, not this other file format that you have""" start="00:07:31.840" video="qanda-python" id="subtitle"]]
+[[!template text="""for the regular notebook setup.""" start="00:07:36.440" video="qanda-python" id="subtitle"]]
+[[!template text="""So I have that in my list of things to try out in future,""" start="00:07:40.800" video="qanda-python" id="subtitle"]]
+[[!template text="""but it looks really, really cool. Awesome.""" start="00:07:45.560" video="qanda-python" id="subtitle"]]
+[[!template text="""Yeah, I'm hesitant to just ask you really boilerplate questions.""" start="00:08:00.720" video="qanda-python" id="subtitle"]]
+[[!template text="""You get an expert, a souffle chef,""" start="00:08:06.720" video="qanda-python" id="subtitle"]]
+[[!template text="""and you ask about making pasta or some other sort of thing.""" start="00:08:11.240" video="qanda-python" id="subtitle"]]
+[[!template text="""No, go ahead. Go ahead. I'm glad to ask any questions.""" start="00:08:16.600" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: what LLM did you say you've used?""" start="00:08:20.560" video="qanda-python" id="subtitle"]]</div>[[!template text="""So just generally about Emacs as a coding developer,""" start="00:08:20.560" video="qanda-python" id="subtitle"]]
+[[!template text="""what are the features""" start="00:08:25.680" video="qanda-python" id="subtitle"]]
+[[!template text="""that you tend to lean on more heavily?""" start="00:08:27.000" video="qanda-python" id="subtitle"]]
+[[!template text="""You know completion or you know, what have you...""" start="00:08:28.480" video="qanda-python" id="subtitle"]]
+[[!template text="""Maybe I could put it better as:""" start="00:08:34.060" video="qanda-python" id="subtitle"]]
+[[!template text="""what have you spent more time configuring for Emacs""" start="00:08:35.258" video="qanda-python" id="subtitle"]]
+[[!template text="""to facilitate development?""" start="00:08:40.080" video="qanda-python" id="subtitle"]]
+[[!template text="""Yes, initially, it was basically taking away""" start="00:08:45.440" video="qanda-python" id="subtitle"]]
+[[!template text="""some of the UI features,""" start="00:08:49.640" video="qanda-python" id="subtitle"]]
+[[!template text="""basically disabling it, but fairly quickly,""" start="00:08:51.320" video="qanda-python" id="subtitle"]]
+[[!template text="""for both Clojure development""" start="00:08:56.600" video="qanda-python" id="subtitle"]]
+[[!template text="""where I was using CIDER, which is like a really good tool,""" start="00:08:58.920" video="qanda-python" id="subtitle"]]
+[[!template text="""and for Python, when I quickly found elpy,""" start="00:09:04.600" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm not sure how to pronounce it,""" start="00:09:08.160" video="qanda-python" id="subtitle"]]
+[[!template text="""but you get so much good things from these tools...""" start="00:09:10.600" video="qanda-python" id="subtitle"]]
+[[!template text="""So what I've done additionally is theme""" start="00:09:16.040" video="qanda-python" id="subtitle"]]
+[[!template text="""and maybe having this environment""" start="00:09:21.020" video="qanda-python" id="subtitle"]]
+[[!template text="""that is without disturbance.""" start="00:09:27.160" video="qanda-python" id="subtitle"]]
+[[!template text="""So I really like the code to have my full attention.""" start="00:09:29.020" video="qanda-python" id="subtitle"]]
+[[!template text="""So I rarely have, maybe I have like a preview sometimes,""" start="00:09:34.840" video="qanda-python" id="subtitle"]]
+[[!template text="""but mostly, it's the window or the buffer where I have my code,""" start="00:09:41.240" video="qanda-python" id="subtitle"]]
+[[!template text="""and I've minimized the running REPL buffer.""" start="00:09:45.360" video="qanda-python" id="subtitle"]]
+[[!template text="""So sometimes it's, I'm hiding it, but it's still active.""" start="00:09:49.880" video="qanda-python" id="subtitle"]]
+[[!template text="""So basically that's how I configured,""" start="00:09:53.440" video="qanda-python" id="subtitle"]]
+[[!template text="""spent my configuration doing that.""" start="00:09:57.680" video="qanda-python" id="subtitle"]]
+[[!template text="""And also lately, trying out some LLM tools.""" start="00:10:00.280" video="qanda-python" id="subtitle"]]
+[[!template text="""I think I have two packages""" start="00:10:04.800" video="qanda-python" id="subtitle"]]
+[[!template text="""that I'm using actively today.""" start="00:10:09.280" video="qanda-python" id="subtitle"]]
+[[!template text="""My favorite is a tool called ECA,""" start="00:10:12.240" video="qanda-python" id="subtitle"]]
+[[!template text="""which is a LLM chat assistant, which is really good.""" start="00:10:15.800" video="qanda-python" id="subtitle"]]
+[[!template text="""The developer is also an Emacs enthusiast.""" start="00:10:20.200" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Are you building your own Emacs, or using the system packages?""" start="00:10:28.480" video="qanda-python" id="subtitle"]]</div>[[!template text="""So are you the type of person that tends to work with""" start="00:10:28.480" video="qanda-python" id="subtitle"]]
+[[!template text="""like a master builder, build your own Emacs?""" start="00:10:33.640" video="qanda-python" id="subtitle"]]
+[[!template text="""Are you using the system packages?""" start="00:10:37.040" video="qanda-python" id="subtitle"]]
+[[!template text="""What's your approach to just get Emacs""" start="00:10:40.800" video="qanda-python" id="subtitle"]]
+[[!template text="""up and off the ground for yourself?""" start="00:10:43.616" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm not there yet with doing my own builds.""" start="00:10:45.369" video="qanda-python" id="subtitle"]]
+[[!template text="""Currently, I'm on macOS,""" start="00:10:52.520" video="qanda-python" id="subtitle"]]
+[[!template text="""so I'm installing Emacs through brew, basically, homebrew.""" start="00:10:55.600" video="qanda-python" id="subtitle"]]
+[[!template text="""I've yet so much Emacs things to learn""" start="00:11:00.040" video="qanda-python" id="subtitle"]]
+[[!template text="""because I'm not even using Org yet.""" start="00:11:04.920" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm exploring the this editor.""" start="00:11:07.740" video="qanda-python" id="subtitle"]]
+[[!template text="""So I feel like I'm very much a beginner.""" start="00:11:11.560" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm not using Emacs to its full potential yet.""" start="00:11:13.920" video="qanda-python" id="subtitle"]]
+[[!template text="""So I'm counting on that I will be more and more using Emacs""" start="00:11:17.920" video="qanda-python" id="subtitle"]]
+[[!template text="""for more and more different tasks basically.""" start="00:11:23.280" video="qanda-python" id="subtitle"]]
+[[!template text="""And I'm just seeing a comment.""" start="00:11:29.120" video="qanda-python" id="subtitle"]]
+[[!template text="""Ed Stallthroat says, thank you""" start="00:11:32.560" video="qanda-python" id="subtitle"]]
+[[!template text="""for publishing your configuration and offers a link.""" start="00:11:35.800" video="qanda-python" id="subtitle"]]
+[[!template text="""Oh, great. Great.""" start="00:11:40.840" video="qanda-python" id="subtitle"]]
+[[!template text="""Yes, those things that I showed in my talk,""" start="00:11:43.200" video="qanda-python" id="subtitle"]]
+[[!template text="""I haven't made any, I haven't packaged it yet,""" start="00:11:46.360" video="qanda-python" id="subtitle"]]
+[[!template text="""but everything is on my GitHub,""" start="00:11:49.320" video="qanda-python" id="subtitle"]]
+[[!template text="""and I've tried to separate each feature""" start="00:11:51.200" video="qanda-python" id="subtitle"]]
+[[!template text="""in separate LSP files.""" start="00:11:57.080" video="qanda-python" id="subtitle"]]
+[[!template text="""So it should be, I hope that it's fairly straightforward""" start="00:11:59.640" video="qanda-python" id="subtitle"]]
+[[!template text="""to understand how it's set up. Very good.""" start="00:12:04.320" video="qanda-python" id="subtitle"]]
+[[!template text="""Let me just scroll down,""" start="00:12:08.960" video="qanda-python" id="subtitle"]]
+[[!template text="""make sure I'm not missing questions here.""" start="00:12:11.120" video="qanda-python" id="subtitle"]]
+[[!template text="""Okay, I think those are the questions that we have.""" start="00:12:13.000" video="qanda-python" id="subtitle"]]
+[[!template text="""We can take a couple more minutes if you're open to that,""" start="00:12:16.960" video="qanda-python" id="subtitle"]]
+[[!template text="""just for people to consider.""" start="00:12:20.880" video="qanda-python" id="subtitle"]]
+[[!template text="""I know we're coming up on the lunch hour,""" start="00:12:24.040" video="qanda-python" id="subtitle"]]
+[[!template text="""so it may be that people are jogging off to get some food.""" start="00:12:26.120" video="qanda-python" id="subtitle"]]
+[[!template text="""Yeah, in Sweden, it's dinner time.""" start="00:12:31.680" video="qanda-python" id="subtitle"]]
+[[!template text="""It's like 6 p.m. soon. That fits.""" start="00:12:36.600" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Are you involved with local Emacs meetups?""" start="00:12:40.080" video="qanda-python" id="subtitle"]]</div>[[!template text="""So are you involved with local Emacs meetups?""" start="00:12:40.080" video="qanda-python" id="subtitle"]]
+[[!template text="""I know that your part of the world""" start="00:12:46.440" video="qanda-python" id="subtitle"]]
+[[!template text="""has a really brisk community,""" start="00:12:49.080" video="qanda-python" id="subtitle"]]
+[[!template text="""you know, a lot of, just a lot going on.""" start="00:12:51.800" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm always seeing in Sacha's Emacs News,""" start="00:12:55.280" video="qanda-python" id="subtitle"]]
+[[!template text="""all of the different meetups and so on.""" start="00:12:58.800" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm curious if you're plugged""" start="00:13:02.320" video="qanda-python" id="subtitle"]]
+[[!template text="""into a local community there at all, No, I haven't.""" start="00:13:03.520" video="qanda-python" id="subtitle"]]
+[[!template text="""Not in any community. I haven't done that yet,""" start="00:13:08.720" video="qanda-python" id="subtitle"]]
+[[!template text="""but we are... Like, friends that I've gotten to know""" start="00:13:10.760" video="qanda-python" id="subtitle"]]
+[[!template text="""through work and through like open source work that also use Emacs.""" start="00:13:18.216" video="qanda-python" id="subtitle"]]
+[[!template text="""We talk and share our conflicts""" start="00:13:23.440" video="qanda-python" id="subtitle"]]
+[[!template text="""basically on a regular basis,""" start="00:13:28.960" video="qanda-python" id="subtitle"]]
+[[!template text="""because we are, at least in the Python community,""" start="00:13:30.800" video="qanda-python" id="subtitle"]]
+[[!template text="""we're like a minority,""" start="00:13:36.000" video="qanda-python" id="subtitle"]]
+[[!template text="""like other editors are like the standards.""" start="00:13:37.400" video="qanda-python" id="subtitle"]]
+[[!template text="""And at work, I'm sharing what I'm doing,""" start="00:13:39.800" video="qanda-python" id="subtitle"]]
+[[!template text="""just like my talk here to my fellow co-workers""" start="00:13:45.880" video="qanda-python" id="subtitle"]]
+[[!template text="""that are not on Emacs, but I hope to get their interest up.""" start="00:13:48.680" video="qanda-python" id="subtitle"]]
+[[!template text="""So many of us Emacs users are Emacs evangelists.""" start="00:13:54.000" video="qanda-python" id="subtitle"]]
+[[!template text="""Yeah. It's the Venn diagram of Emacs user""" start="00:13:59.000" video="qanda-python" id="subtitle"]]
+[[!template text="""and Emacs evangelist is a circle, I think.""" start="00:14:06.202" video="qanda-python" id="subtitle"]]
+[[!template text="""Yeah, I think so too.""" start="00:14:08.869" video="qanda-python" id="subtitle"]]
+[[!template text="""Well, David, I super appreciate your talk""" start="00:14:11.036" video="qanda-python" id="subtitle"]]
+[[!template text="""and thank you so much also for...""" start="00:14:16.560" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm sorry, I saw another question here. Let me cover that.""" start="00:14:18.760" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Can you repeat the name of the LLM that you specifically mentioned there? - ECA""" start="00:14:24.640" video="qanda-python" id="subtitle"]]</div>[[!template text="""Can you repeat the name of the LLM""" start="00:14:24.640" video="qanda-python" id="subtitle"]]
+[[!template text="""that you specifically mentioned there?""" start="00:14:27.960" video="qanda-python" id="subtitle"]]
+[[!template text="""Oh, it's a tool called ECA, E-C-A.""" start="00:14:30.320" video="qanda-python" id="subtitle"]]
+[[!template text="""It's basically a server and clients,""" start="00:14:36.785" video="qanda-python" id="subtitle"]]
+[[!template text="""and it's not only Emacs. It has support for other editors,""" start="00:14:44.077" video="qanda-python" id="subtitle"]]
+[[!template text="""but I think the primary support is for,""" start="00:14:49.161" video="qanda-python" id="subtitle"]]
+[[!template text="""at least the developer who does it is an Emacs user,""" start="00:14:53.120" video="qanda-python" id="subtitle"]]
+[[!template text="""and so it's like Emacs first, basically.""" start="00:14:57.600" video="qanda-python" id="subtitle"]]
+[[!template text="""And his name is Eric Dallo.""" start="00:15:01.040" video="qanda-python" id="subtitle"]]
+[[!template text="""He's a great developer in the Clojure community.""" start="00:15:04.960" video="qanda-python" id="subtitle"]]
+[[!template text="""He has done some LSP work in the Clojure world, too.""" start="00:15:09.680" video="qanda-python" id="subtitle"]]
+[[!template text="""What was the last name? What was Eric's last name?""" start="00:15:13.160" video="qanda-python" id="subtitle"]]
+[[!template text="""Eric Dallo, D-A-L-L-O. Yeah.""" start="00:15:17.160" video="qanda-python" id="subtitle"]]
+[[!template text="""So I think that's a great tool, but I also use another tool""" start="00:15:23.920" video="qanda-python" id="subtitle"]]
+[[!template text="""that for some reason I forgot to have this interactive way of,""" start="00:15:31.880" video="qanda-python" id="subtitle"]]
+[[!template text="""because I think they are developing that feature too,""" start="00:15:38.920" video="qanda-python" id="subtitle"]]
+[[!template text="""but I have another LLM that has support""" start="00:15:43.600" video="qanda-python" id="subtitle"]]
+[[!template text="""for requests and callbacks basically.""" start="00:15:46.440" video="qanda-python" id="subtitle"]]
+[[!template text="""So you can do something programmatically.""" start="00:15:50.600" video="qanda-python" id="subtitle"]]
+[[!template text="""So that's how I've solved my LLM thing""" start="00:15:53.800" video="qanda-python" id="subtitle"]]
+[[!template text="""where I select some Python variables""" start="00:15:55.920" video="qanda-python" id="subtitle"]]
+[[!template text="""and tell the LLM to populate it with some fake data""" start="00:16:00.760" video="qanda-python" id="subtitle"]]
+[[!template text="""so I can send that to the REPL.""" start="00:16:05.600" video="qanda-python" id="subtitle"]]
+[[!template text="""But for some reason, I forgot the name of it.""" start="00:16:08.880" video="qanda-python" id="subtitle"]]
+[[!template text="""I can look it up. Just give me one minute, sorry.""" start="00:16:11.480" video="qanda-python" id="subtitle"]]
+[[!template text="""Oh yeah, gptel, that's that's the name of the other tool""" start="00:16:29.860" video="qanda-python" id="subtitle"]]
+[[!template text="""which is also a good tool, yeah,""" start="00:16:35.560" video="qanda-python" id="subtitle"]]
+[[!template text="""but ECA is more like a chat companion""" start="00:16:37.880" video="qanda-python" id="subtitle"]]
+[[!template text="""and this, you can also tell it to write code and things like that,""" start="00:16:41.280" video="qanda-python" id="subtitle"]]
+[[!template text="""but I mostly use it for reviews and research""" start="00:16:46.680" video="qanda-python" id="subtitle"]]
+[[!template text="""and asking questions""" start="00:16:51.680" video="qanda-python" id="subtitle"]]
+[[!template text="""because I want to... My...""" start="00:16:53.740" video="qanda-python" id="subtitle"]]
+[[!template text="""I don't have a problem with typing code.""" start="00:16:57.545" video="qanda-python" id="subtitle"]]
+[[!template text="""I don't think that slows me down,""" start="00:17:00.280" video="qanda-python" id="subtitle"]]
+[[!template text="""but maybe getting some quick feedback""" start="00:17:01.920" video="qanda-python" id="subtitle"]]
+[[!template text="""on the actual work that I'm doing,""" start="00:17:05.640" video="qanda-python" id="subtitle"]]
+[[!template text="""that's what I'm using LLM for,""" start="00:17:07.480" video="qanda-python" id="subtitle"]]
+[[!template text="""on LLM for two, mostly today. That really hits for me.""" start="00:17:09.000" video="qanda-python" id="subtitle"]]
+[[!template text="""[Corwin]: I don't mind typing either.""" start="00:17:13.520" video="qanda-python" id="subtitle"]]
+[[!template text="""I think somehow having things be so simple""" start="00:17:15.200" video="qanda-python" id="subtitle"]]
+[[!template text="""and in many cases just automated,""" start="00:17:18.480" video="qanda-python" id="subtitle"]]
+[[!template text="""Emacs just does the right thing.""" start="00:17:20.880" video="qanda-python" id="subtitle"]]
+[[!template text="""It makes me hungry to type. I want to type more.""" start="00:17:22.720" video="qanda-python" id="subtitle"]]
+[[!template text="""It feels like every keystroke does a little more.""" start="00:17:26.520" video="qanda-python" id="subtitle"]]
+[[!template text="""Speaking of evangelism, thank you. Thank you""" start="00:17:28.560" video="qanda-python" id="subtitle"]]
+[[!template text="""pop up for the for the question.""" start="00:17:33.520" video="qanda-python" id="subtitle"]]
+[[!template text="""I'm just going to peek one more time through""" start="00:17:35.600" video="qanda-python" id="subtitle"]]
+[[!template text="""and I don't see a backlog.""" start="00:17:39.440" video="qanda-python" id="subtitle"]]
+[[!template text="""There are a couple more comments here""" start="00:17:41.160" video="qanda-python" id="subtitle"]]
+[[!template text="""linking to the ECA Emacs and gptel.""" start="00:17:44.520" video="qanda-python" id="subtitle"]]
+[[!template text="""Comment also saying very cool setup.""" start="00:17:49.320" video="qanda-python" id="subtitle"]]
+[[!template text="""So I suppose I'll hand it over to you""" start="00:17:52.240" video="qanda-python" id="subtitle"]]
+[[!template text="""if you have kind of final thoughts or""" start="00:17:56.960" video="qanda-python" id="subtitle"]]
+[[!template text="""additional wisdoms you want to share""" start="00:17:59.320" video="qanda-python" id="subtitle"]]
+[[!template text="""I really appreciate your taking the time""" start="00:18:02.080" video="qanda-python" id="subtitle"]]
+[[!template text="""to prepare this presentation""" start="00:18:03.975" video="qanda-python" id="subtitle"]]
+[[!template text="""especially to do the live Q&A with us.""" start="00:18:05.400" video="qanda-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:18:08.742" video="qanda-python" id="subtitle"]]</div>[[!template text="""[David]: Thank you. I haven't anything more than that""" start="00:18:08.742" video="qanda-python" id="subtitle"]]
+[[!template text="""I will of course continue evolving my setup,""" start="00:18:12.989" video="qanda-python" id="subtitle"]]
+[[!template text="""because there's new tools""" start="00:18:19.480" video="qanda-python" id="subtitle"]]
+[[!template text="""and maybe new ideas also coming up.""" start="00:18:21.360" video="qanda-python" id="subtitle"]]
+[[!template text="""What I'm aiming for in Python development""" start="00:18:24.760" video="qanda-python" id="subtitle"]]
+[[!template text="""is the great developer experience""" start="00:18:28.720" video="qanda-python" id="subtitle"]]
+[[!template text="""of what's called Lisp programming, basically.""" start="00:18:30.480" video="qanda-python" id="subtitle"]]
+[[!template text="""So that's what I'm aiming at for Python too.""" start="00:18:34.520" video="qanda-python" id="subtitle"]]
+[[!template text="""Thank you. Thank you so much.""" start="00:18:41.700" video="qanda-python" 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%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..3e88314d
--- /dev/null
+++ b/2025/info/python-before.md
@@ -0,0 +1,32 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 20-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-python>
+Etherpad: <https://pad.emacsconf.org/2025-python>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<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/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://toobnix.org/videos/watch/ccbbd421-1898-47a6-ae42-f3466085c0ed">View on Toobnix</a></li><li><a href="https://youtu.be/uACM4a5MPQM">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-python"><source src="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--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-python" data="""
+00:00.000 Developing Python in Emacs
+01:16.680 Q: How long have you been using Emacs?
+02:39.520 Q: What editor were you primarily using before?
+04:00.280 Q: Do you have your Emacs connect to the IPython kernel over the XMPP socket that IPython sets up?
+05:38.480 Q: Not sure if you've explored Org Babel, but what are the benefits of using your approach over Org?
+07:05.800 Q: Have you seen marimo.io notebooks? It uses standard Python.
+08:20.560 Q: what LLM did you say you've used?
+10:28.480 Q: Are you building your own Emacs, or using the system packages?
+12:40.080 Q: Are you involved with local Emacs meetups?
+14:24.640 Q: Can you repeat the name of the LLM that you specifically mentioned there? - ECA
+18:08.742 Wrapping up
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-python-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.opus"></audio></div><div></div>Duration: 18:44 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/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.m4v">Download --answers.m4v (75MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.webm">Download --answers.webm (71MB)</a></li><li><a href="https://toobnix.org/videos/watch/18247363-64bd-41f6-8409-2efb1055753d">View on Toobnix</a></li><li><a href="https://youtu.be/JIpcbE1XrKI">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..d1d02d06
--- /dev/null
+++ b/2025/info/python-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/swanky">Swanky Python: Interactive development for Python</a>
+Next by track: <a href="/2025/talks/llm">Emacs, editors, and LLM driven workflows</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2025/info/reader-after.md b/2025/info/reader-after.md
new file mode 100644
index 00000000..ad084da8
--- /dev/null
+++ b/2025/info/reader-after.md
@@ -0,0 +1,1214 @@
+<!-- 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
+
+<div class="transcript transcript-qanda"><a name="reader-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there scope for integrating the C library into Emacs itself with muPDF becoming an optional dependency?""" start="00:00:00.000" video="qanda-reader" id="subtitle"]]</div>[[!template text="""The first question,""" start="00:00:00.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""and I'm reading from the etherpad here,""" start="00:00:01.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""is there a scope for integrating""" start="00:00:03.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""the C library to Emacs itself""" start="00:00:05.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""with MuPDF becoming an optional dependency?""" start="00:00:07.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""Right, so integrating the C library into Emacs itself""" start="00:00:13.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""is like having MuPDF inside Emacs source tree.""" start="00:00:18.720" video="qanda-reader" id="subtitle"]]
+[[!template text="""I don't think Emacs devs would be inclined to do that,""" start="00:00:24.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""and I don't think we really need it.""" start="00:00:28.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""Um, I think as it is, uh, Emacs""" start="00:00:30.080" video="qanda-reader" id="subtitle"]]
+[[!template text="""with docview needs mutool, which is something you need""" start="00:00:33.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""to install from MuPDF anyways.""" start="00:00:36.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""So, um, I think it is almost expected""" start="00:00:38.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""that you install MuPDF from system package manager.""" start="00:00:42.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""Um, and I think that as it is, is better""" start="00:00:46.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""because we don't really need to have""" start="00:00:49.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""a whole PDF engine inside Emacs.""" start="00:00:51.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""Next question also from the pad,""" start="00:00:53.440" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: The dynamic modules sound great, and it's amazing they're there since 2017\. Why is it so slow to take off, do you think? Is there prior art with them?""" start="00:00:59.880" video="qanda-reader" id="subtitle"]]</div>[[!template text="""the dynamic modules sound great,""" start="00:00:59.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""and it's amazing that they've been there since 2017.""" start="00:01:01.760" video="qanda-reader" id="subtitle"]]
+[[!template text="""Why do you think they've been slowly""" start="00:01:06.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""so slow to get adopted?""" start="00:01:09.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""Is there a prior art with them? Right?""" start="00:01:11.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""That's a good question.""" start="00:01:14.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""Actually, I think one of the reasons is that""" start="00:01:16.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""most of the time, I think people love Emacs""" start="00:01:22.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""because they can do so much with Elisp.""" start="00:01:24.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""I think certainly there is a bias""" start="00:01:27.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""towards trying to do things with Elisp.""" start="00:01:28.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""I think there's only a sort of specific class of problems""" start="00:01:31.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""that you can solve with dynamic modules,""" start="00:01:35.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""such as this, where you want to use a native library""" start="00:01:36.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""to do something in a faster, better way.""" start="00:01:40.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""I use that quite a lot.""" start="00:01:44.240" video="qanda-reader" id="subtitle"]]
+[[!template text="""There's of course libvterm, which uses a dynamic module""" start="00:01:48.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""and it does it really well.""" start="00:01:53.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""And I think there's another one, a plotting library""" start="00:01:55.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""or package in Emacs that was using something from Python.""" start="00:02:00.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""So, dynamic modules are good,""" start="00:02:05.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""but I think they don't really come""" start="00:02:07.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""to the surface level packages, your day-to-day packages,""" start="00:02:10.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""because most of the day-to-day packages that we use in Emacs""" start="00:02:13.975" video="qanda-reader" id="subtitle"]]
+[[!template text="""can be done with Elisp. So, unless you really need""" start="00:02:17.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""something system-level efficient,""" start="00:02:20.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""Most of the time, you don't want to write C or C++ or something.""" start="00:02:23.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""But there is actually a really nice Rust crate for native modules,""" start="00:02:29.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""and there's a really nice Haskell package.""" start="00:02:34.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""So there's actually really good support""" start="00:02:37.240" video="qanda-reader" id="subtitle"]]
+[[!template text="""for multiple languages.""" start="00:02:39.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""So it's there, it's just not used as much. Yeah.""" start="00:02:41.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""So what you're saying is""" start="00:02:45.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""if Elisp weren't so simple to learn and easy to use""" start="00:02:47.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""and so fully featured,""" start="00:02:51.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""we'd get a lot more mileage""" start="00:02:52.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""out of this super cool dynamic module feature.""" start="00:02:54.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah. Cool I'll take I'll bring in the next question.""" start="00:02:57.800" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How is pdf-tools difficult to install? I install it using the built in package manager\.""" start="00:03:02.160" video="qanda-reader" id="subtitle"]]</div>[[!template text="""How difficult is PDF-tools to install?""" start="00:03:02.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""The questioner is installing it""" start="00:03:07.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""using the built-in package manager.""" start="00:03:10.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""Looking at the Emacs reader installation instructions,""" start="00:03:12.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""it doesn't necessarily cover""" start="00:03:16.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""how to install that easily.""" start="00:03:18.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""Person is not using use-package or straight. Okay.""" start="00:03:20.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""Oh, and they say that you didn't""" start="00:03:25.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""catch much of this in the presentation.""" start="00:03:27.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""Okay, so you want me to skip that or should I answer?""" start="00:03:32.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""It's your choice. If you would like to say more.""" start="00:03:35.080" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah, I think just as a thing,""" start="00:03:38.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""the reason I said pdf-tools is difficult""" start="00:03:40.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""is pdf-tools has a huge list of dependencies.""" start="00:03:43.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""The only thing Emacs Reader depends""" start="00:03:45.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""on is MuPDF, nothing else. There's a single dependency.""" start="00:03:47.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""pdf-tools depends on a lot of things""" start="00:03:50.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""and they have their own server,""" start="00:03:54.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""which is packaged as a system package,""" start="00:03:57.760" video="qanda-reader" id="subtitle"]]
+[[!template text="""which you don't really find everywhere.""" start="00:04:00.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""And there's like systems, the GNU/Linux systems""" start="00:04:02.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""where the package is very difficult to build""" start="00:04:05.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""because of so many dependencies.""" start="00:04:07.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""So my goal was to sort of reduce""" start="00:04:10.080" video="qanda-reader" id="subtitle"]]
+[[!template text="""the number of dependencies.""" start="00:04:13.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""And then right now it's sort of a key""" start="00:04:14.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""to install Emacs Reader.""" start="00:04:19.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""Once we go to GNU ELPA, it's just""" start="00:04:21.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""going to be Emacs package-install, just that.""" start="00:04:23.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""Right now you have to do package :vc""" start="00:04:26.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""a bit.""" start="00:04:27.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""Boy, we get spoiled as""" start="00:04:30.224" video="qanda-reader" id="subtitle"]]
+[[!template text="""Emacs users. Everything just gets so easy""" start="00:04:32.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""for us. It's like an IDE for our""" start="00:04:35.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""whole machine.""" start="00:04:37.960" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What tool(s) did you use to measure the memory usage between the three packages?""" start="00:04:41.201" video="qanda-reader" id="subtitle"]]</div>[[!template text="""What tools did you use to measure the""" start="00:04:41.201" video="qanda-reader" id="subtitle"]]
+[[!template text="""memory usage between the three packages?""" start="00:04:44.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah, that's a good question.""" start="00:04:48.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""So during my development, I used mostly for debugging""" start="00:04:50.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""purposes Valgrind. So Valgrind is a a set of suite""" start="00:04:54.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""of debugging tools.""" start="00:05:00.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""And one of the tools that it has is Massif.""" start="00:05:01.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""It's a heap analyzer, heap profiler.""" start="00:05:03.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""So Valgrind plus Massif,""" start="00:05:08.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""and then there's a KDE package""" start="00:05:10.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""called Massif-Visualizer.""" start="00:05:14.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""So I first get the Massif output using Valgrind,""" start="00:05:15.760" video="qanda-reader" id="subtitle"]]
+[[!template text="""and then put that output into Massif Visualizer.""" start="00:05:19.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""That gives me the grasp.""" start="00:05:23.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""Are there Emacs integrations for those components at all?""" start="00:05:24.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""Does Valgrind have them?""" start="00:05:28.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""I don't think so. I don't think so.""" start="00:05:30.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""There's, yeah, there's I think a few packages""" start="00:05:32.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""which do something with Massif,""" start="00:05:37.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""but I don't think like they're maintained.""" start="00:05:38.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah. Gotcha. Cool. Awesome opportunity""" start="00:05:42.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""there for someone spunky.""" start="00:05:47.760" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How is the conversion between ELisp and the foreign language type system done? For example when interfacing with a C++ library that makes heavy use of C++ object system and templates?""" start="00:05:49.400" video="qanda-reader" id="subtitle"]]</div>[[!template text="""How is conversion between Elisp and foreign language types?""" start="00:05:49.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""For example, when interfacing with the C++ library""" start="00:05:55.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""that makes heavy use of the C++ object system and templates.""" start="00:05:59.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah, that's a good question.""" start="00:06:03.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""So the go-to answer is the blog post that I wrote,""" start="00:06:05.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""which is an extensive explanation""" start="00:06:10.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""on how the internals of dynamic modules work.""" start="00:06:12.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""The short answer is that basically what happens""" start="00:06:14.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""is anything that is compatible with C-ABI""" start="00:06:21.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""When you compile that language code,""" start="00:06:24.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""so when I compile C++ code, I would have a particular API.""" start="00:06:27.760" video="qanda-reader" id="subtitle"]]
+[[!template text="""So we have a dynamic module API,""" start="00:06:33.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""which is the emacs-module.h, the file that I showed.""" start="00:06:35.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""You have to put that into your C++ package program""" start="00:06:39.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""and then link it to...""" start="00:06:45.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""So emacs-module.h is basically going to...""" start="00:06:48.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""like use things in your Emacs installation""" start="00:06:51.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""to interact with this C++ language. So it's basically FFI.""" start="00:06:56.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""And what this gives you is that you can have things in C++.""" start="00:07:04.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""So let's say you want to do multi-threading""" start="00:07:10.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""the way I did system level multi-threading.""" start="00:07:13.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""You can have C++ be responsible for the multi-threading.""" start="00:07:15.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""but you want the output""" start="00:07:20.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""of the multithreading to go into Emacs.""" start="00:07:23.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""So then you write like a piece of C++ function,""" start="00:07:24.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""which is going to be a dynamic module function.""" start="00:07:29.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""A dynamic module function""" start="00:07:31.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""is written in the language that you target,""" start="00:07:32.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""that is C++ or C or Rust.""" start="00:07:34.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""And then that is going to be compiled""" start="00:07:37.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""into a share library like .so,""" start="00:07:40.760" video="qanda-reader" id="subtitle"]]
+[[!template text="""shared object, and then that shared object""" start="00:07:43.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""is going to be loaded into Emacs system using require.""" start="00:07:46.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""So when I do require render core""" start="00:07:50.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""in one of the slides that I showed,""" start="00:07:53.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""I'm basically loading that shared object,""" start="00:07:54.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""and that shared object already has""" start="00:07:58.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""the compiled dynamic module functions and so on.""" start="00:08:00.517" video="qanda-reader" id="subtitle"]]
+[[!template text="""But my blog will explain that better.""" start="00:08:03.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""Gotcha. I thought that was pretty clear.""" start="00:08:07.080" video="qanda-reader" id="subtitle"]]
+[[!template text="""I'm looking forward to seeing that blog post""" start="00:08:10.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""and understanding what I glossed over""" start="00:08:12.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""trying to understand from that explanation.""" start="00:08:13.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""That was great.""" start="00:08:15.880" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Can one look at pdf metadata with emacs-reader? Can annotations be added? Does it understand forms? Can it handle encrypted pdfs?""" start="00:08:17.280" video="qanda-reader" id="subtitle"]]</div>[[!template text="""Can one look at PDF metadata with Emacs Reader?""" start="00:08:17.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""Can you do annotations? Does it understand forms?""" start="00:08:22.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""Can it handle encrypted PDFs?""" start="00:08:26.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""In other words, I think reading between the lines,""" start="00:08:29.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""wow, this is awesome.""" start="00:08:33.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""Is there anything I can't do? You're right.""" start="00:08:34.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""So Emacs Reader will be able to do all of those things.""" start="00:08:39.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""It can do annotations. It will be able to do forms.""" start="00:08:44.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""And we have an issue open for interpret PDFs.""" start="00:08:48.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""The thing is, right now we are struggling with""" start="00:08:52.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""making Emacs Reader be very efficient""" start="00:08:54.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""in terms of highlighting and text selection""" start="00:08:58.760" video="qanda-reader" id="subtitle"]]
+[[!template text="""because of the challenges that I mentioned in the slides,""" start="00:09:02.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""so it will be able to do all that.""" start="00:09:05.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""Once we tackle the basic features""" start="00:09:07.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""down in an efficient manner. Gotcha. Um.""" start="00:09:10.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""Comment or questioner says,""" start="00:09:18.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""I installed Emacs Reader already. It is as promised. Great job.""" start="00:09:24.120" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How can I associate ODT files to open with emacs-reader?""" start="00:09:28.800" video="qanda-reader" id="subtitle"]]</div>[[!template text="""How can I associate ODT files to open with Emacs Reader?""" start="00:09:28.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""You don't really need to do anything.""" start="00:09:34.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""You should be just able to do find file,""" start="00:09:37.940" video="qanda-reader" id="subtitle"]]
+[[!template text="""C-x C-f and open.""" start="00:09:40.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""And it should open with Emacs Reader""" start="00:09:42.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""because we have an auto mode list,""" start="00:09:45.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""a list that takes an ODT file""" start="00:09:47.760" video="qanda-reader" id="subtitle"]]
+[[!template text="""and opens it with reader mode.""" start="00:09:51.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""So you should just be able to do find file.""" start="00:09:53.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""If you're not able to do that,""" start="00:09:55.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""you should open a bug report.""" start="00:09:56.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""And I'll just mention""" start="00:09:58.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""we've got about 10 minutes left of our live Q&A,""" start="00:10:00.760" video="qanda-reader" id="subtitle"]]
+[[!template text="""but if you're watching the stream,""" start="00:10:03.240" video="qanda-reader" id="subtitle"]]
+[[!template text="""it's possible that we'll just keep going.""" start="00:10:06.080" video="qanda-reader" id="subtitle"]]
+[[!template text="""The questions just keep coming, which I just love that.""" start="00:10:08.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""So feel free to join the BBB link""" start="00:10:10.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""that should have shown in the IRC chat.""" start="00:10:14.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""Jump in and we can take questions""" start="00:10:17.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""as long as Divya has steam for that.""" start="00:10:21.560" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: If a pdf file is open in emacs-reader and I regenerate the pdf with some changes, does emacs-reader actually refresh the pdf on its own or do I have to reload the pdf?""" start="00:10:26.000" video="qanda-reader" id="subtitle"]]</div>[[!template text="""If a PDF file is open in Emacs Reader""" start="00:10:26.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""and I reintegrate the PDF with some changes,""" start="00:10:30.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""does the Emacs Reader refresh the PDF on its own""" start="00:10:33.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""or do I reload it?""" start="00:10:36.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""Right, that's also a really good question.""" start="00:10:38.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""So one answer is that it depends on""" start="00:10:41.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""how you change the PDF.""" start="00:10:44.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""So for example, if I just replaced the PDF""" start="00:10:46.080" video="qanda-reader" id="subtitle"]]
+[[!template text="""with something else of the same name,""" start="00:10:50.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""Emacs will update it immediately.""" start="00:10:52.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""If you have auto revert mode on,""" start="00:10:55.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""it'll just revert the buffer""" start="00:10:57.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""and it'll reload the PDF really nicely.""" start="00:10:59.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""But if you're doing it something like LaTeX,""" start="00:11:01.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""where you're writing something in LaTeX""" start="00:11:05.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""and LaTeX is continuously producing the PDF,""" start="00:11:07.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""that needs SyncTeX integration.""" start="00:11:10.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""Because LaTeX, while it's producing the PDF,""" start="00:11:13.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""it does a lot of funky things.""" start="00:11:16.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""It does not provide a sort of renderable PDF all the time.""" start="00:11:19.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""So Emacs will sort of crash trying to""" start="00:11:24.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""basically render a PDF that is not ready yet.""" start="00:11:28.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""So we need SyncTex to sync""" start="00:11:31.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""with LaTeX to do that really nice.""" start="00:11:34.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""Okay, so we have to do some care""" start="00:11:37.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""and feeding of the exact timing""" start="00:11:39.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""if we have more of a continuous behind the curtains, so to speak.""" start="00:11:41.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""That makes a lot of sense to me.""" start="00:11:46.880" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What are the challenges with integrating with SyncTeX and AucTeX? This would be great to see as pdf-tools handles this well\.""" start="00:11:49.753" video="qanda-reader" id="subtitle"]]</div>[[!template text="""What are the challenges""" start="00:11:49.753" video="qanda-reader" id="subtitle"]]
+[[!template text="""with integrating SyncTeX and AucTeX?""" start="00:11:50.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""This would be great to see as pdf-tools handles this well.""" start="00:11:55.720" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah, yeah.""" start="00:12:01.460" video="qanda-reader" id="subtitle"]]
+[[!template text="""So, we have SyncTeX and AucTeX planned.""" start="00:12:02.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""I don't really see any major obstacles""" start="00:12:04.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""for doing that, to be very honest.""" start="00:12:06.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""I think we can do it in a much simpler way""" start="00:12:08.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""than pdf-tools does.""" start="00:12:11.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""The only reason we haven't done it yet is because, again,""" start="00:12:12.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""we have more important highlighting""" start="00:12:17.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""and text selection and those features planned,""" start="00:12:20.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""but it's anticipated. Yeah. All right. This next question""" start="00:12:24.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""I love your presentation.""" start="00:12:32.920" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Will you be giving another talk on the architecture you went over? A deep-dive there would be awesome\.""" start="00:12:35.009" video="qanda-reader" id="subtitle"]]</div>[[!template text="""Will you be giving another talk""" start="00:12:35.009" video="qanda-reader" id="subtitle"]]
+[[!template text="""on the architecture you went over?""" start="00:12:36.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""A deep dive on that would be awesome.""" start="00:12:38.194" video="qanda-reader" id="subtitle"]]
+[[!template text="""That would be awesome. I'm not sure if an EmacsConf talk""" start="00:12:40.425" video="qanda-reader" id="subtitle"]]
+[[!template text="""will be appropriate for this, but I do stream bi-weekly.""" start="00:12:44.920" video="qanda-reader" id="subtitle"]]
+[[!template text="""So you're always welcome to come on my stream and ask,""" start="00:12:48.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""and I would be very happy to go deep into this.""" start="00:12:52.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""I'm looking forward to catching that myself.""" start="00:12:55.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""Thank you for the shout.""" start="00:12:58.120" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there search functionality? Something like isearch and occur?""" start="00:12:59.765" video="qanda-reader" id="subtitle"]]</div>[[!template text="""Is there search functionality,""" start="00:12:59.765" video="qanda-reader" id="subtitle"]]
+[[!template text="""something like isearch and occur?""" start="00:13:02.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah, we don't really have it,""" start="00:13:05.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""but this is the most immediate feature""" start="00:13:07.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""after we have text selection.""" start="00:13:09.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""So once we have text selection,""" start="00:13:10.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""once we're able to select the text,""" start="00:13:12.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""then we can have isearch so that it can highlight the text.""" start="00:13:14.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah. Um, all right. And then, um, there's, I'm just gonna,""" start="00:13:17.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""I'll read out this question""" start="00:13:26.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""and then I have to do a little bookkeeping on the pad.""" start="00:13:28.800" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Does dynamic module prevent customization that Elisp usually provide? (Advices, Hooks, etc)\.""" start="00:13:30.640" video="qanda-reader" id="subtitle"]]</div>[[!template text="""Does the dynamic module prevent customization""" start="00:13:30.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""that Emacs usually provides advice, hooks, et cetera,""" start="00:13:35.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""or does everything just kind of...""" start="00:13:40.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""No, if you have a dynamic module,""" start="00:13:44.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""it doesn't limit you into doing anything.""" start="00:13:46.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""You can do everything on the Elisp side that you want,""" start="00:13:49.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""and you only take care of certain things""" start="00:13:52.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""on the dynamic module side.""" start="00:13:55.720" video="qanda-reader" id="subtitle"]]
+[[!template text="""If you're asking whether""" start="00:13:56.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""you can do advices, hooks, and all of that""" start="00:13:58.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""on the dynamic module itself,""" start="00:14:01.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""from the dynamic module itself,""" start="00:14:03.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""that's a bit tricky because something like""" start="00:14:05.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""calling a macro or doing macros and dynamic modules""" start="00:14:09.720" video="qanda-reader" id="subtitle"]]
+[[!template text="""is not really that nice. You have to pretty much manually""" start="00:14:14.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""expand the macro yourself in the dynamic module,""" start="00:14:18.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""so if you want to do it from the dynamic module,""" start="00:14:21.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""there's not much support right now,""" start="00:14:23.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""but you can do everything on the elisp side""" start="00:14:25.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""without touching the dynamic module. Got it.""" start="00:14:29.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""So those are the questions that I see.""" start="00:14:33.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""I'm just going to take a quick peek,""" start="00:14:38.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""but let me invite you if you want to.""" start="00:14:40.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""We've got just about 5 minutes left""" start="00:14:42.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""and I will get carried away sometimes""" start="00:14:46.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""and fail to make this invitation before we cut away live,""" start="00:14:48.240" video="qanda-reader" id="subtitle"]]
+[[!template text="""especially if we do keep going a bit.""" start="00:14:51.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""that you have live onto the stream.""" start="00:14:54.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""Of course, you don't have to do that.""" start="00:14:57.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""You said a lot in your presentation.""" start="00:15:02.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""No, I think mostly that's fine.""" start="00:15:05.800" video="qanda-reader" id="subtitle"]]
+[[!template text="""I'm just really happy""" start="00:15:12.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""that people are interested in the package,""" start="00:15:13.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""and I would be glad to have contributors""" start="00:15:17.080" video="qanda-reader" id="subtitle"]]
+[[!template text="""and viewers or anything. That would be nice. Awesome.""" start="00:15:19.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""So here comes one more question,""" start="00:15:25.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""or actually a couple more questions coming in.""" start="00:15:28.880" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you usually create an Elisp shim from the FFI and then use them with Elisp code?""" start="00:15:31.960" video="qanda-reader" id="subtitle"]]</div>[[!template text="""Following up on dynamic modules,""" start="00:15:31.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""do you usually create an Elisp shim""" start="00:15:34.240" video="qanda-reader" id="subtitle"]]
+[[!template text="""from foreign function interface""" start="00:15:38.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""and then use them with Elisp?""" start="00:15:40.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah, so basically how you do is you write,""" start="00:15:41.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""let's say I have a C function""" start="00:15:46.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""that I've written in the dynamic module.""" start="00:15:49.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""It's a dynamic module function.""" start="00:15:51.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""And then when I'm trying to call""" start="00:15:52.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""the dynamic module function,""" start="00:15:54.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""most of the time, I don't call it like that.""" start="00:15:56.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""I wrap it inside a proper Elisp function""" start="00:15:59.000" video="qanda-reader" id="subtitle"]]
+[[!template text="""and then call that Elisp function.""" start="00:16:01.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""So that's how I think it's better to do that because""" start="00:16:03.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""You can take care of certain cases""" start="00:16:08.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""on when you want the dynamic module function to be called.""" start="00:16:12.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""Maybe sometimes you don't want""" start="00:16:15.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""the dynamic module function""" start="00:16:17.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""to be called immediately.""" start="00:16:18.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""So it's better to wrap it.""" start="00:16:19.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah. Okay. So timing issues. Yeah.""" start="00:16:22.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""For the purposes of managing timing issues,""" start="00:16:26.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""that elisp shim is preferred.""" start="00:16:31.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""Yeah. Makes sense. Um.""" start="00:16:34.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""Uh, so question here""" start="00:16:38.960" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is searching on the roadmap? Or is it already available as a feature?""" start="00:16:44.640" video="qanda-reader" id="subtitle"]]</div>[[!template text="""is searching... The person is searching for a roadmap.""" start="00:16:44.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""Is that already available as a feature?""" start="00:16:47.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""Searching is on the roadmap.""" start="00:16:49.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""It is not available yet as a feature, but it's on priority.""" start="00:16:52.240" video="qanda-reader" id="subtitle"]]
+[[!template text="""I think you may have may have touched on that.""" start="00:16:56.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""Sorry. All right. Those are the questions that I see.""" start="00:16:59.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""We've got just a couple of minutes.""" start="00:17:06.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""I'm not sure if you have more you wanted to say,""" start="00:17:08.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""but I have to say how much I appreciate your talk,""" start="00:17:10.400" video="qanda-reader" id="subtitle"]]
+[[!template text="""especially you jumping in live with us""" start="00:17:13.720" video="qanda-reader" id="subtitle"]]
+[[!template text="""and just taking everything on the fly.""" start="00:17:16.120" video="qanda-reader" id="subtitle"]]
+[[!template text="""I think this is a big part of what adds the energy,""" start="00:17:19.080" video="qanda-reader" id="subtitle"]]
+[[!template text="""you in particular, just really dynamic speaker.""" start="00:17:24.560" video="qanda-reader" id="subtitle"]]
+[[!template text="""Thank you. Thank you. Thank you. I enjoyed it as well.""" start="00:17:28.040" video="qanda-reader" id="subtitle"]]
+[[!template text="""A person is, and I think this may have been touched on already,""" start="00:17:31.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""but let's maybe get into it more specifically.""" start="00:17:37.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""We've said that search is kind of""" start="00:17:39.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""a next up type of feature as things,""" start="00:17:42.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""as the current iteration stabilizes.""" start="00:17:44.720" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Will there be occur-like searching?""" start="00:17:48.160" video="qanda-reader" id="subtitle"]]</div>[[!template text="""Question was, you know, occur like, how would you?""" start="00:17:48.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""Totally. There will be occur searches.""" start="00:17:52.240" video="qanda-reader" id="subtitle"]]
+[[!template text="""There will be isearch enabled, isearch.""" start="00:17:56.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""used to with PDF tools,""" start="00:17:59.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""we would be like parity with the features,""" start="00:18:02.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""all the features that you're used to with PDF tools.""" start="00:18:06.440" video="qanda-reader" id="subtitle"]]
+[[!template text="""Um, so, uh, certainly occur anything""" start="00:18:08.720" video="qanda-reader" id="subtitle"]]
+[[!template text="""that is important in Emacs with text""" start="00:18:12.600" video="qanda-reader" id="subtitle"]]
+[[!template text="""and that can be done with PDFs.""" start="00:18:15.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""We really want to do that because, um,""" start="00:18:17.360" video="qanda-reader" id="subtitle"]]
+[[!template text="""I want the package to be as knitted""" start="00:18:19.840" video="qanda-reader" id="subtitle"]]
+[[!template text="""into Emacs ecosystem as possible.""" start="00:18:22.680" video="qanda-reader" id="subtitle"]]
+[[!template text="""Okay. We'll see if we can get in this last question here.""" start="00:18:24.960" video="qanda-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What is your timing expectation for it to appear on ELPA?""" start="00:18:28.160" video="qanda-reader" id="subtitle"]]</div>[[!template text="""Do you have a timing expectation for ELPA?""" start="00:18:28.160" video="qanda-reader" id="subtitle"]]
+[[!template text="""Uh, yeah, next major release essentially.""" start="00:18:30.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""So next major release is most likely""" start="00:18:33.200" video="qanda-reader" id="subtitle"]]
+[[!template text="""going to be within a month or two.""" start="00:18:35.280" video="qanda-reader" id="subtitle"]]
+[[!template text="""So once we have the next major release, we're going to be.""" start="00:18:37.320" video="qanda-reader" id="subtitle"]]
+[[!template text="""Uh, timing couldn't be more perfect.""" start="00:18:39.640" video="qanda-reader" id="subtitle"]]
+[[!template text="""Maybe this is a good, good point to break.""" start="00:18:43.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""We'll be cutting away to the next talk""" start="00:18:45.520" video="qanda-reader" id="subtitle"]]
+[[!template text="""in just a couple of minutes.""" start="00:18:47.760" video="qanda-reader" id="subtitle"]]
+[[!template text="""So let me say one more time how much""" start="00:18:48.880" video="qanda-reader" id="subtitle"]]
+[[!template text="""on behalf of all the attendees""" start="00:18:51.480" video="qanda-reader" id="subtitle"]]
+[[!template text="""and all the volunteers and all everybody,""" start="00:18:52.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""um, how much we appreciate your talks""" start="00:18:54.960" video="qanda-reader" id="subtitle"]]
+[[!template text="""and, uh, your awesome contribution to the Emacs world.""" start="00:18:57.080" video="qanda-reader" id="subtitle"]]
+[[!template text="""Thanks, Corwin.""" start="00:19:01.300" video="qanda-reader" id="subtitle"]]
+
+</div>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..b536edf8
--- /dev/null
+++ b/2025/info/reader-before.md
@@ -0,0 +1,54 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 35-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-reader>
+Etherpad: <https://pad.emacsconf.org/2025-reader>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<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.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/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><li><a href="https://toobnix.org/videos/watch/35bda01a-fa14-4e2b-be6a-0cec03029ccc">View on Toobnix</a></li><li><a href="https://youtu.be/KQBXTSg_Occ">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-reader"><source src="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--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-reader" data="""
+00:00.000 Q: Is there scope for integrating the C library into Emacs itself with muPDF becoming an optional dependency?
+00:59.880 Q: The dynamic modules sound great, and it's amazing they're there since 2017. Why is it so slow to take off, do you think? Is there prior art with them?
+03:02.160 Q: How is pdf-tools difficult to install? I install it using the built in package manager.
+04:41.201 Q: What tool(s) did you use to measure the memory usage between the three packages?
+05:49.400 Q: How is the conversion between ELisp and the foreign language type system done? For example when interfacing with a C++ library that makes heavy use of C++ object system and templates?
+08:17.280 Q: Can one look at pdf metadata with emacs-reader? Can annotations be added? Does it understand forms? Can it handle encrypted pdfs?
+09:28.800 Q: How can I associate ODT files to open with emacs-reader?
+10:26.000 Q: If a pdf file is open in emacs-reader and I regenerate the pdf with some changes, does emacs-reader actually refresh the pdf on its own or do I have to reload the pdf?
+11:49.753 Q: What are the challenges with integrating with SyncTeX and AucTeX? This would be great to see as pdf-tools handles this well.
+12:35.009 Q: Will you be giving another talk on the architecture you went over? A deep-dive there would be awesome.
+12:59.765 Q: Is there search functionality? Something like isearch and occur?
+13:30.640 Q: Does dynamic module prevent customization that Elisp usually provide? (Advices, Hooks, etc).
+15:31.960 Q: Do you usually create an Elisp shim from the FFI and then use them with Elisp code?
+16:44.640 Q: Is searching on the roadmap? Or is it already available as a feature?
+17:48.160 Q: Will there be occur-like searching?
+18:28.160 Q: What is your timing expectation for it to appear on ELPA?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-reader-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.opus"></audio></div><div></div>Duration: 19:02 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/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.m4v">Download --answers.m4v (82MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.opus">Download --answers.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.webm">Download --answers.webm (77MB)</a></li><li><a href="https://toobnix.org/videos/watch/af535112-81e5-4812-8a49-d0a37900affe">View on Toobnix</a></li><li><a href="https://youtu.be/lo4eZJNzUAs">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/reader-nav.md b/2025/info/reader-nav.md
new file mode 100644
index 00000000..c0b83e2a
--- /dev/null
+++ b/2025/info/reader-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/modern">Some problems of modernizing Emacs</a>
+Next by track: <a href="/2025/talks/weights">Weightlifting tracking with Emacs on Android</a>
+Track: <span class="sched-track General">General</span>
+</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..bd8c9251
--- /dev/null
+++ b/2025/info/reference-before.md
@@ -0,0 +1,25 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 21-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-reference>
+Etherpad: <https://pad.emacsconf.org/2025-reference>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<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.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/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://toobnix.org/videos/watch/7931ccad-ba6b-4706-a5f5-2069522ff6c8">View on Toobnix</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..12badcf3
--- /dev/null
+++ b/2025/info/reference-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/org-babel">Making Org-Babel reactive</a>
+Next by track: <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>
+</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..a43ba272
--- /dev/null
+++ b/2025/info/sat-close-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 10-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-sat-close>
+Etherpad: <https://pad.emacsconf.org/2025-sat-close>
+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/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..5c247a9a
--- /dev/null
+++ b/2025/info/sat-close-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/graphics">Modern Emacs/Elisp hardware/software accelerated graphics</a>
+Next by track: <a href="/2025/talks/sun-close">Sunday closing remarks</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2025/info/sat-open-after.md b/2025/info/sat-open-after.md
new file mode 100644
index 00000000..f4a0059b
--- /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..881391da
--- /dev/null
+++ b/2025/info/sat-open-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 5-min talk ; Q&A: Etherpad
+Etherpad: <https://pad.emacsconf.org/2025-sat-open>
+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://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><li><a href="https://toobnix.org/videos/watch/2566b510-ccfb-4272-b567-3b742636ef99">View on Toobnix</a></li><li><a href="https://youtu.be/0B9lsD8Z_6M">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/sat-open-nav.md b/2025/info/sat-open-nav.md
new file mode 100644
index 00000000..e7317183
--- /dev/null
+++ b/2025/info/sat-open-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Next by track: <a href="/2025/talks/org-babel">Making Org-Babel reactive</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2025/info/schemacs-after.md b/2025/info/schemacs-after.md
new file mode 100644
index 00000000..ace46a73
--- /dev/null
+++ b/2025/info/schemacs-after.md
@@ -0,0 +1,948 @@
+<!-- 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
+
+<div class="transcript transcript-qanda"><a name="schemacs-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I think that Kiczalez et al\.'s metaobject protocol has a scheme implementation, does this mean schemacs will be metaobject-changeable in practice?""" start="00:00:00.000" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[oops, forgot to start] [Corwin]: ... object protocol""" start="00:00:00.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""has a scheme implementation.""" start="00:00:01.092" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Does this mean schemacs will be""" start="00:00:03.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""meta object changeable in practice?""" start="00:00:07.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: So I don't actually need the meta object protocol so far.""" start="00:00:11.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""In the reference implementation for Guile,""" start="00:00:16.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Guile has its own object-oriented system called Goops.""" start="00:00:19.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'm sorry, I'm hearing a delay.""" start="00:00:27.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Anyway, I'm going to turn off my stream quick. There we go.""" start="00:00:29.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, um. Yes, uh, I, I don't I wasn't aware of the, um.""" start="00:00:32.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""the meta-object protocol that you have mentioned here,""" start="00:00:39.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but I will look into it.""" start="00:00:43.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I know that there isn't really a standard""" start="00:00:45.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""meta-object protocol for Scheme.""" start="00:00:48.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""That was an issue for me""" start="00:00:52.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""because I'm trying to make this cross-platform,""" start="00:00:53.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and so I've done all of my work so far""" start="00:00:56.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""without a meta-object protocol""" start="00:00:59.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""because that's the easiest way to make it work""" start="00:01:00.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""on multiple Scheme implementations.""" start="00:01:02.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But if there is a nice portable one""" start="00:01:04.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that works on many implementations, I would use that, yes.""" start="00:01:07.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's just that so far it hasn't been necessary.""" start="00:01:12.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I've been doing mostly functional reactive programming""" start="00:01:15.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and React.js-like framework.""" start="00:01:19.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I've created that for the GUI front end.""" start="00:01:21.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And that's all the more I've needed so far.""" start="00:01:23.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, yeah. Oh, yeah, please, next question. Sure.""" start="00:01:26.200" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How will the GUI display code be r7rs compliant afaik there is no dlopen in r7rs?""" start="00:01:33.400" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: So how will the GUI display code be R7RS compliant?""" start="00:01:33.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""As far as I know, there's no DL open in R7RS.""" start="00:01:39.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: That's right.""" start="00:01:44.487" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Yeah, R7RS small is extremely small""" start="00:01:45.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and does not have any features at all.""" start="00:01:48.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But it does provide a conv expand macro.""" start="00:01:50.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And this allows you to load in different code""" start="00:01:54.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""depending on which scheme implementation you're using.""" start="00:01:57.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So basically, I'll have to write a different back end""" start="00:02:00.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""for each scheme implementation.""" start="00:02:03.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I think that's really""" start="00:02:05.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""the only way is possible at all,""" start="00:02:06.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""because there's no standardization.""" start="00:02:10.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So essentially, the libraries""" start="00:02:12.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that I've written for schemacs""" start="00:02:14.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""will become kind of a platform-independent way""" start="00:02:15.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""of writing GUIs for Scheme.""" start="00:02:22.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's just a matter of,""" start="00:02:25.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""will your Scheme implementation""" start="00:02:27.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""support the Schemacs GUI protocol?""" start="00:02:28.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So I've kind of written my own protocol,""" start="00:02:32.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and it's entirely R7RS small compliant.""" start="00:02:34.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's all done with record,""" start="00:02:36.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""what are they called, record types.""" start="00:02:38.240" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think some of schemacs could be extracted into SRFIs since you have made it portable between scheme implementations?""" start="00:02:43.040" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: Do you think some of the Schemacs""" start="00:02:43.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""could be extracted into SFRIs since you've made it portable""" start="00:02:46.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""between scheme implementations?""" start="00:02:50.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Yes, I would definitely like to do that.""" start="00:02:52.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Probably first thing I'll do is start splitting up""" start="00:02:55.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and publishing independent libraries""" start="00:02:59.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""on the Akku package manager.""" start="00:03:01.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""This is a kind of a package manager ecosystem for Scheme,""" start="00:03:04.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and in particular R7RS Scheme.""" start="00:03:07.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And it's also mirrored on the other package manager,""" start="00:03:11.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Snowfort, just by the way.""" start="00:03:15.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But yeah, and then I might be also,""" start="00:03:18.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I've considered creating a SRFI for the lens library,""" start="00:03:21.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""which is based on the Haskell lens library.""" start="00:03:25.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I don't think that exists yet in Scheme,""" start="00:03:27.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""so I thought that might make a good SRFI.""" start="00:03:29.840" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there a recommended scheme implementation or does it try to be as portable as possible?""" start="00:03:34.320" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: Is there a recommended Scheme implementation?""" start="00:03:34.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Guile is the reference implementation.""" start="00:03:36.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's the only one that works with GUI,""" start="00:03:44.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but as I demonstrated in my presentation,""" start="00:03:47.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""the Emacs Lisp interpreter""" start="00:03:51.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""works on multiple schemes so far,""" start="00:03:52.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and I've had trouble with some of the scheme compilers.""" start="00:03:55.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But yeah, I would recommend Guile.""" start="00:04:00.040" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How would Schemacs deal with Emacs' (re)display architecture? Would it be having its own display architecture? If so, how can it be compatible with things like overlays, images, etc\.? From what I know, Emacs is extremely idiosyncratic here\.""" start="00:04:04.840" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: But how would schemacs deal with""" start="00:04:04.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Emacs's re-display architecture""" start="00:04:07.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""will be having its own display architecture?""" start="00:04:10.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And if so, how will you handle""" start="00:04:13.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""things like overlays and images?""" start="00:04:15.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Yeah, definitely. That's to be determined.""" start="00:04:18.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So basically, the scheme way of doing things""" start="00:04:25.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, I've created this React-like programming framework.""" start="00:04:31.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's like ReactJS or Vue.js.""" start="00:04:36.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""That is just the API of how you write GUI code in Scheme.""" start="00:04:41.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And each Scheme implementation""" start="00:04:45.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""will have its own GUI backend,""" start="00:04:49.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""which implements that Protocol.""" start="00:04:52.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And so when it comes time to link""" start="00:04:55.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""the Emacs Lisp built-in functions""" start="00:04:59.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that do these things like overlays and so on,""" start="00:05:03.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""we're going to have to come up with some way""" start="00:05:08.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""of modeling that""" start="00:05:11.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""using the scheme framework that I've designed.""" start="00:05:12.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I may have to make alterations""" start="00:05:15.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""specifically to support Emacs Lisp.""" start="00:05:17.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I don't know yet. I haven't got that far.""" start="00:05:22.040" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: You were saying that you'd like to get "most" of the one thousand three hundred and something Emacs packages done\. Is there a technical blocker to doing them all? Or just a problem of getting enough people in to help and start writing scheme?""" start="00:05:28.560" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: You were saying that you would like""" start="00:05:28.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""to get the most out of the 1300""" start="00:05:30.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and something Emacs packages that exist.""" start="00:05:33.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Are there technical blockers to doing them all""" start="00:05:36.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""or just a problem of getting enough people to jump into it?""" start="00:05:38.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Yeah, it's just a matter of implementing enough""" start="00:05:44.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""of the Emacs built-in functions.""" start="00:05:48.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Right now, there's kind of a big bug.""" start="00:05:50.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I mentioned this also in the presentation.""" start="00:05:57.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""The stacktrace that you saw during my presentation,""" start="00:05:59.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that is the biggest bug right now""" start="00:06:02.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that's preventing me from running most other code.""" start="00:06:05.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I don't think other people""" start="00:06:08.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""will be able to contribute to the code base""" start="00:06:10.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""until I get that bug fixed,""" start="00:06:13.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""because it doesn't capture closures correctly.""" start="00:06:14.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""it doesn't behave like Emacs Lisp does,""" start="00:06:18.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and that's the big problem.""" start="00:06:22.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So once I get that worked out,""" start="00:06:26.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""then it's just a matter of implementing enough""" start="00:06:31.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""of the EmacsLisp built-in functions,""" start="00:06:35.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""these are the functions that are mostly implemented in C,""" start="00:06:37.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""implementing those in Scheme.""" start="00:06:40.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And that, yeah, that's the thing""" start="00:06:42.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that I'm going to need a lot of help with""" start="00:06:45.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""because there's quite a few of those APIs.""" start="00:06:47.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But I imagine, I have no idea, no way of knowing,""" start="00:06:49.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but I imagine we don't need 100% of them""" start="00:06:53.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""in order to run most of ELPA.""" start="00:06:56.460" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""We probably can get some of the important large ELPA packages""" start="00:06:58.168" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""like Magit and Org mode with just enough of the Emacs Lisp""" start="00:07:05.085" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""built-in functions to handle that.""" start="00:07:12.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But we won't really know until we've tried.""" start="00:07:14.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So yeah, I'll try to get this bug fixed right away.""" start="00:07:19.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""That way we can all start working on it together, hopefully.""" start="00:07:22.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Corwin]: Highly relatable answer there.""" start="00:07:24.980" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""We'll burn that bridge when we're on it or something.""" start="00:07:27.127" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What are you thoughts on Chicken Scheme? Would it be a good fit?""" start="00:07:31.960" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: What are your thoughts on Chicken Scheme?""" start="00:07:31.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Will that be a good fit? Do you think?""" start="00:07:34.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: I think it will be, um, I, I did show""" start="00:07:37.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""trying to run chicken scheme in my, um, presentation""" start="00:07:41.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and, uh, I ran up against some kind of issue,""" start="00:07:44.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""which I really don't know how to debug.""" start="00:07:48.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Um, it's probably something to do with the, uh, pattern matcher.""" start="00:07:51.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Um, I'm using the pattern matcher,""" start="00:07:55.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""uh, written by Alex Shinn,""" start="00:07:58.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""which seems to be the most portable.""" start="00:08:00.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Pattern matcher, uh, for our seven RS scheme.""" start="00:08:02.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But not all scheme compilers implement, what is it called?""" start="00:08:05.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""The macro, I can't remember what it's called.""" start="00:08:13.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""There's the macro expansion system for R7RS small.""" start="00:08:19.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""All of these scheme implementations""" start="00:08:24.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""seem to have a slightly different take on how they work.""" start="00:08:27.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And so that macro expander has been, for pattern matching,""" start="00:08:29.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""has been the biggest difficulty""" start="00:08:33.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""in making this code portable.""" start="00:08:35.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And so I'm thinking of ways of maybe trying to ditch pattern matching,""" start="00:08:37.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but that's such a useful feature and it's hard.""" start="00:08:42.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So I don't know, we'll see if I can,""" start="00:08:45.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""if somebody can help me get it to work on chicken team,""" start="00:08:49.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'd really appreciate it.""" start="00:08:52.440" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Can this emacs lisp implementation be used by Guile's emacs lisp "mode"?""" start="00:08:56.600" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: Can this implementation be used by Guile's Emacs Lisp mode?""" start="00:08:56.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Guile's Emacs Lisp mode. Okay. Yeah, good question.""" start="00:09:01.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I did mention this last year in my presentation.""" start="00:09:08.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Emacs list in Guile is totally different""" start="00:09:10.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""from what I've done.""" start="00:09:13.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""That implementation was written about 10 or 15 years ago.""" start="00:09:16.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I can't remember exactly when. It is quite incomplete.""" start="00:09:21.293" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I don't think it even runs most of the macro expanding code.""" start="00:09:26.502" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Some of the code that is written""" start="00:09:36.543" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""for GNU Emacs in Emacs Lisp,""" start="00:09:39.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""where GNU Emacs is initializing itself,""" start="00:09:42.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""it can't even get the first file in that code.""" start="00:09:45.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It hasn't been touched in 10 or 15 years.""" start="00:09:51.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Initially, when I first started this project,""" start="00:09:53.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I was using the parser""" start="00:09:57.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""for Guile's Emacs Lisp implementation,""" start="00:09:59.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but it didn't give me things like source locations,""" start="00:10:02.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""so I had to rewrite that. And also, it wasn't portable.""" start="00:10:05.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So yeah, because I want it to be portable,""" start="00:10:10.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""it's necessarily going to be not reliant""" start="00:10:14.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""on anything that's inside of the Guile library,""" start="00:10:16.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""including the Emacs Lisp interpreter that's there.""" start="00:10:19.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Maybe I could replace the Emacs Lisp interpreter in Guile""" start="00:10:21.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""if Andy Wingo would be interested. All right.""" start="00:10:24.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I see we've got a few people""" start="00:10:29.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that did jump into the BBB.""" start="00:10:31.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'm just going to quickly, oops.""" start="00:10:34.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""quickly try to make my text a little bigger""" start="00:10:37.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""so I can read a question that came here.""" start="00:10:40.680" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I wonder if we could do some sort of programmatic analysis on popular Emacs packages to see what list of functions they tend to depend upon, follow function calls down to the lowest level""" start="00:10:42.800" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: I wonder if we can do some sort of pragmatic analysis""" start="00:10:42.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""on popular Emacs packages""" start="00:10:48.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""to see what list of functions they tend to depend on""" start="00:10:49.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""while a function calls down to the lower level.""" start="00:10:52.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Yeah, that would be good.""" start="00:10:54.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Somebody please do that for me.""" start="00:10:57.210" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Corwin]: Awesome. Somebody's raising their hand. Divya.""" start="00:10:59.383" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Divya]: Let's see. Yeah, can you hear me?""" start="00:11:05.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Corwin]: Yes, we can. Yeah, go ahead.""" start="00:11:08.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Divya]: Hello, thank you.""" start="00:11:11.735" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Yeah, this is really awesome.""" start="00:11:12.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I use Guile, and I love Guile,""" start="00:11:14.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and I also love functional programming,""" start="00:11:16.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""so this is really nice that you took""" start="00:11:18.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""the declarative approach.""" start="00:11:21.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""One thing that I'm interested in is,""" start="00:11:22.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""are you also considering Racket in the scheme group?""" start="00:11:26.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Because I know a lot of people do not consider Racket""" start="00:11:29.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""as a sort of scheme thing, because it grew out of it.""" start="00:11:32.960" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you think there is an opportunity to use Racket?""" start="00:11:36.640" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Divya]: Do you think you'll take something from Racket?""" start="00:11:36.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Because I think Racket has""" start="00:11:39.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""a lot of good ideas that can be used.""" start="00:11:40.425" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Yeah, I briefly looked at Racket's GUI library,""" start="00:11:42.091" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but it's very, very heavily dependent""" start="00:11:48.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""on Racket's macro expander,""" start="00:11:51.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""which is, well, yeah, the macro expander""" start="00:11:53.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is extremely complex for Racket,""" start="00:11:57.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and I don't think it's possible to port it to any other scheme,""" start="00:11:59.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""as far as I know. But Racket is based on Chez Scheme.""" start="00:12:02.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I am making an effort to port my code to Chez's Scheme.""" start="00:12:07.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I mentioned this earlier,""" start="00:12:14.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but there's the Gwen Weinholdt Akku system,""" start="00:12:18.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""which allows you to translate R7RS to R6RS.""" start="00:12:22.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And since Chez is an R6RS compiler,""" start="00:12:25.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I did at one point get the Emacs Lisp interpreter""" start="00:12:28.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""to compile for Chez,""" start="00:12:33.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""although I think there's been a change""" start="00:12:34.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""either to Akku or somewhere in my own code base.""" start="00:12:38.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It doesn't build anymore, and I'm not sure why.""" start="00:12:40.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But I would also very much like to run this on Chez.""" start="00:12:42.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I guess in that sense, we'll be able to work on Racket as well.""" start="00:12:47.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""There's also one other option.""" start="00:12:54.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Alexis King has written an R7RS language package for Racket.""" start="00:12:56.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I have not yet tried.""" start="00:13:03.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""running my package on R7RS for Racket.""" start="00:13:05.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But that would be something interesting.""" start="00:13:08.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Yes, I would like to try that.""" start="00:13:11.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Divya]: Yeah, it'll be interesting.""" start="00:13:12.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I do have some experience with Chez.""" start="00:13:13.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, uh, if I can find some time,""" start="00:13:15.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'll, I'll, I'll certainly like to,""" start="00:13:17.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: I would very much appreciate.""" start="00:13:20.007" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Yes. Yeah. Go ahead. Yeah.""" start="00:13:21.240" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Shouldn't it be enough to just implement the builtin functions? Most of the commands are written in Emacs Lisp, right?""" start="00:13:24.040" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Divya]: Another question I have is, like,""" start="00:13:24.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""what exactly is sort of, like, the, the approach is that""" start="00:13:26.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""you'll first want to do the interpreter""" start="00:13:29.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and then have enough Elisp functions,""" start="00:13:31.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text=""" getting the GNU Emacs Lisp functions""" start="00:13:33.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""interpreted or interpretable,""" start="00:13:36.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and then go for GUI, or do you want""" start="00:13:38.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""to sort of like go hand in hand""" start="00:13:41.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is like we have the interpreter working on""" start="00:13:42.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and we have also the GUI""" start="00:13:45.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and we sort of use one for the other?""" start="00:13:46.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Yeah, I consider the two tasks to be parallel.""" start="00:13:53.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So I'm actually doing the GUI separately.""" start="00:13:56.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""The reason why is because the GUI for Schemacs""" start="00:13:59.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is really just a clone of the look and feel of Emacs.""" start="00:14:05.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's not like an actual clone of the low-level C code""" start="00:14:10.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that puts everything on screen.""" start="00:14:14.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I'm actually not really that interested""" start="00:14:16.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""in the low-level details""" start="00:14:18.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""of how Emacs draws things on screen either.""" start="00:14:21.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I think it has a lot of historical baggage,""" start="00:14:23.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and I'm actually trying to move away from that.""" start="00:14:26.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So that was part of the reason why I started""" start="00:14:28.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""with this React.js or Vue.js-like Reactive GUI framework.""" start="00:14:31.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So that GUI part is completely separate.""" start="00:14:36.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I want to worry about the details""" start="00:14:39.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""of how we make the GUI look and feel""" start="00:14:42.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""similar in Schemacs, similar to GNU Emacs.""" start="00:14:46.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""In Schemacs, using the Emacs programming language,""" start="00:14:50.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I think that's something that we should worried about""" start="00:14:54.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""after we have enough of the Emacs Lisp implemented.""" start="00:14:59.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Divya]: Yeah, that makes sense.""" start="00:15:03.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""There are sort of, I'm a bit worried.""" start="00:15:04.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, I don't know if, so one of my presentations""" start="00:15:06.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is going to be tomorrow.""" start="00:15:10.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'm working on something called Emacs Viewer.""" start="00:15:11.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's a document viewer in Emacs.""" start="00:15:13.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And essentially one of the issues that I'm up against""" start="00:15:15.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is that Emacs's display system""" start="00:15:17.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is sort of very... let's say, not flexible.""" start="00:15:20.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""When trying to analyze where this inflexibility comes from,""" start="00:15:25.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I don't think it's just the display architecture.""" start="00:15:31.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I think parts of Elisp itself""" start="00:15:35.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""are connected to the display architecture.""" start="00:15:38.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""The notion of a cell in a buffer,""" start="00:15:43.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""itself is connected tightly to""" start="00:15:48.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""how the re-display architecture works.""" start="00:15:52.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So I think you'll have to sort of figure out""" start="00:15:54.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""what exactly you can salvage from Elisp""" start="00:15:57.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""without taking the display architecture baggage.""" start="00:16:00.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: That's right. I do anticipate""" start="00:16:05.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that's going to be fairly challenging.""" start="00:16:08.002" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's all Turing-complete,""" start="00:16:09.877" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""so I imagine we're probably going to end up""" start="00:16:14.585" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""creating something like an emulator""" start="00:16:17.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""for the Emacs Lisp display architecture in Scheme""" start="00:16:21.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that will somehow translate down""" start="00:16:24.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""to the React-like protocol that I've written.""" start="00:16:27.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But yeah, I don't... I haven't... That's nice.""" start="00:16:30.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Divya]: No, this is this is very exciting. Yeah.""" start="00:16:32.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Oh, yes, it is.""" start="00:16:35.257" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Yeah, I'm glad. A lot of people have told me""" start="00:16:36.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that they really are excited to see this project,""" start="00:16:39.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and this really helps me""" start="00:16:41.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""keep focused on this project,""" start="00:16:42.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""because a lot of people are very interested.""" start="00:16:46.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Corwin]: I'd like to move on""" start="00:16:48.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""to a couple of questions from the past.""" start="00:16:50.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""We're starting to build up a good backlog.""" start="00:16:52.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Thank you for that, Divya. Next question from the pad I have.""" start="00:16:54.480" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Tell us more about this show-stopping bug! How to squash it? Can people help?""" start="00:16:59.720" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: Can you tell us more about the show stopping bug?""" start="00:16:59.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""How to squash it? How can people help?""" start="00:17:02.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: OK, well, that one, unfortunately, I think,""" start="00:17:04.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""unless you're really a scheme genius""" start="00:17:08.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and you can really read my code""" start="00:17:11.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and immediately understand how it all works,""" start="00:17:13.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I don't think you'd be able to help.""" start="00:17:15.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It shouldn't be too difficult for me to fix.""" start="00:17:18.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So it has to do with how closures work.""" start="00:17:22.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And a closure is basically an object""" start="00:17:26.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that can be created with stuff that's on the stack.""" start="00:17:30.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And this is a feature, I think,""" start="00:17:33.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that was introduced with Emacs 27.""" start="00:17:37.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I can't remember exactly,""" start="00:17:39.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but it's actually a relatively recent feature.""" start="00:17:40.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It was ever since they introduced""" start="00:17:43.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""lexically scoped variable bindings in Emacs Lisp.""" start="00:17:45.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And so yeah, the problem is that""" start="00:17:51.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""when you create like a let structure""" start="00:17:54.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and you could declare a variable in the let.""" start="00:17:59.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And then you create inside of that a second let structure,""" start="00:18:01.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and you have a lambda inside of that.""" start="00:18:05.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And the lambda references or uses a variable""" start="00:18:07.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that was declared in the outer let binding.""" start="00:18:11.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""That outer let binding is somewhere on the stack.""" start="00:18:14.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And the lambda you can actually return it as a value.""" start="00:18:18.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So when you do return that lambda,""" start="00:18:23.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""it has to have a note somewhere inside""" start="00:18:25.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that says, by the way, I'm using that variable.""" start="00:18:27.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So you need to capture it and restore it to the stack""" start="00:18:31.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""whenever this lambda is applied, whenever you execute it.""" start="00:18:34.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And that is where the error is.""" start="00:18:38.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's not capturing the stack variable properly.""" start="00:18:40.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I think what I'm going to do,""" start="00:18:44.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I haven't looked into it in detail yet""" start="00:18:46.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""because I've gone back to GUI stuff recently,""" start="00:18:49.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but what I'm going to do, I think,""" start="00:18:53.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is just do a static analysis""" start="00:18:55.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""of the code inside of the Lambda""" start="00:18:57.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and see which symbols are being used,""" start="00:18:59.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and then just capture all of those""" start="00:19:02.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and place those into the record type""" start="00:19:05.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that stores the lambda.""" start="00:19:07.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""That's how I'm going to fix that, I think.""" start="00:19:09.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I hope anyway that's going to work.""" start="00:19:12.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""You never know with bugs.""" start="00:19:16.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""They're always a little bit tricky. Okay, next question.""" start="00:19:17.240" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Are there performance concerns with implementing certain C primitives in pure scheme?""" start="00:19:21.760" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: Are there performance concerns""" start="00:19:21.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""with implementing certain C primitives in pure Scheme?""" start="00:19:23.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: So who is it? The famous computer scientist that said""" start="00:19:28.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""premature optimization is the root of all evil.""" start="00:19:32.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I think it was the guy who invented the A\* algorithm.""" start="00:19:35.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""His name escapes me at the minute.""" start="00:19:39.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But yeah, I'm not concerned about performance yet,""" start="00:19:42.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""although most of the scheme compilers that I have seen,""" start="00:19:49.360" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""especially Chez and Gambit""" start="00:19:52.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""have extremely good performance characteristics.""" start="00:19:57.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And so I think there won't be""" start="00:20:02.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""too much difficulty with performance,""" start="00:20:03.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""even implementing some of the C stuff.""" start="00:20:05.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And besides, a lot of the GUI stuff""" start="00:20:08.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is already written in C anyway.""" start="00:20:10.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I mean, it would be cool""" start="00:20:12.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""if we had a scheme GUI library""" start="00:20:14.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that painted to a canvas,""" start="00:20:16.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""maybe for a Wayland implementation or something.""" start="00:20:18.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""But I don't know. It's not a concern for me, performance.""" start="00:20:21.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Corwin]: Okay, there are a few more questions. I do want to mention""" start="00:20:29.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that the stream has cut away at this point,""" start="00:20:32.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but we're still recording live.""" start="00:20:33.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""All of this will be put up on the website""" start="00:20:36.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and so on like that.""" start="00:20:38.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, I appreciate all the enthusiastic questions""" start="00:20:40.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and you're kind of tanking through them all.""" start="00:20:44.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Me too. I love how many questions I'm getting.""" start="00:20:47.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""This is very encouraging""" start="00:20:52.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and it really makes me want to keep on working on it.""" start="00:20:54.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So it's great.""" start="00:20:56.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'm so glad to hear that because that's exactly the message""" start="00:20:56.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I think you should be receiving.""" start="00:21:00.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""This is a fantastic project. Thank you so much.""" start="00:21:01.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'll just say so myself.""" start="00:21:04.160" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: If this project is successful, are you worried about a possible split in the community between Schemacs and GNU Emacs users?""" start="00:21:07.052" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: If the project is successful,""" start="00:21:07.052" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""are you worried about a possible split in the community""" start="00:21:08.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""between Schemacs and GNU Emacs?""" start="00:21:11.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Oh, I have thought about that.""" start="00:21:15.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I really don't know what's going to happen.""" start="00:21:18.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""There seems to be already a huge demand""" start="00:21:24.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""for a scheme-based, a modern scheme-based editor.""" start="00:21:26.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""You know, the Edwin scheme for MIT scheme""" start="00:21:30.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""hasn't been touched since like 1987 or something,""" start="00:21:33.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""maybe 1993 or, but anyway.""" start="00:21:37.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""There seems to be huge demand.""" start="00:21:41.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And so I guess a lot of people""" start="00:21:43.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""who are currently using GNU Emacs""" start="00:21:45.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""will probably just switch over""" start="00:21:47.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""because they've been wanting""" start="00:21:49.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""something like this for a very long time.""" start="00:21:50.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And then, I mean, is that going to cause fragmentation?""" start="00:21:53.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Is it really a big deal, though?""" start="00:21:56.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I mean, it's all GPL-licensed code.""" start="00:21:58.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I mean, I think a rising tide raises all the ships at the same time.""" start="00:22:02.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, yeah, also, the last thing I want to say about that""" start="00:22:08.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is I would like to contribute some of what I do in Schemacs""" start="00:22:13.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""back into GNU Emacs, if I can. So, for example, I'm going""" start="00:22:19.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""to be working on like a canvas library""" start="00:22:24.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""where you can have interactive canvases""" start="00:22:25.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and you know you can actually like draw pictures""" start="00:22:27.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and put things with the mouse and drag things around.""" start="00:22:30.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I was thinking you know""" start="00:22:33.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""if if I can figure out how that works""" start="00:22:36.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""maybe I can write something like that for Emacs""" start="00:22:37.668" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""or GNU Emacs using the Cairo library, you know,""" start="00:22:41.918" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""SVG rendering library that they have.""" start="00:22:47.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, you know, if I have time,""" start="00:22:49.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I would like to continue contributing to GNU Emacs as well.""" start="00:22:51.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'm sorry, what was the name of the library you mentioned?""" start="00:22:55.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Oh, Cairo, like Cairo.""" start="00:22:57.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Oh, Cairo, yeah. Absolutely. I spelled that poorly.""" start="00:23:01.040" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: The dream of never even needing to change to the web browser - would schemacs bring us closer to that?""" start="00:23:07.600" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: The dream of never needing to change to the web browser.""" start="00:23:07.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Would schemacs bring us closer to that?""" start="00:23:12.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: I hope so.""" start="00:23:17.819" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""That's also a dream of mine.""" start="00:23:18.377" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""The part of the reason why I wanted to work, you know,""" start="00:23:21.710" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""make sure I had a really good workable GUI framework""" start="00:23:26.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""is so that I could, you know,""" start="00:23:31.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""we could write apps like, you know,""" start="00:23:32.627" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""they have a Mastodon client written in Emacs Lisp.""" start="00:23:34.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that would be so nice to have this, you know,""" start="00:23:38.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""a really nice Mastodon client""" start="00:23:42.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that was right inside of, you know, our scheme environment""" start="00:23:43.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""where we were doing our text editing and other stuff.""" start="00:23:47.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I've always wanted something like that,""" start="00:23:50.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""or it would be cool to have""" start="00:23:52.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""just a slightly nicer GUI for Magit.""" start="00:23:53.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, yeah, I mean, like, yeah, being able to avoid the web entirely""" start="00:23:56.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and just be able to like, you know, do social networking""" start="00:24:04.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and do your GitHub stuff,""" start="00:24:08.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""everything from within Emacs or Schemacs in this case,""" start="00:24:11.440" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that's a dream of mine as well.""" start="00:24:14.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And so I hope that that's where we end up in a couple of years.""" start="00:24:16.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""The sooner the better. Anything, just double checking.""" start="00:24:20.080" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Anything specific other than minimalism that made you choose Scheme over Common Lisp?""" start="00:24:30.000" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""Anything specific other than minimalism""" start="00:24:30.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that made you choose Scheme over Common Lisp?""" start="00:24:33.320" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Oh, yeah, it's kind of a philosophical question.""" start="00:24:35.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So a couple of things. First of all, it was a conversation""" start="00:24:40.200" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I had with William Byrd,""" start="00:24:45.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and he's a guy who makes the miniKanren framework for Scheme.""" start="00:24:47.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It was his PhD thesis.""" start="00:24:50.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""He worked with, I'm sorry, I just can't remember his name.""" start="00:24:52.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""He worked at the University of Indiana.""" start="00:24:57.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Another famous Scheme or Lisp person was there.""" start="00:24:59.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Friedman, Dan Friedman was his advisor.""" start="00:25:03.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Yeah, big name in Lisp.""" start="00:25:06.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Anyway, so I was talking with William Byrd,""" start="00:25:09.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and I'm a huge Haskell fan,""" start="00:25:12.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and he told me why he didn't like Haskell at all,""" start="00:25:14.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and kind of convinced me to try Scheme out.""" start="00:25:16.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And what I really like about Scheme is,""" start="00:25:19.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""yeah, like you said, the minimalism,""" start="00:25:22.760" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but it's more that it is very close""" start="00:25:25.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""to the mathematical framework of lambda calculus.""" start="00:25:29.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""Haskell is probably the most pure""" start="00:25:34.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""lambda calculus that I've ever used,""" start="00:25:38.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but Scheme is like the simply typed lambda calculus,""" start="00:25:39.920" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and That just appeals to me.""" start="00:25:45.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I think, you know, if you have this tiny, tiny core language""" start="00:25:47.800" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""from which all of the computing can be defined,""" start="00:25:50.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I think it's kind of a shame""" start="00:25:55.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""that so far we just haven't explored that space yet.""" start="00:25:57.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I mean, there's compared to JavaScript or Python,""" start="00:26:00.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""there's very little scheme code out there""" start="00:26:03.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and it could be doing so much. And I would just like to try""" start="00:26:05.880" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and expand the scheme ecosystem""" start="00:26:08.240" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and see just what this tiny little language can do.""" start="00:26:10.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And I think we haven't even seen""" start="00:26:13.000" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""a fraction of what it can do.""" start="00:26:14.480" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""That's why I've chosen scheme.""" start="00:26:16.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Corwin]: Divya, I see you've got a bunch more comments.""" start="00:26:22.400" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I think we're just about close to our time here,""" start="00:26:24.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""but if you wanted to jump back in,""" start="00:26:26.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'm sorry, I had to cut you off a little before.""" start="00:26:28.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Divya]: No, it's fine. No, it's fine.""" start="00:26:30.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I think I agree with most of what he said.""" start="00:26:33.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, yeah, thank you so much.""" start="00:26:36.600" video="qanda-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Closing thoughts""" start="00:26:40.680" video="qanda-schemacs" id="subtitle"]]</div>[[!template text="""[Corwin]: Um, closing thoughts, Ramin.""" start="00:26:40.680" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Yeah, I guess everybody, please, if you're interested,""" start="00:26:45.160" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""keep watching my Mastodon and keep watching my Codeberg.""" start="00:26:51.640" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'm going to try and squash this bug as quickly as I can.""" start="00:26:56.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I hope early next year,""" start="00:27:01.560" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""hopefully not much later than February,""" start="00:27:03.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""I'll actually be able to start taking in contributions""" start="00:27:07.520" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""for some of the Emacs Lisp built-ins in the code base.""" start="00:27:12.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""So, please keep watching. The pace of my development""" start="00:27:16.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""has increased pretty rapidly recently,""" start="00:27:21.960" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and I think we're pretty close""" start="00:27:24.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""to getting something that we can all use together.""" start="00:27:25.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Corwin]: Thank you once again for your amazing talk,""" start="00:27:29.120" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""for your exceptional work,""" start="00:27:31.720" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and for jumping in, doing the live Q&A,""" start="00:27:34.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""rolling with us here as we have yet another""" start="00:27:36.600" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""&quot;we'll see how it goes&quot; conference.""" start="00:27:40.040" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""It's been just amazing so far,""" start="00:27:42.080" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""and this talk is no small part of that. Thank you.""" start="00:27:44.280" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""[Ramin]: Oh, thank you so much. Yeah. OK, cool.""" start="00:27:46.840" video="qanda-schemacs" id="subtitle"]]
+[[!template text="""And thanks for all the questions, everyone.""" start="00:27:50.280" video="qanda-schemacs" 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%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..b6128e46
--- /dev/null
+++ b/2025/info/schemacs-before.md
@@ -0,0 +1,49 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 24-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-schemacs>
+Etherpad: <https://pad.emacsconf.org/2025-schemacs>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<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/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://toobnix.org/videos/watch/947cf96d-8bdc-46fa-9df2-26b57b972c69">View on Toobnix</a></li><li><a href="https://youtu.be/KmMeLfYn1xY">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-schemacs"><source src="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--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-schemacs" data="""
+00:00.000 Q: I think that Kiczalez et al.'s metaobject protocol has a scheme implementation, does this mean schemacs will be metaobject-changeable in practice?
+01:33.400 Q: How will the GUI display code be r7rs compliant afaik there is no dlopen in r7rs?
+02:43.040 Q: Do you think some of schemacs could be extracted into SRFIs since you have made it portable between scheme implementations?
+03:34.320 Q: Is there a recommended scheme implementation or does it try to be as portable as possible?
+04:04.840 Q: How would Schemacs deal with Emacs' (re)display architecture? Would it be having its own display architecture? If so, how can it be compatible with things like overlays, images, etc.? From what I know, Emacs is extremely idiosyncratic here.
+05:28.560 Q: You were saying that you'd like to get "most" of the one thousand three hundred and something Emacs packages done. Is there a technical blocker to doing them all? Or just a problem of getting enough people in to help and start writing scheme?
+07:31.960 Q: What are you thoughts on Chicken Scheme? Would it be a good fit?
+08:56.600 Q: Can this emacs lisp implementation be used by Guile's emacs lisp "mode"?
+10:42.800 Q: I wonder if we could do some sort of programmatic analysis on popular Emacs packages to see what list of functions they tend to depend upon, follow function calls down to the lowest level
+11:36.640 Q: Do you think there is an opportunity to use Racket?
+13:24.040 Q: Shouldn't it be enough to just implement the builtin functions? Most of the commands are written in Emacs Lisp, right?
+16:59.720 Q: Tell us more about this show-stopping bug! How to squash it? Can people help?
+19:21.760 Q: Are there performance concerns with implementing certain C primitives in pure scheme?
+21:07.052 Q: If this project is successful, are you worried about a possible split in the community between Schemacs and GNU Emacs users?
+23:07.600 Q: The dream of never even needing to change to the web browser - would schemacs bring us closer to that?
+24:30.000 Q: Anything specific other than minimalism that made you choose Scheme over Common Lisp?
+26:40.680 Closing thoughts
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-schemacs-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.opus"></audio></div><div></div>Duration: 27:51 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/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.m4v">Download --answers.m4v (101MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.opus">Download --answers.opus (24MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.webm">Download --answers.webm (102MB)</a></li><li><a href="https://toobnix.org/videos/watch/d0116995-f3eb-4994-b7db-b40cd8dab78c">View on Toobnix</a></li><li><a href="https://youtu.be/wPCACp4LR58">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..e867d2ef
--- /dev/null
+++ b/2025/info/schemacs-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/bookclub-tapas">Bookclub tapas</a>
+Next by track: <a href="/2025/talks/juicemacs">Juicemacs: exploring speculative JIT compilation for ELisp in Java</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2025/info/sun-close-after.md b/2025/info/sun-close-after.md
new file mode 100644
index 00000000..e84ce984
--- /dev/null
+++ b/2025/info/sun-close-after.md
@@ -0,0 +1,235 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="sun-close-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+[[!template text="""screen. That screen. Yes. All right. Thank you so much.""" start="00:00:00.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""We have made it thus far. It is the end of EmacsConf 2025.""" start="00:00:17.280" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Oh, I better remember to open this""" start="00:00:22.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""in case anyone wants to join me in this room.""" start="00:00:24.360" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Hang on a sec. And normally all this stuff""" start="00:00:49.460" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""gets done automatically by my scripts,""" start="00:00:51.140" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so I'm doing it manually. Ah, there you go.""" start="00:00:52.960" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Okay, now people can join. Hooray, we made it!""" start="00:00:55.251" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Today was great, and yesterday was great too,""" start="00:00:58.126" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""with so many fascinating talks and conversations.""" start="00:01:01.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I'm really, really glad that it all worked out,""" start="00:01:06.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""despite some running around""" start="00:01:09.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and figuring things out on the fly,""" start="00:01:12.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""we all managed to get there.""" start="00:01:14.680" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I actually have some of the live""" start="00:01:18.560" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""talks recordings up already""" start="00:01:20.640" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""on media.emacsconf.org and YouTube, assuming things work.""" start="00:01:22.960" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I'm just going to republish it from Emacs naturally.""" start="00:01:28.400" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""As you can see, I was e-debugging things""" start="00:01:33.320" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""to the very last minute.""" start="00:01:36.360" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Yeah, feel free to spread the word.""" start="00:01:37.480" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I check the Emacs hashtag every week""" start="00:01:39.800" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""as part of the Emacs news process anyway.""" start="00:01:42.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So if you have any favorite talks,""" start="00:01:45.840" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""that's a great way to share the ideas with more people,""" start="00:01:47.840" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and then even more conversations can happen.""" start="00:01:52.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""The prerecorded talks, as I mentioned,""" start="00:01:54.560" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""are already up on the wiki""" start="00:01:58.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and at the media emacsconf.org slash 2027 website.""" start="00:02:00.240" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Sorry, 2025. We're not in the time machine. 2025 site.""" start="00:02:05.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And they should already be on YouTube as well.""" start="00:02:10.960" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I will upload the late submissions""" start="00:02:13.800" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and the live talks and the Q&A sessions""" start="00:02:16.400" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""over the next week or two.""" start="00:02:19.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I usually get that done very quickly.""" start="00:02:20.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I didn't even finish this sentence.""" start="00:02:23.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I'll post an update to the Emacs Conf Discuss mailing list,""" start="00:02:27.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so feel free to subscribe to that if you'd like an update.""" start="00:02:31.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""If you've got ideas for making things better,""" start="00:02:34.480" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""then feel free to drop them into the Etherpad""" start="00:02:37.560" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so that we can make next year's conference even smoother.""" start="00:02:40.960" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I had a lot of people watching, so thank you for that.""" start="00:02:45.760" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And of course, thanks to all the speakers""" start="00:02:51.120" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""who put hours and hours into their presentations,""" start="00:02:53.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""the volunteers who helped both before and during the conference""" start="00:02:56.360" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and who will help in the days ahead""" start="00:03:01.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""as we get everything extracted and packaged and transcribed even,""" start="00:03:03.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and a nice chapter indices on the Q&A""" start="00:03:08.920" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so you can jump to when a specific question was answered,""" start="00:03:11.240" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""all that good stuff.""" start="00:03:14.400" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and to all those other people in their lives""" start="00:03:16.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""whose patience and support make all of this possible.""" start="00:03:19.800" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So thank you so much for that.""" start="00:03:23.480" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""This year's host, you saw Corwin and you saw,""" start="00:03:26.920" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I mean, what's, why am I,""" start="00:03:30.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""wait, I'm like buzzing all over the place""" start="00:03:32.320" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""as people are mentioning my nick on IRC.""" start="00:03:34.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""All right, now that I'm in do not disturb mode.""" start="00:03:37.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So thank you to the hosts""" start="00:03:40.320" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and thank you to other volunteers,""" start="00:03:42.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""JC and Trico and James and Amitav and Rodion and Jaybird and Indra.""" start="00:03:43.840" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and Yang3, and Bhavin, and Michael, and Ian,""" start="00:03:49.920" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and Jamie, and Ihor, and FlowyCoder,""" start="00:03:55.120" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and probably other people""" start="00:03:57.880" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""that I have forgotten to copy out of my conference.org file""" start="00:03:58.840" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and into this, but thank you anyway.""" start="00:04:02.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Thank you to the Free Software Foundation.""" start="00:04:05.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""They host the mailing list, they host the media server,""" start="00:04:08.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and of course, they've got like Emacs, so that's awesome.""" start="00:04:12.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""To make things easier, our streams are actually not on my computer.""" start="00:04:16.360" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""We use OBS and a server,""" start="00:04:23.480" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""a fairly beefy one that Ry P shares with us.""" start="00:04:26.280" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So then I can VNC into it and control OBS""" start="00:04:30.280" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and stream to IceCast and all that other goodness.""" start="00:04:33.280" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And I don't have to worry about my computer stressing out.""" start="00:04:36.240" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""It's all good. And so we use a whole lot of free""" start="00:04:39.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and open source software in the stack.""" start="00:04:43.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So we are very, very grateful""" start="00:04:45.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""for all the users and contributors""" start="00:04:47.120" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""who make all of that possible.""" start="00:04:49.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Things like Emacs and Org Mode and ERC and Tramp and Magit""" start="00:04:50.760" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and BigBlueButton and Etherpad and IckyWicky and IceCast""" start="00:04:55.920" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and OBS and TheLaunch and LiberaChat and FFmpeg""" start="00:04:59.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and OpenAI Whisper, WhisperX, different interface.""" start="00:05:02.320" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""The Aeneas forced alignment tool, site transfer for uploads,""" start="00:05:05.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""subed for editing the subtitles,""" start="00:05:09.640" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""sub-seg for cutting the subtitles into nice chunks""" start="00:05:11.680" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so that you're not like trying to read a whole lot in one line,""" start="00:05:14.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Mozilla Firefox, MPV and TamperMonkey""" start="00:05:17.400" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so that everything gets automatically logged in""" start="00:05:22.760" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""when the stream switches to like a big blue button room, it's handy.""" start="00:05:25.920" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and of course, many other tools and services""" start="00:05:30.480" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""that we use to prepare and host this year's conference.""" start="00:05:33.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Thanks to Shoshin for the music.""" start="00:05:35.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""He's an Emacs geek as well.""" start="00:05:37.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""If you also have music that you'd like to share with us""" start="00:05:39.480" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""under the Creative Commons Attribution License,""" start="00:05:42.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""please feel free to let me know""" start="00:05:45.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""or I should put in my email address here.""" start="00:05:47.240" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Yeah, sacha@sachachua.com.""" start="00:05:50.680" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So let us know in case you have music""" start="00:05:57.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""or other things you want to share.""" start="00:05:59.560" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Thanks to the people who donated""" start="00:06:01.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""via the FSF working together program.""" start="00:06:03.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""It costs like I think less than a hundred dollars""" start="00:06:06.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""to run this whole thing""" start="00:06:09.920" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""that the biggest thing really is people's time.""" start="00:06:11.320" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And thank you so much for sharing that with us.""" start="00:06:14.880" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So yes, but thank you specifically to Scott and Jonathan""" start="00:06:17.120" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and the other anonymous donors""" start="00:06:20.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""through the Working Together program.""" start="00:06:23.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And that's where we are so far. Feel free to join me.""" start="00:06:26.480" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I can be here until the kiddo says""" start="00:06:30.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I have not given her enough hugs for today.""" start="00:06:32.320" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""But if you want to like do a quick recap of your favorite talks""" start="00:06:34.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""or how you're excited to take things going forward""" start="00:06:40.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and all that stuff.""" start="00:06:43.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""You can join me in this as Sunday closing.""" start="00:06:45.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""If you look at the talk page,""" start="00:06:47.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""there's going to be theoretically""" start="00:06:49.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""a big blue button link there that you can join.""" start="00:06:52.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""But thank you for this. And now it's like awkward silence.""" start="00:06:55.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I'm wondering what you learned most""" start="00:07:04.840" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""from this conference this year.""" start="00:07:07.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Because I'm running around so much,""" start="00:07:09.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I don't get a lot of the live stuff.""" start="00:07:11.680" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Like, for example, when I was listening to your Q&A,""" start="00:07:23.840" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I had it in one ear and I had Christian's dental casting Q&A in the other ear,""" start="00:07:30.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so that just in case he had questions also.""" start="00:07:34.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""which kind of just meant I was listening for silences""" start="00:07:36.880" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and that meant I had to read the next question out loud.""" start="00:07:39.560" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""But I love going through the videos and captioning them.""" start="00:07:43.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And I'm really excited about the kinds of conversations""" start="00:07:46.880" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""that people have been having on the etherpacks and IRC.""" start="00:07:50.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So I think the biggest thing that I'm learning""" start="00:07:53.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""is that people are having a lot of fun with Emacs.""" start="00:07:57.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Which is no surprise, of course.""" start="00:08:01.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""But it's always so exciting to see people bump into other people""" start="00:08:05.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""whose minds work the same way.""" start="00:08:09.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And then who knows where that will go over the next year, over the next years.""" start="00:08:11.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""That's sort of an interesting topic,""" start="00:08:17.640" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""is like how to keep the conversations""" start="00:08:22.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""going between the conferences, you know?""" start="00:08:24.280" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""is where do people hang out and discuss these things?""" start="00:08:27.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Reddit's one place. IRC. I figure it's... Sorry, go ahead. I'm done.""" start="00:08:33.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I think it's rather...""" start="00:08:49.360" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I like to think of it as the start of the conversation.""" start="00:08:54.880" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And so we have around 100 people,""" start="00:08:59.680" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""more than 100, around 200 people yesterday,""" start="00:09:08.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""around 100 today joining us.""" start="00:09:12.640" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And those are a lot of conversations,""" start="00:09:15.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""but then they're the conversations that happen""" start="00:09:17.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""when people look up the videos and the captions""" start="00:09:18.640" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and the resources that people have shared.""" start="00:09:22.400" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And so I think it gives us a lot of material,""" start="00:09:25.400" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""a lot of exciting points""" start="00:09:30.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""for plenty of other conversations this year.""" start="00:09:31.680" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Yeah, it's a great community. Oh, yes, I should mention,""" start="00:09:34.360" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""the conversation doesn't stop here""" start="00:09:41.120" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""because there are mailing lists.""" start="00:09:42.800" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Thank you, Rudy, for the reminder.""" start="00:09:44.400" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""If you're looking for more of this kind of sense of community,""" start="00:09:46.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""there's like, well, Emacs Develop course has a lot of technical discussions going on,""" start="00:09:50.760" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""but the Org Mode mailing list is very nice.""" start="00:09:56.880" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""There are also lots of meetups.""" start="00:10:00.560" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""There's definitely a meetup every month.""" start="00:10:02.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Org Meetup, in fact, is happening in a couple of days.""" start="00:10:05.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""If you look on the Emacs wiki for user groups,""" start="00:10:10.640" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""or you check my Emacs news,""" start="00:10:13.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""or you check, if you look for like Emacs calendar,""" start="00:10:14.720" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""which I think I put on like emacslife.com slash calendar,""" start="00:10:16.960" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""then you'll find upcoming meetups.""" start="00:10:20.680" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so that you can keep reconnecting with people.""" start="00:10:22.640" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""And if you come up with something cool,""" start="00:10:27.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""you don't have to wait until the next Emacs Con""" start="00:10:29.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""to show it to everybody.""" start="00:10:33.760" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""You can also go to these meetups and start sharing it""" start="00:10:35.280" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and get feedback and make it even better and so on.""" start="00:10:43.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Great, thank you. Rudy says, the Emacs bugs mailing list""" start="00:10:53.320" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""is surprisingly interesting as well.""" start="00:10:56.400" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Lots of discussion on there, various details""" start="00:10:58.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and upcoming little features every single day.""" start="00:11:01.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Oh yes, Maddie would like another shout out for Emacs Carnival""" start="00:11:04.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""which is a monthly blogging people share topics""" start="00:11:38.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so that people can all write about the same thing""" start="00:11:41.320" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and then discover other people's perspectives on it.""" start="00:11:47.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""There have been quite a few now.""" start="00:11:52.440" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So if you want, you can go through the Emacs Carnival page""" start="00:11:54.840" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""in the Emacs wiki and start exploring the past issues.""" start="00:11:57.760" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""The host will have a list of links""" start="00:12:01.240" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""to the people who've submitted. So it's a great way to see""" start="00:12:04.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""what other people in the community""" start="00:12:07.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""have been thinking about something.""" start="00:12:09.920" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Also, people are very curious about the fonts and templates""" start="00:12:11.360" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""that people use for their presentations.""" start="00:12:18.280" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""It's always, that's one of the things""" start="00:12:20.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""I love about presentations.""" start="00:12:22.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""You kind of get this, you pick up so much more""" start="00:12:23.960" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""when you're looking over someone's shoulder,""" start="00:12:26.360" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""the things that they would forget to even mention""" start="00:12:28.600" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""because it's not the point of their talk""" start="00:12:32.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""or they take it for granted.""" start="00:12:34.200" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So, yes. if the presenters can share their fonts""" start="00:12:36.840" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and setups and themes and stuff like that.""" start="00:12:40.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Or if you as a viewer have been watching something""" start="00:12:44.480" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and you see someone do this really cool keyword shortcut""" start="00:12:47.280" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and you have no idea how they did that,""" start="00:12:50.640" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""because of course, you know, it just flies by too quickly""" start="00:12:53.280" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""and it's part of their muscle memory,""" start="00:12:56.120" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""so they don't even explain it anymore.""" start="00:12:57.640" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Go ahead and ask the speakers, hey,""" start="00:12:59.240" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""that command that you did, that just did the magic, how?""" start="00:13:01.800" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So yes, please feel free to go back over the videos,""" start="00:13:05.800" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""look at them slowly,""" start="00:13:11.760" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""look for interesting things you want to learn more about.""" start="00:13:12.680" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""All right, it sounds like we are""" start="00:13:45.080" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""pretty much ready to wrap up.""" start="00:13:49.160" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""So thank you, everyone, for coming.""" start="00:13:53.240" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""See you next year and also in the months in between""" start="00:13:59.000" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""because there are meetups,""" start="00:14:01.520" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""which you're going to go check out and have fun at.""" start="00:14:02.480" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Thank you for this.""" start="00:14:04.040" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Yes, thank you for this nice Emacs weekend.""" start="00:14:05.880" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""Thanks for putting it all together, Sacha and everyone.""" start="00:14:07.920" video="mainVideo-sun-close" id="subtitle"]]
+[[!template text="""That's great. Bye!""" start="00:14:14.320" video="mainVideo-sun-close" 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%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..3e9d48e8
--- /dev/null
+++ b/2025/info/sun-close-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 16-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-sun-close>
+Etherpad: <https://pad.emacsconf.org/2025-sun-close>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sun-close"><source src="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--reencoded.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-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: 15:33 minutes<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/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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--main.m4v">Download --main.m4v (53MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (43MB)</a></li><li><a href="">View on Toobnix</a></li><li><a href="https://youtu.be/NsQLN-A5gTo">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/sun-close-nav.md b/2025/info/sun-close-nav.md
new file mode 100644
index 00000000..718dbf69
--- /dev/null
+++ b/2025/info/sun-close-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/sat-close">Saturday closing remarks / open session</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2025/info/sun-open-after.md b/2025/info/sun-open-after.md
new file mode 100644
index 00000000..7f33ecd0
--- /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..27811c68
--- /dev/null
+++ b/2025/info/sun-open-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 5-min talk ; Q&A: Etherpad
+Etherpad: <https://pad.emacsconf.org/2025-sun-open>
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<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://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><li><a href="">View on Toobnix</a></li><li><a href="https://youtu.be/0B9lsD8Z_6M">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/sun-open-nav.md b/2025/info/sun-open-nav.md
new file mode 100644
index 00000000..2f6390d4
--- /dev/null
+++ b/2025/info/sun-open-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/open-mic">Open session</a>
+Next by track: <a href="/2025/talks/modern">Some problems of modernizing Emacs</a>
+Track: <span class="sched-track General">General</span>
+</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..abd94e9b
--- /dev/null
+++ b/2025/info/swanky-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!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>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<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://toobnix.org/videos/watch/690f57fb-8cb9-4c9d-ae24-8b0cbf5a4cb7">View on Toobnix</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..4d44523b
--- /dev/null
+++ b/2025/info/swanky-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/juicemacs">Juicemacs: exploring speculative JIT compilation for ELisp in Java</a>
+Next by track: <a href="/2025/talks/python">Interactive Python programming in Emacs</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2025/info/weights-after.md b/2025/info/weights-after.md
new file mode 100644
index 00000000..7863c63f
--- /dev/null
+++ b/2025/info/weights-after.md
@@ -0,0 +1,592 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="weights-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""And you're ready to go. All right, perfect.""" start="00:00:00.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Hello, my name is Zachary Romero""" start="00:00:05.820" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and today I'll be giving a talk""" start="00:00:07.876" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""on how I'm using Emacs for Android""" start="00:00:08.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to replace my fitness app I normally use.""" start="00:00:12.720" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Current state of mobile ecosystem""" start="00:00:15.400" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""So it goes without saying""" start="00:00:15.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that a lot of the mobile ecosystem these days""" start="00:00:17.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""are pretty hostile to the interest of its users.""" start="00:00:21.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So there's privacy policies""" start="00:00:25.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that are constantly collecting your data and selling it.""" start="00:00:27.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""without your consent, bombardment of ads.""" start="00:00:29.633" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then there's a lot of features that are locked.""" start="00:00:33.841" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Sometimes features that the app gives you,""" start="00:00:38.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""they're put behind paywalls.""" start="00:00:40.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so a lot of the ecosystem""" start="00:00:42.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""isn't in the best interest of users.""" start="00:00:45.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And obviously there are apps like on F-Droid""" start="00:00:49.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and the Android ecosystem that do try to address this,""" start="00:00:51.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but the solutions overall are lagging""" start="00:00:56.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""behind maybe desktop computers.""" start="00:00:59.160" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Emacs replaceability""" start="00:01:05.440" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""One option that has come in the past few years""" start="00:01:05.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""is Emacs on Android. It's just a normal Emacs build,""" start="00:01:14.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and so it can do everything, in theory, that Emacs can do.""" start="00:01:17.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so I got to thinking how could I, how I could use Emacs""" start="00:01:21.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to replace some of the proprietary apps""" start="00:01:24.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that I use on a daily basis?""" start="00:01:27.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So I just went thinking about the apps,""" start="00:01:28.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""the apps that Emacs can replace.""" start="00:01:31.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Some of them seem quite easy.""" start="00:01:33.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Some of them... maybe might take a little effort but seem doable.""" start="00:01:35.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then obviously, there's a whole class of apps""" start="00:01:39.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that would be pretty impossible to emulate on Emacs.""" start="00:01:41.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So I mean besides like to-do lists, note taking, Org mode,""" start="00:01:47.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""one thing that came to mind was my fitness tracking app.""" start="00:01:52.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""This is an app I use pretty often""" start="00:01:55.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and in theory, Emacs should be quite usable for this case.""" start="00:01:59.240" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Weightlifting tracking""" start="00:02:06.720" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""So weightlifting tracking is,""" start="00:02:06.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""so it's normally used to record""" start="00:02:09.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""what exercises you do at what intensity""" start="00:02:13.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""in order to progress week by week.""" start="00:02:17.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So you might plan on like slowly increasing""" start="00:02:20.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""the amount of effort you put into""" start="00:02:25.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""your various workouts from week to week,""" start="00:02:27.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then maybe you'll have put some rest weeks in there.""" start="00:02:30.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so you want a detailed plan""" start="00:02:34.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and recording of what you do throughout the week.""" start="00:02:37.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so I guess way back, normally""" start="00:02:40.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""this would have been done on pen and paper.""" start="00:02:43.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So you would take your notebook""" start="00:02:45.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and just write down on paper what you did.""" start="00:02:48.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And this obviously works, and a lot of people do do this.""" start="00:02:51.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""But these days, there are quite a few apps""" start="00:02:56.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that make this process quite seamless and effortless.""" start="00:02:59.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So just as an example, really fast.""" start="00:03:02.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So this is one of the popular apps out these days""" start="00:03:06.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that has such a feature.""" start="00:03:09.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So you can save all your workout routines""" start="00:03:10.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and this nice interface.""" start="00:03:13.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so you click a button and then it starts,""" start="00:03:14.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you have the workout interface and then""" start="00:03:18.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""You can kind of, you go through your workout""" start="00:03:20.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then you can input,""" start="00:03:23.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you can input like what things you do.""" start="00:03:25.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then it has this like fancy timer at the bottom.""" start="00:03:27.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So like, this is kind of like the,""" start="00:03:29.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""kind of like what a lot of people use these days,""" start="00:03:30.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just for, just for, to make it as frictionless as possible.""" start="00:03:35.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So obviously you can do like this bare bone text editing in Emacs.""" start="00:03:39.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""You just have to open up an Org mode file and just right away...""" start="00:03:44.360" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Difficulties""" start="00:03:46.960" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""So, but there are a number of problems with this.""" start="00:03:46.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So like, especially on mobile,""" start="00:03:48.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""character by character editing,""" start="00:03:50.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just like writing all these, this text out manually,""" start="00:03:52.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""maybe some formatting, it can be pretty tedious""" start="00:03:55.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and not, maybe not something you want to, you want to have to do,""" start="00:03:58.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""especially if you're like exhausted or tired.""" start="00:04:01.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So, I mean, there's also like the problem""" start="00:04:04.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""of like remembering which, where in your workout you are,""" start="00:04:06.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like how many of these, these, like which,""" start="00:04:09.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""which, like where are you, where you are,""" start="00:04:11.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like, um like which set number are you on,""" start="00:04:13.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""are you on the first, second,""" start="00:04:17.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then also, like, maybe you failed,""" start="00:04:17.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""maybe you weren't able to perform this,""" start="00:04:19.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and maybe you have to make a note that...""" start="00:04:22.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""so that's even more text editing you would have to do.""" start="00:04:24.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Also some things like unit conversions,""" start="00:04:28.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like you could use calc,""" start="00:04:30.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but then you'd have to open up the calc,""" start="00:04:31.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then number, unit conversion, switch buffers.""" start="00:04:35.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So it's doable, but it takes a little effort.""" start="00:04:39.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then also the rest timer.""" start="00:04:42.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So if you want to make sure you're resting""" start="00:04:43.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""in between these exercises you do,""" start="00:04:45.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you'd have to maybe open up another app,""" start="00:04:47.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""or maybe you'd have to bring your watch.""" start="00:04:51.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So that's another thing that""" start="00:04:52.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""these apps normally would do for you.""" start="00:04:53.720" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:04:58.400" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""So writing some Elisp, I created a package""" start="00:04:58.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to try to emulate that experience""" start="00:05:02.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I showed you on that other app.""" start="00:05:04.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So let me just demo this real fast.""" start="00:05:06.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So here, the package is called org-fit.""" start="00:05:08.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so here, I'm going to start a new workout.""" start="00:05:13.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then here, I'm prompted by a list of routines""" start="00:05:17.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that I have pre-written in Org mode.""" start="00:05:19.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So the header name is the routine name.""" start="00:05:22.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so I can, out of all these routines I've written,""" start="00:05:25.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I can select one and then also I can have it populate.""" start="00:05:29.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So here it's populating preset weights I had for it.""" start="00:05:35.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So yeah, so basically this is my current attempt""" start="00:05:41.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to emulate that experience.""" start="00:05:45.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So here we can, so here like the arrows and the tabs,""" start="00:05:47.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""they only go through like the, editable fields I can so""" start="00:05:51.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""on the notes section you see you see here in the table""" start="00:05:55.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""this is like the my plan for the day""" start="00:05:58.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""so I can press space to easily""" start="00:06:00.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just fill out the data tab""" start="00:06:02.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""go the next the next the next set""" start="00:06:03.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I can press quote to copy from above""" start="00:06:06.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""There's also some interesting things with Android,""" start="00:06:10.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like you can bind the volume down key.""" start="00:06:13.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So here I have the volume down key""" start="00:06:15.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just like inputting the data automatically""" start="00:06:17.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and going to the next field.""" start="00:06:21.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So you see there it's quite seamless input of information.""" start="00:06:22.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Notice also when all the sets""" start="00:06:26.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""of a single exercise are done,""" start="00:06:30.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it marks that heading as done.""" start="00:06:31.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Also, if you notice at the top, on the left,""" start="00:06:34.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you have the session time for the workout.""" start="00:06:37.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then on here, we have the rest timer.""" start="00:06:42.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So the rest timer is actually just defined as an org mode property.""" start="00:06:44.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So here it's saying that, okay,""" start="00:06:48.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you should start the auto rest timer""" start="00:06:50.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""for three minutes every time you do a set.""" start="00:06:52.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So here, let's fill it in, go to the next one.""" start="00:06:54.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And now the rest timer is set for three minutes.""" start="00:06:58.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so here I have, I can just rest""" start="00:07:00.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I just have the information right here.""" start="00:07:03.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Also, you'll notice here we have""" start="00:07:05.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""some calculations at the bottom.""" start="00:07:08.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""This is something also that those apps provide,""" start="00:07:09.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like in order to make sure you're tracking""" start="00:07:12.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""on certain levels of intensity.""" start="00:07:14.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Let's see, what else do we have?""" start="00:07:16.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""We can add warmups, automatic warmup set inserting, unit conversions,""" start="00:07:22.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then Something else to know""" start="00:07:30.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""is that all of these actions I'm doing,""" start="00:07:33.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""they're all bound to a single key""" start="00:07:35.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to make things as effortless as possible.""" start="00:07:37.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So yeah, that's the app in a nutshell.""" start="00:07:40.160" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org-mode based""" start="00:07:45.460" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""And then, so how is this done?""" start="00:07:45.460" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So the philosophy behind this is to use Org mode as a base.""" start="00:07:47.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So all the functionality, the timer for the session,""" start="00:07:51.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that's just clock in or clock in.""" start="00:07:55.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""The various, all the data you fill in,""" start="00:08:00.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""the exercises, routines, those are just org headings,""" start="00:08:05.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like with nested entries.""" start="00:08:09.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So yeah, and then all the movement,""" start="00:08:12.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like a lot of the editing stuff""" start="00:08:14.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""is just going off of the Org mode API.""" start="00:08:16.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So like here, my upper field, is actually just using the,""" start="00:08:18.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""so it's using like the org-table-goto-line function.""" start="00:08:22.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Adding a note is org-table-put.""" start="00:08:26.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So like all of my functions I'm using,""" start="00:08:29.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""they're just building off of the org mode API.""" start="00:08:31.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And I found that this pattern worked work pretty well.""" start="00:08:33.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So you get the benefits of Org mode""" start="00:08:38.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then the ease of using it on mobile.""" start="00:08:41.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so I guess in the last few minutes of this talk,""" start="00:08:48.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I'll just go over some quick things""" start="00:08:51.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""about working with Android that might come up.""" start="00:08:53.480" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Notifications (demo)""" start="00:08:56.320" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""So the first thing is notifications.""" start="00:08:56.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""This is actually an interesting feature.""" start="00:08:58.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So In the Android build for Emacs,""" start="00:09:01.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you have the function android-notifications-notify.""" start="00:09:03.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so here, this is how you can send a notification.""" start="00:09:05.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So my rest timer, for example, utilizes this function""" start="00:09:09.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to let you know when your rest is over.""" start="00:09:12.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And the cool thing about this is that the build for Emacs""" start="00:09:14.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""lets you, so here in the app settings, under notifications,""" start="00:09:22.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""so here you can actually pick a notification group,""" start="00:09:29.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""which is here set, which is, yeah, so it's set right here""" start="00:09:33.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and you can just customize it.""" start="00:09:36.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So like what sound do you want it to make?""" start="00:09:38.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Do you want it to vibrate?""" start="00:09:39.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Do you want to show on the screen?""" start="00:09:40.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so this way, like you can easily,""" start="00:09:41.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""so if you are resting, you will get a notification.""" start="00:09:43.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""It will vibrate.""" start="00:09:46.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it might make a really loud noise if you want it to.""" start="00:09:47.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so this is all customizable.""" start="00:09:50.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And the cool thing is that if you have other packages""" start="00:09:51.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that utilize these notifications,""" start="00:09:54.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""all of the notification groups,""" start="00:09:55.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""they're all customizable separately. So, and there we go.""" start="00:09:57.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So that notification you see on the top""" start="00:10:01.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""is actually from the Emacs app.""" start="00:10:02.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So you notice here, we're not even running Emacs""" start="00:10:05.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and yet we got that rest timer is over.""" start="00:10:07.400" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Unexpected Keyboard""" start="00:10:09.760" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""So that's one thing. Next, keyboard.""" start="00:10:09.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So just when working with Emacs,""" start="00:10:13.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I found using the unexpected keyboard, in particular,""" start="00:10:15.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to be really helpful with all the keybinding.""" start="00:10:19.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So if you just want to try out Emacs""" start="00:10:22.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""from F-Droid or something,""" start="00:10:25.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I would recommend using a keyboard like this""" start="00:10:27.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to let you use the meta keys and the control keys.""" start="00:10:30.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then yeah, using this keyboard,""" start="00:10:34.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I haven't really noticed any problems""" start="00:10:37.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""with Emacs key bindings.""" start="00:10:39.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then lastly, just like my setup...""" start="00:10:41.680" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Syncthing Fork""" start="00:10:45.160" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""So Syncthing Fork is another app I rely on heavily.""" start="00:10:45.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So as I mentioned, all the, this is org-fit files,""" start="00:10:49.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""they're all org-mode files.""" start="00:10:54.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So I use Syncthing Fork to synchronize them""" start="00:10:55.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""between my laptop and my Android.""" start="00:10:57.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then also like to get this package,""" start="00:10:59.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just syncing a list folder might be helpful""" start="00:11:04.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""if you want to easily edit your init file""" start="00:11:06.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""on Android on your machine.""" start="00:11:10.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So yeah, Syncthing Fork is another helpful thing""" start="00:11:12.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that you might wanna look into""" start="00:11:15.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""if you're exploring Android, the Emacs build of Android.""" start="00:11:17.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So yeah, Emacs on Android does actually have the potential""" start="00:11:22.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to replace a decent number of common use cases.""" start="00:11:26.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And org mode can be a solid foundation""" start="00:11:30.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""for any of these applications that you're thinking of.""" start="00:11:35.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And yeah, I highly recommend giving giving Emacs on Android a shot.""" start="00:11:39.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And that concludes this presentation.""" start="00:11:45.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Thank you so much, Zachary. That was an awesome talk,""" start="00:11:49.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and I appreciate your preparing it for us.""" start="00:11:56.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""A couple questions on the pad, if anybody wants to jump in""" start="00:11:59.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and throw in your questions or comments.""" start="00:12:03.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Of course, happy to read them out on screen here.""" start="00:12:05.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I think when we were talking backstage before,""" start="00:12:08.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you had asked me to kind of read them out,""" start="00:12:12.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but feel free to jump in and kind of""" start="00:12:14.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""take over at any point.""" start="00:12:17.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""This is the You Show. I'm kind of...""" start="00:12:19.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So the first question we had was a comment.""" start="00:12:25.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""This is very cool.""" start="00:12:30.200" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Very cool! It would be nice to build some One-rep max calculation formulae into calc""" start="00:12:31.440" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""It would be nice to build up some""" start="00:12:31.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""org rep max calculation formula into calc.""" start="00:12:33.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Is that something that you've thought about?""" start="00:12:38.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Um, well, I mean, um, one rep max. Yeah.""" start="00:12:42.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I mean, not in honesty,""" start="00:12:47.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I'm not sure about""" start="00:12:48.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""extending calc itself.""" start="00:12:52.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Like if there's...""" start="00:12:53.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""what are the ways of extending calc itself,""" start="00:12:56.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but this package org-fit,""" start="00:12:59.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I mean, it does have the one rep max.""" start="00:13:02.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I had to dig into that...""" start="00:13:04.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I can find the code, but yeah, I mean, it does,""" start="00:13:11.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I mean, you know, so this is specifically this package,""" start="00:13:20.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but yeah, you can use the various one rep max formulas for this.""" start="00:13:25.080" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you have plans to extend this to clock-report kind of reporting? graphical reports, etc?""" start="00:13:33.040" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""Extend this clock report. Yes, yeah, exactly.""" start="00:13:33.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Graphical reports. These are all something that,""" start="00:13:37.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""It currently doesn't have, and these nice apps do have.""" start="00:13:39.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""They have charts of all kinds.""" start="00:13:43.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""You can see your progress from week to week""" start="00:13:45.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""on various exercise.""" start="00:13:48.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""They have charts galore, all these fancy apps.""" start="00:13:49.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And in theory, it wouldn't be hard at all to like,""" start="00:13:54.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""'cause like, you know, there's gnuplot.""" start="00:14:00.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""There's those, and then they have like""" start="00:14:03.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""very good packages on any of them.""" start="00:14:07.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So, I mean, I assume integration would be pretty seamless.""" start="00:14:10.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So yes, that is definitely on the list""" start="00:14:13.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""of things I want to do.""" start="00:14:17.425" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you ever wanted to modify the functionality on your mobile device while working out? Any good or challenging experiences or tips with that?""" start="00:14:17.760" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""Have you ever wanted to modify""" start="00:14:17.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""the functionality of your mobile device""" start="00:14:21.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""while working out any good""" start="00:14:23.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""or challenging experiences or tips with that?""" start="00:14:26.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Yeah, that's actually funny.""" start="00:14:28.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""There was a time where, yeah, I mean, like debugging,""" start="00:14:30.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""there was like some bug I was having with my code.""" start="00:14:37.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so I have, in the middle of a workout,""" start="00:14:41.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""yeah, start, like, open up the debugger and kind of,""" start="00:14:44.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and the cool thing is that, I mean,""" start="00:14:48.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""the biggest thing, like, the biggest thing by far""" start="00:14:50.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""is unexpected keyboard.""" start="00:14:53.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Like, I can't state how,""" start="00:14:54.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I don't know how much Unexpected Keyboard is,""" start="00:14:56.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""because, like, with Unexpected, with the Unexpected,""" start="00:14:58.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""with that keyboard, you can literally just, like,""" start="00:15:01.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it's, it's not hard at all to, like,""" start="00:15:03.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you can do M-x or C-M-x""" start="00:15:06.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""or you know C-u C-M-x""" start="00:15:11.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to debug, like, you can do all the key bindings""" start="00:15:13.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""with unexpected keyboard. There's no problem""" start="00:15:15.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""whatsoever with that part.""" start="00:15:18.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""The only part is muscle memory.""" start="00:15:20.304" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""It's because you get the muscle memory""" start="00:15:23.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""of the emacs key binding""" start="00:15:25.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and so you have to kind of like yeah...""" start="00:15:27.425" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I mean that translation is actually kind of""" start="00:15:28.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you have to think about it like, like, okay,""" start="00:15:31.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""what was that key binding again?""" start="00:15:35.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And you have to kind of like do it with your fingers.""" start="00:15:36.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And it was like doing it on the, on Android is,""" start="00:15:39.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I mean, it takes a little longer""" start="00:15:41.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and it's just a different, yeah,""" start="00:15:44.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""different set of different muscle memory.""" start="00:15:45.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Gotcha. Sorry, if you've covered this,""" start="00:15:47.080" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Does the rest timer end with an audible notification at the end of the time?""" start="00:15:51.560" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""does the rest timer end with an audible notification?""" start="00:15:51.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""That's the cool thing.""" start="00:15:55.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So with the Emacs, with the Android notification settings,""" start="00:15:58.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you can, I can show that again in more detail.""" start="00:16:02.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So bonus settings, apps, pick the app, notifications.""" start="00:16:06.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then here we get that org-fit-rest-over.""" start="00:16:17.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so here you can set, for example,""" start="00:16:21.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""whether it's a silent notification.""" start="00:16:22.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so this won't, this won't make it make noise. You can do...""" start="00:16:24.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""or like make it have a noise,""" start="00:16:27.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and so you can have it make sure""" start="00:16:29.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it's popped on the screen""" start="00:16:31.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then you can just pick whatever ringtone you want,""" start="00:16:33.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and you can make it look like yeah.""" start="00:16:37.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Then obviously you have the whole volume setting,""" start="00:16:38.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""so you can, when you're working""" start="00:16:44.300" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you can just set the volume pretty high,""" start="00:16:49.133" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""so if you do happen""" start="00:16:50.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to set your phone kind of away, you set the volume high,""" start="00:16:51.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""maybe make a really annoying sound,""" start="00:16:55.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""a loud sound you won't miss. And then, yeah, you'll be set.""" start="00:16:57.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So that works.""" start="00:17:00.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""That was actually one of the biggest surprises.""" start="00:17:02.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I wasn't expecting that to work so nice.""" start="00:17:04.640" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you tried other keyboards such as Hacker's keyboard?""" start="00:17:08.600" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""One of the next question relates to the Unexpected Keyboard.""" start="00:17:08.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Question is, have you tried other keyboards,""" start="00:17:17.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""such as Hacker's Keyboard?""" start="00:17:19.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Not recently. I haven't, so I couldn't compare them.""" start="00:17:20.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Fair enough. Another keyboard question.""" start="00:17:27.120" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Another keyboard question - have you tried the "flickboard" on f-droid? It's the craziest keyboard, you use one thumb\.""" start="00:17:31.360" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""Have you tried Flickboard on F-Droid?""" start="00:17:31.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""The commenter says, this is the craziest keyboard.""" start="00:17:34.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""You use one thumb. Oh, that is interesting. Let me see.""" start="00:17:37.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Flickboard. Flickboard. Yeah, I'll have to try that.""" start="00:17:44.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I'm curious to get the key bindings done.""" start="00:17:48.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I wonder if the key bindings and all that work.""" start="00:17:53.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I hope that's interesting. I'll definitely look into that.""" start="00:17:57.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So I'll hold on just a moment""" start="00:18:01.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""as people are typing in more questions.""" start="00:18:02.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""A good moment to just thank you for the talk.""" start="00:18:04.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""It's personally, it's one of my favorite things""" start="00:18:06.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to see at EmacsConf is, you know, a glimpse into a world""" start="00:18:09.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that kind of isn't mine, right?""" start="00:18:14.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but it shows how, you know, Emacs is sort of""" start="00:18:17.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""the bazaar in the cathedral and bazaar sense of""" start="00:18:22.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""we're all just here""" start="00:18:27.038" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""sort of hauling our bags of toys""" start="00:18:28.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""into the center square and, you know, making a,""" start="00:18:31.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you know, I don't know if it's a house of cards""" start="00:18:35.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""or what exactly it is,""" start="00:18:38.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but it, you know, it's managing to keep me afloat personally.""" start="00:18:40.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And I just appreciate your, you know,""" start="00:18:43.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""kind of expanding my world.""" start="00:18:47.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""It's pretty cool. Yeah, definitely. Yeah, I mean, I agree.""" start="00:18:48.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""There's a lot of different, yeah. So, next commenter.""" start="00:18:53.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I'm curious, oh, sorry, I skipped one here.""" start="00:19:01.080" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: This user interface is simplified but still keyboard based, can you think of ways to make it more touch based?""" start="00:19:05.360" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""This user interface is simplified,""" start="00:19:05.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but still keyboard based.""" start="00:19:07.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Have you thought about ways to make it more touch-based?""" start="00:19:09.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Good question. Yeah, yeah, yeah.""" start="00:19:11.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So the only thing currently, I think,""" start="00:19:16.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""of specific touch-based functionality I have,""" start="00:19:19.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""which, so this is like, so let's see,""" start="00:19:22.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it's C-x C-+,""" start="00:19:25.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""That key binding wrong, what was it? Okay, whatever.""" start="00:19:33.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Yeah, so in terms of touch commands,""" start="00:19:38.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""so pressing on a headline will actually unfold it""" start="00:19:41.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and move your cursor to the next field that you,""" start="00:19:46.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""yeah, so like, yeah, at the beginning of the table.""" start="00:19:51.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So like, there's that, yeah, and so.""" start="00:19:54.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""It sounds like that is something you're thinking about.""" start="00:19:56.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Yeah, exactly.""" start="00:20:02.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Like, you know, maybe like a little thing at the bottom,""" start="00:20:03.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like, so this thing has the, this app has this,""" start="00:20:06.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""if you notice, like, if you do something,""" start="00:20:09.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it has this rest timer at the bottom.""" start="00:20:10.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So I mean, it wouldn't be,""" start="00:20:12.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it wouldn't be pretty, it wouldn't be,""" start="00:20:14.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it seems quite doable to just have like,""" start="00:20:16.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""maybe something at the bottom,""" start="00:20:18.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like for a timer,""" start="00:20:19.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then you can just like plus 15 seconds or cancel it""" start="00:20:21.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""or, you know, just,""" start="00:20:24.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then those could all be just like touch based.""" start="00:20:25.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so, yeah. And then obviously just like,""" start="00:20:27.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just like classic Emacs, the Emacs,""" start="00:20:30.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like clicking actions, they just, yeah,""" start="00:20:36.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""they work just fine.""" start="00:20:43.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Like, so there's no like weird Android touch thing""" start="00:20:44.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you have to worry about.""" start="00:20:47.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So let me ask a question of my own here.""" start="00:20:48.360" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is a touch interface something you'd prefer to dive into yourself or factor out into a higher-level API?""" start="00:20:52.560" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""Just thinking about that myself, how would you, you know,""" start="00:20:52.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""ideally approach that as that you'd most prefer""" start="00:20:57.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to sort of dive into yourself?""" start="00:21:00.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Or would you think about factoring that out into""" start="00:21:02.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like some kind of org touch higher level API or?""" start="00:21:07.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Oh, I mean, personally, personally, I mean, I mean,""" start="00:21:12.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I think just like the clicking""" start="00:21:19.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and just like adding a lambda to it. That works.""" start="00:21:21.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I mean, that feels like it works just fine.""" start="00:21:28.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And you can add the code, like the command right there.""" start="00:21:35.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So it's all like, yeah, it's all, I mean,""" start="00:21:41.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and that's kind of a nice thing is like having everything like close,""" start="00:21:45.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just like not having those, a lot of layers of abstraction.""" start="00:21:49.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""It's just like, you have a lambda to the click and then just do...""" start="00:21:54.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Yeah, just do.""" start="00:21:58.008" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""[Corwin]: That was my experience too.""" start="00:21:59.505" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""This is a few years ago now, but when I was starting on""" start="00:22:01.758" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""the Dungeon Mode project""" start="00:22:04.591" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that a friend and I presented several years ago""" start="00:22:05.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""at Emacs Conference,""" start="00:22:07.739" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""we were shocked to learn just how usable,""" start="00:22:09.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""this is echoing a comment I see from ElephantErgo on IRC,""" start="00:22:13.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""who says, touch seems so wildly usable nowadays,""" start="00:22:18.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that's so awesome.""" start="00:22:21.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And that was really my experience too with Dungeon.""" start="00:22:22.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""We were just working on it, we got the fog of war going,""" start="00:22:25.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then just took it onto a touchscreen laptop at the time,""" start="00:22:28.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and we're just shocked to learn,""" start="00:22:32.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you know, everything just worked. Yeah.""" start="00:22:33.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""[Zachary]: Maybe like the hardest thing""" start="00:22:37.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""is actually just the default font size.""" start="00:22:38.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""You know, you have to like, you can't,""" start="00:22:40.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you can't have your font too small or you'll,""" start="00:22:42.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you'll like, you'll touch, you'll,""" start="00:22:44.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you'll miss touch things a lot. Yeah.""" start="00:22:46.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""[Corwin]: Well, there's no font size""" start="00:22:48.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""large enough to make me, you know,""" start="00:22:50.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""to make me comfortable on a smart device, unfortunately.""" start="00:22:53.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""But, but that, I think it may be a me problem.""" start="00:22:58.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I think this question we might've missed. So the file sync.""" start="00:23:00.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Yeah, so the file sync in terms of what's worked for me,""" start="00:23:04.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I did have to play around with this a lot.""" start="00:23:12.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Let me go ahead and read it out.""" start="00:23:14.040" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: You mentioned file sync, what have you found works well for you?""" start="00:23:16.000" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""You mentioned file sync, what have you found works well for you?""" start="00:23:16.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Sorry. Yeah, yeah, yeah.""" start="00:23:18.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So in terms of what, yeah, I did have to play around with this a lot,""" start="00:23:21.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but Syncthing Fork is what I eventually settled on.""" start="00:23:25.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I mean, this is another thing that, I mean, I don't,""" start="00:23:28.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it wouldn't nearly be as usable,""" start="00:23:34.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like Emacs wouldn't be nearly usable without it.""" start="00:23:36.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So Syncthing Fork essentially, okay.""" start="00:23:39.680" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And then I also have like a droplet on DigitalOcean,""" start="00:23:41.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just like, so that's kind of like the whole,""" start="00:23:44.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that's kind of like what bridges it together.""" start="00:23:47.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So like, so my Emacs can sync to that,""" start="00:23:49.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then my machine also syncs to that.""" start="00:23:52.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so I don't have to have them""" start="00:23:56.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""both on the same time. It's just there, that copy.""" start="00:24:00.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And so that works pretty well.""" start="00:24:06.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I also found that editing code in general,""" start="00:24:09.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I think this also goes""" start="00:24:13.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""with the development experience question.""" start="00:24:15.360" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I'm curious about the development experience\. Do you do everything on the phone?""" start="00:24:19.920" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""So I'm curious about the development experience.""" start="00:24:19.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Do you do everything on the phone? And that's the thing.""" start="00:24:22.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""None of my development in general is done on the phone.""" start="00:24:24.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just because, for one, my muscle memory isn't there,""" start="00:24:27.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and two, just in general, typing on a virtual keyboard on the phone,""" start="00:24:32.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it's just really slow.""" start="00:24:38.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So yeah, all the development is done on my machine,""" start="00:24:40.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but then there's the problem of you have to have an init.l in your Android,""" start="00:24:47.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and so you're going to have to write, you know,""" start="00:24:52.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I found like you'd have to like,""" start="00:24:55.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""when you first get Emacs set up,""" start="00:24:56.920" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""you might have to like write some, I don't know,""" start="00:24:58.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like you'll kind of have to like get into your init file""" start="00:25:01.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then just like,""" start="00:25:03.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""maybe just like start to put things together.""" start="00:25:04.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""But the cool thing is with Syncthing Fork,""" start="00:25:07.000" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I'm syncing my, I'm setting it to load off of a sync directory.""" start="00:25:09.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Like this, this init file,""" start="00:25:15.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""my Android file is synced with my machine.""" start="00:25:18.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So if I wanted to, I could just edit it on my machine""" start="00:25:21.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and just have that synced automatically.""" start="00:25:24.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So that makes like the whole, like in it,""" start="00:25:25.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""cause like it's, it's such a, like, that is one of the,""" start="00:25:28.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it's just like get in,""" start="00:25:31.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""sit writing your init.el in Emacs on Android""" start="00:25:33.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""is just kind of a...""" start="00:25:36.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""[Corwin]: We do have one more question.""" start="00:25:37.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I can't help but throw in a comment there.""" start="00:25:39.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I think that's like.""" start="00:25:41.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""That's an extremely good tip, right?""" start="00:25:43.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""That if we're, as we're exploring Android,""" start="00:25:47.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""we want to think about that as""" start="00:25:49.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""adding support for another port of Emacs.""" start="00:25:52.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So the whole dance of, oh, I took, you know,""" start="00:25:55.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I took, you know, I took my init""" start="00:25:58.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and I wanted to use it on BSD""" start="00:26:01.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""after mostly using GNU Linux.""" start="00:26:04.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Now we're going in and we're looking at our Emacs.""" start="00:26:06.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""all of our Emacs and it stuff""" start="00:26:09.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and thinking about compatibility,""" start="00:26:11.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""turning features on and off""" start="00:26:13.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""based on the OS that we're running underneath and so on.""" start="00:26:15.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I think that's pretty heads up advice.""" start="00:26:19.960" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Let me read out this other question.""" start="00:26:22.120" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you thought about integrating cardio tracking like timed runs, bike rides, etc?""" start="00:26:24.760" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""Have you thought about integrating cardio tracking""" start="00:26:24.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like time runs, bike rides, and so on?""" start="00:26:28.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""[Zachary]: Yes, I definitely thought about that.""" start="00:26:30.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""And that might be another thing""" start="00:26:34.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""where a touch interface might be helpful.""" start="00:26:36.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I don't know if I can easily pull it up,""" start="00:26:40.258" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but the app itself, oh yeah, here it is.""" start="00:26:47.841" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So you can see kind of how they have,""" start="00:26:49.466" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and you can kind of see how this fits.""" start="00:26:50.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""This is like an org, you can see""" start="00:26:53.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that these are just tables, right?""" start="00:26:55.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""This is just like this whole interface in general,""" start="00:26:57.400" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""just like kind of screams like an org mode,""" start="00:26:59.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""file with you have you have your different headings""" start="00:27:02.280" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like here's a warm-up heading""" start="00:27:05.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then you have the tables""" start="00:27:06.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and you know you could just like envision""" start="00:27:07.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""how you could have a org table""" start="00:27:09.880" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""with one of the columns called time""" start="00:27:12.840" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then you could just imagine like there'd be a button there""" start="00:27:15.040" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and you can just have it click,""" start="00:27:18.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and then you'd have a timer in the background""" start="00:27:21.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that would update this timer.""" start="00:27:23.620" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""It's so, I mean, conceptually, there's nothing really,""" start="00:27:25.800" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""it conceptually maps really well to this.""" start="00:27:32.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So yeah, I mean, that's definitely something.""" start="00:27:40.425" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""[Corwin]: That's awesome. Great answer.""" start="00:27:41.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So I think we're just at about 90 seconds left.""" start="00:27:44.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Perfect amount of time, I think, to just wrap up.""" start="00:27:47.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Closing thoughts. I'll share mine first.""" start="00:27:50.120" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Really appreciate you, Zach.""" start="00:27:52.200" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Thank you for putting this talk together.""" start="00:27:53.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I think this is the type of talk""" start="00:27:56.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that's really going to tie the room together""" start="00:27:59.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""for people that may be, you know, not sure how they can take""" start="00:28:01.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""although they've been interested in that,""" start="00:28:07.560" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""this can be a really good way to kind of open up the world.""" start="00:28:12.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Thank you. Thank you for putting it together.""" start="00:28:16.400" video="mainVideo-weights" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Closing""" start="00:28:20.320" video="mainVideo-weights" id="subtitle"]]</div>[[!template text="""[Zachary]: Yeah, I would just say""" start="00:28:20.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like definitely just try things out.""" start="00:28:22.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""Like if you think, you know,""" start="00:28:24.160" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""they're just like random ideas,""" start="00:28:25.360" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like a book tracking app or like a recipe app,""" start="00:28:26.440" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""like, you know, there's a lot of things""" start="00:28:30.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that you do on your mobile device""" start="00:28:33.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that aren't like banking apps that you could easily,""" start="00:28:35.600" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""that seem like they could be done in Emacs.""" start="00:28:37.720" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""So yeah, just try different things out""" start="00:28:39.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and I would love to hear what other people do. Bravo.""" start="00:28:42.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""[Corwin]: I appreciate it once again, you're coming together""" start="00:28:47.240" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and especially you're doing it live.""" start="00:28:52.520" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""I know that as a conference, we have a lot of preference""" start="00:28:56.640" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""for those recorded talks""" start="00:29:00.080" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and getting the captioning together,""" start="00:29:01.480" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""but I just have a special place in my heart""" start="00:29:02.760" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""for the energy that comes with a live talk""" start="00:29:05.320" video="mainVideo-weights" id="subtitle"]]
+[[!template text="""and I appreciate you doing it. Thanks for putting this on.""" start="00:29:07.680" video="mainVideo-weights" id="subtitle"]]
+
+</div>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..5d38f931
--- /dev/null
+++ b/2025/info/weights-before.md
@@ -0,0 +1,37 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 30-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-weights>
+Etherpad: <https://pad.emacsconf.org/2025-weights>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-weights"><source src="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-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-weights" data="""
+00:00.000 Introduction
+00:15.400 Current state of mobile ecosystem
+01:05.440 Emacs replaceability
+02:06.720 Weightlifting tracking
+03:46.960 Difficulties
+04:58.400 Demo
+07:45.460 Org-mode based
+08:56.320 Notifications (demo)
+10:09.760 Unexpected Keyboard
+10:45.160 Syncthing Fork
+12:31.440 Q: Very cool! It would be nice to build some One-rep max calculation formulae into calc
+13:33.040 Q: Do you have plans to extend this to clock-report kind of reporting? graphical reports, etc?
+14:17.760 Q: Have you ever wanted to modify the functionality on your mobile device while working out? Any good or challenging experiences or tips with that?
+15:51.560 Q: Does the rest timer end with an audible notification at the end of the time?
+17:08.600 Q: Have you tried other keyboards such as Hacker's keyboard?
+17:31.360 Q: Another keyboard question - have you tried the "flickboard" on f-droid? It's the craziest keyboard, you use one thumb.
+19:05.360 Q: This user interface is simplified but still keyboard based, can you think of ways to make it more touch based?
+20:52.560 Q: Is a touch interface something you'd prefer to dive into yourself or factor out into a higher-level API?
+23:16.000 Q: You mentioned file sync, what have you found works well for you?
+24:19.920 Q: I'm curious about the development experience. Do you do everything on the phone?
+26:24.760 Q: Have you thought about integrating cardio tracking like timed runs, bike rides, etc?
+28:20.320 Closing
+
+"""]]<div></div>Duration: 29:12 minutes<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/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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.webm">Download --main.webm (106MB)</a></li><li><a href="https://toobnix.org/videos/watch/6e7e1bb3-86d6-4d81-a847-45efcdc48b5b">View on Toobnix</a></li><li><a href="https://youtu.be/0fwZtg-7wKE">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/weights-nav.md b/2025/info/weights-nav.md
new file mode 100644
index 00000000..21a106a1
--- /dev/null
+++ b/2025/info/weights-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/reader">An introduction to the Emacs Reader</a>
+Next by track: <a href="/2025/talks/completion">corfu+yasnippet: Easier than I thought</a>
+Track: <span class="sched-track General">General</span>
+</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..a8a464f3
--- /dev/null
+++ b/2025/info/zettelkasten-after.md
@@ -0,0 +1,1863 @@
+<!-- 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
+
+<div class="transcript transcript-qanda"><a name="zettelkasten-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+
+[[!template text="""Yes. All right. Take it away. Thank you, Christian. Thank you, too.""" start="00:00:00.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you could have the pad open at the same time,""" start="00:00:07.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you can read the questions.""" start="00:00:09.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Or I can start reading some to you while I'm here.""" start="00:00:11.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Oh, no. I can read them.""" start="00:00:13.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I was wondering whether I should maybe copy them into a new buffer.""" start="00:00:14.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So they are also on screen. Increase the font size a bit.""" start="00:00:21.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I'm trying to do this on the fly.""" start="00:00:30.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Maybe a bad idea. Let's see.""" start="00:00:39.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Of course, you're going to capture it""" start="00:00:41.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""into your Zettelkasten then. Is that what's happening?""" start="00:00:42.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Well, I can start you off.""" start="00:00:45.880" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: What do you use for the fancy animations?""" start="00:00:49.560" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""The first question is, I wonder what they use for the fancy animations.""" start="00:00:49.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I was thinking about this because that's the first question""" start="00:00:56.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I was thinking about this""" start="00:00:59.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""while I copied this stuff over.""" start="00:01:00.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""What part is the fancy part?""" start="00:01:02.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I can recommend books, like if anyone wants to have book recommendations""" start="00:01:09.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for how to make presentations with PowerPoint-like software""" start="00:01:13.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in a very simple way, we taught this at university.""" start="00:01:18.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""was it now, some 15 years ago,""" start="00:01:23.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to students to make animation abuse""" start="00:01:25.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where everything was flashy and typed in or something.""" start="00:01:28.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Don't do this, but instead do a couple of very simple tasteful things""" start="00:01:32.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like fading through colors like filmmakers do, right?""" start="00:01:36.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Fading through black to make a scene cut""" start="00:01:41.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or just fade between things, the fanciness.""" start="00:01:44.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Presentation software stack, the fanciness.""" start="00:01:47.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I didn't dial fanciness up,""" start="00:01:53.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I just resorted to a very simple fade animations,""" start="00:01:55.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like fading stuff in and wipe, I think, for text effects.""" start="00:02:00.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That was it, more or less.""" start="00:02:04.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And for the lines, maybe the lines are fancy.""" start="00:02:06.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I was using Apple Keynote because I'm fastest with that,""" start="00:02:09.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I also usually, we taught this workshop with PowerPoint""" start="00:02:14.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I think the LibreOffice stack got much better with that""" start="00:02:19.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""as well in the recent years,""" start="00:02:23.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I haven't tried that in a long time""" start="00:02:24.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to like fiddle around and find all the knobs to dial.""" start="00:02:26.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Because the Apple presentation thingy has this nice feature""" start="00:02:31.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you draw an arrow with a tip,""" start="00:02:34.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you have a special animation for line drawing,""" start="00:02:37.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which is only available for line art.""" start="00:02:41.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then it draws the arrow that moves around like that.""" start="00:02:42.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So yeah, presentation stack, Apple Keynote,""" start="00:02:45.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""probably not of interest for anyone here.""" start="00:02:48.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I usually don't use plain text presentation stuff, right?""" start="00:02:52.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I tried this, I tried this with markdown presentations,""" start="00:02:56.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""slidey things, org presentation.""" start="00:03:03.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's always not enough control for the fiddly things""" start="00:03:08.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that I'm interested in to make the experience great.""" start="00:03:12.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I wonder what are the fancy animations.""" start="00:03:17.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And the stack, the stack is Apple Keynote, sorry.""" start="00:03:20.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Okay, that's enough. Thank you for capturing.""" start="00:03:25.440" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Are you not a fan of using *, **, *** headings in org-mode?""" start="00:03:30.080" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""Are you not a fan? Okay. You saw this in the recording.""" start="00:03:30.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Why on earth is autofill mode not enabled? I don't know.""" start="00:03:37.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I thought it is the default, but apparently it isn't.""" start="00:03:43.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I could also use visual line mode.""" start="00:03:48.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's built in as well, right? Visual line mode.""" start="00:03:52.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's so weird to be in this vanilla setup""" start="00:03:55.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and not have all my key bindings""" start="00:03:58.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and my normal stuff ready, so.""" start="00:04:00.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I am not a fan of using asterisk headings in org mode.""" start="00:04:04.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's interesting to see how people have different styles of writing org content.""" start="00:04:08.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Am I not? What exactly? What did I do?""" start="00:04:12.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And notes, just open one of these.""" start="00:04:22.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Okay. I could see how you could, in examples like this,""" start="00:04:25.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""use org-mode to read-only.""" start="00:04:33.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Why? How you could use org-mode to use headings for this,""" start="00:04:36.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because it's an outliner first and foremost,""" start="00:04:44.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so outlining is very natural.""" start="00:04:48.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But when I do in my personal setup,""" start="00:04:50.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I also have this what's called start indentation thingy.""" start="00:04:53.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""enabled, so that means that everything""" start="00:04:58.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""would be indented one level from the start.""" start="00:05:01.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I would probably fiddle around""" start="00:05:04.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with that to not get like crazy.""" start="00:05:05.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But also, I don't see, I don't see,""" start="00:05:07.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like really see when I look at this,""" start="00:05:12.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I didn't see a potential to create subheadings,""" start="00:05:13.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I mean, or even headings.""" start="00:05:17.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""The only heading here is the title,""" start="00:05:19.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like in my perception of this note,""" start="00:05:21.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and it's one, It's two lists.""" start="00:05:24.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You could group these in headings.""" start="00:05:27.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I didn't. That's right. Where's another one?""" start="00:05:28.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I opened the autosave file because I'm stupid.""" start="00:05:40.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""OK. So this one could also be probably subdivided.""" start="00:05:42.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But I'm also not sure.""" start="00:05:46.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm also not sure if I would gain anything structurally""" start="00:05:48.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if I do it like this because then I'm in a structural level""" start="00:05:52.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and the stuff that just flows naturally""" start="00:05:55.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""as a sequence of text paragraphs,""" start="00:05:58.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this here, it's not disconnected.""" start="00:06:01.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It wasn't meant to be under organism""" start="00:06:07.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I need to create a new same level thing""" start="00:06:10.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to say, hey, these are, I don't know, details or whatever.""" start="00:06:16.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So that's maybe the real reason.""" start="00:06:23.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm fine with writing snippets that are self-contained""" start="00:06:26.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and essentially one or two or three or five or whatever,""" start="00:06:28.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""how many paragraphs,""" start="00:06:31.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but it's not like, it's always an outline form.""" start="00:06:32.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I don't resort to this.""" start="00:06:36.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""My onSettle custom is usually written in Markdown.""" start="00:06:38.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I use subheadings for actual headings""" start="00:06:41.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to subdivide like I would subdivide an essay""" start="00:06:44.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or an article, blog post.""" start="00:06:47.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But that's the mode of writing that I'm in here.""" start="00:06:49.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's like blog post writing.""" start="00:06:52.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I wouldn't start with four headings for this.""" start="00:06:54.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I'm not doing that. That's a thing.""" start="00:06:56.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Okay, I guess I'm going to read the questions,""" start="00:06:58.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I'm going to stop copying them in because I lose time.""" start="00:07:04.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I want to reply to you, folks.""" start="00:07:07.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Didn't see a need for hierarchical structure.""" start="00:07:09.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Thank you for capturing this. Next question.""" start="00:07:11.480" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Can you use org files and all its features inside Denote?""" start="00:07:13.720" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""Can you use org files and all its features inside Denote?""" start="00:07:13.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Yes. Like this is, this is an org file""" start="00:07:17.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and Denote uses org headings instead of,""" start="00:07:22.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with Markdown, you get YAML front meta.""" start="00:07:25.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And with org, you get these attributes,""" start="00:07:28.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""value attribute thingies""" start="00:07:32.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that are then the metadata for the note.""" start="00:07:36.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So yeah, the answer is yes. You get everything and on top,""" start="00:07:40.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""a small layer of a link, link management.""" start="00:07:45.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's all there is.""" start="00:07:48.160" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Where or how do you like to capture fleeting notes?""" start="00:07:49.000" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""Next question is, where or how do you like to capture fleeting notes?""" start="00:07:49.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Oh, fleeting notes. If you say fleeting notes,""" start="00:07:55.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you also need to say non-fleeting notes""" start="00:07:58.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and figure out what these are.""" start="00:08:01.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And when you say non-fleeting notes,""" start="00:08:02.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and fleeting notes exist, because it's a distinction,""" start="00:08:05.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and there's something on both sides of this distinction.""" start="00:08:07.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you say there's a distinction, there are two sides,""" start="00:08:10.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe you want to subdivide the non-fleeting notes further,""" start="00:08:12.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because, well, it's a non-fleeting note""" start="00:08:14.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""isn't very descriptive. So what else do you say there?""" start="00:08:16.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And people have said a couple of things""" start="00:08:21.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to define non-fleeting notes, for example, permanent notes.""" start="00:08:24.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I guess that's a Sonke Ahrens,""" start="00:08:28.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""permanent notes is the most popular.""" start="00:08:33.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Let's stay with that, stick with that.""" start="00:08:35.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So if you have permanent notes and fleeting notes,""" start="00:08:36.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""now we have two types of notes. The thing is, in books,""" start="00:08:38.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the only... when we would talk about note-taking""" start="00:08:41.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and you would ask me, hey Christian,""" start="00:08:46.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""how do you take fleeting notes?""" start="00:08:47.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I imagine the discussion would be in German""" start="00:08:49.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because that's how people usually talk to me.""" start="00:08:53.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I would pull out a book,""" start="00:08:55.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this is Object-Oriented Software Engineering,""" start="00:08:56.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""interesting book by Ivar Jacobson.""" start="00:08:59.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not sure because, you know,""" start="00:09:03.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it's an English or American person.""" start="00:09:06.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And inside I have these fleeting notes like these""" start="00:09:08.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""are actual paper notes square what are these three by something inch""" start="00:09:14.420" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""American standard size I guess""" start="00:09:18.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and A6 minus the tariff part""" start="00:09:21.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""from another notepad. These are notes I took, engagement notes""" start="00:09:25.965" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you will, like engagement notes,""" start="00:09:31.175" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because the margins of the book don't suffice to take,""" start="00:09:32.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and this is related to... I need more space, so this is more space.""" start="00:09:35.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""These are fleeting.""" start="00:09:38.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""As you see, I have them in my pile of books""" start="00:09:41.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""right next to me in the shelf""" start="00:09:45.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and folded them in this piece of paper,""" start="00:09:46.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""labeled it with the author because I lost them""" start="00:09:52.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""couple of times they just fell out""" start="00:09:54.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when I reached for the book""" start="00:09:57.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and this is an envelope I shove it into the book""" start="00:09:58.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then forget about processing the book again""" start="00:10:01.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for five or ten years. So what do I do with fleeting notes?""" start="00:10:04.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I do fleeting notes on paper or if I'm using an e-reader""" start="00:10:08.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe with an e-reader software annotation tool""" start="00:10:12.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but fleeting in the most like simple non contrived sense,""" start="00:10:14.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""fleeting notes are meant as engagement notes""" start="00:10:21.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you do something with them""" start="00:10:23.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or like I just showed you,""" start="00:10:26.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you don't because life's short, right?""" start="00:10:27.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Time runs out, then you need to forget,""" start="00:10:29.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you need to remember""" start="00:10:31.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""how to restructure everything in your head""" start="00:10:33.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to make sense of the notes again""" start="00:10:36.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because they were fleeting,""" start="00:10:37.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""they were just little scribbles and it's""" start="00:10:38.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's basically ballast or waste.""" start="00:10:41.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm just carrying this with me for years""" start="00:10:44.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and maybe never get around to using these.""" start="00:10:46.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But also, I put stuff on there, maybe I do.""" start="00:10:50.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It doesn't hurt to keep them in there.""" start="00:10:53.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's just an odd collector's habit I can't get rid of.""" start="00:10:55.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""fleeting notes, I just capture them wherever""" start="00:10:58.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then either I process them or try to throw them away""" start="00:11:03.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or forget about them""" start="00:11:05.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because they're in some inbox file on a smartphone""" start="00:11:07.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then, you know, they might as well not exist,""" start="00:11:10.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""they're just there to engage me during the reading""" start="00:11:13.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and if I don't process them in time,""" start="00:11:15.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""meh like, chance is up, it sucks""" start="00:11:17.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Next question, like fleeting notes, permanent notes.""" start="00:11:22.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not going to talk about these""" start="00:11:26.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""unless someone asks a question.""" start="00:11:27.800" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Zettelkasten feels like a very "cagey" approach to note-taking and knowledge management\. Doesn't it restrict one to think in certain ways rather than what feels natural to someone?""" start="00:11:29.040" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""Zettelkasten feels like a very cagey approach""" start="00:11:29.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to note-taking and knowledge management.""" start="00:11:32.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Doesn't it restrict one to think in certain ways""" start="00:11:34.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""rather than what feels natural to someone?""" start="00:11:36.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Well, yes, but so does wearing underwear, right?""" start="00:11:38.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""A bit of personal revelation.""" start="00:11:45.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""When I'm working from home, I'm wearing pants.""" start="00:11:50.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You don't see them, but I don't need to.""" start="00:11:54.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But I'm also kind of self-restricting myself in a way""" start="00:11:57.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because there's a window,""" start="00:12:00.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it's dark outside, and I'm well lit.""" start="00:12:01.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And if I just stand up and have no pants on,""" start="00:12:03.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't care that much what the neighbors like 10, 20 meters across think.""" start="00:12:05.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""your mileage may vary then, right?""" start="00:12:12.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So there are restrictions that make sense""" start="00:12:15.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to get to some point in your day-to-day life.""" start="00:12:18.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And in the case of Zettelkasten,""" start="00:12:24.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I try to tell people the shortest story possible""" start="00:12:26.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to convey a story there, but also not to cage them in""" start="00:12:31.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with 20 definitions of different notes.""" start="00:12:36.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Because all that matters is try to move your thinking""" start="00:12:38.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""into an environment where you can write,""" start="00:12:42.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you feel comfortable writing,""" start="00:12:44.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and where you can keep this stuff.""" start="00:12:45.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Because I do feel comfortable with a pencil and paper.""" start="00:12:47.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But what I just showed you, this might as well never have happened.""" start="00:12:50.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Something has changed in my brain.""" start="00:12:54.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""most likely, when I engaged with a book like this.""" start="00:12:56.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""As far as publications and writing is concerned,""" start="00:13:01.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this might as well not exist in my life,""" start="00:13:04.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because I didn't do something with it.""" start="00:13:06.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I mean, I was reading the book probably on a commute back then, on the train.""" start="00:13:10.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I didn't take notes on the computer right away.""" start="00:13:15.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So if you feel caged in,""" start="00:13:18.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that may be a sign that you went too far on the,""" start="00:13:20.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I need to do this, I need to do that stage,""" start="00:13:24.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and lose some of the playfulness.""" start="00:13:26.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""There needs to be playfulness""" start="00:13:28.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""inside of the whole procedure, otherwise it...""" start="00:13:29.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you don't enjoy doing it, you won't be doing it.""" start="00:13:32.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And if you don't do it, then you don't get a benefit.""" start="00:13:37.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And it's just another chore in your life.""" start="00:13:39.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Then rather not do it.""" start="00:13:41.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So try to avoid the feeling of caginess""" start="00:13:42.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and do whatever you want with it""" start="00:13:46.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""as long as you try to give your best.""" start="00:13:49.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's the cage that you will benefit from""" start="00:13:52.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like really trying maybe not trying hard""" start="00:13:55.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but trying in earnest to produce""" start="00:13:58.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""something that you can read in a year in a week whatever""" start="00:14:02.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then make sense of it like that's that's that's the minimum bar and the rest""" start="00:14:05.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you find yourself writing for hours on end,""" start="00:14:10.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""during the nights, during the weekends,""" start="00:14:13.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""whatever, and can't stop,""" start="00:14:15.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you can tackle more of the prescriptions, let's say.""" start="00:14:17.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But everything I showed to you""" start="00:14:21.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""was there are three essential things,""" start="00:14:22.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and the rest is just add-ons.""" start="00:14:24.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Add-ons to inspire you to think in certain ways,""" start="00:14:26.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but you don't have to do them. You can scratch all of this.""" start="00:14:28.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You just need to write to think,""" start="00:14:31.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you need to connect""" start="00:14:33.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to make the thinking happen in an organic way.""" start="00:14:35.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Otherwise, you get a storage that's very hard to navigate""" start="00:14:37.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and doesn't grow well. Thanks. Yeah, you're welcome.""" start="00:14:40.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not writing another show. Yeah. Oh, combine the forums.""" start="00:14:46.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like it's a Zettelkasten anonymous group there.""" start="00:14:51.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like everyone's struggling.""" start="00:14:54.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Everyone's struggling and it's okay to like,""" start="00:14:56.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm feeling like stuck at this and that.""" start="00:14:58.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then other people will be able to relate.""" start="00:15:01.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I can promise.""" start="00:15:03.920" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How does denote compare to org-roam?""" start="00:15:07.328" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""How does it denote, question mark maybe,""" start="00:15:07.328" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""compared to org-roam?""" start="00:15:10.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Roam Research was setting a new trend of connectiveness""" start="00:15:11.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because you could create recursive structures with links""" start="00:15:18.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and everything is linkable.""" start="00:15:21.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And it's like you put every sentence in its own org heading""" start="00:15:22.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then link to all the headings possibly""" start="00:15:25.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then transpile them so you can expand in place""" start="00:15:27.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you would link to.""" start="00:15:31.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I think this was the approach at least.""" start="00:15:32.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So this was a very interesting transclusion, not transpile.""" start="00:15:34.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Transclude the contents, like move them in right then and there""" start="00:15:38.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and not navigate to another page. It was interesting.""" start="00:15:41.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It never made sense for me""" start="00:15:45.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when people told their stories of how they used it.""" start="00:15:47.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I guess you can use this tool for a lot of purposes,""" start="00:15:50.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but the prevailing story of the Roam-style note-taking tools""" start="00:15:53.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""was like, just dump everything in it.""" start="00:15:59.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And garbage in, garbage out still holds.""" start="00:16:01.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I do keep my personal journal away""" start="00:16:04.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""from my Zettelkasten nowadays""" start="00:16:07.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because I want to not restrict myself""" start="00:16:10.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when I feel the urge to journal,""" start="00:16:12.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when I want to capture something that, for example, my 15-month-old baby daughter does.""" start="00:16:14.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like, first time she pulled a chair""" start="00:16:18.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""out of another room to the next room""" start="00:16:21.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""just to create a ladder to then climb onto another thing.""" start="00:16:22.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It just was, okay, this is now the time""" start="00:16:25.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to take note of this. in her life, like you were this""" start="00:16:27.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and that many months old when you did this.""" start="00:16:30.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So we have some reference parts. And I could put this kind""" start="00:16:33.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""of factual information in Zettelkasten,""" start="00:16:35.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but also, like, what if I have a toothache or whatever,""" start="00:16:37.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and just want to gather data for whatever reason?""" start="00:16:42.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know. Like this kind of personal stuff.""" start="00:16:44.925" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's too much of the non-useful stuff""" start="00:16:52.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in a tool that I want to use to think.""" start="00:16:55.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I do see the appeal there.""" start="00:16:58.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But anyway, the org-roam, like that's a Roam part.""" start="00:17:00.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You can watch a lot of videos""" start="00:17:04.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""on that to get a feel for this.""" start="00:17:05.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Org-roam adopted this to make the connection easier""" start="00:17:07.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and replicate features. As I said, porting tools""" start="00:17:10.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that exist into Emacs, very nice pastime.""" start="00:17:13.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""A lot of people do this for a lot of things,""" start="00:17:16.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but it's not a thinking environment.""" start="00:17:18.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's just another tool to take notes in""" start="00:17:20.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that behave weirdly with links or interestingly with links.""" start="00:17:22.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And Denote does do even less.""" start="00:17:25.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It only offers you a couple of shortcuts""" start="00:17:29.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to help you find files quickly.""" start="00:17:31.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It does, like you see in the bottom here in the mode line,""" start="00:17:33.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it does just show square brackets D""" start="00:17:37.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""instead of the whole ID, which would be rather long.""" start="00:17:40.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So you have a buffer list that is bearable and works.""" start="00:17:44.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You can read this and find the title quickly.""" start="00:17:48.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Things like that, Denote does things like that.""" start="00:17:51.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Oh, I closed the wrong.""" start="00:17:56.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Denote does things like that very well,""" start="00:17:58.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but it gets out of your way otherwise.""" start="00:18:00.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Just a couple of conventions""" start="00:18:02.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to get stuff into your file system.""" start="00:18:04.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not sure if Org-Roam now,""" start="00:18:06.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""what's the current state there?""" start="00:18:08.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Do they do ID generation out of the box?""" start="00:18:11.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Is there a standard popular convention or whatever?""" start="00:18:13.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""not sure, didn't follow,""" start="00:18:18.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I'm very happy that org-roam still exists""" start="00:18:19.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because I think porting tools into emacs is very cool,""" start="00:18:21.760" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I noticed that the wikipedia link you wrote was typed wrongly - and it got me thinking about how to deal with broken links at scale? Do you have any thoughts on this? What about archival?""" start="00:18:25.040" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""I guess next question,""" start="00:18:25.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I noticed that the wikipedia link you wrote""" start="00:18:27.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""was typed wrongly, oh no garbage in, garbage out,""" start="00:18:29.175" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I think garbage in, garbage out, garbage well spotted.""" start="00:18:38.633" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""How do you do that? Oh, I typed it""" start="00:18:45.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I typed it from... Yeah, right. I didn't,""" start="00:18:47.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I didn't paste this. Right. Yeah, yeah.""" start="00:18:50.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Janitorial tasks, that's the umbrella term.""" start="00:18:53.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""How do you deal with this?""" start="00:18:55.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like if you put stuff like this into your notes,""" start="00:18:56.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you hopefully get a 404 code from wikipedia""" start="00:18:59.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because the page doesn't exist.""" start="00:19:05.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Let's now check. You get a 404, and then you could write a tool""" start="00:19:06.860" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that checks all the links periodically""" start="00:19:12.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and tells you about broken links, like a broken link checker""" start="00:19:13.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that then looks up maybe automatically""" start="00:19:17.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the last good version on archive.org""" start="00:19:19.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then the Wayback Machine""" start="00:19:21.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then corrects the link with the archived version,""" start="00:19:23.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because the live one is gone. This happens all the time on the Internet.""" start="00:19:26.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Even if you don't mistype,""" start="00:19:30.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you could... you know things go out of order so""" start="00:19:31.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""what do you do with that? You need to automate this.""" start="00:19:35.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not clicking every link manually.""" start="00:19:42.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I have like, what's it now, 11,000 notes or something.""" start="00:19:45.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""This is not a thing that humans are good at.""" start="00:19:49.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not good at this.""" start="00:19:52.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I will never finish anything else if I do this manually.""" start="00:19:52.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So write a tool, write a script,""" start="00:19:55.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""get a script from the interwebs.""" start="00:19:57.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""There are tools like this plenty that can do it.""" start="00:19:58.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then you just need to do the wiring.""" start="00:20:01.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and that should help.""" start="00:20:06.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You could automate this in Emacs, of course, right?""" start="00:20:07.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""For every file in my note directory,""" start="00:20:09.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""look if there's a link inside""" start="00:20:12.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then check the URL or whatever.""" start="00:20:14.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Also works for inter-note connections.""" start="00:20:16.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""This could also break if you rename files or remove files""" start="00:20:18.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and don't use a denote function,""" start="00:20:21.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which I believe takes care of backlinks and forward links""" start="00:20:23.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and keeps them organized.""" start="00:20:26.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you do this manually on another device,""" start="00:20:28.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""out of denote, out of Emacs, in Vim, I don't know, then yeah, mistakes happen""" start="00:20:31.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and you need to deal with mistakes""" start="00:20:38.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and heal and create scar tissue there in some way""" start="00:20:39.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so write janitorial tools to do that. It's also,""" start="00:20:44.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm mentioning the term janitorial tools""" start="00:20:48.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""a couple of times now,""" start="00:20:50.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because that's the term that we in the forums at least""" start="00:20:51.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""usually talk about things like find orphaned notes,""" start="00:20:55.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""notes that no one links to find broken links,""" start="00:20:58.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""clean up references reformat notes, stuff like this.""" start="00:21:02.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Find large notes and then suggest them""" start="00:21:07.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to the user to break them up.""" start="00:21:10.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like these are tasks that you can do mechanically,""" start="00:21:11.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but also it's better if you use a tool to get started,""" start="00:21:14.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""otherwise you waste a lot of time.""" start="00:21:16.383" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Comment: When I completely re-worked my config some two years ago, I also tried out some of these packages for making notes in Emacs\.\.\.""" start="00:21:20.591" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""Next question, when I complete, next long question.""" start="00:21:20.591" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm going to copy this over because maybe...""" start="00:21:26.633" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""&quot;when I completely reworked my configs from two years ago,""" start="00:21:34.965" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I also tried some of these packages for making notes,""" start="00:21:42.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but none of them actually fit my purpose,""" start="00:21:44.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because I do not like the idea of splitting up my ideas.""" start="00:21:47.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm writing prose.""" start="00:21:51.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I collect material, reading lists, and so on""" start="00:21:53.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in just one big file. Everything fits in.""" start="00:21:55.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""In this notebook file, I do archiving from time to time.""" start="00:21:57.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I search these files in Finder""" start="00:22:00.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to find old notes I would like to go back to.""" start="00:22:02.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So if I write a paper,""" start="00:22:04.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it's basically an extract from my old notes""" start="00:22:06.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that only have one structure.""" start="00:22:09.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when I took them time structures my thought and my notes""" start="00:22:13.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but they would get lost if I split them up in a network""" start="00:22:17.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like structure like a wiki, Zettelkasten my two cents""" start="00:22:20.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""by the way I work on legal sociological topics""" start="00:22:22.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm a lawyer by training.&quot;""" start="00:22:24.716" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You know, Luhmann was a German-style""" start="00:22:29.453" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""weird sociologist,""" start="00:22:34.591" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and sociology studies are""" start="00:22:35.633" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like the first four semesters at university,""" start="00:22:41.049" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where a lot of, I don't know any of the terms in English,""" start="00:22:44.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""a lot of these things were theories""" start="00:22:48.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in the loosest and broadest sense.""" start="00:22:51.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Some were just models of how things might behave,""" start="00:22:53.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but nobody knew because they were not empirically backed.""" start="00:22:55.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Some were empirically backed,""" start="00:22:58.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then also there was some sense-making.""" start="00:23:00.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then also in sociology,""" start="00:23:01.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you have some structure analysis of,""" start="00:23:03.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like demographics and things like that.""" start="00:23:09.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So very, very hard fact and statistics heavy things.""" start="00:23:11.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So broad topic. And there's a lot of interconnections.""" start="00:23:15.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I can see the approach here.""" start="00:23:20.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not going to defend Zettelkasten""" start="00:23:22.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so that you in the end become a Zettelkasten aficionado""" start="00:23:25.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or whatever I mean, if it works, fine, more power to you like""" start="00:23:30.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""reminds me of Twyla Tharp's like the shoebox approach""" start="00:23:33.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or whatever it was called""" start="00:23:37.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where she just dumped everything inside""" start="00:23:39.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for her next project, like an idea box,""" start="00:23:41.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like real physical things like oh, I want to, I don't know,""" start="00:23:44.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like this weird 8-bit do controller inside""" start="00:23:47.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then eventually she would spread out everything she collected,""" start="00:23:50.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""newspaper clippings and I don't know, maybe toenails or some weird stuff,""" start="00:23:54.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know what she actually put there""" start="00:23:59.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then make sense of this""" start="00:24:01.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and think of something of putting these sorted pieces into context""" start="00:24:03.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and if you just dump stuff into a notebook file""" start="00:24:08.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then rework the stuff, yeah, fine""" start="00:24:12.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""One answer is Zettelkasten is great for mathematics.""" start="00:24:20.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Or maybe you can have... Oh, next question.""" start="00:24:22.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Sorry, I jumped. So my answer is, this was not a question,""" start="00:24:25.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I'm happy for you. So that's still an answer.""" start="00:24:31.440" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How Zettelkasten is useful for highly mathematical STEM academic fields like computer science or engineering fields?""" start="00:24:34.800" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""Next question. How Zettelkasten is useful""" start="00:24:34.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for highly mathematical STEM academic fields""" start="00:24:38.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like computer science or engineering fields,""" start="00:24:42.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like when studying a STEM field?""" start="00:24:44.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I need to unpack the acronym again maybe for the audience.""" start="00:24:48.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""M is mathematics. Engineering is E.""" start="00:24:53.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Science and tech, tech, techno,""" start="00:24:58.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know, maybe technical. I could look this up, right?""" start="00:25:02.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""STEM, what was STEM again? I'm doing a bad job.""" start="00:25:05.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Science, technology, engineering, mathematics.""" start="00:25:09.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Okay, so probably technology is the computer stuff.""" start="00:25:12.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Yeah, STEM.""" start="00:25:16.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Dear audience, that's science, technology,""" start="00:25:17.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""engineering, mathematics, academic fields.""" start="00:25:19.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""What should we make notes of?""" start="00:25:23.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""The important bits are interconnected in a hierarchy,""" start="00:25:24.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""usually chapters of a book.""" start="00:25:27.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Yes, someone did the job of making the order""" start="00:25:28.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""out of the chaotic findings""" start="00:25:31.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that people did over hundreds of years for you.""" start="00:25:33.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's an order. But there are also many textbooks.""" start="00:25:35.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So opinions may vary. The presentation may vary.""" start="00:25:39.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Some textbooks may click with you,""" start="00:25:42.060" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""while others stay opaque, and you can't get into the meat.""" start="00:25:43.675" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Sorry, I'm just typing the answer right now.""" start="00:26:04.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Copying information to another box is not, yeah.""" start="00:26:12.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Yeah, let's see what the first answer is.""" start="00:26:17.380" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Someone posted that Zettelkasten is great for mathematics,""" start="00:26:19.091" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""incredible for computer science.""" start="00:26:21.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""With Org-Babel you can have living source code, yes,""" start="00:26:22.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that you can execute from the note,""" start="00:26:25.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""also true for a formula,""" start="00:26:26.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and LaTeX in interspersing of images and SVGs.""" start="00:26:28.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You can even use Agda if you want to.""" start="00:26:35.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Ah, I think I know who typed the answer.""" start="00:26:37.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Hello, Oliver. If you want to have living proofs in your notes,""" start="00:26:39.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""even inline LaTeX is in here. That's, yeah, yeah, yeah.""" start="00:26:43.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""quote the sentence as is and add, yeah, add something,""" start="00:26:47.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe your own summary.""" start="00:26:58.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I would suggest add your own summary""" start="00:27:01.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because we're looking at the Etherpad, right?""" start="00:27:02.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Maybe I just copy this over so you can all...""" start="00:27:11.300" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""The Etherpad's indentation is missing with what Org is doing.""" start="00:27:14.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And the answer was probably submitted by Oliver""" start="00:27:30.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""just in case someone wants to see""" start="00:27:37.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""who that could have been with the Agda reference""" start="00:27:40.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because nobody uses Agda,""" start="00:27:47.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""nobody in the world maybe. So Agda is just a, yeah,""" start="00:27:49.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""let's say it's good for proofing the code that you type""" start="00:27:56.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""as you type it in the compilation set, very weird""" start="00:28:01.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you've never heard of this, so check that out.""" start="00:28:04.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So question was how Zettelkasten is useful for these kinds of things""" start="00:28:07.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""yeah it sounds like in these kinds of fields""" start="00:28:13.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that you only deal with facts.""" start="00:28:16.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's also kind of sort of true for psychology where you have a lot of,""" start="00:28:18.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and also law, where you at least in German""" start="00:28:24.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and our style of law where you have a lot of,""" start="00:28:29.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you have thick books of law""" start="00:28:32.012" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and very very little records,""" start="00:28:33.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's not the right phrasing,""" start="00:28:38.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you don't rely on the ruling""" start="00:28:41.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""as much as you do in, for example, the USA,""" start="00:28:44.541" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you need to be aware of every court ruling""" start="00:28:48.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to then put stuff into context""" start="00:28:52.675" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and all of this is like the current how you do law.""" start="00:28:53.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know.""" start="00:28:59.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not a lawyer and also not good at this in English.""" start="00:29:01.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So, sorry.""" start="00:29:04.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If I don't find the cool words and technical terms,""" start="00:29:04.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you probably all know.""" start="00:29:08.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""What do you do with these kinds of things?""" start="00:29:11.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You need to collect a lot of stuff.""" start="00:29:12.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like the previous questionnaire mentioned,""" start="00:29:14.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""hey, I'm just copying stuff over""" start="00:29:17.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then I have a good time and can write about this""" start="00:29:19.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and create prose in the end.""" start="00:29:22.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like with mathematics, you can't.""" start="00:29:24.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You can't do a lot when you're still working on the foundations.""" start="00:29:26.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like, what do you want to do there?""" start="00:29:36.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You don't innovate there. You just need to learn the stuff.""" start="00:29:38.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Typing things out and creating your own organization""" start="00:29:41.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""of how things are connected there,""" start="00:29:45.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's where the depth of processing increases,""" start="00:29:49.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like the actual depth of processing""" start="00:29:52.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so that it takes more effort""" start="00:29:53.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and affects more parts of your brain, basically,""" start="00:29:57.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which then helps with remembering stuff.""" start="00:30:01.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm trying not to go into a 10 minute tangent here, but""" start="00:30:03.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you've ever tried to memorize stuff with flashcards""" start="00:30:12.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and you put a, I don't know, coffee stain""" start="00:30:18.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or a weird scribble or spilled something on one of these cards,""" start="00:30:20.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""actual physical cards there,""" start="00:30:24.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this card now has another piece of information""" start="00:30:26.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that is actually important""" start="00:30:29.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because it makes the card stand out""" start="00:30:32.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""more and more worthy of being remembered""" start="00:30:36.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because now one of these cards""" start="00:30:41.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""has this coffee circle thingy""" start="00:30:42.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and all the others don't so this one stands out""" start="00:30:44.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and this may actually improve""" start="00:30:46.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""how you learn this particular fact""" start="00:30:49.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that you want to remember or memorize""" start="00:30:51.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Similar, like what kind of principle""" start="00:30:57.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""do people postulate is at play here?""" start="00:31:00.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Again, last time I went into""" start="00:31:04.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this kind of stuff was at university,""" start="00:31:06.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so I'm not sure if there's something new""" start="00:31:08.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in the field of flashcard learning.""" start="00:31:11.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not aware of anything, let's say.""" start="00:31:15.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And the idea back then that we spread""" start="00:31:18.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and that was taught to us was like this.""" start="00:31:23.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That more information and more context and more stimuli""" start="00:31:27.540" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and making things more interesting,""" start="00:31:32.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's what makes it memorable.""" start="00:31:34.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you go for a walk and then associate things with places.""" start="00:31:39.341" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Going for a walk is a different activity""" start="00:31:43.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""than imagining going for a walk.""" start="00:31:47.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's also different from not doing anything""" start="00:31:48.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and just sitting in your chair""" start="00:31:52.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and relaxing because you're not engaged.""" start="00:31:54.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You're losing, like you're using""" start="00:31:56.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""a bit of your brain matter to do the work""" start="00:31:58.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""while the rest of your body is stagnant.""" start="00:32:01.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You don't smell anything different.""" start="00:32:04.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You don't hear, see, feel on your skin,""" start="00:32:07.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""everything's constant,""" start="00:32:09.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like you're in a, what are these called?""" start="00:32:11.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""These chambers where you're locked""" start="00:32:15.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""into very salty water, I think.""" start="00:32:18.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Floating chambers, so sensual deprivation chambers.""" start="00:32:21.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You're depriving yourself of a lot of sensual input""" start="00:32:24.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you just try to really focus""" start="00:32:29.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""into everything with your head.""" start="00:32:31.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you engage more of your body,""" start="00:32:33.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you engage more of your senses,""" start="00:32:35.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you have an easier time there.""" start="00:32:36.008" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""What does it have to do with this answer?""" start="00:32:37.675" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""My answer would be the value is in rephrasing,""" start="00:32:40.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in making your own connections eventually.""" start="00:32:46.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know, the foundational laws of geometry,""" start="00:32:51.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""there's no room for innovation,""" start="00:32:56.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but there's maybe a room for association.""" start="00:32:58.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like, hey, I remember this, like, if you can't figure out""" start="00:33:00.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""what the name of a certain axiom, lemma, whatever it is, and it has a name,""" start="00:33:03.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""adding your own story to the note doesn't hurt.""" start="00:33:09.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you say, hey, this is what my grandfather""" start="00:33:12.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""taught me with wire and sticks when we tried to measure""" start="00:33:14.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""whatever in the sand on a vacation one day.""" start="00:33:18.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And these kinds of things make it more memorable.""" start="00:33:22.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And that's at least something that you could need to then,""" start="00:33:26.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which is the ultimate purpose of STEM at university,""" start="00:33:31.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you can pass the tests. Like that's it.""" start="00:33:34.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You either, and eventually you embody the knowledge, right?""" start="00:33:39.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you do this stuff over and over again,""" start="00:33:43.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you don't need to look up""" start="00:33:44.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""how to do a certain kind of proof.""" start="00:33:45.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And you just do the proof when you need to do the proof.""" start="00:33:47.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But maybe you forget all the kinds of weird proofs""" start="00:33:50.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that you encountered in your life""" start="00:33:53.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because you only remember the 10 most weird ones,""" start="00:33:55.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but you had 15 in your life.""" start="00:33:57.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And what's about the, what do you do""" start="00:33:58.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with the five missing ones? They just fade away.""" start="00:34:00.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But if you capture them in some way or another,""" start="00:34:02.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""as superficial as it may be,""" start="00:34:05.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and you still have access to this later""" start="00:34:08.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when you need to check your personal inventory""" start="00:34:10.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""of mathematical proofs so my answer would be...""" start="00:34:21.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Let's type in my answer""" start="00:34:30.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""on Etherpad would be... I'm not able to type.""" start="00:34:33.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Sorry. My answer would be this.""" start="00:34:46.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Foundational knowledge is important for tests mostly""" start="00:34:52.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and eventually becomes your inventory of skills.""" start="00:35:05.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Synth programming, like I don't need to look up for loops,""" start="00:35:23.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I just do for loops and that's it, right?""" start="00:35:25.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But still, I do have notes about for loops, I think,""" start="00:35:29.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in different languages, like Python,""" start="00:35:33.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the, what is it called, list comprehension.""" start="00:35:34.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not using Python, but it's so quirky.""" start="00:35:37.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's quirky and I captured this on a note""" start="00:35:39.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because I needed to get myself used to the pieces""" start="00:35:42.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I needed to look at the syntax anyway,""" start="00:35:45.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then this is that part and this goes there.""" start="00:35:48.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And I did this work, like this separation stuff on a note""" start="00:35:50.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to then do the work with more engagement,""" start="00:35:55.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like engage more so I can remember more later.""" start="00:36:01.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't remember all the details,""" start="00:36:04.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I do remember there were different parts,""" start="00:36:06.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then I can look up the note.""" start="00:36:08.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And it helps me refresh my memory rather quickly,""" start="00:36:09.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because it's written by me for me""" start="00:36:12.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in a way that I'm writing these notes""" start="00:36:15.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for 15 years or something.""" start="00:36:17.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""16, at least, 16 years or something.""" start="00:36:18.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So it's much better than looking, especially now,""" start="00:36:27.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it's much better than going to the web""" start="00:36:30.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and doing a web search for the same topic,""" start="00:36:31.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because I will probably not get the useful resource""" start="00:36:33.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that I relied on some eight years ago anyway,""" start="00:36:37.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but some garbage instead,""" start="00:36:40.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe AI generated stuff, I don't know.""" start="00:36:41.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I have my personal copy of this""" start="00:36:44.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and it's not just copying the thing into a box,""" start="00:36:48.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like from one box into another,""" start="00:36:50.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""from the public internet box into my own buffer,""" start="00:36:51.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that Zettelkasten that's closer to me,""" start="00:36:54.020" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like a fridge is closer to my kitchen""" start="00:36:56.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and where I want to eat when I'm hungry""" start="00:36:58.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""than going to the supermarket""" start="00:37:01.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or out into the wild and hunt animals,""" start="00:37:02.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like this is all about proximity""" start="00:37:04.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and also brought about ownership, like I own these notes""" start="00:37:06.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I still take responsibility""" start="00:37:10.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for what I put on them to some degree""" start="00:37:13.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like sometimes they're really bad""" start="00:37:14.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I want to distance myself,""" start="00:37:15.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but still yeah, so that's it, I'm just I'm leaving,""" start="00:37:17.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm not typing this out, I'm leaving copy box fridge,""" start="00:37:23.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""there was a term for this, wait a second,""" start="00:37:29.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""setup custom fridge can be fridge-like buffer of knowledge""" start="00:37:32.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm just, let me just try to copy this note verbatim into the etherpad""" start="00:37:38.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then see whether you folks can do something with it.""" start="00:37:48.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""The formatting. See appendix A. I am doing this here.""" start="00:37:51.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Appendix A. I'm not going to read this,""" start="00:38:00.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but then you have a FridgeLab buffer of knowledge.""" start="00:38:10.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Local link in the supply chain. That was the term.""" start="00:38:13.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Didn't remember that one.""" start="00:38:16.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's at least a local link in supply chain.""" start="00:38:18.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Also, engagement doing the work of not copying,""" start="00:38:28.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but rephrasing, organizing,""" start="00:38:36.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but sometimes also just typing the stuff in""" start="00:38:38.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's how people romanticize learning a basic""" start="00:38:46.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like there were magazines with a lot of code listings""" start="00:38:51.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and they just typed the code it was quite some effort""" start="00:38:55.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you eventually got better at this""" start="00:38:58.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but you did do mistakes and then you needed to correct""" start="00:39:00.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and look through the source code carefully to spot the typo""" start="00:39:03.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's apparently virtue, at least people claim it's a virtue.""" start="00:39:06.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't deny it's a virtue because I went through the same kind of crap""" start="00:39:11.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I believe it strengthened my character, for sure, but still.""" start="00:39:15.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Maybe it's not that useful, but maybe it is. I don't know.""" start="00:39:20.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""There's studies I remember,""" start="00:39:26.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I don't remember any interesting results.""" start="00:39:27.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's not like it's a 10x improvement""" start="00:39:30.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""of recall if you type this, but it may be significant.""" start="00:39:32.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Just check it out for yourself. I'm not sure.""" start="00:39:36.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Next question, sorry.""" start="00:39:39.320" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: In your experience, would you say that you re-use most of your notes?""" start="00:39:40.960" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""In your experience, would you say that you reuse most of your notes?""" start="00:39:40.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Watching your demo, I thought that more notes you create,""" start="00:39:45.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the less you might reuse them. Yes, that's true.""" start="00:39:47.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I have 11,000 notes or something,""" start="00:39:51.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I don't use 11,000 notes every day.""" start="00:39:54.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I can only use a fraction of them.""" start="00:39:57.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But let's say you have the Feynman Darling notes,""" start="00:39:59.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you would probably use these.""" start="00:40:06.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Imagine you have the same 12 Darlings for a year.""" start="00:40:08.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Then you use these 12 thingies for one year more often.""" start="00:40:11.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""than most of your other notes,""" start="00:40:15.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because these become your entry points""" start="00:40:17.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""into what's in my Zettelkasten today.""" start="00:40:20.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""These become your entry points""" start="00:40:22.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""of what do I want to work on today?""" start="00:40:23.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""These become your, where can I put""" start="00:40:25.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the weird stuff that I just found?""" start="00:40:27.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Does it stick to any of these surfaces?""" start="00:40:29.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Entry point into the process.""" start="00:40:31.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But let's say, five years later,""" start="00:40:33.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe these 12 Feynman darlings were your darlings""" start="00:40:41.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""during university studies for STEM field,""" start="00:40:45.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you had a hard time figuring out""" start="00:40:47.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""how the Zettelkasten works for your benefit.""" start="00:40:49.340" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then five years later, you're in a job and you don't need all of them""" start="00:40:52.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because your subject matters from university, they're gone.""" start="00:40:56.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you're not at a day job and you have different darlings""" start="00:41:00.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""whatever your day job is""" start="00:41:03.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe you're a mathematician at an insurance company""" start="00:41:04.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so you will probably have insurance related domain darlings pouring in""" start="00:41:09.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and some academic darlings falling off the bandwagon""" start="00:41:14.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because no time for these maybe other hobbies come in""" start="00:41:18.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like i didn't have anything related to child Rearing,""" start="00:41:21.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""bearing is when you produce them""" start="00:41:25.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and put them into the wild, right?""" start="00:41:29.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Rearing is when you let them grow up, I don't know""" start="00:41:30.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like when you have children and make them not die""" start="00:41:34.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and get larger and do stuff, right?""" start="00:41:36.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I did have a couple of things in advance, but""" start="00:41:42.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That was not a daily concern. Now it is.""" start="00:41:44.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Now I'm a father and that's a new concern in my life.""" start="00:41:47.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Getting things done also tackled this, right?""" start="00:41:51.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you remember getting things done, everyone,""" start="00:41:54.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you had areas of responsibility.""" start="00:41:56.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's a new area of responsibility and you could represent,""" start="00:41:58.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""sorry, you could represent these in your Zettelkasten,""" start="00:42:01.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you find that you can spell out your areas of responsibility""" start="00:42:06.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""well, then you can see, well, I've learned something new,""" start="00:42:10.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""can I become a better person""" start="00:42:12.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in one of my core areas of responsibility?""" start="00:42:14.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Yes or no? Why not?""" start="00:42:16.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Then you will use these more than the other notes.""" start="00:42:18.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like the weird thing you found last month.""" start="00:42:21.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Last month, you will probably not reference that weird thing every day.""" start="00:42:25.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Natural process. But it's there.""" start="00:42:29.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And eventually you get back to something,""" start="00:42:32.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you serve access to this like that's the that""" start="00:42:34.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and whatever this changes like going through these processes""" start="00:42:39.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""change you if I if I spend a month getting nerd sniped on""" start="00:42:43.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know chocolate manufacturing or something""" start="00:42:51.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then I don't need this ever these things ever again most likely""" start="00:42:56.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but going through the procedure of""" start="00:43:00.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""becoming the master chocolate manufacturer of my town,""" start="00:43:03.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""at least in theory, will do something with me""" start="00:43:06.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when I encounter the next topic.""" start="00:43:10.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I will think of chocolate manufacturing.""" start="00:43:12.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I wouldn't have thought of chocolate manufacturing before.""" start="00:43:14.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""In fact, I didn't think about chocolate""" start="00:43:17.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""manufacturing yesterday. I just made this up on the spot.""" start="00:43:18.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""What does this say about me today?""" start="00:43:21.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Maybe because we were out of chocolate,""" start="00:43:23.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe because I don't know,""" start="00:43:26.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe there's nothing that looks like chocolate here""" start="00:43:30.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know so it just came up and now it's there""" start="00:43:33.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and things have changed for the better,""" start="00:43:36.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for the worse, I don't know but they've changed""" start="00:43:39.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and that's the real takeaway there""" start="00:43:41.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where do you put the effort?""" start="00:43:43.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where do you want to put the effort? and will it pay off?""" start="00:43:44.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe if not, then maybe spend the time on something else""" start="00:43:48.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like don't try to Zettelkastenify something you hate""" start="00:43:54.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""just to I don't know,""" start="00:43:57.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""do your due diligence if you don't want to""" start="00:43:59.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because then you'll hate the process""" start="00:44:04.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's worse than not using notes a lot. Next question.""" start="00:44:06.720" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How are notes structured and accessed when the notes grow from 10K to 100K notes?""" start="00:44:15.280" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""How are notes structured and accessed""" start="00:44:15.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when the notes grow from 10k to 100k notes?""" start="00:44:17.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""yes, that's a field of exploration,""" start="00:44:20.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I mean that the lower realm there I don't know anybody""" start="00:44:22.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""who's using a hyperlinked 100k note archive.""" start="00:44:25.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I do know people who have a lot of text files""" start="00:44:32.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like the Evernote style""" start="00:44:37.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""they capture everything and put the verbatim copy into their stuff""" start="00:44:38.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then they have a lot more items of course""" start="00:44:42.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but these don't really count,""" start="00:44:47.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""these are like web clippings of websites themselves""" start="00:44:51.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I've read how many hundreds of websites today""" start="00:44:54.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I could have captured everything automatically,""" start="00:44:58.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but they wouldn't, like the files there, the clippings,""" start="00:45:02.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""they wouldn't have contributed""" start="00:45:07.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""anything meaningfully to my knowledge base,""" start="00:45:10.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because I'm not thinking about the stuff,""" start="00:45:12.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm thinking about the stuff that I'm spending time on.""" start="00:45:14.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""What about that?""" start="00:45:16.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Yeah, how are notes structured and accessed""" start="00:45:18.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when the notes go from one to 100k?""" start="00:45:20.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I will imagine that it becomes a matter that's speculation.""" start="00:45:22.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""We'll see. My speculation is this.""" start="00:45:31.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it's going to be self-similar, like Mandelbrot images,""" start="00:45:34.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you have recursive patterns.""" start="00:45:40.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""First, you have a couple of notes.""" start="00:45:43.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You can leave through them digitally or physically easily.""" start="00:45:46.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then eventually, you need to rely on structures""" start="00:45:49.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or some kinds of entry points,""" start="00:45:52.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which we usually call structures,""" start="00:45:54.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""thanks to Sascha. Perfect. Thank you.""" start="00:45:55.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And the clue there is,""" start="00:46:03.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Eventually, you have hundreds or maybe thousands,""" start="00:46:04.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""not hundreds or thousands, of structure notes.""" start="00:46:10.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then you have the same problem""" start="00:46:12.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that you had on the lower base layer.""" start="00:46:13.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And now you will probably look for another tool.""" start="00:46:16.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But there is nothing else that's not also a structure note""" start="00:46:19.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but is structuring other structures mostly""" start="00:46:22.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""instead of structuring the low-level notes.""" start="00:46:25.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But this distinction, I want to point out, doesn't pay off.""" start="00:46:28.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it seems like it doesn't pay off""" start="00:46:31.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to say hey I have these foundational permanent notes""" start="00:46:34.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then I have these meta notes,""" start="00:46:37.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""these maps and structures""" start="00:46:38.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then I have these super mega structures""" start="00:46:40.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which are not permanent,""" start="00:46:42.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which are not structures, which are not...""" start="00:46:44.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know... This doesn't seem to pay off,""" start="00:46:45.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because eventually there is another level and another level""" start="00:46:47.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and also sometimes you want to talk""" start="00:46:51.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""about a structure as a data point""" start="00:46:53.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like hey I did this writing project""" start="00:46:56.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""once it was really cool link to writing project""" start="00:46:58.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and the writing project is a table of contents huge hierarchy or whatever.""" start="00:47:00.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Is it not a link to a thing?""" start="00:47:04.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Back then you get into all these weird academic questions""" start="00:47:06.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""about the nature of links""" start="00:47:10.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and there's no gold at the end of that rainbow, let's say.""" start="00:47:12.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""At least I've never seen anyone come back with any gold.""" start="00:47:17.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I've seen people come back with very long faces""" start="00:47:21.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and sadness in their eyes""" start="00:47:24.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because all the effort, all the metadata was for naught.""" start="00:47:26.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So, how do you do this?""" start="00:47:31.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You figure out, when you get to 10k,""" start="00:47:32.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you will probably have figured,""" start="00:47:36.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and if you do 10k, not like web clippings,""" start="00:47:37.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but really like you did put in effort to get there""" start="00:47:40.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and type everything yourself in one way or another""" start="00:47:42.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you would have figured out something""" start="00:47:46.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that kind of sort of works for you around that milestone.""" start="00:47:48.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then I believe in you,""" start="00:47:52.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you will be equipped to get to 20k, 30k,""" start="00:47:53.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because you feel comfortable in your notes.""" start="00:47:58.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then you can expand further.""" start="00:48:00.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And it will probably look different""" start="00:48:02.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for someone in STEM fields than for an artist.""" start="00:48:03.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Maybe, maybe not. I don't know.""" start="00:48:06.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Maybe a fine arts artist would woodcrafter,""" start="00:48:09.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe these kinds of folks will have different structures""" start="00:48:14.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and rely more on visuals, schemas,""" start="00:48:17.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""whole part relationships, whereas mathematicians may not.""" start="00:48:22.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I don't know, I don't know, we need to compare""" start="00:48:28.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and this will be the interesting like""" start="00:48:31.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if the internet survives and we all survive""" start="00:48:33.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and also Zettelkasten as an idea sticks on""" start="00:48:36.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I hope we can have this discussion""" start="00:48:40.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""every year in five years, in ten years""" start="00:48:43.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then see how people transparently evolve""" start="00:48:44.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""their gardens, their processes, their note-taking systems""" start="00:48:50.040" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: I would be very interested in your thought on this video by Westenberg - https://www\.youtube\.com/watch?v=CjSWwmg-JRM (Why I Deleted My Second Brain: A Journey Back to Real Thinking)""" start="00:48:55.160" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""next question not a question but i would be very interested""" start="00:48:55.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in your thoughts on this video""" start="00:49:00.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""by Westenberg. Okay. This is not spam.""" start="00:49:01.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't... Uh, there's Joe Westenberg's Youtube channel,""" start="00:49:07.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""&quot;Why I Deleted My Second Brain:""" start="00:49:13.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""A Journey Back to Real Thinking.&quot;""" start="00:49:15.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I think I didn't watch the video but read an article.""" start="00:49:22.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Not sure where. Let me check my Zettelkasten.""" start="00:49:30.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's not on screen sharing. That was stupid.""" start="00:49:34.383" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm probably not going to watch it right now with everyone here,""" start="00:49:36.216" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so my thoughts on deleting and stuff like that.""" start="00:49:48.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I do remember there was a very cleverly written, well-written post""" start="00:49:51.660" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and the claim was, from my perspective,""" start="00:49:58.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and that's not doing the work of...""" start="00:50:02.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's not doing the work of the author justice.""" start="00:50:04.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But the shortest summary is that there seems to be false contradiction,""" start="00:50:13.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where the contradiction stems from how the opposite side,""" start="00:50:19.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the note taking, the deliberate note taking,""" start="00:50:24.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""taking a lot of notes,""" start="00:50:27.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""all the notes every time, stuff, like how this is presented.""" start="00:50:28.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I would say this is more on the collecting""" start="00:50:31.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and not on the connecting side of things.""" start="00:50:34.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So like I mentioned for the, some 30 minutes ago""" start="00:50:36.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when I talked about Roam, Roam Research.""" start="00:50:42.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you start your day with a daily note,""" start="00:50:45.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""journal style, and then branch out from there,""" start="00:50:47.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you do at least have time as a structure""" start="00:50:50.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that helps you to organize what you put in.""" start="00:50:53.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But also, it can get very messy""" start="00:50:57.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and very weirdly interconnected,""" start="00:50:59.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like this meme of the with a guy""" start="00:51:01.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""standing in front of a board""" start="00:51:04.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with all these lines connecting things""" start="00:51:10.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and just, you know, with the madness in his eyes""" start="00:51:14.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you can do a lot of stuff in there.""" start="00:51:17.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But at a certain point, it gets hard""" start="00:51:23.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to also get out of your own head, let's say.""" start="00:51:27.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you do it in this kind of style,""" start="00:51:30.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it can get hard to get off your own head.""" start="00:51:33.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And one litmus test that you may find enjoyable""" start="00:51:35.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you struggle with this""" start="00:51:39.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""is to publish more. Because having access""" start="00:51:41.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to a very deeply interconnected web of stuff""" start="00:51:46.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""thoughts, ideas, notes, wisdoms, whatever""" start="00:51:49.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""very deeply connected,""" start="00:51:52.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like not a pile, yarn, wool, what's the ball?""" start="00:51:55.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Ball of yarn? No, that's boring.""" start="00:52:02.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Let's say like you have a lot of yarn""" start="00:52:06.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you just create chaos and entropy""" start="00:52:09.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and can't untangle it. It's a very tangled mess.""" start="00:52:11.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So it's a very dense, dense thingy""" start="00:52:13.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's now its own kind of structure. Like if you have this""" start="00:52:15.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And in your head, when you think about your notes,""" start="00:52:18.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you may have some interesting pathways there.""" start="00:52:21.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But you need to serialize and put into a linear order""" start="00:52:24.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in order to communicate.""" start="00:52:29.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Otherwise, people cannot follow your thought.""" start="00:52:30.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it's a pity because we still rely""" start="00:52:32.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""on the book style of writing""" start="00:52:36.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and also hypertext which is making navigation easy""" start="00:52:39.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but not telling a story easier in our modern times""" start="00:52:42.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but we still rely a lot on books""" start="00:52:47.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which take take a lot of intertwined stuff,""" start="00:52:50.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""put it into one order so you can read from start to finish.""" start="00:52:54.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But then, in order for you to make sense of this,""" start="00:52:58.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you need to chop it up,""" start="00:53:01.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""associate with things you already know,""" start="00:53:02.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then attach things and create a new kind of structure""" start="00:53:04.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""through the narrative,""" start="00:53:07.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because it's only one kind of presentation""" start="00:53:08.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's given to you.""" start="00:53:11.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And there may also be different kinds of presentations,""" start="00:53:12.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like I also mentioned for the STEM fields,""" start="00:53:14.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you have different textbooks""" start="00:53:16.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""from different eras of mathematics foundations,""" start="00:53:18.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you see, hey, this one clicks, this one doesn't.""" start="00:53:21.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Why? It's the same stuff, but they present it differently.""" start="00:53:24.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And the presentation matters. The presentation matters.""" start="00:53:27.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And if you only deal with the chaos,""" start="00:53:30.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the weird entanglement,""" start="00:53:33.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you capture everything and anything,""" start="00:53:34.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""how many, I don't know, how many hairs you lost that day or whatever.""" start="00:53:36.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you capture everything in there,""" start="00:53:41.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you don't create the kind of value""" start="00:53:43.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that is linearizable into thought,""" start="00:53:45.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which also makes reading your own stuff later,""" start="00:53:47.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe unbearable, maybe at least hard and making sense.""" start="00:53:49.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Now we come back to one of the earlier questions,""" start="00:53:55.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like, why do I not use outlines?""" start="00:53:57.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Because Org-node allows me to do outlines.""" start="00:54:00.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Well, I try to write my notes as blog posts,""" start="00:54:03.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""very short blog posts, microblogging, if you will,""" start="00:54:06.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""paragraphs, a couple of paragraphs.""" start="00:54:09.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Maybe it's also more nested because it's a huge topic.""" start="00:54:11.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's a complex topic. That also happens.""" start="00:54:14.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But then it's more like an article,""" start="00:54:16.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""a long blog post, or an essay,""" start="00:54:18.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but never just vomiting thought out onto the page,""" start="00:54:21.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because then you will get back to the note""" start="00:54:26.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and you will find, hey, there's a lot of vomit.""" start="00:54:28.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But you never follow this kind of phrase with nice.""" start="00:54:31.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I enjoyed reading that. It's always me.""" start="00:54:36.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Oppressing because of its mass,""" start="00:54:40.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it's also getting in the way of having new ideas""" start="00:54:43.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because whatever is there and you need to tangle it""" start="00:54:46.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you lost your new genuine idea,""" start="00:54:48.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this can also happen.""" start="00:54:52.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I'm not sure what the Westenberg video contains,""" start="00:54:56.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but the sentiment there of deleting everything,""" start="00:55:00.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it makes sense if you find yourself in a situation""" start="00:55:03.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you don't have a productive system.""" start="00:55:07.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and the notes from 2009 in my own Zettelkasten""" start="00:55:09.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""aren't of the highest quality standards""" start="00:55:13.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I rewrite most of them when I encounter them,""" start="00:55:15.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I can still use a couple as is and sometimes they're just garbage,""" start="00:55:17.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but as Luhmann said garbage like trickles to the ground""" start="00:55:23.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and forms a nice sediment layer there in the septic tank of your thought machine,""" start="00:55:28.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""your thought thinking environment.""" start="00:55:34.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But clear water separates and then rises to the top""" start="00:55:36.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and that's what you work with.""" start="00:55:40.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""it's never going to be 100% useful. But if it's 90% garbage""" start="00:55:42.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and if the water is, if the septic tank is never clearing,""" start="00:55:47.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you probably need to start""" start="00:55:51.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""over and rethink your approach.""" start="00:55:54.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Maybe there was just too much garbage,""" start="00:55:55.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""too much toxic waste in there, whatever that means, right?""" start="00:55:57.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I do understand this, but also I would say""" start="00:56:01.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe maybe they tried to do too much with a different mindset""" start="00:56:07.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and it just didn't click and then they,""" start="00:56:11.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you know next question is there a danger?""" start="00:56:24.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""also, wait a second, answer do not probably a lot of collection,""" start="00:56:25.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""not a lot of thinking in the Zettelkasten to some purpose.""" start="00:56:34.341" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Usually. Conflation was the word I was fishing for.""" start="00:56:52.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Usually posts videos like this.""" start="00:56:58.701" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Conflate note taking as a dumping ground for stuff""" start="00:57:02.841" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with something that is valuable in the long term.""" start="00:57:15.050" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Also, if this was our dear friend Westenberg""" start="00:57:22.175" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I think the note count also was higher,""" start="00:57:27.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I might confuse them with someone else.""" start="00:57:30.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""The note count was way higher than mine. Note count.""" start="00:57:33.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But then also, you know, there's the sign""" start="00:57:36.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""of going for quantity in...""" start="00:57:41.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""just capture anything, like capturing,""" start="00:57:44.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's not the bottleneck.""" start="00:57:47.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""The bottleneck is finding, making connections happen,""" start="00:57:48.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""having thoughts and working on problems""" start="00:57:52.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you really want to solve in the long term.""" start="00:57:55.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So next question.""" start="00:57:57.280" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there a danger that with the Zettelkasten process, that the process gets a bit in the way of the content?""" start="00:57:59.160" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""Is there a danger that with the Zettelkasten process,""" start="00:57:59.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that the process gets a bit in the way of the content?""" start="00:58:02.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""yes, especially if you do it like old school style""" start="00:58:05.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you find that your handwriting sucks""" start="00:58:12.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and you want to type things""" start="00:58:14.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""on a typewriter like that kind of process""" start="00:58:16.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""definitely gets in the way""" start="00:58:19.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's going to be your bottleneck""" start="00:58:20.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you can't find black paper""" start="00:58:21.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and put it into your typewriter and then like that's not the speed of thought""" start="00:58:24.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's the speed of, I don't know, my long deceased grandmother""" start="00:58:30.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but yeah it's not like a strive for speed of thought tools""" start="00:58:35.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""not needing a typewriter""" start="00:58:54.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then next step reduce ritual reduce rituals and ceremony""" start="00:59:00.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""What I mean by that is if you find yourself doing the same moves""" start="00:59:10.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or similar moves over and over again,""" start="00:59:15.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but they don't contribute""" start="00:59:16.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to having more cool ideas per week, then maybe ditch these,""" start="00:59:19.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""apart from the day timestamp,""" start="00:59:23.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""having a title, hashtags, and content,""" start="00:59:26.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and also being very, very careful about quoting my sources.""" start="00:59:28.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't do much with my Zettelkasten.""" start="00:59:32.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I cannot give up quoting my sources""" start="00:59:35.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because then I'm plagiarizing, stealing,""" start="00:59:37.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""forgetting where I get ideas from and confuse.""" start="00:59:39.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And I get out because I'm aware of the problem there.""" start="00:59:41.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm also not trusting my own notes anymore.""" start="00:59:44.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I would not be trusting my own notes anymore.""" start="00:59:49.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I need to properly cite so then I can see, hey,""" start="00:59:51.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this block has no quotations, that's mine,""" start="00:59:53.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and I can trust this. It's not like, hey, this is maybe mine,""" start="00:59:56.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe this is a verbatim quote from a book. Like this""" start="01:00:00.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""is not helping. That's a ceremony""" start="01:00:04.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's paying off in the long term also,""" start="01:00:05.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so that when you write something,""" start="01:00:09.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you have all the sources at hand.""" start="01:00:11.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's a useful ceremony.""" start="01:00:15.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Title is just a way of summarizing the content.""" start="01:00:16.883" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Do it like an excerpt, right?""" start="01:00:20.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You have the whole content, that's your Zettel.""" start="01:00:25.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Do a short summary, that may be your introduction.""" start="01:00:26.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So have a way to quickly get a glimpse of the relevance""" start="01:00:29.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""before having to read the whole Zettel""" start="01:00:33.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when you encounter it years from now.""" start="01:00:35.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then have a one, that's one sentence summary,""" start="01:00:38.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then have an even more condensed form that's a title.""" start="01:00:41.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""The title is basically your API,""" start="01:00:44.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the interface for you and your notes.""" start="01:00:45.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And it needs to uphold some kind of contract.""" start="01:00:49.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And if it just is, like, this is my second note,""" start="01:00:54.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's not useful. This is just a technical limitation""" start="01:00:57.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because you can't have the same file name twice.""" start="01:01:00.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's not going to be useful.""" start="01:01:02.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But if you give yourself the permission to take time""" start="01:01:05.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""of titling your notes in one way and also changing titles,""" start="01:01:09.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because you will know from writing introductions""" start="01:01:12.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the further you get along,""" start="01:01:16.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the more and more you need to rewrite your introductions""" start="01:01:18.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because your understanding changes same for titles""" start="01:01:22.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""titles don't always stay consistent or constant""" start="01:01:24.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's why I don't link by title, because I would then need""" start="01:01:28.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to go through my note archive and also need to go to""" start="01:01:31.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""my note archive and need to correct all the links.""" start="01:01:39.300" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's a janitorial task I like to not do, if I can.""" start="01:01:41.091" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So answer here, less ceremony, fewer ceremonies, plural.""" start="01:01:44.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Try to only do the minimum possible, minimum viable thing.""" start="01:01:49.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And using Emacs and Denote, you get a lot of defaults.""" start="01:01:54.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then you need to worry""" start="01:01:57.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""not about IDs and tags that much,""" start="01:01:58.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or where to put them and how to put them.""" start="01:02:01.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You can omit keywords. You can leave keywords out.""" start="01:02:04.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""They don't scale anyway.""" start="01:02:06.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But they may be interesting as a way to group,""" start="01:02:08.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but also Sascha from zettelkasten.de, from our website,""" start="01:02:12.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Sascha also found that, I believe, he,""" start="01:02:19.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""structures win in the long term.""" start="01:02:23.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Manual created hubs and overviews""" start="01:02:28.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""win over machine generated lumps.""" start="01:02:30.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Because you need to reorient yourself""" start="01:02:34.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in the search results all the time.""" start="01:02:37.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's not as useful as having a pathway""" start="01:02:42.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""through your notes that you can follow.""" start="01:02:45.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It may not be a pathway through all of your notes, of course,""" start="01:02:49.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but it may be a pathway from entry point into some topic.""" start="01:02:52.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's why some things are essential and others aren't.""" start="01:02:56.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And the essential stuff, try to do it quickly, get better at it,""" start="01:03:01.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""practice the movements, then they get out of the way,""" start="01:03:06.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you can focus on having ideas""" start="01:03:08.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and typing them at speed of thought,""" start="01:03:10.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""more or less, and then you're good.""" start="01:03:12.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I hope. Wishing you all the best. Next and last question.""" start="01:03:15.240" video="qanda-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Q: How do you navigate looking at all posts with certain tags""" start="01:03:20.640" video="qanda-zettelkasten" id="subtitle"]]</div>[[!template text="""How do you navigate looking at all posts with certain tags?""" start="01:03:20.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""This might be an emacs, already new to emacs.""" start="01:03:24.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I just may have answered this.""" start="01:03:26.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""How do you navigate looking at all posts with certain tags?""" start="01:03:28.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Let me go to my actual note archive,""" start="01:03:31.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then php, no, language learning, ah,""" start="01:03:43.216" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this is not a nice setup. I'm very clumsy.""" start="01:03:55.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm sorry, I don't know, swift, language learning,""" start="01:03:59.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""ah that's a boring one, php. By this time, I could have also,""" start="01:04:03.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""ah, there's the model. This would be an entry point""" start="01:04:28.466" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""into my PHP atom molecule organism learning journey""" start="01:04:35.300" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where I tried to practice, what's visual line mode, sorry,""" start="01:04:39.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where I tried to practice this atom molecule thing on something new.""" start="01:04:43.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I haven't used PHP in a long time""" start="01:04:48.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and found that I wasn't, yeah, you can see it on the screen also""" start="01:04:51.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like language primitives are the atoms,""" start="01:04:59.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I think molecules are more like idioms or patterns that are PHP special in PHP""" start="01:05:01.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and different in other languages in Python""" start="01:05:08.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""would be list comprehension that's in a molecule""" start="01:05:10.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and but also you can make a point for hey,""" start="01:05:13.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this comprehension is more like a syntactical thing,""" start="01:05:16.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""no no get out of here, like the for loop is the syntactical atom""" start="01:05:18.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and the molecule is using the for loop""" start="01:05:23.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with weird other stuff""" start="01:05:25.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to then make the list comprehension happen.""" start="01:05:26.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's my argument there, okay? So what do we do with this?""" start="01:05:28.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I use this as an entry point if I want to see,""" start="01:05:33.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""hey, what kind of stuff did I take notes on""" start="01:05:38.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to get a better understanding""" start="01:05:41.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""on multiple levels of the language.""" start="01:05:43.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And project structure conventions""" start="01:05:45.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and usually another language""" start="01:05:47.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that I use more here would be, but I can't remember now.""" start="01:05:49.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Funny, right? I can't remember how I would need to look,""" start="01:05:53.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I think I'm too clumsy in Emacs""" start="01:05:57.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to do it live on camera, sorry.""" start="01:05:58.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But the organisms part here would also be like my own inventions,""" start="01:06:00.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""let's say in code,""" start="01:06:05.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like my own discoveries where I found that in Swift, for example,""" start="01:06:06.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you can express things on the type level""" start="01:06:11.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in a very sexy way sometimes.""" start="01:06:13.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then I would put these there as well.""" start="01:06:15.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So these are also,""" start="01:06:19.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""There are organisms to discover in the language reference,""" start="01:06:20.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but there are also organisms to discover in the world,""" start="01:06:26.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then they are your own inventions,""" start="01:06:30.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""discoveries, more or less. And that's a sign of mastery.""" start="01:06:32.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""If you work more on these things,""" start="01:06:36.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you don't need to worry""" start="01:06:38.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""about the basics of the language anymore.""" start="01:06:40.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I can use this as an entry point""" start="01:06:42.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to get into things that are very PHP-esque.""" start="01:06:46.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""When do I need this? When I want to talk about PHP,""" start="01:06:51.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like I do now.""" start="01:06:54.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Why do I show this when the question is about tags?""" start="01:06:55.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Because if I search for... Which one do I take?""" start="01:06:59.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Let's try grep. php. Yep, grep exited abnormally.""" start="01:07:10.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Dang, why? Option requires an argument.""" start="01:07:22.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Yes, eshell is there.""" start="01:07:28.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So let's just use rg, ripgrep and then ripgrep for php.""" start="01:07:36.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And you see I get, I can do filenames only, right?""" start="01:07:43.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Let's not worry. I get a lot of, let's just scroll up.""" start="01:07:50.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I get a lot more hits here for the PHP tech,""" start="01:07:56.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which is only about PHP specific things,""" start="01:08:03.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""not about anything that I do in PHP.""" start="01:08:06.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like, I don't know, I don't take Laravel or Filament,""" start="01:08:09.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which are frameworks, libraries in PHP,""" start="01:08:15.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the Zend library or whatever, I don't know many.""" start="01:08:17.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like I wouldn't take everything""" start="01:08:21.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and anything that is related to the php ecosystem""" start="01:08:23.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with the php hashtag.""" start="01:08:27.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Why? Because then the tag becomes useless.""" start="01:08:28.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I only tag things that are about the language.""" start="01:08:30.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like how do I pass variables to php includes that's php related.""" start="01:08:33.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And you see these are... I'm still not at the top.""" start="01:08:39.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""now i'm at the top these are a lot more findings than you could""" start="01:08:44.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""these don't fit on the screen""" start="01:08:48.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""these are three pages i believe""" start="01:08:49.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and the note about my language learning journey was""" start="01:08:51.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""wasn't even one full page here's white space""" start="01:08:55.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""there wasn't okay right but still there's much more stuff""" start="01:08:59.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""the hashtag I don't use for navigating.""" start="01:09:02.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I only use this, let's say, the shotgun approach.""" start="01:09:07.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I think Sascha on our Zettelkasten blog post,""" start="01:09:10.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""don't remember which post, mentioned this as well.""" start="01:09:14.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Sometimes you need a sniper rifle.""" start="01:09:16.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Sometimes you need a shotgun.""" start="01:09:18.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And the hashtag-based search would be I don't know what I'm looking for.""" start="01:09:21.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It was PHP related. I hope I use the hashtag correctly""" start="01:09:27.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then kill all these notes from my archive.""" start="01:09:32.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""The metaphor doesn't work that way,""" start="01:09:36.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but still you get a lot of results here""" start="01:09:38.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and you could use this as a way to filter from 11,000 notes""" start="01:09:41.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""down to 50 or so, maybe less.""" start="01:09:45.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And if you got this far, then you can start to do it in a mechanical way again.""" start="01:09:53.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But wait, if you have 100 or 1000 notes in the results there,""" start="01:09:59.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you can't mechanically go through all the notes again.""" start="01:10:05.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You can maybe skim and look""" start="01:10:08.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for something that catches your eye,""" start="01:10:09.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you're lucky, and if that's the thing""" start="01:10:11.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that works for you.""" start="01:10:14.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but usually no, like usually the text become useless""" start="01:10:15.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then maybe tag groups become more useful""" start="01:10:21.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like PHP and LSP which is on screen here""" start="01:10:24.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like then maybe the combination of two tags""" start="01:10:28.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that reduces the search terms enough""" start="01:10:30.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""like this is basically glorified full text search""" start="01:10:32.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""where you highlight certain terms of importance that's it,""" start="01:10:36.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I wouldn't use I wouldn't put more effort in there""" start="01:10:41.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's also maybe useful to group things by topic.""" start="01:10:45.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""For example, study notes like, I don't know,""" start="01:10:48.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""this is my undergrad, third semester,""" start="01:10:52.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""what do you do in the third semester, I don't know,""" start="01:10:56.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""history of philosophy of science of birds,""" start="01:11:01.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""very long course name, and then week 10.""" start="01:11:06.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then you assemble everything""" start="01:11:10.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with this very technical tagging.""" start="01:11:13.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Then you can use these folders""" start="01:11:15.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""to loosely group stuff together""" start="01:11:18.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that happened during that week.""" start="01:11:21.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And if you have 10 required readings and then do five of them,""" start="01:11:23.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but they're also not closely interrelated,""" start="01:11:26.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you will have read five to 10 different sources that you could process.""" start="01:11:28.880" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You could maybe then also create an overview note""" start="01:11:33.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""as a preparation for the seminar""" start="01:11:36.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""whatever happens at university.""" start="01:11:38.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Then the hashtag becomes just a way to group things.""" start="01:11:44.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But once you create the structure note,""" start="01:11:51.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you don't need the hashtags to navigate anymore.""" start="01:11:52.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You could then maybe use the hashtags not to navigate""" start="01:11:55.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but to to clump, to create collections,""" start="01:11:57.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""pre-assembled to some degree collections of things that exist already,""" start="01:12:02.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""get them out there and then review them.""" start="01:12:07.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Like Twyla Tharp again, dumping all the notes on a table,""" start="01:12:09.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""all the stuff on the table,""" start="01:12:13.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""not just notes, all the clippings and so on and so on,""" start="01:12:15.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then making sense of them.""" start="01:12:17.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""That's what you can use a hashtag search for in the longterm.""" start="01:12:18.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And I'm not convinced about navigational use in the longterm.""" start="01:12:21.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""which doesn't mean that it won't work for you,""" start="01:12:27.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but I can't recommend it.""" start="01:12:31.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I can't recommend trying to do it that way.""" start="01:12:32.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So my answer is going to be, how do you navigate""" start="01:12:34.900" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""looking at all posts with certain tags? I don't.""" start="01:12:37.883" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Tags are just a way to loosely group notes and stuff in general""" start="01:12:45.508" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so that you can find potentially, PP, why doesn't P work?""" start="01:12:53.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Potentially relevant pieces of information more quickly.""" start="01:13:05.520" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Navigational aids. Create navigational aids""" start="01:13:14.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""things that help you navigate like this is for a week""" start="01:13:34.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""what did I say 10 of semester three""" start="01:13:38.050" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""uh the history of the sociology""" start="01:13:42.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""of the philosophy of science of birds""" start="01:13:44.633" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or something lump things together there then you have a""" start="01:13:46.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""then you have a scratch pad to think on you do this""" start="01:13:51.560" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""did do this when you went to university with paper anyway, right?""" start="01:13:54.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You would get your college book or whatever""" start="01:13:59.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you would take notes and these like that location""" start="01:14:01.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""of that piece of paper in your college book""" start="01:14:04.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""in your whatever notes folder""" start="01:14:07.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that's the important piece of information""" start="01:14:09.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and the scratchpad, the thinking environment for this course""" start="01:14:15.040" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and if you have all the other things""" start="01:14:20.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that you ever did at your disposal as well""" start="01:14:22.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe pull them in maybe pull them in""" start="01:14:24.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then bring them to the discussion""" start="01:14:26.840" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""with your professor or your teaching assistant""" start="01:14:28.760" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and asking about, well, I read these five books""" start="01:14:31.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""that you recommended for this week.""" start="01:14:35.200" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Thank you for recommending five whole books""" start="01:14:37.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""for one week of reading. I really enjoyed that. Long pause.""" start="01:14:40.440" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""And then you say, I also thought about other topics""" start="01:14:45.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and brought them into a, I don't know, dialectic or position.""" start="01:14:50.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""What do you think about foxes in that regard""" start="01:14:54.360" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and their own history and subjectivity""" start="01:14:58.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""when it comes to the bird's point of view or something, right?""" start="01:15:01.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""You can only do this if you either know this by heart""" start="01:15:08.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because you do this a lot,""" start="01:15:11.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""think a lot about this stuff or you do this,""" start="01:15:13.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you stumble upon this and then look for oppositions,""" start="01:15:15.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""look for certain patterns in your notes""" start="01:15:18.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then try to pull them in and represent them again""" start="01:15:19.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""so they actually do exist and then you can work with this,""" start="01:15:22.480" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you can get on people's nerves""" start="01:15:26.240" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you can write weird papers, essays""" start="01:15:27.400" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then get through your university studies quickly""" start="01:15:30.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""maybe also become an interesting columnist,""" start="01:15:33.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know, I've never been a columnist Right.""" start="01:15:35.960" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I think these are all the questions.""" start="01:15:39.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I'm going to delete the leftover ones.""" start="01:15:44.080" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I hope you enjoyed some of the answers.""" start="01:15:47.160" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Thank you so much. Thank you. That's a lot.""" start="01:15:54.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""We'll go back and get everything transcribed as well,""" start="01:16:01.175" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""and then you can turn that into other articles in the future,""" start="01:16:04.675" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""because that's how this all works, right?""" start="01:16:08.600" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It all turns into writing. It all does.""" start="01:16:10.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""All the rest is garbage.""" start="01:16:14.320" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I don't know why we invented anything else.""" start="01:16:16.000" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""It's only useful to transfer language before writing,""" start="01:16:20.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""but now you can just read.""" start="01:16:23.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""We have two people in the Big Blue Button room""" start="01:16:26.280" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""who are still around, but I think they've got their, like,""" start="01:16:29.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""they don't have microphones set up.""" start="01:16:33.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""So I don't know if you want to just, like, CryptKNFL,""" start="01:16:35.720" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""if you want to just follow up through the Etherpadmp,""" start="01:16:40.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""or email, I guess, in case you have further questions.""" start="01:16:44.340" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""But yeah, if you want to wrap up,""" start="01:16:47.640" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""I know it's getting a little bit late over there,""" start="01:16:50.120" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""you're in your time zone. Thank you so much.""" start="01:16:52.800" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Yeah, all right. Thank you. You're welcome.""" start="01:16:55.920" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Thanks for joining and listening.""" start="01:16:59.680" video="qanda-zettelkasten" id="subtitle"]]
+[[!template text="""Okay, I'll wrap it up here then.""" start="01:17:02.720" video="qanda-zettelkasten" id="subtitle"]]
+
+</div>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..4f5e311a
--- /dev/null
+++ b/2025/info/zettelkasten-before.md
@@ -0,0 +1,52 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 24-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2025-zettelkasten>
+Etherpad: <https://pad.emacsconf.org/2025-zettelkasten>
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<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/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://toobnix.org/videos/watch/3cfa8781-1636-46e8-bb7c-a82539b5fbfa">View on Toobnix</a></li><li><a href="https://youtu.be/wE8vCWyr1Eo">View on Youtube</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid qanda"><video controls preload="none" id="qanda-zettelkasten"><source src="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--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-zettelkasten" data="""
+00:49.560 Q: What do you use for the fancy animations?
+03:30.080 Q: Are you not a fan of using *, **, *** headings in org-mode?
+07:13.720 Q: Can you use org files and all its features inside Denote?
+07:49.000 Q: Where or how do you like to capture fleeting notes?
+11:29.040 Q: Zettelkasten feels like a very "cagey" approach to note-taking and knowledge management. Doesn't it restrict one to think in certain ways rather than what feels natural to someone?
+15:07.328 Q: How does denote compare to org-roam?
+18:25.040 Q: I noticed that the wikipedia link you wrote was typed wrongly - and it got me thinking about how to deal with broken links at scale? Do you have any thoughts on this? What about archival?
+21:20.591 Comment: When I completely re-worked my config some two years ago, I also tried out some of these packages for making notes in Emacs...
+24:34.800 Q: How Zettelkasten is useful for highly mathematical STEM academic fields like computer science or engineering fields?
+39:40.960 Q: In your experience, would you say that you re-use most of your notes?
+44:15.280 Q: How are notes structured and accessed when the notes grow from 10K to 100K notes?
+48:55.160 Q: I would be very interested in your thought on this video by Westenberg - https://www.youtube.com/watch?v=CjSWwmg-JRM (Why I Deleted My Second Brain: A Journey Back to Real Thinking)
+57:59.160 Q: Is there a danger that with the Zettelkasten process, that the process gets a bit in the way of the content?
+01:03:20.640 Q: How do you navigate looking at all posts with certain tags
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-zettelkasten-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.opus"></audio></div><div></div>Duration: 1:17:07 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/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.json">Download --answers.json (1.5MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.m4v">Download --answers.m4v (152MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.opus">Download --answers.opus (67MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.webm">Download --answers.webm (166MB)</a></li><li><a href="https://toobnix.org/videos/watch/46b44f2f-3fe1-4265-a55e-b83a72c8212d">View on Toobnix</a></li><li><a href="https://youtu.be/wqS3xJIF8EE">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..bfc20b3a
--- /dev/null
+++ b/2025/info/zettelkasten-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2025/talks/completion">corfu+yasnippet: Easier than I thought</a>
+Next by track: <a href="/2025/talks/hyperboleqa">Questions and answers to help you fly with Hyperbole</a>
+Track: <span class="sched-track General">General</span>
+</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..378cfcdc
--- /dev/null
+++ b/2025/organizers-notebook/index.org
@@ -0,0 +1,1072 @@
+# [[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
+latex: video: 33, allocated 20
+open-mic: video: 74, allocated 50
+private-ai: video: 40, allocated 20
+modern: video: 26, allocated 20
+weights: video: 30, allocated 10
+completion: video: 37, allocated 25
+hyperboleqa: video: 48, allocated 30
+sun-close: video: 16, allocated 10
+: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]]
+
+*** DONE Back up after the conference
+CLOSED: [2025-12-13 Sat 08:34] 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:
+** DONE Do a dry run
+CLOSED: [2025-12-08 Mon 21:36] SCHEDULED: <2025-12-05 Fri>
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run
+:END:
+*** DONE Generate all the test assets
+CLOSED: [2025-12-08 Mon 21:36]
+: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
+
+*** DONE [#A] Resize nodes after production
+CLOSED: [2025-12-08 Mon 21:36] SCHEDULED: <2025-12-08 Mon>
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-after-production
+:END:
+
+live0: nanode
+front0: nanode
+*** DONE [#A] Resize meet after production
+CLOSED: [2025-12-11 Thu 09:58] 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/report.md b/2025/report.md
new file mode 100644
index 00000000..98362d1b
--- /dev/null
+++ b/2025/report.md
@@ -0,0 +1,285 @@
+<!-- report.md is exported report.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2025/report.org](/2025/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 2025 Report"]]
+[[!date "2026-01-02"]]
+[[!meta copyright="Copyright &copy; 2025 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 2025 was held on December 6 and 7 as an online conference. We had 25 talks across two tracks on Saturday and one track on Sunday, with a total of 11.3 hours of presentations (including 5 live talks), 5.2 hours of Q&A via web conference, and lots of lively discussions across IRC and Etherpad. There were around a hundred viewers each on the General track and the Development.
+
+We posted 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 commetns from IRC and Etherpad onto the talk pages. You can find the talk pages at <https://emacsconf.org/2025/talks> . The videos are also available on [media.emacsconf.org](https://media.emacsconf.org/2025), [YouTube](https://www.youtube.com/@emacsconf), and [Toobnix](https://toobnix.org/c/emacsconf/videos).
+
+Overall, people said:
+
+- Awesome conference as always
+- It was very fun participating
+- This is one of the most organized conferences I have attended and it is like that every year
+- Excellent weekend. It went by so fast 😊
+- thanks all for this nice Emacs weekend
+
+You can find the talk pages and videos at <https://emacsconf.org/2025/talks>.
+
+
+<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
+- [sub-seg](https://gitlab.com/jun8git/sub-seg): subtitle segmentation into more logical phrases
+- [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:
+
+- We used our own BigBlueButton 3.0 server to host Emacs meetups throughout the year in addition to EmacsConf.
+- We upgraded Etherpad to version 2.5 for security fixes.
+- We added [sub-seg](https://gitlab.com/jun8git/sub-seg) and various [subed](https://github.com/sachac/subed) improvements to our captioning workflow.
+- We resumed restreaming to Toobnix in addition to YouTube and Icecast.
+- We adapted to host availability by asking speakers to read their own questions as needed.
+- We modified our [mpv.conf](https://emacsconf.org/mpv/) to display the time remaining in the lower right-hand corner. This helped with time-keeping.
+- We wrote more code to simplify updating YouTube, Toobnix, and other places.
+
+ For in-depth notes, see [behind the scenes](https://sachachua.com/blog/2026/01/emacsconf-2025-notes/).
+
+
+<a id="finances"></a>
+
+# Finances
+
+Costs (USD), including tax where applicable:
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-right">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">Node</th>
+<th scope="col" class="org-right">Jan</th>
+<th scope="col" class="org-right">Feb</th>
+<th scope="col" class="org-right">Mar</th>
+<th scope="col" class="org-right">Apr</th>
+<th scope="col" class="org-right">May</th>
+<th scope="col" class="org-right">Jun</th>
+<th scope="col" class="org-right">Jul</th>
+<th scope="col" class="org-right">Aug</th>
+<th scope="col" class="org-right">Sep</th>
+<th scope="col" class="org-right">Oct</th>
+<th scope="col" class="org-right">Nov</th>
+<th scope="col" class="org-right">Dec</th>
+<th scope="col" class="org-right">Total</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="org-left">meet</td>
+<td class="org-right">2.17</td>
+<td class="org-right">7.55</td>
+<td class="org-right">6.78</td>
+<td class="org-right">6.74</td>
+<td class="org-right">7.13</td>
+<td class="org-right">6.95</td>
+<td class="org-right">7.19</td>
+<td class="org-right">7.27</td>
+<td class="org-right">6.75</td>
+<td class="org-right">7.19</td>
+<td class="org-right">7.56</td>
+<td class="org-right">14.02</td>
+<td class="org-right">87.30</td>
+</tr>
+
+<tr>
+<td class="org-left">front0</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">18.79</td>
+<td class="org-right">73.79</td>
+</tr>
+
+<tr>
+<td class="org-left">live0</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">5.00</td>
+<td class="org-right">32.89</td>
+<td class="org-right">87.89</td>
+</tr>
+</tbody>
+</table>
+
+:end:
+
+Grand total for 2025: USD 248.98, covered by people's donations through [the Free Software Foundation's Working Together program](https://my.fsf.org/civicrm/contribute/transact?reset=1&id=70).
+
+
+<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 other volunteers: 
+ - Corwin and Amin for helping with the organization
+ - JC Helary, Triko, and James Endres Howell for help reviewing
+ CFPs
+ - Amitav Krishna, Rodion Goritskov, jay\_bird, and indra for
+ captions
+ - yang3 for the EU mirror we're setting up
+ - Bhavin Gandhi, Michael Kokosenski, Iain Young, Jamie Cullen,
+ Ihor Radchenko (yantar92), FlowyCoder for other help
+- Thanks to the Free Software Foundation for the mailing lists,
+ the media server, and of course, GNU Emacs.
+- Thanks to Ry P for the server that we're using for OBS
+ streaming and processing videos.
+- Thanks to the many users and contributers and project teams that
+ create all the awesome free software we use, especially:
+ - [Emacs](https://www.gnu.org/software/emacs/), [Org Mode](https://orgmode.org/), [ERC](https://www.gnu.org/software/emacs/erc.html), [TRAMP](https://www.gnu.org/software/tramp/), [Magit](https://magit.vc/), [BigBlueButton](https://bigbluebutton.org), [Etherpad](https://etherpad.org/),
+ [Ikiwiki](https://ikiwiki.info/), [Icecast](http://icecast.org/), [OBS](https://obsproject.com/), [TheLounge](https://github.com/thelounge/thelounge), [libera.chat](https://libera.chat/), [ffmpeg](https://www.ffmpeg.org/),
+ [OpenAI Whisper](https://github.com/openai/whisper), [WhisperX](https://github.com/m-bain/whisperX), the [aeneas](https://github.com/readbeyond/aeneas) forced alignment tool,
+ [PsiTransfer](https://github.com/psi-4ward/psitransfer), [subed](https://github.com/sachac/subed), [sub-seg](https://gitlab.com/jun8git/sub-seg), [Mozilla Firefox](https://www.firefox.com/), [mpv](https://mpv.io/),
+ [Tampermonkey](https://www.tampermonkey.net/)
+ - And many, many other tools and services we used to prepare
+ and host this years conference
+- Thanks to [shoshin](https://cicadas.surf/~shoshin/) for the music.
+- Thanks to people who donated via the [FSF Working Together program](https://my.fsf.org/civicrm/contribute/transact?reset=1&id=70) (Scott Ranby, Jonathan Mitchell, and 8 other anonymous donors), the costs are covered for this year.
+
+
+<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/2025/report.org b/2025/report.org
new file mode 100644
index 00000000..f16e549e
--- /dev/null
+++ b/2025/report.org
@@ -0,0 +1,227 @@
+# [[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 [/2025/report.org](/2025/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 2025 Report"]]
+[[!date "2026-01-02"]]
+[[!meta copyright="Copyright &copy; 2025 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/2024/report/
+- https://emacsconf.org/2023/report/
+
+* COMMENT Generating stats
+:PROPERTIES:
+:CUSTOM_ID: generating-stats
+:END:
+
+Other notes from
+https://sachachua.com/blog/2026/01/emacsconf-2025-notes/
+
+** Presentation and Q&A stats
+:PROPERTIES:
+:CUSTOM_ID: generating-stats-presentation-and-q-a-stats
+:END:
+
+| Presentations | 25 |
+| Presentation duration (hours) | 11.3 |
+| Q&A web conferences | 11 |
+| Q&A duration (hours) | 5.2 |
+
+** Stream Stats
+:PROPERTIES:
+:CUSTOM_ID: generating-stats-stream-stats
+:END:
+
+#+RESULTS:
+:results:
+| 107 | Icecast peak (Gen Sat) |
+| 97 | Icecast peak (Dev Sat) |
+| ~70 | Icecast peak (Sunday) |
+| 28 | YouTube peak (Gen Sat) |
+:end:
+
+* Overview
+:PROPERTIES:
+:CUSTOM_ID: overview
+:END:
+
+EmacsConf 2025 was held on December 6 and 7 as an online conference. We had 25 talks across two tracks on Saturday and one track on Sunday, with a total of 11.3 hours of presentations (including 5 live talks), 5.2 hours of Q&A via web conference, and lots of lively discussions across IRC and Etherpad. There were around a hundred viewers each on the General track and the Development.
+
+We posted 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 commetns from IRC and Etherpad onto the talk pages. You can find the talk pages at https://emacsconf.org/2025/talks . The videos are also available on [[https://media.emacsconf.org/2025][media.emacsconf.org]], [[https://www.youtube.com/@emacsconf][YouTube]], and [[https://toobnix.org/c/emacsconf/videos][Toobnix]].
+
+Overall, people said:
+
+- Awesome conference as always
+- It was very fun participating
+- This is one of the most organized conferences I have attended and it is like that every year
+- Excellent weekend. It went by so fast 😊
+- thanks all for this nice Emacs weekend
+
+You can find the talk pages and videos at [[https://emacsconf.org/2025/talks]].
+
+* 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://gitlab.com/jun8git/sub-seg][sub-seg]]: subtitle segmentation into more logical phrases
+- [[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:
+
+- We used our own BigBlueButton 3.0 server to host Emacs meetups throughout the year in addition to EmacsConf.
+- We upgraded Etherpad to version 2.5 for security fixes.
+- We added [[https://gitlab.com/jun8git/sub-seg][sub-seg]] and various [[https://github.com/sachac/subed][subed]] improvements to our captioning workflow.
+- We resumed restreaming to Toobnix in addition to YouTube and Icecast.
+- We adapted to host availability by asking speakers to read their own questions as needed.
+- We modified our [[https://emacsconf.org/mpv/][mpv.conf]] to display the time remaining in the lower right-hand corner. This helped with time-keeping.
+- We wrote more code to simplify updating YouTube, Toobnix, and other places.
+
+ For in-depth notes, see [[https://sachachua.com/blog/2026/01/emacsconf-2025-notes/][behind the scenes]].
+
+* Finances
+:PROPERTIES:
+:CUSTOM_ID: finances
+:END:
+
+Costs (USD), including tax where applicable:
+
+| Node | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Total |
+|--------+------+------+------+------+------+------+------+------+------+------+------+-------+-------|
+| meet | 2.17 | 7.55 | 6.78 | 6.74 | 7.13 | 6.95 | 7.19 | 7.27 | 6.75 | 7.19 | 7.56 | 14.02 | 87.30 |
+| front0 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 18.79 | 73.79 |
+| live0 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 5.00 | 32.89 | 87.89 |
+:end:
+
+Grand total for 2025: USD 248.98, covered by people's donations through [[https://my.fsf.org/civicrm/contribute/transact?reset=1&id=70][the Free Software Foundation's Working Together program]].
+
+* 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 other volunteers: 
+ - Corwin and Amin for helping with the organization
+ - JC Helary, Triko, and James Endres Howell for help reviewing
+ CFPs
+ - Amitav Krishna, Rodion Goritskov, jay_bird, and indra for
+ captions
+ - yang3 for the EU mirror we're setting up
+ - Bhavin Gandhi, Michael Kokosenski, Iain Young, Jamie Cullen,
+ Ihor Radchenko (yantar92), FlowyCoder for other help
+ - Thanks to the Free Software Foundation for the mailing lists,
+ the media server, and of course, GNU Emacs.
+ - Thanks to Ry P for the server that we're using for OBS
+ streaming and processing videos.
+ - Thanks to the many users and contributers and project teams that
+ create all the awesome free software we use, especially:
+ - [[https://www.gnu.org/software/emacs/][Emacs]], [[https://orgmode.org/][Org Mode]], [[https://www.gnu.org/software/emacs/erc.html][ERC]], [[https://www.gnu.org/software/tramp/][TRAMP]], [[https://magit.vc/][Magit]], [[https://bigbluebutton.org][BigBlueButton]], [[https://etherpad.org/][Etherpad]],
+ [[https://ikiwiki.info/][Ikiwiki]], [[http://icecast.org/][Icecast]], [[https://obsproject.com/][OBS]], [[https://github.com/thelounge/thelounge][TheLounge]], [[https://libera.chat/][libera.chat]], [[https://www.ffmpeg.org/][ffmpeg]],
+ [[https://github.com/openai/whisper][OpenAI Whisper]], [[https://github.com/m-bain/whisperX][WhisperX]], the [[https://github.com/readbeyond/aeneas][aeneas]] forced alignment tool,
+ [[https://github.com/psi-4ward/psitransfer][PsiTransfer]], [[https://github.com/sachac/subed][subed]], [[https://gitlab.com/jun8git/sub-seg][sub-seg]], [[https://www.firefox.com/][Mozilla Firefox]], [[https://mpv.io/][mpv]],
+ [[https://www.tampermonkey.net/][Tampermonkey]]
+ - And many, many other tools and services we used to prepare
+ and host this years conference
+ - Thanks to [[https://cicadas.surf/~shoshin/][shoshin]] for the music.
+ - Thanks to people who donated via the [[https://my.fsf.org/civicrm/contribute/transact?reset=1&id=70][FSF Working Together program]] (Scott Ranby, Jonathan Mitchell, and 8 other anonymous donors), the costs are covered for this year.
+
+* 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/2025/schedule-2025-12-06.md b/2025/schedule-2025-12-06.md
new file mode 100644
index 00000000..fb92d10c
--- /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..59f5ab8e
--- /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..2a72cbdc
--- /dev/null
+++ b/2025/schedule-details.md
@@ -0,0 +1,36 @@
+Jump to: <a href="#dev">Development</a>
+
+<h1 id="gen" class="sched-track General">General (21 talks)</h1>
+[[!template id=sched resources="""<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>""" title="""Saturday opening remarks""" url="""/2025/talks/sat-open""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sat-open""" note="""captioned, video posted, video: 04:51"""]]
+[[!template id=sched resources="""<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>""" title="""Making Org-Babel reactive""" url="""/2025/talks/org-babel""" speakers="""Abhinav Tushar""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""org-babel""" note="""captioned, video posted, video: 08:08"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.opus">Download --answers.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.webm">Download --answers.webm (52MB)</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>""" title="""Emacs as a fully-fledged reference manager""" url="""/2025/talks/reference""" speakers="""Vidianos Giannitsis""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""reference""" note="""captioned, video posted, video: 20:14"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers--chapters.vtt">Download --answers--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--answers.json">Download --answers.json</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--answers.m4v">Download --answers.m4v (43MB)</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--answers.opus">Download --answers.opus (7.3MB)</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--answers.tsv">Download --answers.tsv</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--answers.txt">Download --answers.txt</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--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.webm">Download --answers.webm (18MB)</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>""" title="""org-gmail: A deep integration of Gmail into your Org Mode""" url="""/2025/talks/gmail""" speakers="""Bala Ramadurai""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gmail""" note="""captioned, video posted, Q&A posted, video: 23:04, answers: 08:21"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers--chapters.vtt">Download --answers--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--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.m4v">Download --answers.m4v (62MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.opus">Download --answers.opus (21MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.txt">Download --answers.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--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.webm">Download --answers.webm (58MB)</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>""" title="""Reading and writing emails in GNU Emacs with Gnus""" url="""/2025/talks/gnus""" speakers="""Amin Bandali""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gnus""" note="""captioned, video posted, Q&A posted, video: 21:37, answers: 24:33"""]]
+[[!template id=sched resources="""<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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.webm">Download --main.webm (65MB)</a></li>""" title="""LaTeX export in org-mode: the overhaul""" url="""/2025/talks/latex""" speakers="""Pedro A. Aranda Gutiérrez""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""latex""" note="""captioned, video posted, video: 32:34"""]]
+[[!template id=sched resources="""<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>""" title="""Basic Calc functionality for engineering or electronics""" url="""/2025/talks/calc""" speakers="""Christopher Howard""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""calc""" note="""captioned, video posted, video: 23:35"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers--chapters.vtt">Download --answers--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--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.m4v">Download --answers.m4v (111MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.opus">Download --answers.opus (24MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.txt">Download --answers.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--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.webm">Download --answers.webm (55MB)</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>""" title="""Blee-LCNT: An Emacs-centered content production and self-publication framework""" url="""/2025/talks/blee-lcnt""" speakers="""Mohsen BANAN""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""blee-lcnt""" note="""captioned, video posted, Q&A posted, video: 36:41, answers: 27:45"""]]
+[[!template id=sched resources="""<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>""" title="""GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence""" url="""/2025/talks/greader""" speakers="""Yuval Langer""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""greader""" note="""captioned, video posted, video: 04:08"""]]
+[[!template id=sched resources="""<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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.m4v">Download --main.m4v (195MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--main.webm">Download --main.webm (156MB)</a></li>""" title="""Open session""" url="""/2025/talks/open-mic""" speakers="""Participants""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""open-mic""" note="""video posted, video: 1:13:00"""]]
+[[!template id=sched resources="""<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>""" title="""Sunday opening remarks""" url="""/2025/talks/sun-open""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sun-open""" note="""captioned, video posted, video: 04:51"""]]
+[[!template id=sched resources="""<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--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.opus">Download --main.opus (13MB)</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></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.webm">Download --main.webm (57MB)</a></li>""" title="""Some problems of modernizing Emacs""" url="""/2025/talks/modern""" speakers="""Eduardo Ochs""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""modern""" note="""video posted, video: 25:22"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.m4v">Download --answers.m4v (82MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.opus">Download --answers.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.webm">Download --answers.webm (77MB)</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>""" title="""An introduction to the Emacs Reader""" url="""/2025/talks/reader""" speakers="""Divyá""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""reader""" note="""captioned, video posted, Q&A posted, video: 34:37, answers: 19:02"""]]
+[[!template id=sched resources="""<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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.webm">Download --main.webm (106MB)</a></li>""" title="""Weightlifting tracking with Emacs on Android""" url="""/2025/talks/weights""" speakers="""Zachary Romero""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""weights""" note="""video posted, video: 29:12"""]]
+[[!template id=sched resources="""<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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.m4v">Download --main.m4v (95MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.opus">Download --main.opus (5.2MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.webm">Download --main.webm (79MB)</a></li>""" title="""corfu+yasnippet: Easier than I thought""" url="""/2025/talks/completion""" speakers="""Pedro A. Aranda Gutiérrez""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""completion""" note="""video posted, video: 36:04"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.json">Download --answers.json (1.5MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.m4v">Download --answers.m4v (152MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.opus">Download --answers.opus (67MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.webm">Download --answers.webm (166MB)</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>""" title="""Zettelkasten for regular Emacs hackers""" url="""/2025/talks/zettelkasten""" speakers="""Christian Tietze""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""zettelkasten""" note="""captioned, video posted, Q&A posted, video: 23:18, answers: 1:17:07"""]]
+[[!template id=sched resources="""<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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main--chapters.vtt">Download --main--chapters.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--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.m4v">Download --main.m4v (108MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.tsv">Download --main.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.webm">Download --main.webm (100MB)</a></li>""" title="""Questions and answers to help you fly with Hyperbole""" url="""/2025/talks/hyperboleqa""" speakers="""Bob Weiner""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""hyperboleqa""" note="""video posted, video: 47:09"""]]
+[[!template id=sched resources="""<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>""" title="""Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph""" url="""/2025/talks/gardening""" speakers="""Marco Bresciani""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gardening""" note="""captioned, video posted, video: 17:36"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.m4v">Download --answers.m4v (100MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.opus">Download --answers.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.webm">Download --answers.webm (107MB)</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>""" title="""Bookclub tapas""" url="""/2025/talks/bookclub-tapas""" speakers="""Maddie Sullivan""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""bookclub-tapas""" note="""captioned, video posted, Q&A posted, video: 31:25, answers: 39:25"""]]
+[[!template id=sched resources="""<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>""" title="""Saturday closing remarks / open session""" url="""/2025/talks/sat-close""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sat-close""" note=""""""]]
+[[!template id=sched resources="""<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><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--main.m4v">Download --main.m4v (53MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (43MB)</a></li>""" title="""Sunday closing remarks""" url="""/2025/talks/sun-close""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sun-close""" note="""video posted, video: 15:33"""]]
+
+Jump to: <a href="#gen">General</a>
+
+<h1 id="dev" class="sched-track Development">Development (8 talks)</h1>
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.m4v">Download --answers.m4v (101MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.opus">Download --answers.opus (24MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.webm">Download --answers.webm (102MB)</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>""" title="""One year progress update Schemacs (formerly Gypsum)""" url="""/2025/talks/schemacs""" speakers="""Ramin Honary""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""schemacs""" note="""captioned, video posted, Q&A posted, video: 23:14, answers: 27:51"""]]
+[[!template id=sched resources="""<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>""" title="""Juicemacs: exploring speculative JIT compilation for ELisp in Java""" url="""/2025/talks/juicemacs""" speakers="""Kana""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""juicemacs""" note="""captioned, video posted, video: 19:10"""]]
+[[!template id=sched resources="""<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>""" title="""Swanky Python: Interactive development for Python""" url="""/2025/talks/swanky""" speakers="""Scott Zimmermann""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""swanky""" note="""captioned, video posted, video: 21:03"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.m4v">Download --answers.m4v (75MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.webm">Download --answers.webm (71MB)</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>""" title="""Interactive Python programming in Emacs""" url="""/2025/talks/python""" speakers="""David Vujic""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""python""" note="""captioned, video posted, Q&A posted, video: 19:52, answers: 18:44"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.m4v">Download --answers.m4v (94MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.opus">Download --answers.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.webm">Download --answers.webm (91MB)</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>""" title="""Emacs, editors, and LLM driven workflows""" url="""/2025/talks/llm""" speakers="""Andrew Hyatt""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""llm""" note="""captioned, video posted, Q&A posted, video: 20:04, answers: 25:20"""]]
+[[!template id=sched resources="""<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--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.opus">Download --main.opus (3MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.webm">Download --main.webm (88MB)</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>""" title="""Emacs and private AI: a great match""" url="""/2025/talks/private-ai""" speakers="""Aaron Grothe""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""private-ai""" note="""video posted, video: 39:34"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers--chapters.vtt">Download --answers--chapters.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--answers.json">Download --answers.json</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--answers.m4v">Download --answers.m4v (33MB)</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--answers.tsv">Download --answers.tsv</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--answers.txt">Download --answers.txt</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--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers.webm">Download --answers.webm (32MB)</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>""" title="""Common Lisp images communicating like-a-human through shared Emacs slime and eev""" url="""/2025/talks/commonlisp""" speakers="""screwlisp""" 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 resources="""<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--chapters.vtt">Download --main--chapters.vtt</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>""" title="""Modern Emacs/Elisp hardware/software accelerated graphics""" url="""/2025/talks/graphics""" speakers="""Emanuel Berg""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""graphics""" note="""captioned, video posted, video: 22:15"""]] \ No newline at end of file
diff --git a/2025/schedule-image.md b/2025/schedule-image.md
new file mode 100644
index 00000000..97dd8ac5
--- /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..9720e96a
--- /dev/null
+++ b/2025/talks.md
@@ -0,0 +1,7 @@
+Thanks for joining us for EmacsConf 2025. Here are the talks:
+
+[[!inline pages="internal(2025/schedule-details)" raw="yes"]]
+
+We hope to see you next year!
+
+Want to help make the next EmacsConf even awesomer? [[Volunteer!|/volunteer]]
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..3f2925e0
--- /dev/null
+++ b/2025/talks/blee-lcnt.md
@@ -0,0 +1,119 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: all the outputs and the inputs that you mentioned, where are they?
+ - So they are on GitHub, and this is in one of my slides. I mentioned the URL for it. I'll show you that as well. So the URL for it is https://github.com/bxplpc/180068, which is the handle for this talk. In there, you have all the PDFs and the HTMLs, a citation, a bib input, and also the sources. So if you were to go to the PDF, you will see um, both the article presentation and the beamer, let's take a quick look at the beamer, which is what you have seen. So. And as far as the sources are, there are two primary files. This presentation, left to right, is the one that includes all the LaTeX packages. We might as well take a quick look. So what's in there is primarily the use packages. And then it dispatches to bodyPresArt, and this is where the code is. And I walked through this briefly. So, notice here again that this is a mixture of LaTeX and Org. Each of the presentation slides are here. For example, my introduction is just a video that gets included. And then the notes that I use, the voiceover, is also included in the LaTeX file. Let me... It'll probably be easy to take those voiceover notes and then align them with a tool like Aeneas to make subtitles for your videos. Exactly, and that is what I do. So there is a way to gather them all as P-notes. And so all the P-notes get together in a single file, and then you feed that to Aeneas, and it will align them. And then there is the work of using your subed to just get the right sort of line length on them. But you did all of that for me this year, Sacha. Thank you very much. It was just a matter of not having time. Otherwise, I planned to do it myself. It's all right. It was very easy since he provided the full narration. I still need to tweak it sometimes, so I often use the waveforms in subed to find the right starting time and ending time for things. But it is so nice to have a presentation where you can experience it in different forms, as an article, as a video, as a post with links and everything. Very handy. Right, and in case a teacher uses this for class lectures, then the student profits from all sorts. The article presentation format is very useful for a student to add their own notes to it and the rest. Exactly as you said, having multiple forms is great. Video has its place, reveal has its place, PDF has its place, article has its place. All of them work together.
+- Q: what changes have you seen in the culture while developing all
+ these things like libre-halal system and now blee-lcnt?
+ - A: We learn from one another. And what I'm doing may be considered just a stepwise increment, but the cultural input is that we really should start thinking about providing solutions as opposed to packages. The FOSS culture is really limited in its scope to packages or even if when you think something very large like Debian, which is a collection of packages. And it is still choice oriented, as opposed to solution oriented. Yeah. Are there any additional topics or questions? Otherwise, I'll just add a few additional concepts.
+ - I agree with 'Solutions over Packages' phrase :)
+ - Thank you Mohsen
+- Q: Really interesting stuff, thank you for your talk :) Given that large AI companies are openly stealing IP and copyright, thereby eroding the authority of such law (and eroding truth itself as well), can you see a future where IP & copyright flaw become untenable and what sort of onwards effect might that have? Apologies if this is outside of the scope of your talk
+ - So yeah, over the past two years, something huge has happened. And what I am seeing in there as a solution is essentially comes down to a talk that was given maybe two years ago by someone at EmacsConf, and its label was attribution-based economics. In my thinking, intellectual property as a whole is invalid. But that means that through something like a Affero GPL, you focus on attribution basing, proper attribution basing. If somebody has done some work, it should be clear, no matter what, that that work is his. And that we already, even prior to AI, we were seeing this. We were seeing large GitHub repos with hundreds of authors. And it was utterly unclear as to who would own this whole thing. And any piece of it is not of significance. What is of significance is the whole thing. So moving towards that attribution based economics is key. And then once we do that, and then we accept AI as a reality. AI should still take very seriously and conform to attribution-based economics. In other words, what is generated by the machine should not be claimed to be no one's or the machine owners, the AI owners. It should still clearly be attributed to the people who contributed in its creation. This all becomes very muddy, very clear, and I don't have a simple or clear answer to it. But the perimeters of the solution lie in rejection of intellectual property, replacement of the intellectual property with attribution-based economics, and restrictions on AI use of not properly attributed content. Yeah, I'd say that would be, it's a complicated topic and I would simply say I haven't figured it out at all. I just have a perimeter set of concepts that can be used to drive it.
+
+[[!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..3f8f877c
--- /dev/null
+++ b/2025/talks/bookclub-tapas.md
@@ -0,0 +1,425 @@
+[[!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!
+
+## Discussion / notes
+
+- Q: I missed the beginning of the talk... did you show  examples of
+ files in bookclub style? that seems to be related to what I've been
+ doing, but coming from different influences...
+ - [https://github.com/ElephantErgonomics/Squint](https://github.com/ElephantErgonomics/Squint)
+ - A: So I included a... Let me see, I'm just looking at the IRC
+ here and smiling at all the people. So, yes, I provided a link.
+ So I think that an excellent... So I have gone ahead and
+ provided the link to the repo and I'm going to go ahead and
+ post that again. So this should serve as a full example of what
+ a just sort of standard book club file looks like. And if anyone
+ has specific questions about anything in particular, they would
+ love to see my walkthrough and narrate specifically, you know,
+ any place in this file that they would like to see me go over
+ live, I would be super happy to do that. So I have the whole
+ more or less complete book club file for Squint pulled up here.
+ Yeah, I have my vision laid out, which has my initial sort of
+ goal. The background and the vision sort of combined to lay out
+ what my general sort of goal is.
+- Q: The product of a Tapa like squint.org would be pure GOLD for an
+ agent like Claude Code - have you experimented with providing an
+ agent with the final output and letting it chew through todos?
+ - A: The product of a tapa like squint.org would be pure gold for
+ an agent like Claude Code. Have you experimented with providing
+ an agent with a final output and letting it chew through to-dos?
+ That would be a really excellent question. I actually just kind
+ of recently got into Claude in particular. I played quite a bit
+ with GPT and and a lot of 8 billion parameter local models. And
+ I was never super impressed. It always felt like I was just sort
+ of wrangling to get it on the same page, whether as a result of
+ sycophantism or really just not having enough parameters in
+ order to understand the context of what's going on. Claude has
+ completely changed my perception of what an LLM can do or not.
+ It makes autonomy not seem like a total fever train. I have
+ definitely been curious about how an LLM would react to book
+ club files. I think that, yeah, especially like, I've been
+ daydreaming a little bit about, you know, having it generate
+ scratch artifacts or suggesting, you know, changes to the
+ format. It's like, yeah, the fact that this is all like, you
+ know, like super, The goal and the hope for all of this is that
+ we're being verbose about our thinking anyway. This is sort of
+ how, by default, deep reasoning kind of works. 
+ - I actually think that I totally agree. It would be a great fit.
+ I have yet to personally do it, because I've always been just a
+ little bit wary about, like, you know... Well, if I'm writing
+ a program, I want to write it, you know? People often talk
+ about, like, you know, oh, I just want to hand off the boring
+ parts to Claude. But the thing is, if I'm writing in Elisp, I
+ find the whole thing to be kind of fun. I'd be super interested
+ in, you know, just sort of as a point of exercise, seeing what
+ it's capable of. Because I think, I really do think that this
+ would be kind of an ideal environment. It is kind of close to,
+ you know, native-ish, how LLMs think. There's also, like, you
+ know, of course, the, um, the privacy angle. I don't
+ necessarily want to provide a whole bunch of code verbatim that
+ I intend to GPL3. But I believe that Claude kind of has a better
+ policy in terms of what does and does not become training data.
+ I'll have to look into Claude in particular because I feel like
+ that would be my target for it. But yeah, I think that's
+ definitely onto something. I've definitely thought about this.
+ I've definitely been really curious about this.
+- Q: Do you think every Tapa should have it's own Bookclub file as
+ well? Or would you rather keep just one bookclub file in the top of
+ the project?
+ - So I think that I definitely would advise that each Tapa have
+ its own book club file. The reason being is because I find that
+ for me personally, the way that my brain kind of works is that
+ out of sight, out of mind is very literal for me. I find
+ that... I find that... What am I thinking of? Sorry, I just
+ saw that I got an email and I'm like, yeah, okay, cool. Case in
+ point, right? We are at case in point, you know, out of sight,
+ out of mind. Yes, no, absolutely. Yeah, no, exactly. I, um, I'm
+ definitely quite ADHD and it works for my advantage because it
+ provides all sorts of versatility. This is another great
+ advantage of book club. If you have an ADHD mind like I do
+ where, you know, You love jumping around and working on all
+ sorts of different pieces simultaneously. You don't like
+ sitting down and doing the same thing all day unless it really
+ latches onto you. You know, you can pivot and you don't do
+ anything. It really rewards the fact that you can pivot. So I
+ find that to be really excellent.
+ -  But to go back to the original question, I would definitely
+ recommend, at least in my circumstance, I find it to be
+ incredibly useful to have each tapa be its own book club file
+ rather than to have a unified file that holds all of your tapas.
+ You can definitely do this, especially if you're using org to
+ organize it hierarchically. It's just sort of a matter of
+ preference and style at that point. So long as you're making a
+ clear distinction between your tapas, that's the main thing
+ that I would recommend no matter what, because the whole hope
+ that I have is that you have a sort of separation of focus
+ between the different you know, the different focuses of your
+ different tapas, they really should ideally feel like different
+ programs so that you're not, you know, getting over yourself,
+ getting ahead of yourself. 
+ - I think that, you know, on that basis, I would probably default
+ to recommending that tapas have their own separate book club
+ files, because ideally they should kind of be different sort of
+ independent but related thoughts. But at the same time, I mean,
+ like, you know, this is coming from someone who like has a
+ billion small, like, you know, I had one giant org file for a
+ long time and then realized that really didn't work for me. So
+ now I have a billion tiny ones. So depending upon how you feel
+ about, you know, should I have one really big org file or a
+ bunch of really little org files? I feel like that more or less
+ gives your answer. I think it's whatever works best for you. I
+ know that far and away what works best for me is having separate
+ files. No matter what, you should have separation of concept
+ though. But however you do that is, you know, is best your
+ judgment call.
+ - ([Sacha]: Oooh, if you're jumping around a lot, C-u
+ org-refile is great for that, set it up with your agenda
+ files)
+ - Thank you! Makes sense! :-)
+- Q: How do you build habits when it comes to documentation? I tend to
+ produce lots of documentation in one go, then effectively "forget"
+ to do it for long periods of time, and end up playing catch-up which
+ results in a loss of precision as you aluded to in your talk. In a
+ work setting, when something goes on fire or priorities change, it
+ can be hard to keep discipline. Would love your thoughts, thanks!
+ - A: Yes, absolutely. So what I tend to do is I don't... So
+ really, so far, what I've been doing is that I haven't been
+ making a conscious priority of writing documentation at all. And
+ if that sounds contradictory to the talk, that is correct. What
+ I mean by this is that I go about is that when I'm writing
+ code, when I'm writing, you know, drafts of my functions, the
+ way that I tend to approach this, the way that I really
+ emphasize the approach for it, is that I want to focus first and
+ foremost on sort of like just writing down what my internal
+ monologue is for what I'm doing for that pass working on the
+ file. So my document takes ultimate... Distance of doc is
+ ultimately a property from the fact that I am writing what I'm
+ doing as I'm doing it. And it's more or less just I'm just
+ mashing out the stream of consciousness of what's going on
+ inside my head as it's happening. 
+ - So if we go down and we take a look at, yeah, so let's go ahead
+ and take a look back at the macro. Yeah, really, this is kind of
+ cheating, because mostly I would consider this to be
+ self-documenting, but we all kind of know that that in and of
+ itself is a slippery slope. That's not great. Because it's
+ like, I could believe that this would be self-documenting if
+ this was a three-liner. It is not. which, you know, also goes to
+ show me that this needs to be splitting into its own Tapas I
+ intend to, you know, write a Tapa that's a sort of macro
+ builder that automatically, you know, does the gensyms for you.
+ Something along the lines of what's the Common Lisp macro for
+ that called? It's like, there's some Common Lisp faculty that
+ does automatic gensym binding. I can't quite remember what
+ it's called. A prior version of this talk had my live coding
+ that, but that ended up sort of distracting from what I kind of
+ wanted to nail out and focus on. 
+ - But really kind of what I do is that, let me see here if I can
+ find some sort of... Yeah, so I have in my research section
+ sort of layout like what the quirks of all this sort of are. I
+ think my development focuses contain a little bit of what could
+ be ultimately considered to be documentation. Yeah, as I'm
+ looking through all of this, I'm kind of realizing that like,
+ you know, yeah, there's stuff that I'm into documentation
+ here, but it's all a little ad hoc. You know, I would, in part,
+ the design of this particular tapa is arguably not currently,
+ but is going to be simple enough such that a doc string is
+ sufficient for documentation. That is not the case currently.
+- Q: How do you write examples and tests? I think that you mentioned
+ that during the talk, but I couldn't find them on a very quick look
+ at your org file in the squint repo...
+ - My use of the word test was a little bit creative. It's my
+ validation of the code that I've written. I more or less tend
+ to do a, I tend to try and write really small functions and have
+ really aggressive validation by just making sure that, like, you
+ know, when I chain functions in the REPL, each step of them
+ produces results that are really quite immediately and
+ self-verifiably seen. Now, this isn't a great excuse to not use
+ a test suite, but it's gotten me pretty far. 
+ - What I mean by tests is that in the research sections, what
+ I've done is, so I've created a sort of tested in the sense
+ that I have created a really highly representative case of the
+ way that the program ultimately ought to behave. In doing so, I
+ created a sort of embedded domain language that I have termed
+ Animal Houses. And Animal Houses is a sort of markup language
+ that has rather simple rules. This here is the entirety of the
+ spec for Animal Houses. Grammar or anything, but like, it is
+ more or less. Breadth of everything that needs to be known about
+ how Animal Houses works. And I've created Animal Houses because
+ it is an ideal and incredibly simple circumstance for how to go
+ about as-needed tests for how Squint ultimately ought to work in
+ practice. So when I'm doing research, what I do is I take the
+ text of animal houses, and I will go ahead and insert it into a
+ buffer. And I'll just create an analog buffer. I just called it
+ awoo. 
+ - And then what I'll do is in my research sections, I will
+ write... Like I'll write like step-by-step instructions on how
+ to go about with a REPL-driven detection using Animal Houses. So
+ it does squint pass label to :with-restriction: correctly. The
+ tests conducted here indicate that it does not. And then I link
+ to a development focus that effectively acts as my bug report,
+ or, sorry, my bug listing for this particular problem that I've
+ identified. I lay out some criteria of how to go about using the
+ REPL to... you know I identify what I believe is sort of like
+ the quarantined area that I found for the bug, and then test is
+ that I will go about engaging with narration the step-by-step of
+ how I produce the circumstances around the bug until I
+ ultimately narrow all the way in and arrive at a conclusion. 
+ - Yeah, this is the sample text for animal houses. This is the
+ spec, not a formal grammar, but it is more or less the whole of
+ the spec that you need to write a parser for animal houses. Most
+ of the tests around Squint involve writing ad-hoc parsers for
+ animal houses. Just when I have it in its own buffer, you know,
+ I find, more or less, it's an excellent way of going about
+ testing in an ad-hoc sort of REPL-driven manner that I just sort
+ of write regular... that pull out the pieces of the sections of
+ buffer that represent the different fields and data types in
+ association with the animals and the houses to which they
+ belong. And then when I am engaging in research, what my
+ research section is, is I'm ultimately just laying out, like,
+ you know, I'm thinking to myself, is this working right? I feel
+ like there's something here, something in this area. And I'll
+ ask myself, well, what is it, what am I looking for? And then
+ nail down, how am I going to go about looking for it? The
+ process of working with the REPL to pin down what exactly is
+ going on and come to a conclusion on... 
+- Q: what is the largest project in terms of team size you had the
+ chance to consult and introduce the Bookclub Tapas concept and what
+ have been your experiences with these setups (implying larger
+ applications / solutions a company is working on)?
+ - A: It's been interesting. So in regards to this, the largest, I
+ would say two people in a couple of different circumstance. So
+ it's the pair of us working in a startup context. And then, you
+ know, we both have like rather technical backgrounds. We can
+ both more or less, you know, You know, sort of reason about
+ particularly excite, especially as we've been building up top
+ us is that, you know, well, we're both rather technical. You
+ know, I'm definitely software engineering sort of end. And, you
+ know, this partner is more. I mean, he's done all sorts of
+ different engineering, but none of it in a, like, especially
+ software context. So like, you know, but what's been really
+ cool about that is that especially as we've built up top us and
+ made clear distinctions about what they ought to do, you know,
+ he doesn't have a ton of like really, he doesn't like
+ experience like specifically in software engineering, but
+ because we have it all laid out in this really flexible way,
+ he's able to pick up the ball and like, you know, like he's
+ able to take the ball and run with it. because it's all laid
+ out in a way that's so intuitive. Like, you know, he's able to
+ like collaborate with me and like, you know, like, you know, run
+ off these ideas and like really go for it. Like, you know,
+ almost as quickly as I can, just because we've set up a
+ structure where like all of the different pieces have these
+ really intuitive and intrinsic and straightforward roles. And
+ that's, that's something that's really exciting in of itself
+ that I didn't really go over in the talk. Like a managerial
+ perspective, this is actually a really excellent way of
+ understanding the whole context of like what the software stack
+ looks like. Because it's like, you know, it makes it more
+ intuitive for developers for sure, but it makes it more
+ intuitive for everyone. You know, it's on that basis that I
+ can't imagine clients like just a better way at this point. Um,
+ that was that was the other circumstance where I have been
+ working with a partner. This has been with, um, you know, I
+ would be, uh. You know, sort of going back and forth with
+ someone who had hired me. Um, to, uh, like, you know, to work on
+ contract. And I would use this to sort of go over with them
+ about, um. Sort of get a solid idea of scope and function, do
+ pre-planning as we're going into more specifics on what the
+ overall look for the project and how it ought to look and how it
+ all ought to be laid out. So there's a lot of really exciting
+ flexibility there that I think is really cool.
+- Q: people will also be curious about the mechanics of collaboration:
+ other person uses Emacs and Org? Shipping things back and forth via
+ git / version control? CRDT?
+ - A: Screensharing, I'm stepping through the buffer by hand.
+ Using Emacs+Org is a bit to ask. I love the idea of crdt, would
+ love to use it with someone someday. Also would be nice to have
+ people thumb through individual Tapas in the stack.
+ - Note: (ah, maybe Org publishing for ease of
+ reference)
+
+ - Maybe a read-only version of the Org, making
+ screensharing a little bit neater.
+- Q: Have you experimented with something like whisper.el for doing
+ speech-to-text as you think out loud into your Bookclub? Might also
+ be fun to hook it up to Org-capture to link to whatever you're
+ looking at and then save it to your file
+ - A: Have you experimented with whisper.el for doing speech to
+ text as you think out loud into your book club? Now I am. I love
+ that idea. That is awesome. Yeah, no, I love that. 
+ - [Sacha]: Even with... I only have a CPU, no GPU on mine, it
+ does capture things a lot faster. And because it actually saves
+ the recording to a WAV, or I guess you can configure it, in case
+ it doesn't recognize something well, you can go back and check
+ it. That's nice. I like that more than a straight speech-text
+ thing. I've been mulling over the idea of having a keystroke
+ save into a background buffer so that even when I'm looking at
+ something else, I can dictate into my equivalent of the book
+ club file. 
+ - [Maddie]: Yes, yes, yes, absolutely. So you can be scrolling
+ through documentation on, like, you can be scrolling through
+ documentation on one screen and you can be musing to yourself
+ about, like, you know, is this supposed to work this way? Like,
+ you know, like, what in terms of, like, you know, like, I see
+ this function. It sounds like it's what I'm looking for. I
+ don't know if the types are quite right. I don't understand.
+ It's named what I'm looking for, but I don't know what it's
+ taking in. You can reason through all of this. You're not even
+ writing into the buffer that you're working with. That's
+ actually so cool. 
+ - [Sacha]: Or you can tie it into the org capture process so
+ that it can pick up an annotation automatically. Sorry,
+ annotation is the link to the thing, whatever you're looking
+ at. 
+ - [Maddie]: Oh, that's super cool. Yes. No, I actually really
+ love it. I haven't, you know, hooking this all up to Org
+ Capture at all. I actually really love that idea in and of
+ itself. Yeah. 
+ - [Sacha]: Org capture will give you a lot of capture options.
+ You can capture to your currently clocked in heading. So then it
+ just files your note in the right place automatically. 
+ - [Maddie]: Absolutely. I love that. Let me see. I'm actually
+ like writing a note to try that out. I'm definitely going to
+ have to do that. Like the flexibility of that in particular
+ sounds just perfect.
+ - Also related:
+ [https://newsletter.pragmaticengineer.com/p/san-francisco-is-back?open=false#%C2%A7wispr-flow-a-new-modality-for-programming](https://newsletter.pragmaticengineer.com/p/san-francisco-is-back?open=false#%C2%A7wispr-flow-a-new-modality-for-programming)
+- Q: I guess a major pro is it has less friction as people can do (a
+ lot, maybe not everything) in BookClub Tapas file vs. having to log
+ into gazillions of different systems, each one of them keeping a
+ portion of the information. Did I get that viewing point right from
+ your elaboration of the collaboration between you and your team
+ mate(s)?
+ - A:
+
+- i appreciate how easy this is to follow
+- i think i'm already getting an idea of how this comes together
+- Important caveot on this callout: The Emacs community has been really great about this, but this is a pain point of software development as a whole 😛
+- I don't think I've ever written really excellent documentation...
+- i don't think i've ever written even decent documentation
+- I don't know if I have ever written excellent documentation but I do actually enjoy writing it. But partly because I do tend to approach projects the way you are describing in this talk! And I like having a name for this process!
+- one of my ways of writing a mix of tests, examples and documentation is here: https://anggtwu.net/eepitch.html#test-blocks
+-
+- modern world, no time to read or write it anymore
+- A: I'm so glad to see that people are noticing bits and pieces of already doing all of this! 😊 I definitely found a lot of what I arrived at out in things that we're already doing. My hope was to formalize, name, and pull it all together 😊
+- “Clean Code" from Robert C. Martin ("Uncle Bob") is also worth taking a look and his views on documentation and so on.
+ - A: Clean Code is definitely a big inspiration for me, and I would highly recommend just about anyone read it. I don't think all of it is *perfect*, but *all* of it is worth considering
+- i definitely think this has a good balance between complexity and simplicity
+- Thank you! 👏
+- Great talk!
+- Excellent work!
+- great talk
+- Interesting concept! Now I'm thinking about how can I adopt it
+- I definitely noticed the utility of this process for ADHD
+- Would be very cool to record buffer information to effectively bookmark the context for that stream of thought
+- https:////newsletter.pragmaticengineer.com/i/177384640/wispr-flow-a-new-modality-for-programming "In the office, every desk is fitted with a $70 BOYA Gooseneck microphone, into which devs whisper"
+
+
+[[!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..d7a6faee
--- /dev/null
+++ b/2025/talks/calc.md
@@ -0,0 +1,60 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: How sophisticated an ordinary differential equation solver would
+ be useful? There are some C libraries one ould try to build upon,
+ but there are many corner cases, stiff, non-stiff is one
+ categorization, but an explicit Runge Kutta would work for many
+ non-stiff equations
+ - A: I don't really have any opinions right now about the
+ approximation methods. For me, what I really want is one of
+ those old style languages where you basically just type in the
+ list of differential equations and don't have to do any other
+ computer programming, or know the details of another programming
+ language. I played around a bit with python-dda, though it has
+ some deficiencies. There are some graphical free software
+ programs where you do this sort of thing with blocks, but they
+ all depend on Java which is problematic in Guix.
+- Q: Is there a way to see the input of a custom function? E.g. if you
+ forget the order of f and C in the example you showed
+ - A: Let's see... there is calc-user-define-edit. One calc also
+ view the file where the definitions are stored, though that is a
+ somewhat obscure format.
+- Q: Have you tried interacting with calc via org-babel (first thing
+ that came to mind when you said that you'd like to annotate
+ values)? Any thoughts on that? How about rendering gnuplots on org
+ documents via calc?
+ - A: I played around with babel once like two years ago, trying to see if it would make more sense to use babel or one of those jupiter notepad things. But I guess I haven't really had any need to play around with either one since then. I don't really have any need to produce plots on org documents right now, but it is an interesting idea.
+- Q: Who is in charge of calc development anyway? Is there an active maintainer?
+- Nice talk.
+- Thanks for the cool talk! I've been using Calc quite a lot recently for linear algebra work. I also use it quite often for unit conversion. There's a package called calc-currency which is very useful but unfortunately does not seem to be maintained anymore.
+- I'm going to have to rewatch this talk.
+- thanks for your talk! Calc strikes me as one of those really powerful things I should spend time learning a little more about one of these days =)
+- calc is suprisingly good at datetime math.
+- I mostly use it for that and unit conversion. I don't do any fancy calculus like lispmacs did in his talk.
+- Funny, I'm studying computer engineering and just a few weeks ago I'd decided to properly learn how to use calc myself.
+- Interesting descriptions of stargazing on Christopher Howard's gemlog
+
+[[!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..e8882c7f
--- /dev/null
+++ b/2025/talks/gardening.md
@@ -0,0 +1,84 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: Have you faced any major problems while using emacs in Windows?
+ - A: Hello, thank you for the message and sorry for the delay,
+ messy days... No major issues till now, but I'm basically
+ using it just like any other text editor, mainly for my Org Mode
+ garden.
+- Q: What do you run when you want to publish content from your org
+ files to your web page on codeberg?
+ - A: Hello, thank you for the message and sorry for the delay,
+ messy days... Basically, as I wrote here
+ [https://marcoxbresciani.codeberg.page/digital-garden.html#garden-my-garden](https://marcoxbresciani.codeberg.page/digital-garden.html#garden-my-garden)
+ I open my publish.el file and evaluate it (M-x ev-b). Then I
+ usually (but it's just an habit) switch to the index.org file
+ and run the export-publish-project command (C-x C-e P p) that
+ will automagically generate all the needed HTML files for the
+ org files that have been updated or changed since last time.
+- [https://marcoxbresciani.codeberg.page/](https://marcoxbresciani.codeberg.page/)
+ - [https://codeberg.org/marcoXbresciani/pages](https://codeberg.org/marcoXbresciani/pages)
+- Lovely talk, thanks! =)
+- Ok, loved the humour in this, and yes an `outlook' email in this
+ day and age, SIN!! :P
+ - It is fine, the way to freedom is a ladder.
+- Nice talk
+- Thank you every one. Hope this message will reach you. Sorry messy
+ days...
+- I'm loving this talk. I admit that I was influenced by his accent, but the ideas are great
+- i like his philosophy on customization/configuration. (make it your own)
+
+
+[[!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..f0b07527
--- /dev/null
+++ b/2025/talks/gnus.md
@@ -0,0 +1,94 @@
+[[!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.
+
+
+## Discussion / notes
+
+- bandali: here's the talk page on my site, along with the sample init and authinfo files: <https://kelar.org/~bandali/emacsconf-2025-gnus.html>
+
+- Q: I noticed that it took a considerable amount of time to send
+ email. Is it possible to configure gnus to use an external smtp
+ client to send emails? (thanks! I agree, even on thunderbird it's
+ slow sometimes).
+ - A: Right, yes, it definitely is possible. In fact, in the past, I've used, I believe, MSMTP, which is a small SMTP implementation that's independent of Emacs. So you can do that. It's also possible to, pointed to have it use the sendmail binary on your system. If you have a local MTA mail transfer agents like Exim or Postfix installed and configure. I believe that should also dispatch and return instantaneously and then have Postfix or Exim deal with sending the message on their terms without blocking Emacs. I don't know, it depends. Normally it's not always that slow. Sometimes it is. I think it also depends on the load on your mail server. Sometimes it's instantaneous, sometimes not. So I hope that helps.
+- Q: Is the dovecot workaround actually a solution? I haven't tried
+ it, but if it works smoothly I'll surely do so.
+ - A: It is, it really is. I've actually been using that setup for many years. I can't remember. Oh, I believe it's Eric Abramson who first shared instructions on how to set this up. Let's see if I can find it. There we go. Yeah, this is it. I'll share this on IRC as well. Yeah, so Dovecot is very, very efficient. It's written in C. And yeah, when you point Gnus to an IMAP server like Dovecot, dealing with email is pretty instantaneous. This article or post by Eric is great. Although I will say that there was a recent major release of Dovecot. I can't remember if it's 2.4 or 2.5. and it's a breaking change. They change a lot of the configuration syntax, so there's a high likelihood that this drop-in configuration won't work, even though that's what I used as my starting point a couple years ago. I will be writing an article on my personal site to go over how to configure recent versions of Dovecot for such a setup, for a local setup.
+- Q: Do you have experience with mu4e or Notmuch, and why would you say
+ Gnus is worth using compared to these?
+ - A: I do have experience with these, although it goes back many years, and I'm sure both of these have evolved since, and they're great pieces of software in their own rights. And actually I did use them in that order. Like I first tried Mu4e in Emacs, when I started using email in Emacs, then I tried Notmuch for a while, and then I went to Gnus. They're great. They have like pros and cons. Mu4e, I believe, has excellent maildir handling directly, if I'm not mistaken, unlike Gnus, so you can point it directly to your maildirs locally, and it should work fine, if I'm remembering correctly. Notmuch is also excellent. The thing with Notmuch is that it uses Xapien for indexing and searching email. It's tag-based, so you can tag messages. And then, yeah, it's amazing for tagging and searching capabilities, very powerful search features. And my reason for trying Gnus and then, I don't know, eventually liking it was couple of years ago, I went through this kind of phase of trying and trying to like use and stick with packages that are built into GNU Emacs as much as possible. No particular reason that I would like, you know, recommend people do that per se, but yeah, that's just what I wanted to do. Cause I noticed my configurations were like growing unwieldy. So I, like many others declared, Emacs in its bankruptcy, in its file bankruptcy, and configure things from scratch and try to use whatever that Emacs had to offer built in itself, and then only reach for a couple of external packages here and there. So that's what I went to. That's how I ended up on Gnu's. And it's been very nice. I've tried a few other email clients since then, temporarily, like I tried AERC, A-E-R-C, which is not built into Emacs, but I don't know, I keep coming back to Gnus. It's great to have it all, to be able to do all these things from within GNU Emacs.
+- Q: At my organization, we're forced to use OAuth with outlook and
+ they've also blacklisted all email clients except thunderbird (but
+ they don't support it, only the webmail or the outlook app). Do you
+ know if this is something that can be circumvented in Gnus? (I've
+ tried it with notmuch for example, and it never worked. Even K-mail
+ on android didn't work). But this specific to IT at my org. I'll
+ ask on IRC. Thanks!
+ - A: So if I'm pretty sure, at least with the recent Emacs versions, Gnus does support xOAuth as a backend. So I think you should be able to do that even with just the things, the machinery built into Emacs. Even so, I think there are external packages and programs. One of them I think comes from this Cyrus IMAP world of things that implement like XOAuth. So you should be able to do that. You should be able to use that to get authenticated to your organization's mail server. But I've never tried that myself. In terms of like blacklisting all email clients, I don't know how they would do it outside of, you know, this kind of authentication thingy. If, you know, they check the user agent header or something, that's pretty easy to customize and set. With Gnus, you can set, define a posting style to set a custom user agent. So, yeah, that's as far as I know. Thunderbird is pretty nice too. Like I reach out for it sometimes when I'm in a rush or can't, don't have the time to like set up Gnus with like some new like IMAP server or something. I reach for it sometimes, but yeah, I primarily use Gnus. I see. So the question says they tried it with not much and it never worked. Even KML on Android didn't work. Right. Yeah, I'm not sure. If you can like provide maybe more details as to like what doesn't work or if you get any particular error messages or like how they're trying to like prevent you from using it, then maybe folks could have some ideas of maybe how to get around that. ... So the organization is doing some kind of check during setting up of OAuth. So I think how that works is sometimes these email clients, I think at least this is the case for Gmail or something, where a project such as Thunderbird needs to apply for some kind of token to be able to authenticate and connect its users to a mail server. So all I will say is that Thunderbird is free software and the sources are available and you might be able to find the token that they use and yeah.
+
+- excellent introduction to gnus! thanks!!
+- Very nice talk! Thank you.
+- Really good introduction, this will be my go to link from now whenever someone asks "how to use gnus".
+- great - going to finally be brave and give gnus a look after that, no excuse not to anymore
+- I really enjoyed, from time to time I came across to gnus, but I don't have the time to tune it and I keep with mu4e+mbsync to handle my email
+- Yes, it covered the key points very well and should hopefully encourage others to start using gnus.
+- https://ericabrahamsen.net/tech/2014/oct/gnus-dovecot-lucene.html
+- okay thanks, will do gnus + dovecot ater the conf.
+- For me, the key feature of gnus is scoring (both manual and adaptive)!
+- I use davmail to access Outlook from gnus.
+- Looking forward to more videos on GNUS from you! Excellent talk!!
+- +1. Excellent introduction. If I would have had such a tutorial some
+ 15 years ago when I first used Gnus, my learning curve would not
+ have been that steep. Thanks! Hope it will help new users. So,
+ spread the word about your talk!
+- Fantastic presentation!
+- Thanks for this talk, I liked that you started with a clean setup
+ and built from that. Reading and writing emails in Emacs is
+ definately not straighforward, I find it frustating that there are
+ so many pieces to put together, and a bunch of documentation to
+ read. I admit I find Gnus overwhelming. Still, like you said, this
+ is built-in into Emacs, and it can be used to read different type of
+ contents, like emails and newgroups, rss feeds, etc. Looking forward
+ to more documentation and tutorials from you, thanks again!
+- BTW, I would have like to see a quick demo of Gnus while it is fully
+ configured and tweaked, just to tease me to bother using it!
+
+[[!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..4a283454
--- /dev/null
+++ b/2025/talks/graphics.md
@@ -0,0 +1,43 @@
+[[!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
+
+This video has no narration.
+
+- <https://dataswamp.org/~incal/tmp/greeting.webm>
+- <https://dataswamp.org/~incal/tmp/kitty-vt.webm> shows the software can be used from a -nw Emacs
+
+- didn't expect to see demos today
+- I was reminded of the demo scene by this presentation. https://scene.org/
+- does the demo show its code at some point?
+ - It doesn't :/
+ - https://dataswamp.org/~incal/bad-www/index.html
+- this has more than when I previewed it last. Wow!
+- So how to download the source from https://dataswamp.org/~incal/bad-el/src/ ?
+- maybe he likes to be mysterious
+
+- Q:So how to download the source from that site?
+ - A: there is a link to src/ maybe I can do a tar ball for y'all.
+ if so I'll put it in that dir
+ - wget use -e robots=off if robots are a problem
+ - https://dataswamp.org/~incal/bad-el/src/bad-el.tar.gz <-- there is a tarball you can download now.
+- Q: How do you get into demomaking?
+ - A: never thought of it that way. is it different from other
+ programming?
+
+[[!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..764cb174
--- /dev/null
+++ b/2025/talks/hyperboleqa.md
@@ -0,0 +1,433 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: I'm excited to know opinion on current state of using MCP and Ai
+ for PKM and PIEs. Since they do carry lot of burden out of us and
+ ease lot of process. How does hyperbole stand with coming days?
+ - A: We haven't yet done anything specific for MCP-based modes
+ but Hyperbole is a toolchest of capabilities for interlinking
+ information across Emacs.  You can use existing link types or
+ create your own with just a few lines of code.
+ - AI is obviously on everybody's mind. We haven't done a lot of
+ integration with any of the popular AI engines, but I think as
+ you'll see through this Q&A session, Hyperbole's function is
+ really to interlink your information everywhere throughout
+ Emacs. And so, whether you're using a chatbot in a specific
+ buffer, you can use hyperbole implicit links, implicit buttons
+ to activate different actions there as well. So sometimes it
+ takes a bit of customization, a small amount of two to seven
+ lines of code to do that. As we get to working with more of
+ these engines, we'll build that into the core part of
+ Hyperbole. But right now, that's left as an extension for users
+ who are heavily using MCP or other protocols right now. We have,
+ for example, integrated with LSPs, you know, for coding and have
+ that interface through xref and basically using the single key,
+ the action key, which is made a return. You can jump around to
+ any of your source definitions from any reference in almost any
+ language that anybody uses today. So you can extrapolate from
+ that how that might work with AI as well. And I think you'll
+ see later when we talk about HyWiki that we're now enabling
+ just just wiki words to be buttons in hyperbole. So those could
+ be part of your chat with an AI and you just click on it and you
+ jump right to all your references associated with that
+ terminology.
+- Q: As a normal user who codes and takes notes, I really want to
+ deep-dive and learn Hyperbole, but always end up winding back up to
+ embark and org-mode being the better system. For me hyperbole looks
+ like over-engineered (or over-configured) system which other
+ individual packages do well. And outside emacs there is no system
+ supporting hyperbole nor any usability.
+ - A: Listen to this Q&A session and take it one bite at a time. 
+ Across time, you will see how the parts of Hyperbole integrate
+ together and why they are all there.
+ - Right, Hyperbole is large, but there's reasons behind that.
+ We're just trying to link all your information in Emacs. So I
+ think you can see my screen here in Emacs. So for example, you
+ can take any Lisp expression, even a variable like here we have
+ in Hyperbole, hyperb:dir variable, and I just hit the action key
+ M-RET, and in my minibuffer, I see the value of that variable,
+ but I could just as well take any other expression and take the
+ outer parens off and change them to angle brackets and now
+ that's a live hyperbutton. Could be in a comment in a
+ programming buffer in this case. It's in Koutliner buffer,
+ which is a an auto-numbered outliner part of hyperbole. So
+ let's just try this and say M-RET. I pressed and it ran occur
+ and found all the occurrences of buttons. And similarly in here,
+ I could just jump and go to any of these lines directly by
+ hitting M-RET in that buffer as well. So all your text, all your
+ sort of what we call implicit links become live in Hyperbole.
+ And you didn't have to learn much. You just learn, you know, if
+ you know a little Lisp or how to type any expression, then you
+ just change the outer brackets. And all of a sudden, you have
+ hyperbuttons. So Hyperbole, you can learn a little bit at a
+ time. And although it seems daunting at first because it has so
+ much functionality, very large and rich architecture. But what
+ we do is teach people one piece at a time.
+ - So just to continue on that a little bit, implicit buttons are
+ buttons that exist just from the text pattern in the buffer. So
+ you saw an example of changing Lisp into implicit buttons right
+ there. I could do keystrokes. I can just type them out in my
+ buffer and surround them with braces. So here's something,
+ let's see, this is actually a command in the K Outliner to jump
+ to the cell numbered four. So let's just do that. And it took
+ me right there, right? So I'm just pressing M-RET to activate
+ these buttons. Similarly, any sort of, this is a complex
+ example, but any path name I can surround with double quotes,
+ and it's a live hyperbutton. In this case, I want to jump to a
+ path name called readme.md, but it's in a directory that's
+ specified by an actual list variable. And then I want to go
+ directly to a headline within that file called Hyperbole manual.
+ And within that headline, I wanna go to the eighth line relative
+ to that. So all I have to do, M-RET again, and boom, I'm in
+ that, I'm directly linked to that. And Hyperbole has ways that
+ you can just split your windows like this and create that
+ reference in the source buffer right there. You just press a few
+ keys and it'll embed that link. We'll see that a little later.
+ - Another example, so all of these buttons, if I just show you
+ here, you can press C-h A anytime. and it will show you exactly
+ what M-RET will do in that context. In this case, it's an
+ implicit button, and it shows you even where the button starts
+ and ends, what type of action it will run, it's a link to a
+ file line, and then what arguments it takes. So Hyperbole
+ extracts all this meta information just from the text in your
+ buffer and displays it to you conveniently so you can know
+ before you ever touch a hyper button if it will do something
+ that you want it to do. Here we have a fairly advanced button
+ that's very simple to do. You just specify a bug in Emacs that
+ you want to reference to. Notice no delimiters, just bug pound,
+ whatever, M-RET. And I'm in Gnus reading the conversation for
+ that bug. And I can just, you know, move through all the
+ conversation. I can quit out of there and go back to where I
+ was. So very, very easy to use these implicit buttons because
+ they're already there throughout your Emacs buffers. I
+ described the C-h A, what that does. And there's other types of
+ buttons that we can get into as questions go on, but you can
+ create your own explicit buttons that have a little slightly
+ different delimiter than you see in the implicit buttons. And
+ this one I just put in here to show you that If you use it and
+ you go, this is the hyperbole to do list, which is an org
+ buffer. But I wanted to show in here that similarly, we have
+ implicit buttons for TODOs in the work. And when we hit M-RET,
+ it just changes the state of that to do. And I can cycle through
+ those but even better with the prefix argument if I have
+ multiple sequences of TODOs because there's Bob and Mats that
+ maintain hyperbole so I can shift to Bob's TODOs with C-u M-RET
+ and then cycle through the states for me So very very easy to
+ use, you know something that's a little bit more difficult to
+ do I think in org without it.
+ - So that's an explicit button where I had to actually say I want
+ to create this button, and I had to specify what type it is. If
+ I show you the information there again, you see it has a little
+ different type called a keyboard key, which runs just the key
+ sequence. So you're starting to see already that explicit
+ buttons have a type that's connected to an action that an
+ implicit button can do as well. So all of this ties back
+ together.
+ - And finally, there's a homepage that Hyperbole has, a personal
+ homepage that you have. You hit C-h h, which is our mini-buffer
+ menu, and then you hit what is it, b for button file and then p
+ for personal file. And that just brings you to basically a set
+ of links that you can create buttons in any format you want.
+ There's no structure that you see here. But the nice thing is
+ that all of these buttons that have these names, as we call
+ them, with the delimiters here, can be referenced now as what we
+ call global buttons wherever you are in Emacs. So I'm in a
+ separate buffer here and say I want to jump to that to-do button
+ that's labeled td on line 10 down there. No matter what I have
+ on screen, I can hit C-h h g for global button, a for activate,
+ and then it gives me a list of those. So I know it's td, I just
+ put td in. Okay, that's a path link problem I have, but when I
+ fix the link, it would go to it. So you can create buttons that
+ you can access in any mode, anywhere, and just give them quick
+ names, and it's very easy. So that kind of gives you an idea of
+ how you can get very productive with hyperbole with just a few
+ simple techniques. 
+- Q: I've been using "activities.el" and "Bufferlo" to save
+ dedicated workspaces (open buffers, window positions) in tabs and
+ frames for tasks/projects across Emacs sessions. Could I do
+ something similar with Hyperbole?
+ - A: We plan to have Hyperbole activities.el integration in about
+ another month, so stay tuned for that.  In the meantime, there
+ is the Win/ minibuffer menu, that lets you save window and frame
+ configurations by name or onto a window config ring similar to
+ the kill-ring.
+ - Yes, you can. And activities is a nice package from alphapapa.
+ We've actually been working with it lately. So we're probably
+ in the next month or so we'll have a specific integration to
+ activities built into Hyperbole. But right now, we don't. But
+ of course, you can call any of its functions or key bindings
+ using the techniques that I just showed you earlier. But what we
+ do have built in if you go to the menu again. and you see C-h h,
+ and then there's a w, Windows, WinConfig menu, and there's two
+ types of window configurations that you can save here. They are,
+ right now, they're per Emacs session. They're not stored
+ beyond that, but we'll probably add that in as well, or we'll
+ use activities for that. so the two types are you can either
+ just save a window configuration in a frame... Actually, it
+ stores the frame configuration to a ring just like the kill
+ ring. So you have the three commands at the right. you can save
+ with an s, you can pop one off the ring with p, or you can just
+ yank and keep cycling through with a y and it will restore the
+ frame configuration that you saved. Similarly, you can just do
+ it by name, and you can say "I want to add a name" and then
+ just give it a name again, winc, and store it and it stores it
+ there and then you can get back to it by name as well. So fairly
+ easy to use as well and again integrated in the same simple menu
+ system. S
+- Q: How well do Hyperbole and org-mode work together? Is there any
+ kind of integration?
+ - A: Hyperbole is very well integrated with Org mode and most
+ Hyperbole capabilities are live within Org mode buffers.  We did
+ an EmacsConf talk in an earlier year about the integration. 
+ Find it here: 
+ [https://emacsconf.org/2022/talks/hyperorg/](https://emacsconf.org/2022/talks/hyperorg/)
+ - How well do hyperbole and org mode work together? Is there any
+ kind of integration? Yes, in fact, that's really good. I'll
+ just mention something. Let me go back to my homepage. I just
+ stored that here. So we gave a talk at an earlier Emacs
+ conference right here on org and hyperbole integration. So
+ that's a good one to go back to. And I believe it's in this
+ files included with hyperbole as well. So you can learn various
+ techniques of how the action key helps you in org. It does
+ special things in tables. And there's some nice support for,
+ for example, working with code blocks. Let me see where that is.
+ Okay, so right back here. So you can run them with the action
+ key. You can refresh the output and do things like that. So
+ again, if I just hit C-h A, it'll tell me that it's in smart
+ org, and it'll give me all the different contexts that that
+ operates within. So there's a lot that it does in here. And you
+ can see it would point on the dir value of a code block
+ definition that will actually display a summary and all sorts of
+ functionality. So the integration is quite tight. And one of the
+ things we do since M-RET is used in org, we have a customization
+ setting, c then o. And you have these three settings where you
+ can say, I want M-RET to... I want hyperbole to control that
+ and everything that the action key does I want to happen, or I
+ only want hyperbole to control when I'm over a hyperbole
+ implicit/explicit button, or I want org to control that key and
+ never use hyperbole. So you just set that once, it's persistent
+ across sessions and you're good to go. And again, it's built
+ right into the menus.
+ - But even following that we've the latest addition to hyperbole
+ is something, and this is the first time we're really showing
+ it publicly, is the Hywiki, which is a new subsystem as we call
+ it, and this is I think the best wiki capability in Emacs. Now
+ what it does is it automatically highlights... Let me turn it
+ on. I have to turn on hywiki mode. And you see those wiki words
+ now got highlighted, so any any wiki word which is the
+ capitalized alpha word you know, so you can have multiple
+ capitals in there and it'll get recognized, can be used as a
+ wiki word. So for example when I just type HyWiki here, it
+ automatically recognizes it, and you see it turned it into a
+ hyperlink button, which again, C-h a will tell me exactly what
+ it does there. But I can just hit the action key, M-RET, and
+ it'll display my hywiki.org file. All wiki pages are org files.
+ So we're using that for the wikis, and you have You can export
+ an entire wiki using essentially the org export capability with
+ a little extra set of features that we've added in, but let's
+ say, even better. You see I have this heading here, so let me
+ just change this. You go back here, and I'll say go to heading,
+ so you just put a pound on it, and now that whole thing is a
+ reference to a specific org section. Notice there's no org IDs
+ here. There's nothing other than the text that you're seeing.
+ There's not even a delimiter. So we have automatic implicit
+ hyper buttons being added in any buffer. Could be a comment in a
+ programming buffer with all you You don't have to add anything.
+ I'll show you how to create a new page in a minute. But you see
+ I can link to any org section without any IDs. And then I can
+ also do like org-roam does, but without the indexing or database
+ that it requires. I can scan over all of my wiki files and
+ headings. find a match really quickly. So we can get into some
+ of that a little later as well. But, you know, very convenient.
+ There's nothing that you change on org to do this. So how do I
+ create a wiki word? Well, let's say I wanted, you know, wiki
+ word for me. So that's already, that was a wiki word, but now
+ this is a new one. So you see it doesn't highlight because I
+ haven't created a wiki page yet. So all I hit is the action
+ key, and boom. Now it created it as a new wiki word. It created
+ the .org file. If I don't edit this file, it won't save it,
+ and it'll not become a word in case you made an accident. But
+ let's just say I want to say it. So, you know, heading. That's
+ it. I'm just in org mode. Now anytime that hywiki mode is
+ active, in any buffer essentially, I can type that out and
+ it'll recognize it. Notice so that's not a wiki word. So it's
+ highlighting and it's unhighlighting right as I type. So,
+ again, you can embed these as org links in org. There's a
+ special format like this, HyWiki word that you can make an org
+ link if I was in org mode, just like that. So there's all sorts
+ of compatibility, but basically it's just words, and HyWiki
+ takes care of the rest for you. So there's a directory where
+ all these, it's HyWiki, hywiki, ~/hywiki is the default place
+ where all these would be found, and there's a menu now in
+ hyperbole for hywiki, h, and you can see, it has a lot of
+ capabilities. But I can say, b, go into the directory of all the
+ files, just pull them up, and any of these you'll see... Let
+ me give you one like this. Okay. So you can see the other wiki
+ words being highlighted in here. It's very fast too. There's
+ almost no delay for anything, and yet very flexible, and you
+ have this ability where you could type emacs#section-1-2 and if
+ you didn't have delimiters around it, but you can put any
+ delimiters like double quotes or parentheses, and then it'll
+ match without you having to change the header at all with the
+ spaces included, and all of those will get recognized. I don't
+ know if the section exists right there. So anyway a lot of
+ capability you can see that here where I did the hy... it
+ actually highlights as an org link because it is an org link,
+ and it'll operate just like any other org link even though
+ it's a hywiki word link as well. So very powerful stuff and
+ totally integrated with Org Mode throughout. Great. 
+- Q: Are there any talks from this year's emacsconf that discussed
+ things that would work well with Hyperbole?
+ - A: Had to work yesterday so I haven't followed the talks. Pick
+ your favorite mode/type of information. Can Hyperbole work with
+ that? The answer is yes.
+ - Demo of how to create an implicit button type.  See
+ documentation here:
+ [https://rswgnu.github.io/hyperbole/man/hyperbole.html#Creating-Types](https://rswgnu.github.io/hyperbole/man/hyperbole.html#Creating-Types)
+ - No. Unfortunately, I had to work yesterday, so I haven't been
+ following the conference as much as I do. Maybe somebody else
+ could comment on that. But I think, you know, again, it's like
+ pick your favorite mode, pick your favorite type of information.
+ Can hyperbole work with that? You know, the answer is almost
+ always yes. So, you know, if I show you just a little bit, if I
+ show you some of these implicit button types, just so you know
+ the amount of code involved to create a type. So here's like a
+ mail, recognizing an email address as a button. It's a little
+ long, so that it creates a lot of things, but you know it's
+ less than 15 lines of code for that. Path names are complicated,
+ so that's a longer one, but let's look at... So here's one
+ recognizing a bibliography entry. So it can be between two and
+ 20 lines of code to create an entirely new button type. And you
+ create it once, and you just add it to the set of types, just
+ like at the fun, except it's done with this macro called def
+ implicit button type, and defib. And it's part of your
+ hyperlinking system forever then. So say you got dumped with
+ 5,000 documents that were in this weird text format, and they
+ all had cross-references among them, but it was, again, using a
+ weird format. You could just write your own little type for
+ that, and then those 5,000 documents are hyperlinked for you
+ every time you're browsing them in Emacs automatically. So we
+ do that all the time, create small things, but all of these are
+ built into Hyperbole. Markdown links, texinfo links, all of
+ that's automatic. I could even be in a shell mode, and I just
+ say ls, and these are hyperlinks that Hyperbole understands,
+ right? It just jumps right to the file. So grep -n, you know,
+ looking at any line numbers, you don't have to remember all
+ these different commands anymore. You just hit M-RET, and
+ Hyperbole does the right thing in all these different contexts,
+ including following cross-references in code. So I would say
+ that's your answer. Most things that people are talking about,
+ we've already probably integrated with Hyperbole or with a
+ little bit of custom coding. You can do it. 
+- Comment: Interesting, but the many different link formats makes
+ reading and analyzing my notes much harder and less usable outside
+ Emacs. 
+ - Well, I mean, the different formats that you're saying, like
+ angle brackets or curly braces, are just so that you can utilize
+ many different types. of buttons, but if you just want to use
+ key sequences, there's only one markup format. With org,
+ you've got the square brackets, which are consistent, but in
+ order to have different types, you have to type a prefix name,
+ like you see the HY for the HyWiki buttons in org mode. So I
+ think the trade-off is pretty much the same, but Hyperbole
+ always, always works to minimize the amount of markup. Markdown
+ is pretty simple. A lot of people like that. But I think you'll
+ find in hyperbole texts, they read just like regular language. I
+ mean, the delimiters are fairly invisible. So I'm not sure what
+ the issue is there. And again, you can choose your own. You can
+ make your own types with your own delimiters. There's even a
+ custom macro that instead of using that defib where you have to
+ type out Lisp code, you can use regular expressions. And in one
+ line, you can define your own type of button with its own
+ delimiters. So, you know, depending on what works well for your
+ eyes, you can make Hyperbole adapt quite well to that. And
+ again, if you start using the HyWiki, there's literally zero
+ markup on that. So you're just reading text, and when you want
+ something hyperlinked, it's like a glossary or a dictionary
+ entry. It's just there, and it's just highlighted in the text.
+ So I don't see much barrier to using it with many different
+ types of documents.
+- Q: Is there any doc on Hyperbole's design and architecture?
+ - A: See this very interesting AI-generated document with a bunch
+ of diagrams covering Hyperbole's architecture: 
+ [https://deepwiki.com/rswgnu/hyperbole/1-gnu-hyperbole-overview](https://deepwiki.com/rswgnu/hyperbole/1-gnu-hyperbole-overview)
+
+- interesting but the many different link formats makes
+ reading/analysing my notes much harder, and less usable outside
+ emacs
+- Hyperbole is designed to minimize the markup necessary on
+ hyperbuttons and with HyWikiWords there is literally no markup.  Org
+ has uniform link delimiters but requires different link prefixes to
+ embed different link types.  Hyperbole uses different delimiters for
+ different types instead, but they are always easy to read and not
+ heavyweight like some Org markup is, e.g. drawers and IDs.
+
+
+[[!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..1a5f8c79
--- /dev/null
+++ b/2025/talks/juicemacs.md
@@ -0,0 +1,171 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: Sorry for the explain-for-CL-user question - is what juicemacs is
+ doing analogous to issuing a new declamation then doing something
+ like (funcall (eval (function-lambda-expression
+ #'my-sbcl-function))) ?
+ - - (Thanks I had been confused about JIT a little bit)
+
+ - A: I actually know very little about CL (the benchmarks come
+ from an article linked in elisp-benchmarks). Personally I think
+ the difference between Juicemacs and CL impl like SBCL, is that,
+ most CL runtimes I know actually ahead-of-time compiles code,
+ even in REPL, but Juicemacs is a JIT runtime and tries to gather
+ statistics before compiling things (mostly through Truffle). For
+ function calls, Juicemacs has several optimizations, like
+ assuming unchanged function definitions (and recompile when it
+ changes), and cache functions produced by `#'(lambda ()
+ ...)` constructs.
+- Q: What's the inspiration behind the name Juicemacs?
+ - A: Since it is in Java, so I want the name to begin with 'J'.
+ Since juice is humorously not solid, I chose that name :)
+- Q: Do you think the GC of Juicemacs will have similarities with the
+ GC iterations of GNU Emacs (such as IGC)?
+ - A: I am very much looking forward to IGC but haven't tried it
+ yet. The difference between IGC (using MPS under the hood) and
+ JVM GCs is that the MPS used by Emacs is conservative (GC term)
+ and not "precise" (also GC term), in that it guesses what
+ machine words on the stack are actual objects, but otherwise it
+ should be a very competent GC.
+- Q: Just reading the blog - your experiments with Emacs are so
+ extensive :D how'd you get started? Have you experience writing
+ text editors?
+ - A: Thanks! Currently, Juicemacs is mostly about an ELisp runtime
+ though and has very little actual "text editor" things. (It
+ has proper elisp buffers, but not display in any way - no
+ GUI/TUI). And with a functional elisp runtime, an actual editor
+ can (1) be fairly easy if you ignore a bunch of things mentioned
+ in the blog, (2) or very very hard if you want to replicate
+ Emacs. And, sadly, no, I don't have experience previously
+ writing text editors, so my current plan is to delegate
+ rendering to GTK (and Pango for low-level rendering to support
+ overlays) (and other programmers by using a proper IPC protocol
+ :-) ), and delegate editing to ELisp (which is also what Emacs
+ does).
+ - For getting started, I don't know? I've already started
+ experimenting with a bit more things. Basically it is all about
+ replicating and learning from other implementations, like Emacs
+ and GtkTextView (and GraalJs for JIT compilers) (oh! and VS
+ Code, I just borrowed their intervalTree.ts for overlays): it's
+ all there, written by competent people. And all you need is
+ maybe read them all? ;P (Experimenting with Emacs and learning
+ about it (and crashing it sometimes) is very fun, by the way.)
+ - Here is a little devlog:
+ [https://juice.zulipchat.com/#narrow/channel/535506-gui/topic/Tiny.20progress.3A.20GUI.20dev.20log/with/562157361](https://juice.zulipchat.com/#narrow/channel/535506-gui/topic/Tiny.20progress.3A.20GUI.20dev.20log/with/562157361)
+ , in which I am trying to get a GUI (and after that maybe an
+ editor) working.
+ - (original question-asker) -> So: read read read, smash smash
+ smash. Love it :D and zulip is a nice idea for organising public
+ engagement with a project, looks v cool. Thanks for sharing!
+- Q: <emarsden> GraalVM is able to run C code via LLVM; I wonder
+ whether it would be feasible to use some of the existing Emacs code
+ in that way
+ - A: (Came across this interesting question on #emacs IRC.)
+ Actually, Java has added FFI (or "Foreign Function and Memory,
+ FFM) API very recently, so we can directly run (dynamically
+ linked) C code without needing LLVM or GraalVM in Java. However,
+ the thing I'm afraid of is that, Emacs is very complicated, and
+ it seems rather impossible to just use "some" of its existing
+ code without incorporating a whole GNU Emacs... (For example,
+ even passing a cons list from Java to C code is very hard, since
+ we need to now care about ABI compatibility. Not to mention that
+ in many places Emacs just assumes it is run with its built-in
+ GC.) But, speaking of FFM, I think we can make very good use of
+ it to support Emacs dynamic modules (right now I'm also
+ listening to the Emacs PDF reader talk, which is also a dynamic
+ module). As far as I know, the API interface of Emacs dynamic
+ modules is very clearly decoupled from Emacs internals (when
+ reading /usr/include/emacs-module.h, which seems to make its
+ `struct emacs_value` opaque, meaning that we can use any
+ pointer, or even Java object references in that pointer), and we
+ should be able to support any dynamic modules out there with
+ FFM.
+- [https://codeberg.org/gudzpoz/Juicemacs](https://codeberg.org/gudzpoz/Juicemacs)
+- The blog article is now online:
+ [https://kyo.iroiro.party/en/posts/juicemacs-exploring-jit-for-elisp/](https://kyo.iroiro.party/en/posts/juicemacs-exploring-jit-for-elisp/)
+- Wonderful explanations!  Thank you for taking the time to share your
+ wisdom.
+- A very impressive project! Thanks for presenting it
+- [https://juice.zulipchat.com](https://juice.zulipchat.com)
+- Very exciting project!
+
+- yet another exciting emacs clone lets goo!!
+- I really want to end up with a formal specification of emacs lisp one day
+- juicemacs elisp is suprisingly far along
+- your jit compiled elisp is impressive
+- Thanks, I know a little more about JIT now !
+- Kana here! Thanks! Please feel free to ask any question. I'm also trying out a Zulip chat server for maybe lengthier discussions: https://juice.zulipchat.com .
+
+[[!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..bd15369f
--- /dev/null
+++ b/2025/talks/latex.md
@@ -0,0 +1,50 @@
+[[!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.
+
+## Discussion / notes
+
+- Not a question but I will start using LaTeX fonts in org now
+- Q: How's about video (mp4) support for ox-latex? I start to give
+ presentations with many videos. This is something that really push
+ me back using ox-latex.
+ - A: Experiment with a LaTeX file and then try to include the
+ relevant snippets in #+BEGIN_EXPORT latex
+ - [https://github.com/pdfpc/pdfpc/](https://github.com/pdfpc/pdfpc/)
+ can embed and play videos. For Org, latex fragments work fine.
+ - Thank you for all your information, I will try it and see.
+ Thank you.
+
+
+[[!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..402d1910
--- /dev/null
+++ b/2025/talks/llm.md
@@ -0,0 +1,112 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: My biggest question with AI code editors trying to integrate with
+ Emacs is -- are the AI code editors able to read unsaved buffers
+ and not just saved files?
+ - A: And I think it's actually... this great thing that I did not mention is that like, if you have unsaved buffers, which is, you know, when you're actually doing editing, most buffers are unsaved. really you need something tightly integrated with Emacs to deal with that. So things like, you know, I demonstrated Copilot, I demonstrated Gptel, things like those things, things like Ellama, these things will all work with unsaved buffers because they work via, you know, the input is the buffer. as opposed to a file. Things like Claude Code, Gemini Code, et cetera, those are working with files. They have no idea what is going on with your buffers. And it could be that you can solve this problem by using this thing called MCP, which kind of gives the coding agent a way to see anything in particular. In this case, it would be Emacs and the state of your buffers. But I think that's not a particularly great solution if that's how you want to work. But I think that's kind of like if you're in the Claude Code that kind of world where you know things are happening, basically through a terminal. It's okay, like you typically would not be doing a mix of things. You would just be doing things either in one place or the other place. You know, it could be that you switch off from one place to another, but you wouldn't be doing both at the same time. And it's kind of a, you tend to just fall into one, you know, editing outside the editor or editing inside the editor. And I find myself switching between the two when I use those kinds of tools. So David, let me interrupt you for just one moment. I want to just take care to read out the question that we're answering. The question was, my biggest question with AI code editors trying to integrate with Emacs is, are the AI code editors able to read unsaved buffers and not just saved files? Sorry. Yes. Yeah. Thank you for reminding me to. I will read the questions from now on. But yes, that's what I think about. that interesting questions about unsaved buffers.
+- Q: Personally I don't agree with the comment you made about VS Code
+ usage dying out because I see companies/products pushing for
+ tightly-integrated VS-Code agents/products like Windsurf. Thoughts?
+ - A: Yeah, I mean, it's really hard to be certain of anything, like things are changing very fast and it's very hard to predict the future. But the trend I see is that um, the sort of outside editing experience where you just kind of instruct a model, what to do is getting better. And as long as that keeps getting better, I think that's going to lessen the demand for these tightly integrated editing experiences. So it could be that, um, a lot of people, especially in, you know, corporate environments just start using, they're going to use whatever is going to make the most productive. And I think right now, it's not clear that that will be, you know, the very agent-based, you know, command line-centric way of doing things. But it certainly, the trend is, if that continues, I think it probably will be like that. So I think we'll have to see. I don't think your opinion is unreasonable. I guess I'm kind of cautiously saying I think it's gonna be the opposite, but I guess we'll see. Like, let's reconvene in a year and see what happens.
+- Q: Do you have any thoughts about the environmental cost of using
+ LLMs - either the training of models we can download and use
+ locally, or the larger, commercial models used from the cloud?
+ - A: You know, I'm on social media, probably a little bit more than I should be. And I do see a lot of discussion there and a lot of concern about the environmental costs of using LLMs. I've looked into this as I'm also concerned about keeping my environmental footprint personally down. And I do this in many ways, but I certainly don't want to kind of like blow that all the water because I'm using LLMs so much. I think that the concerns are mostly overblown. There's a concern that, well, it uses a lot of energy. In aggregate, the total amount of energy used by the data centers in the US is a few percent. And this is a fraction. I think this is like LM's account for something like 20% now of all data center usage, which is a lot. But Those data centers are doing lots of things. They all need to be water cooled. Um, if you like per LLM prompt, the costs are relatively small and by relatively small, I mean, you know, people have said online, well, it's like a few bottles of water per prompt. That, that is not true. It is much, much less than that. It's a fraction of that. So, uh, I don't think the answer is nothing, but I would say it's, I would say you probably, if you want the most bang for your environmental buck, probably the best thing for you to do is take less flights and things like that. Like, yes, you can cut down on this, but I think it's pretty marginal at the moment. We do probably need to think about the total costs like of humanity using all of this. Like a lot of stuff you'll see corporations are using a lot of these things. And so like, just like if you look at water usage or energy uses in total, it's like really corporations that are using this. So there might, there's a lot of leverage there to make things more efficient as opposed to personal use. So I think it's wise to be cautious, but I think it's okay, I think, at least for personal use.
+- Q: I must say, I liked your conclusion, but I differ insofar as you
+ said that VS Code differ from Emacs because the former is not as
+ easy to adapt as the latter. Why should Microsoft not adapt VS Code
+ as we adapt Emacs for the new era of coding? And why would VS Code
+ be harder hit? Could you please elaborate on this point? Thx!
+ - A: I think maybe I wasn't as sharp on my point as I could be. Because I think the core of what I'm saying is like, there is a going to be a trend. I believe there will be a trend away from editing. And if we are going to be editing less, I think VS Code, like people will be in editors less. And that means people will be in VS Code less, people will probably be in Emacs less. And yes, I think you can, VS Code is to some degree extensible. but I think there's less of a community, or that is, I think the people using Emacs have used Emacs for a long time. They're going to continue to use Emacs. I speak for myself, but I know a lot of people here are kind of like this, and they're going to just, like, we have a lot of momentum to keep doing things in Emacs, and especially because we have a lot of things that we already do in Emacs. We do to-do lists and, you know, with org mode and some people read email and some people are using shells in Emacs and all these things, I think will make Emacs kind of a better environment if you want to do various editing like things in Emacs. In, you know, in an editing environment, because I think just emails can edit more types of things I think will naturally be a bit more useful than VS code, which people are really just using to edit code and if people find it less useful to edit code. I think it's VS Code will be harder hit than emails because that's its whole, like, that's in the name, like the whole reason for it to be doing things as to edit code. So I think that it's it's vulnerable in a way that Emacs isn't just because Emacs is so very... you know, it's, it could do so many things and and people use it for so many different kinds of things that it's I think it's going to be a little bit more resilient. But as I said with the present. For those of us that are using Emacs, it's everywhere for us. Not necessarily everyone is an I live in Emacs person, but whatever you're using Emacs for, it is the thing you reach for to do that thing.
+- Q: Do you think that we are falling behind in productivity as Emacs
+ users? Compared to all these VSCode forks that have 1000 buttons and
+ textboxes everywhere (i.e. much richer UIs which are basically
+ webpages).
+ - A: I do think Emacs is falling behind in some ways. I mean, it's definitely showing its age a little bit, especially you mentioned richer UIs that are basically web pages. I mean, this I think is one of the big problems Emacs has is that it uses a very, you know, a much more ancient way of kind of doing UIs that is not particularly flexible and not particularly comfortable for any modern UI coder. And I think if you look at the Emacs stuff out there, like, yes, you can do a few things with UIs. You can have some amount of UI richness, but it's pretty limited. And I kind of, if there's one thing I could wish for in Emacs, it's sort of like, I kind of wish Emacs could be on a, could be built on top of basically like Atom or something like that, where it's like a web framework that allows us to write actual rich pages, rich UIs in a modern style using things like CSS instead of the kinds of things Emacs lets you do. But that said, that is an advantage of VS Code and other editors like that. I think that Emacs does a good job of eventually catching up to all sorts of things people are doing in other editors. It's often that other editors get there first, but there's a lot of momentum to kind of keep Emacs fresh, keep it modern. And it's pretty easy to- I love that. I forgot about the lag. We do have a little bit of lag, but I just, I find that very captivating. We have with technologies like Apache Cassandra in the database world, we have this idea of eventual concurrency. And you make me think with Emacs, we have this idea of eventual feature parity, right? If a feature stays desirable long enough, Emacs will eventually grow it. I think that's a very contagious idea. Yeah, yeah, thanks. I hope that idea makes sense. And I hope it's correct, because I think that I do want Emacs to continue to succeed. And I personally, using Emacs, do not feel myself falling behind in productivity. That said, there's a lot of ways that Emacs can improve and should improve on this front. And a lot of these ways are pretty fundamental. So I kind of hope people pay a lot of attention to some of these more fundamental lower-level Emacs things that really allows the packages to do more richer and better things.
+
+- Q: I've been using Claude Code extensively. I recently switched to
+ Agent Shell with Claude Code. Have you tried it, what are your
+ thoughts?
+ - A: I actually have tried Agent Shell. And currently, I recorded this video like three months ago. So Agent Shell did not exist then. If Agent Shell did exist, I probably would have demoed it as well. Agent shell is great in the sense of it's... It does use comint, which is the way that I think all Emacs users would prefer to interact with something like Claude Code, or any of those types of tools, which is like, I don't. Um, the other, but it's a trade-off it uses like on the back and it's, it has a common buffer. And then on the back end, it's using a protocol to talk to agent, uh, to Claude Code and other things. The problem is this has a lot of problems. For example, like you don't have completion of slash commands. You don't have, um, if you ask to see the, in Claude Code, you can get a visual representation of. the context window. But you can't do this. I mean, last time I tried, I couldn't do this in agent shell. It's progressing rapidly. But it's not as rich in functionality as using Claude Code directly. On the other hand, because it's letting Emacs be Emacs and using comint, it's a much better experience to actually give instructions. I think the maximum power, though, is, to me, the best way is still like, you know, do your editing in org mode, and then just tell, you could have, you know, the richer experience of using of using Claude Code in, in it's more like shell like form where everything is, it's much, you know, designed to be used in the terminal, but you don't have to type in that much because you're really doing your typing in order to me, I think there's kind of the sweet spot that I like. Um, but agent-shell is a great step forward and I think it's, uh, it's quite good to use. And I, I personally use it a lot.
+- Q: In terms of agent selection, what has your experience been with
+ different agents, and have you had any success with hosting your own
+ models and using open weights? 
+ - A: I think there's, you know, many people have many different opinions on this. I think Claude Code is, most people I know would say Claude Code is probably, sorry, Claude is probably the best for coding right now. Gemini can be very hit and miss even with 3.0, but Claude is quite good. 4.5 Opus is actually relatively cheap compared to the previous version of 4.1 Opus. There's other models out there, but I think most people just stick with Claude because it's very reliable, it's very good, and nothing is obviously better than that. And as far as DeepSeek is pretty good as well, and then much cheaper. I've had some good luck using that locally, but actually the problem is for my day-to-day machine, like my personal machine, it's not powerful enough to run anything locally. And my work machine, it is powerful enough, but I can spend my company's money at will on more powerful models. So there's really not a lot of incentive for me to run locally. I think, as far as I know, I haven't heard of local models being incredible, but I think you can get reasonable quality with them. That is, especially if you're doing relatively simple things, I think it's pretty reasonable to be using those. Also, they tend to be slower than the models that are elsewhere just because they just have more horsepower, they can churn through those tokens a little quicker.
+- Q:   I'm reading angst in your thinking about AI/editing.  What are
+ you excited about?
+ - A: I mean, I think there are possibilities. Like, yes, people are going in sort of a relatively obvious direction with LLMs right now. And I think there's lots of opportunities, clever opportunities to do things we couldn't have thought of... Things that are useful, but in ways that are not super obvious to us, and I think I'm still excited about the possibilities of using them in ways that are super helpful and different than normal. I'll give you an example. This is something that I intend to, I think, post on Reddit in a few days, but I have a extension to eshell where you can prefix a command with at, and then just tell it what you want to do, and it will substitute the command that you are thinking of. Because often, I do not remember. I never remember, like, how do you find a file in a directory tree, you know, recursing? Who can remember how to do that? It's like a find, and there's like a dash print there somewhere. Yes. There are some smart people who remember this but I am not one of them. And so I think, like, something like this is like, you just type out, find me this file, and it will substitute the correct command. I think this is, there's a lot of little, little tweaks you could do like, you know, if you want the AI, it could be there for you, and it will help you. And if you don't want it, it's not going to get in your way. And I think this is where Emacs can really shine. It can really take advantage of LLMs, but still remain true to its kind of editing experience, because it's not forcing you to use LLMs all the time.
+- Q: Why does it matter to have a richer UI? All that is left is
+ basically writing and getting the results.
+ - A: I think maybe this is a response to me complaining about Emacs not having a richer UI before, but I think it does matter a lot for all sorts of things. It's hard to kind of explain succinctly, because I'm talking about UI and I'd have to show you things. But it should be just something like, oh I have an error, and I'm using flymake and I'm, I'm using the... I have options where it'll show me the error in line by underlining things and having a little message, but like, you know what, that message doesn't appear quite right a lot of the times. Or here's another one like. I program in Python a lot. And Python, it's super hard to program in unless you have these little vertical lines that shows you what the indents are. At least I find it. There are two packages that do that. None of them do it particularly well, just because Emacs at its base does not allow you to do this. And so you kind of have to hack it in. And there's lots of ways to mess it up. And when editing, you'll find yourself messing this thing up regularly. So it doesn't look quite clean. And like, there's little artifacts, or, you know, there's little ways that it, it kind of gets things wrong, or you can get things wrong with it. So I think that, like, there's a lot of issues with that sort of thing. And also, like, you know, what if you want to do something like play a video inline, like, I don't know, you might should be able to do that, you might should be able to do anything. But right now, it just can't. I think a lot of the reason as well... you know, we wanted to be compatible with TRS 80 machines or something like that. This is important, this really is important, but I hope there's some way that we can kind of eventually figure out how to get the best of both compatibility and more modern UIs. So, you know, we can have more modern UIs for people that have modern machines and other people either do without that functionality or sort of fall back to some reasonable default.
+
+
+- Q: I have 45+ years editing, programming.   I'm not sure I can
+ think about things without thinking of buffers, editors etc.   Is
+ this a handicap/should we just have people with no experience with
+ code learn to prompt?
+ - A: I think experience only helps here - I don't trust people
+ with no experience creating code.  It's OK for one-shot type
+ apps where you don't care about maintainability, but for
+ serious code where you need to think about a lot of different
+ types of typically software-engineering concerns such as
+ latency, maintainability, scalability, etc, experience is a huge
+ boost.  We see this in the industry right now where junior
+ engineers are less desirable than senior engineers, because
+ senior engineers can just use LLMs more effectively.  So I think
+ dipping your toes into the water is well worth it.
+ - A:
+- I really like that sentiment. I like the idea that maybe we could
+ have a place for code that is "good enough", and have a place for
+ code where passion for the craft shines through
+- I think editors like Windsurf/Cursor/VS Code will stick around but
+ to Andrew's point, the editing portion of the app will shrink while
+ the agent interaction will take center stage
+- Thanks for answering the questions in such a clearly articulated
+ manner :)
+- Monster write up on energy usage:
+ [https://www.technologyreview.com/2025/05/20/1116327/ai-energy-usage-climate-footprint-big-tech/](https://www.technologyreview.com/2025/05/20/1116327/ai-energy-usage-climate-footprint-big-tech/) -
+ tldr; AI's energy use is small per query but exploding
+ overall---driven by opaque, power-hungry data centers.
+- interesting talk. I'll start asking it for everything: "but is it
+ editing?"
+
+[[!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..6e0a3cca
--- /dev/null
+++ b/2025/talks/modern.md
@@ -0,0 +1,117 @@
+[[!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"]]
+
+- <https://anggtwu.net/emacsconf2025.html>
+- [Transcript on the speaker's website](https://anggtwu.net/emacsconf2025.html#0.00)
+
+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.
+
+## Discussion / notes
+
+- Q:  [from IRC] why the lambda representation has recently changed
+ to vector-like?
+ - A: It is easier to debug Emacs if different kinds of objects
+ have different types... keeping everything as lists is better
+ for quick-and-dirty code, but the developers wanted something
+ that felt less "dirty"...
+- Q: Do you have hints for integrating eev into an already existing
+ workflow?
+ - A: I need to understand the other workflows to see what I can
+ recommend... can we discuss that on chat? If your workflow
+ includes Org code blocks then I will learn a lot from your
+ workflow too...
+ - I was hoping for some document with some general notes or ideas.
+ Right now eev feels very 'dominant'. While it works great I
+ find it difficult to mix eev and other Emacs tools
+ - Which other tools? Can we discuss examples? I was able to
+ integrate eev with practically all the other packages the I
+ know...
+- Q: [from IRC] What do you think of org-mode and its executable src
+ blocks?  That seems to overlap with what eev seemed to provide.
+ - A: I need to learn more about Org and source blocks!!! The
+ problem is that every time that I tried to learn source blocks I
+ started to ask many technical questions about the details and
+ got lost in a big maze of rabbit holes... see:
+ <[https://anggtwu.net/2021-org-for-non-users.html](https://anggtwu.net/2021-org-for-non-users.html)> -
+ I even tried to write functions that would display the data
+ structures behind source blocks, but at some point I gave up and
+ decided that I would only come back when I had people who could
+ help me... =(
+ - A: in short: when I tried to use Org mode I was always asking the wrong questions and trying to understand internal details that the developers treated as very advanced
+- Q: I just tested on SBCL, Guile and Chez Scheme, and all of them use
+ opaque objects for functions (Chez: `#<procedure square>`, SBCL:
+ `#<FUNCTION F>`). Why is Emacs Lisp changing to using
+ semi-opaque vectors considered so bad? (Or is just making them fully
+ opaque better for beginners?)
+ - Note: on SBCL you can inspect that function object and see
+ both the lisp code and the machine code it compiles to
+ - A: It is not bad at all!
+- Q: What defines `find-classtree'?
+
+- I must confess I am still confused about eev. same with hyperbole.
+ - A: eev doesn't make any sense from the description and the sales blurbs, all the few people who learned it learned it from the tutorials. but that video has a big example that is very easy to run it the person has eev installed - it starts a bit after 13:00.
+- I often find myself wishing other systems had a help system like Emacs.
+- It took me about 5 years to move from Space & Doom to vanilla Emacs 🤣
+ - Now that I think about it, it was about the same for me.
+ - it was less about learning elisp and more about finding the motivation & internal justification to start from scratch. David Wilson's tutorials helped propel me as well
+ - did you switch from vim/evil bindings to "Emacs Standard" bindings?
+ - The Doom & Spacemacs Frameworks obfuscate how vanilla Emacs actually works... and so after a while it became a barrier
+ - not really, I use evil when writing code but tend to stick to vanilla bindings for most other buffers
+ - My own motivation was that one day Spacemacs broke an important org-mode keybinding (M-RET) in a way that I couldn't work around. I had managed to learn a decent amount of Elisp by then, so I decided to go try my first vanilla config.
+ - I think it took me a few months
+ - me similar: I use evil mode for all prose and programming buffers but Emacs modes for everything else.
+ - I had installed too many packages that I didn't understand at all
+ - I was really unhappy with performance as I started to rely more on LSP modes (this was before the bytecode implementation). Switching to vanilla & moving to Eglot really helped with that, then of course the bytecode changes make it a non-issue now
+ - thanks! just started using emacs about 4-5 months ago via Doom. But I can't help think I've skipped some important learnings.
+ - I was quite happy when I got my first taste of native compilation. It improved Elisp performance tremendously.
+ - I really recommend giving vanilla a try! You can use this trick to setup a parallel config so you can try it out before scrapping your current setup: https://stackoverflow.com/a/58039656/315827
+ - That SO strikes me as slightly more complicated that necessary.. I would usually do it inline, like: emacs -Q -eval '(setq user-emacs-directory "~/emacs.1.d")' [filename, maybe]
+ - There is also the --init-dir flag.
+ - Fair comment, with your version it could be nice to build a shell function or alias so you can have multiple configs at one time
+ - shell function or alias is a great idea! taking a note to set that up for myself!
+- Q: following along a little using IELM... which version of Emacs was used in the recording? My (symbol-function 'foo) is giving #f(lambda (a b) [t] (+ a b))
+ - A: 31
+ - I get #[(a b) ((+ a b)) (t)] (not nil for the last vector element as shown in the presentation)
+ - Emacs 31 would be a development build (vs from the release branch) so it's possible two different builds of 31 could have subtle differences depending on which commit was the last included in the given builds.
+- A: the demo is here
+ - https://anggtwu.net/2025-modern/00-try-this.html
+ - https://anggtwu.net/2025-modern/00-try-this
+ - I think that people can run the demo with just this (find-wget "https://anggtwu.net/2025-modern/00-try-this") except for one line that with give an error because it depends on a function that is not in ELPA - actually not even on the github version yet...
+ - if anyone has eev installed and wants to try it please tell me... I think that one line of the demo calls a function that is not in the version of eev that is ELPA yet
+- Q: What do the leading red * in the left window mean?
+ - A: https://anggtwu.net/eepitch.html#test-blocks
+- I was using eev for a month or so then my guix package broke and I am too lazy to fix it
+- Very informative talk.
+- Thank you edrx! eev has been on my list of things to check for some time!
+- Super cool seeing pieces of the workflow with eev, gives me some ideas!
+
+See the [transcript on the speaker's website](https://anggtwu.net/emacsconf2025.html#0.00) for the latest copy.
+
+[[!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..53ffb322
--- /dev/null
+++ b/2025/talks/open-mic.md
@@ -0,0 +1,28 @@
+[[!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"]]
+
+
+## Discussion / notes
+
+- this is shoshin here I'm pretty sure, with links to various stuff of his https://cicadas.surf/~shoshin/ oh, also, shoshin spotted again here https://mathstodon.xyz/@shoshin@buzz.cicadas.surf
+- Q: What are some of the efforts going on to make more "modern UIs" in Emacs? By "modern UIs" I mean not just text-based. Kind of like webpages.
+ - I think quite a few talks on the dev track were concerned with that.
+- I ask because sometimes I get jealous of my VSCode / Cursor friends when I look at their screen and see all kinds of interactive content. Also in the future, if AI models start returning interactive outputs instead of just text then Emacs will be at a disadvantage because it won't be able to render them.
+- I encourge Emacs Carnival entries this month: https://curious.port111.com/2025/11/01/emacs-carnival-december-the-people.html
+ - I welcome your submission this month. Some of the most interesting people I've known are emacs people. I'm betting that's true for others too.
+
+[[!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..adc75eaf
--- /dev/null
+++ b/2025/talks/org-babel.md
@@ -0,0 +1,108 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: Is there a web page describing this topic?
+ - A: The repository readme is here
+ [https://dev.lepisma.xyz/git/ob-rx/](https://dev.lepisma.xyz/git/ob-rx/)
+ but not sure if you meant any other kind of description.
+- Q: If I understand correctly, recomputation happens upon saving; why
+ not tie it to C-c C-c instead?
+ - A: You can tie the (interactive) function it to C-c C-c too, I
+ usually prefer on-save reactivity when I need reactivity.
+- Q: You mentioned that you are working on something similar for
+ JS\... what do you have now? (Thanks! =))
+ - A: I don't have something public but I am using a webkit child
+ frame to show up d3 plots. Will add this in ob-rx once I have it
+ stable.
+- Q: If this could work on C-c C-c and as a minor mode, then it could
+ perhaps be contributed upstream!  Is that planned?
+ - A: Not thought about it, maybe.
+- Q:Is it possible to do something reactive with :result file :file
+ my-generated.file (?) - yes you got it, it's just I make
+ intermediate compilation steps in org sometimes using that.
+ - A: Yes, the core mechanism is to just control the order of
+ execution for code blocks. So any normal workflow involving
+ files will also work. I have tried a few file workflows and
+ ended up needing ob-async so that Emacs doesn't get stuck. But
+ I am not sure if I understood your exact use case (?).
+- Q:how does it handle circular dependencies?
+ - A: I haven't checked if my approach gets stuck in circular
+ dependencies (it should), but usually when I am writing
+ org-babel notebooks, I end up not having circular dependencies.
+ The check for this should be easy enough though and the
+ minor-mode could warn if it detects a circular dep. Will add
+ this in later versions.
+- Q: How to get the block dependence plot? Very nice.
+ - It's a small piece of graphviz code in the minor mode, here
+ [https://git.sr.ht/\~lepisma/ob-rx/tree/master/item/ob-rx.el#L118](https://git.sr.ht/~lepisma/ob-rx/tree/master/item/ob-rx.el#L118)
+ - Thank you.
+- Q: I'm curious what packages you're using for org appeance. It
+ looks like a mix of org-modern and some other packages. (Yes I am
+ also interested in your overall emacs theme)
+ - A: So my config is here
+ [https://git.sr.ht/\~lepisma/rogue/tree](https://git.sr.ht/~lepisma/rogue/tree)
+ but maybe the core part of the look is based on my older blog
+
+
+
+
+- I'm really looking forward to this talk.
+- Excited to see reactivity in org-babel!
+- Your emacs theme is very pleasing!!
+- I will try this type of dependence block. It looks like it can save
+ a lots of mental effort to organize my data.
+- Excellent talk!
+- [https://dev.lepisma.xyz/git/ob-rx](https://dev.lepisma.xyz/git/ob-rx)
+ \<- source code
+- Cool project!
+- Great talk and beautiful Emacs!
+- This seems to add useful features to org-babel, great job!
+- Very cool!
+- Very interesting !
+- https://dev.lepisma.xyz/git/ob-rx/
+- this looks useful.
+- I'm quite fond of Pluto.jl in Julia, so it'd be nice to have something like this that I can use from inside Emacs.
+ - Yeah, it also reminded me of Pluto
+ - But I really prefer working from inside Emacs, so I don't use Pluto that much. This is great
+ - It could hopefully minimize my usage of rstudio
+ - I was thinking something like that too for the R folk
+ - Indeed, rstudio is nice, but it is not emacs
+- excellent talk by tushar
+
+[[!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..8f78c9e2
--- /dev/null
+++ b/2025/talks/private-ai.md
@@ -0,0 +1,119 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: Why is the David Bowie question a good one for testing a model?
+ e.g. does it fail in interesting ways?
+ - A:  Big fan, firstly; also Deepseek will tend to have errors and
+ I'm familiar with the data so easy to spot halucinations
+ - A: First off, huge fan of David Bowie. But I came down to it really taught me a few things about how the models work in terms of things like how many kids he had, because Deepseek, which is a very popular Chinese model that a lot of people are using now, misidentifies him having three daughters, and he has like one son and one, one, I think, two sons and a daughter or something like that. so there's differences on that, and it just goes over... there's a whole lot of stuff because his story spans like 60 years, so it gives good feedback. That's the real main reason I asked that question because I just needed one... That sea monkeys, I just picked because it was obscure, and just always have, write, I used to have it write hello world in forth because I thought was an interesting one as well. It's just picking random ones like that. One question I ask a lot of models is, what is the closest star to the Earth? Because most of them will say Alpha Centauri or Proxima Centauri and not the sun. And I have a whole 'nother talk where I just argue with the LLM trying to say, hey, the sun is a star. And he just wouldn't accept it, so.
+- Q: What specific tasks do you use local AI for?
+ - A: refactoring for example converting python 2 to python 3,
+ cybersecurity researching
+ - A: I like to load a lot of my code into and actually have it do analysis of it. I was actually going through some code I have for some pen testing, and I was having it modified to update it for the newer version, because I hate to say this, but it was written for Python 2, and I needed to update it for Python 3. And the 2 to 3 tool did not do all of it, but the actual tool was able to do the refactoring. It's part of my laziness. But I use that for anything I don't want to hit the web. And that's a lot of stuff when you start thinking about if you're doing cyber security researching. and you have your white papers and stuff like that and stuff in there. I've got a lot of that loaded into RAG in one model on my Open WebUI system.
+
+- Q: Have you used any small domain-specific LLMs?  What are the kinds
+ of tasks they specialize in, and how do I find and use them?
+ - A:  On the todo list but not something I have used very much yet
+- Q: Are the various models updated regularly?  Can you add your own
+ data to pre-built models? +1
+ - A:
+- Q-piggy-back: Will the models reach out to the web if they need to
+ for more info?
+ - A: haven't 
+- Q: What is your experiance with RAG? are you using them and how have
+ they helped?
+ - A:
+- Q: Thoughts on running things on AWS/digital ocean instances, etc?
+ - A: prefer not to have the data leave home; AWS and DO works
+ okay, oracle has some free offerings but tend to work locally
+ most often
+- Q: What has your experience been using AI for cyber security
+ applications? What do you usually use it for?
+ - A: Yeah, really, for cybersecurity, what I've had to do is I've dumped logs to have it do correlation. Keep in mind, the size of that Llama file we were using for figuring out David Bowie, writing the hello world, all that stuff, is like six gig. How does it get the entire world in six gig? I still haven't figured that out in terms of quantization. So I'm really interested in seeing the ability to take all this stuff out of all my logs, dump it all in there, and actually be able to do intelligent queries against that. Microsoft has a project called Security Copilot, which is trying to do that in the Cloud. But I want to work on something to do that more locally and be able to actually drive this stuff over that. That's one also on the long-term goals.
+- Q: Is there a disparity where you go to paid models becouse they are
+ better and what problems would those be?
+ - A: Paid models, I don't mind them. I think they're good, but I don't think they're actually economically sustainable under their current system. Because right now, if you're paying 20 bucks a month for Copilot and that goes up to 200 bucks, I'm not going to be as likely to use it. You know what I mean? But it does do some things in a way that I did not expect. For example, Grok was refactoring some of my code in the comments and dropped an F-bomb. which I did not see coming, but the other code before that I had gotten off GitHub had F bombs in it. So it was just emulating the style, but would that be something I'd want to turn in a pull request? I don't know. But, uh, there's, there's a lot of money going into these AIs and stuff, but in terms of the ability to get a decent one, like the llama, llama 3.2, and load your data into it, you can be pretty competitive. You're not going to get all the benefits, but you have more control over it. So it's a balancing act.
+
+
+- Q:  What's the largest (in parameter size) local model you've been
+ able to successfully run locally, and do you run into issues with
+ limited context window size?  The top tier paid models are up to
+ 200k now.
+ - A: By default, the context size is I think 1024. But I've upped it to 8192 on this box, the Pangolin, because it seems to be, for some reason, it's just a very... working quite well. But the largest ones I've loaded have been in the... have not been that huge. I've loaded this... the last biggest one I've done... That's the reason why I'm planning on breaking down and buying a Ryzen. Actually, I'm going to buy an Intel i285H with 96 gig of RAM. Then I should be able to load a 70 billion parameter model in that. How fast will it run? It's going to run slow as dog, but it's going to be cool to be able to do it. It's an AI bragging rights thing, but I mostly stick with the smaller size models and the ones that are more quantitized because it just tends to work better for me.
+- Q: Are thre "Free" as in FSF/open source issues with the data?
+ - A: Yes.  Where the data is coming from is a huge issue with AI
+ and will be an issue long term.
+ - A: Yes, where's the data coming from is a huge question with AI. It's astonishing you can ask questions to models that you don't know where it's coming from. That is gonna be one of the big issues long-term. There are people who are working on trying to figure out that stuff, but it's, I mean, if you look at, God, I can't remember who it was. Somebody was actually out torrenting books just to be able to build it into their AI system. I think it might've been Meta. So there's a lot of that going on. The open source of the stuff is going to be tough. There's going to be there's some models like the mobile guys have got their own license, but where they're getting their data from, I'm not sure, so that's a huge question. That's a talk in itself. But yeah, if you train on your RAG and your data, you know what it's come, you know, you have a license that... but the other stuff is just more lines of supplement if you're using a smaller model.
+- Q:  Have you used local models capable of tool-calling?
+ - A: I'm scared of agentic. I'm going to be a slow adopter of that. I want to do it, but I just don't have the, uh, four decimal fortitude right now to do it. I've had to give me the commands, but I still run the commands by hand. I'm looking into it and it's on once again, it's on that list, but I just, that's a big step for me.
+- Q: What scares you most about agentic tools? How would you think
+ about putting a sandbox around it if you adopt an agentic workflow?
+ - A: Air-gap; based on experiece in the defense industry
+ - A: In terms of that, I would just control what it's able to talk to, what machines, I would actually have it be air gap. I work for a defense contractor, and we spend a lot of time dealing with air gap systems, because that's just kind of the way it works out for us. So agentic, it's just going to take a while to get trust. I want to see more stuff happening. Humans screw up stuff enough. The last thing we need is to multiply that by 1000. So in terms of that, I would be restricting what it can do. If you look at the capabilities, if I created a user and gave it permissions, I would have a lockdown through sudo, what it's able to do, what the account's able to do. I would do those kind of things, but it's going to be, it's happening. It's just, I'm going to be one of the laggards on that one. So air gap, jail, extremely locked down environments, like we're talking about separate physicals, not Docker. Yeah, hopefully.
+- Q: Tool calling can be read-only, such as giving models the ability
+ to search the web before answersing your question. (No write access
+ or execute access) I'm interested to know if local models are any
+ good at calling tools, though.
+ - A: Yes, local models can do a lot of that stuff. It's their capabilities. If you load LM studio, you can do a lot of wonderful stuff with that or with Open Web UI with ollama. It's a lot of capabilities. It's amazing. Open Web UI is actually what a lot of companies are using now to put their data behind that. They're curated data and stuff like that. So works well. I can confirm that from my own professional experience. Excellent.
+- Q: Really interesting stuff, thank you for your talk :) Given that
+ large AI companies are openly stealing IP and copyright, thereby
+ eroding the authority of such law (and eroding truth itself as
+ well), can you see a future where IP & copyright flaw become
+ untenable and what sort of onwards effect might that have? Apologies
+ if this is outside of the scope of your talk
+ - A: I'm not a lawyer, but it is really getting complicated. It is getting to the point, I asked a question from, I played with Sora a little bit, and it generated someone, you can go like, oh, that's Jon Hamm, that's Christopher Walken, you start figuring out who the people they're modeling stuff after. There is an apocalypse, something going to happen right now. There is, but this is once again, my personal opinion, and I'm not a lawyer, and I do not have money. So don't sue me, is there's going to be the current administration tends is very AI, pro AI. And there's very a great deal of lobbying by those groups. And it's on both sides. And it's going to be, it's gonna be interesting to see what happens to copyright the next 510 years. I just don't know how it keeps up without there being some adjustments and stuff.
+- [https://grothe.us/](https://grothe.us/)
+ <-- speaker's online presence
+- Thanks for your demo and for encouragement. I'll actually give it a
+ try.
+- I remember seeing the adverts for sea monkeys in old comic books as
+ a kid -- that was a blast from the past!
+- Super inspired! And very well done as a live prezi! :) 
+- respect his commitment to privacy
+- [https://aws.amazon.com/what-is/retrieval-augmented-generation/](https://aws.amazon.com/what-is/retrieval-augmented-generation/)
+ <- What is RAG?  (an explanation)
+
+- File size is not going to be the bottleneck, your RAM is. You're
+ going to need 16 GB of RAM to run the smallest local models and
+ ~512 GB RAM to run the largest ones.  You'll need a GPU with this
+ much memory (VRAM) if you want it to run fast.
+ - A: It also depends upon how your memory is laid out. Like example being the Ultra i285H I plan to buy, that has 96 gig of memory. It's unified between the GPU and the CPU share it, but they go over the same bus. So the overall bandwidth of it tends to be a bit less, but you're able to load more of it into memory. So it's able to do some additional stuff with it as opposed to come off disk. It's all balancing act. If you hit Ziskind's website, that guy's done some great work on it. I'm trying to figure out how big a model you can do, what you can do with it. And some of the stuff seems to be not obvious, because like example, being that MacBook Air, for the five minutes I can run the model, it runs it faster than a lot of other things that should be able to run it faster, just because of the way the ARM cores and the unified memory work on it. So it's a learning process. But if you want to, Network Chuck had a great video talking about building his own system with a couple really powerful Nvidia cards and stuff like that in it. And just actually setting up on his system as a node and using a web UI on it. So there's a lot of stuff there, but it is a process of learning how big your data is, which models you want to use, how much information you need, but it's part of the learning. And you can run models, even on Raspberry Pi 5s, if you want to, they'll run slow. Don't get me wrong, but they're possible.
+- Great talk/info.   Thanks.
+
+- it went very well!
+- (from the audience perspective)
+- respect his commitment to privacy
+- Very interesting talk! Thanks!
+- AI, you are on notice: we want SBOMs, not f-bombs!
+- thanks for the presentation
+
+
+[[!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..52ad2f55
--- /dev/null
+++ b/2025/talks/reader.md
@@ -0,0 +1,222 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: Is there scope for integrating the C library into Emacs itself
+ with muPDF becoming an optional dependency?
+ - A: That will entail having a pdf engine integrated into Emacs
+ source-tree, not sure if that\'s a good idea.
+- Q: The dynamic modules sound great, and it\'s amazing they\'re there
+ since 2017. Why is it so slow to take off, do you think? Is there
+ prior art with them? 
+ - A: Mostly because Elisp is so nice to use for almost everything
+ you need to do in Emacs. It\'s only in very specific cases that
+ you require to care about real-time latency and memory
+ efficiency. And packages like libvterm and others do use it for
+ such purposes.
+- Q: How is pdf-tools difficult to install? I install it using the
+ built in package manager. Looking at the emacs-reader installation
+ instructions, I don\'t see how install it that easily. I don\'t use
+ use-package or straight. Question answered in presentation.
+- A: Just the list of dependencies required to build epdfinfo itself
+ makes it difficult, and when you install pdf-tools it does a huge
+ autotools build as well. Emacs Reader only (and will always) depends
+ on MuPDF (and Emacs too.).
+- Q: What tool(s) did you use to measure the memory usage between the
+ three packages?
+ - A: Valgrind\'s massif + massif-visualizer
+ - I've been using perf and then visualizing with hotspot when debugging FFI in Common Lisp... it's felt successful
+ - (I've never had success with valgrind, but I've not dug deep with it)
+ - I discovered perf only recently when I had a deep need for low-level optimisation (which is not something I often need) - it's a really nice workflow!
+- Q: How is the conversion between ELisp and the foreign language type
+ system done? For example when interfacing with a C++ library that
+ makes heavy use of C++ object system and templates?
+ - A: Basically, dynamic modules make you write Emacs Lisp in your
+ language. Consult the blogpost above for a more elaborate and
+ complete explanation.
+- Q: pdf-tools renders high quality images. Does emacs-reader do that?
+ - A: Yes! We can render high-quality images just fine!
+- Q: Can one look at pdf metadata with emacs-reader? Can annotations
+ be added? Does it understand forms? Can it handle encrypted pdfs?
+ - A: Support for all of this is planned.
+- Q: I installed emacs-reader already. It is as promised :) Great job!
+ How can I associate odt files to open with emacs-reader?
+ - A: It should just work with the **find-file** command**.**
+- Q: If a pdf file is open in emacs-reader and I regenerate the pdf
+ with some changes, does emacs-reader actually refresh the pdf on its
+ own or do I have to reload the pdf?
+ - A: Yes if it\'s a complete file with the same filename, but no
+ if it\'s still being created with LaTeX - we need SyncTeX for
+ that
+- Q: What are the challenges with integrating with SyncTeX and AucTeX?
+ This would be great to see as pdf-tools handles this well.
+ - A: Planned, no major obstacles anticipated. The only reason we
+ haven\'t done it yet is more important highlighting and text
+ selection features planned.
+- Q:  Loved that presentation! Will you be giving another talk on the
+ architecture you went over? A deep-dive there would be awesome.
+ - A: Not at EmacsConf, but check out my streaming sessions at
+ [https://tv.dyne.org/c/phimulambda](https://tv.dyne.org/c/phimulambda)
+ and I can talk about it there.
+- Q: Is there search functionality? Something like isearch and occur?
+ - A: Not as such yet. But it is HIGH PRIORITY.
+- Q: Does dynamic module prevent customization that Elisp usually
+ provide? (Advices, Hooks, etc).
+ - A: No, you can do everything on the Elisp side that you want. On
+ the dynamic side, it\'s a bit more tricky, not much support
+ there right now.
+- Q: Follow-up on dynamic module: Do you usually create an Elisp shim
+ from the FFI and then use them with Elisp code?
+ - A: Yes, we usually wrap dynamic module functions in Elisp to
+ make sure the foreign function gets called when it\'s needed.
+- Q: Is searching on the roadmap? Or is it already available as a
+ feature? Thanks!
+ - A:  YES! HIGH PRIORITY \<3
+- Q:  Will there be occur like searching?
+ - A:  YES! Basically everything in PDF Tools is planned!
+- Q:  What is your timing expectation for it to appear on ELPA?
+ - A: By next major release, which will be in 1-2 months.
+- Q: is this essentially FFI?
+ - A: Yup
+- Q: interesting.. is that how webkit integration works?
+ - (audience): not really.
+- Q: thank you. Are there other packages that use dynamic modules?
+ - (audience): Yes, vterm also uses a C module
+- Q: Has any work been done to make org-noter work with emacs reader?
+ - (audience): not yet. It is in the plans, though.
+ - (audience): Nice. That would allow me to switch, because I use org-noter quite a bit.
+- Q: Are any of you doing simple editing of PDFs in Emacs? I'm thinking about form-filling, adding signatures, that sort of thing
+ - A: that's something I'd also like to integrate once we have other basic features ready
+ - (audience): not yet. We do want to add annotation support though. Not sure if that's the same thing.
+ - I don't believe it is, but I could be mistaken
+ - A: slightly, but not exactly, mupdf does support forms and signatures so we shouldn't have much issues except making it work with emacs.
+ - I'm not fond of annotations, because it mutates the original PDF.
+- Q: From the example when calling page 56, is there another thread immediately fetching the next 5 pages for cache?
+ - A: yeah indeed I'll talk about it later in the slides, you'll have to build mupdf from scratch in that case.
+ - A: there are multiple threads competing to fill the cache window, depending upon how long it takes to render each slice.
+- Q: here is a question that I am a bit embarassed to ask... is there an easy way to install emacs-reader with package-vc without use-package?
+ - yes!
+ - I am asking just because I've been postponing learning use-package for ages
+ - you can use just package-vc totally. use-package uses package-vc under the hood anyway
+ - I tried this - (package-vc-install "https://codeberg.org/divyaranjan/emacs-reader")
+ - you need to do a build step. you can just go and do it manually
+- Q: how does the dark mode compare to midnight mode in pdf-tools?
+ - it is simply inverting the colors
+ - Q: so it does not support setting the foreground and background colours?
+ - It does not.
+ - pdf-tools has pdf-view-themed-minor-mode that tries to match a PDF with the current theme. It's kinda nice. I'm glad Emacs Reader is aiming to have something similar in the near future.
+ - dark mode intergration with the dark themes would be cool
+- Q: that is a question that I've had for ages - how do we handle that PDFs that (La)TeX generates one page at a time, and that will be broken until the last page is generated...
+ - using synctex
+- Q: I will try to attend one of your streamings... where can I find info about them?
+ - A: https://tv.dyne.org/c/phimulambda
+ - we also have an IRC at #phi-mu-lambda you're also welcomed there edrx
+- Q: Oh, emacs reader can open epubs? I use nov.el for that, and it has trouble sometimes with complex epubs.
+ - yup it can :D
+ - it comes for free with mupdf
+ - I mean if mupdf supports it, emacs reader will to
+ - the only thing we don't support is djvu, but i have plans of making it supported in upstream mupdf
+ - Oh cool, I didn't know about the other formats!
+
+- [https://codeberg.org/divyaranjan/emacs-reader](https://codeberg.org/divyaranjan/emacs-reader)
+ - [https://mupdf.com/](https://mupdf.com/)
+ - [https://www.phimulambda.org/blog/emacs-dynamic-module.html](https://www.phimulambda.org/blog/emacs-dynamic-module.html)
+ \<\-- that\'s a nice blog post.
+- Love this arch diagram step through
+- The linked blog for dynamic modules:
+ [https://www.phimulambda.org/blog/emacs-dynamic-module.html](https://www.phimulambda.org/blog/emacs-dynamic-module.html)
+- You can set the maximum ram usage in Okular settings. If it is
+ configured to load the entire document scrolling is instant even in
+ large documents \[not the author: this is only relevant to hugely
+ beefy machines, surely? And it sounds like the Reader does it
+ naturally, if you will\]
+
+- 16GB of RAM goes a long way even for huge documents like technical
+ datasheets or photo pdfs. Just be careful not to open too many of
+ them while also having a lot of browser tabs.
+- Looks like Reader simply displays the old page until the new one is
+ ready. While better than showing a white page it\'s not instant like
+ Okular
+- A: Emacs reader doesn\'t require 16GB RAM to do that same, because
+ it doesn\'t need to cache everything at once, unlike Okular. The
+ talk shows a video demonstration of it getting stuck when not
+ configured to use maximum ram (in which it caches the pages.).
+- I didn't realize pdf-tools was using so much RAM.
+ - I definitely noticed, lol
+ - The memory graphs are already a very compelling point for emacs reader. I will definitely give this a try.
+ - If you are dealing with large PDFs you *really* feel the difference
+ - For doc-view yes. For pdf-tools I have noticed it, but very rarely.
+ - But yeah, it is interesting how much memory it's taking
+ - I will definitely try this
+ - pdf tool caches the pages. once you are moving too fast, it is almost as slow as doc view, because it doesn't have it cached anymore
+- This look promising! Dealing with PDFs is an important part of the
+ things I do with Emacs (academic work). Certainly that Pdf-tools was
+ already a much needed improvement to Doc-View - for example, not
+ being able to select text was quite an issue. So when you get text
+ selection and annotations working, I will be certainly looking
+ forward your library.
+- Great talk about emacs-reader. Looking forward to using it.
+- Thank you for making this! :-)
+- Really tasteful typography on your slides divya
+ - A: Thank you it's all in Org :)
+- I like pdf-tools, but I'm open to trying something new.
+- pdf-tools mostly works well, but these points are very much valid
+- also have been fairly satisfied with pdf-tools and avoided installation pain because the package manager of choice makes it easy, intrigued by reader and curious to try regardless though
+- I've been using emacs-reader for some time - I have packaged it for nix, although I haven't submitted it to nixpkgs in the hope that emacs-reader will one day end up in ELPA/MELPA. https://git.sr.ht/~johnhamelink/nix/tree/master/item/home/modules/emacs/src/epkgs/reader.nix
+- Love this arch diagram step through
+- Org-noter integration would be very good
+ - I am also a big org-noter user
+ - A: I used pdf-tools for several years, indeed I love org-noter as well. certainly a priority integration for us.
+- I like the use of diagrams in this talk. It makes it easier to understand.
+ - I just realized the thread pool has a bunch of "threads" in it!
+ - That's what those were! I was thinking, "What does 'S' stand for?"
+- very impressive work, I'll have to try this later
+- Very nice. I'm definitely giving this a try.
+- On my OS: MuPDF version 1.19.0 too old. Require ≥ 1.26.0.
+ - yueah that is a major problem
+- Already looks very promising and the upcoming features are likely to make me switch completely from pdf-tools.
+- Exciting project!
+- very cool!
+- Playing with mupdf standalone, epubs look very nice!
+- very nice talk.
+- great talk divya! great talk indeed!
+- Great talk, thank you!
+- I'm sold on Emacs Reader. (looking forward to org-noter support)
+- fantastic talk! many claps! =)
+- Super cool, emacs-reader on the list to try, we'll see if I can get it installed before the ELPA release
+
+- I'm super excited about this 😊
+- great presentation 👏
+- Great talk about emacs-reader. Looking forward to using it.
+
+
+[[!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..128a94ec
--- /dev/null
+++ b/2025/talks/reference.md
@@ -0,0 +1,192 @@
+[[!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.
+
+## Discussion / notes
+
+- Check out the ebib manual for an explanation of the features I
+ showed and more!
+ [https://joostkremers.github.io/ebib/ebib-manual.html](https://joostkremers.github.io/ebib/ebib-manual.html).
+ - Also my ebib config for the custom things [https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#ebib](https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#ebib)
+- My 2022 talk if you're interested in the rest of my workflow
+ regarding scientific literature
+ [https://emacsconf.org/2022/talks/science/](https://emacsconf.org/2022/talks/science/)
+- Use link to directly download bib info to the library is cool. I
+ always did that manually.
+- The reading list, for me every download item will directly inside a
+ manuscript.
+
+- Q: Which version of \`org-ref\` you are using? I am so dependent on
+ org-ref and org-mode, so that I had huge resistant to update
+ \`org-mode\`, \`org-ref\`, \`ivy-bibtex.el\`, etc
+ - A: I'm not sure how recently I updated, so it may not be
+ master, but I generally try to keep up to date with the packages
+ I use. I generally haven't had many problems, unless when there
+ is a new major version, which may need an afternoon to confirm
+ everything works.
+ - Thanks for sharing this.
+- Q: Have you try ivy-bibtex/bibtex-completion.el, how it compares to
+ ebib?
+ - A: I think they are not mutually exclusive. I typically use
+ ivy-bibtex to find an article quickly, to initialize a
+ literature note (integration with org-roam-bibtex) or to add a
+ pdf to the entry, where it will automatically rename it as it
+ should. ebib is more of a tool to manage the .bib file more,
+ find an entry with full text search (instead of just
+ Author/Title search) and reading list management. There may be
+ some overlap, but I use both a lot.
+ - Got it, quick check with ivy-bibtex etc.
+ - ebib is for heavy lifting for academics
+- Q: Do you find showing abstract on your navigation panel helpful? I
+ always delete all the abstract info in my bib to make things little
+ concise. Just want to know you thoughts on this.
+ - A: I like showing the abstract. It can be long and reduce
+ visibility, but the whole point of searching with the navigation
+ panel inside ebib is that I cannot easily find it through an
+ Author/Title search. Therefore, the abstract is often the next
+ line of search where you will find what you were looking for, so
+ for me it is helpful. I sometimes also use the small comments I
+ leave on the annote entry for this purpose.
+ - Try to find relevent info using search. Abstract helps you
+ search better.
+ - annotation entry also help
+- Q: it seems that there's a meta problem here:  too much
+ information.   Do your tools reduce cognitive load?
+ - A: There is definitely too much information, but that is an
+ innate problem of handling a lot of literature. I think these
+ tools can reduce cognitive load, because things don't stay in
+ my mind. They can be moved to the computer, which can handle
+ more overload than my brain. So it is to a large extent the
+ externalization that reduces the load, because too much
+ information is a reality with literature.
+ - thanks.  Sounds like externalizing the problem is the point.
+- Q: When you download a new article, how do you integrate its file to
+ your database? For example, do you move and rename the file
+ manually?
+ - A:Find the file in ivy-bibtex, run M-o, select l (add PDF to
+ library), find from file (f), find where you saved it and it
+ will be renamed automatically. It is not moved automatically,
+ but the rest of my packages know to find it in the folder I save
+ initially. You may look at the README of the package for more
+ details, it is one of the more well written ones in my opinion
+ ([https://github.com/tmalsburg/helm-bibtex](https://github.com/tmalsburg/helm-bibtex)).
+ - Ok, I see, Ivy-bibtex has a function for this, thanks!
+- Q: What about annotations with ereaders. veiwng and taking on emacs
+ or erader touchscreen highlighting and notes, org-noter I think
+ would be an alternative out of ebook anotation alternative?
+ - A: I do not use an ereader. For touchscreen, I have a tablet,
+ which runs Emacs natively and I can work with org-noter with
+ touch, but in that case, nothing in the general workflow
+ changes. For books, I know org-noter also works with epub files,
+ so you can also directly take the notes there. If you use an
+ ereader for annotating that doesn't run Emacs, this is
+ obviously more complex.
+- Q: How well do you feel about making notes an web sites, pdf,
+ videos, I know pdf is ussaly good but others I am less sure about?
+ - (Not the author) i always try to convert it to pdf, so only one
+ file format to worry about. Video is another story.
+ - I agree with the above comment. PDF is just the easiest to deal
+ with in general, so I try to go for it. For taking notes on web
+ sites, there is org-roam-protocol
+ ([https://www.orgroam.com/manual.html#org_002droam_002dprotocol](https://www.orgroam.com/manual.html#org_002droam_002dprotocol)
+ although I personally don't use it a lot. Video is much more
+ complex, but in practice, I tend to not annotate videos
+ directly, with a timestamp, but rather to take crude notes on
+ paper during the video and organize them online at a later
+ point.
+- Q: how do you add a new article from scratch, a pdf that you did not
+ have in your bib file? How do you generate the 'bib' entry with
+ metadata and abstract?
+ - (Not the author) He mentioned he uses Zotra, which does that.
+ [https://github.com/mpedramfar/zotra](https://github.com/mpedramfar/zotra)
+ - Yes, this is my approach. Specifically the function
+ zotra-add-entry.
+- Q: When you fact check every details for a bib entry? The author
+ names, published journal, doi stuff. Always painful for me when I
+ need to upload a final version of a manuscript. Tons of work. Maybe
+ I can do it at the download step.
+ - A: I haven't worried about that, because I think automatically added
+ bib entries work well. But Org-ref has a tool to automatically check
+ it. I generally think it is best to do it directly when you add
+ them.
+ - [https://github.com/jkitchin/org-ref/blob/master/org-ref-bibtex.el#L119](https://github.com/jkitchin/org-ref/blob/master/org-ref-bibtex.el#L119)
+ - Yes, i did it manully, so some time I have issues.
+
+- Comment: I just use Org headings for all the metadata. Why bother with bib files. https://0x0.st/Kvbi.txt
+ With Org, you can search through notes and title and metadata together. I use org-ql, but you can use anything that can search Org headings. And use attachments. can also directly export to .bib from org. with headings, reading list is just natural - assign todo to heading
+ - A: You can move this all to org, yes, but I think .bib is very ubiquitous and a lot of tools work well with it, so I haven't really felt the need to move away from it. It is an interesting approach though. I have seen some others use it as well
+ - A: Making a reading list is easy indeed. The primary goal of my additions were to be able to manipulate it without ever worrying about the file itself. I find it works better/faster for me if I can always access the content I want without opening the file. Which is mostly what the code I wrote for this does.
+- I noticed that his command searches are automatically prefixed with "^" to prevent more generalized matching (e.g. all comands that have "copy")
+ - A: I believe that is done automatically by counsel-M-x. It served for something, but I don't remember exactly why.
+- Q: for viewing pdfs, do you use pdf-tools? I always found it clunky imo.
+ - A: Yes, its pdf-tools With org-noter to take notes side by side. And I haven't had any problems with it. It generally works well.
+ - (audience): I tend to always call out to the external PDF viewers.
+ - (audience): maybe I didn't try it well enough, but I just prefer external viewers. pdf-tools feels like an image viewer to me
+ - A: Some external viewers can have more features, but again, the problem comes down to it not being Emacs :D Being in Emacs is better than not being in Emacs.
+ - A: Are you sure you are talking about pdf-tools and not doc-view? Because those problems are very much in doc-view, but I wouldn't say for pdf-tools.
+- It's always interesting to watch other people work in their emacs environment.
+- Thanks for the talk! There was a lot to digest, I'll have to rewatch it.
+
+
+[[!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..b4c6f458
--- /dev/null
+++ b/2025/talks/sat-close.md
@@ -0,0 +1,33 @@
+[[!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"]]
+
+## Discussion / notes
+
+- Wooooooo! Thanks all! Looking forward to tmmr
+- 🎉 Thank you everyone :) Lots of really interesting stuff!
+- Excited for another day of EmacsConf tomorrow
+- It's been very interesting today
+- thank you for the conference
+- you all did great
+- This is one of the most organized conferences I have attended and it is like that every year
+- Y'all deserve amazing props
+- Had a lot of fun today and looking forward to more sessions tomorrow. Thanks to organisers and presenters!
+- Also want to thank you for making the videos available on many different mediums just-in-time.
+
+
+
+[[!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..1f13e06e
--- /dev/null
+++ b/2025/talks/schemacs.md
@@ -0,0 +1,303 @@
+[[!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 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.
+
+## Discussion / notes
+
+- Q: I think that Kiczalez et al.'s metaobject protocol has a scheme
+ implementation, does this mean schemacs will be
+ metaobject-changeable in practice? 
+ - A: I was not aware of that implementation, but I will look into
+ it. The MOP has not been necessary for building the GUI,
+ actually (apart from the fact that Guile-GI uses GOOPS to
+ organize the Gtk3 bindings). Pretty soon I will demonstrate the
+ React-like programming framework I have developed for the
+ Schemacs GUI.
+ - A: I don't need a meta-object protocol for Schemacs, at least
+ so far it hasn't been necessary, but may be something to look
+ into if it can be made cross-platform (for various R7RS
+ Schemes).
+- Q: How will the GUI display code be r7rs compliant afaik there is no
+ dlopen in r7rs?
+ - A: To handle these platform-dependent concerns, I make heavy use
+ of the `cond-expand` macro. Basically any Scheme
+ implementation upon which I would like to run the Schemacs GUI
+ will have to have it's own unique back-end code that is
+ loaded-in to the main Scheme program. `cond-expand` has
+ mechanisms for checking which Scheme implementation it is using,
+ so it is pretty easy to write code that can load-in different
+ back-ends for whatever platform you are using.
+- Q: Will it be possible to write multithreaded code for Schemacs?
+ - A: The GUI is inherently single-threaded, but SRFI-18 provides
+ multi-threading. So yes, there is multi-threading, and I do have
+ ways of evaluating Scheme code inside of the GUI thread so that
+ you can update the GUI. This is necessary for running external
+ processes and putting the results into buffers. But anyone
+ should be able to use the threading mechanism through the
+ ordinary SRFI-18 APIs.
+ [https://srfi.schemers.org/srfi-18/srfi-18.html](https://srfi.schemers.org/srfi-18/srfi-18.html)
+- Q: Do you think some of schemacs could be extracted into SRFIs since
+ you have made it portable between scheme implementations?
+ - A: Absolutely. I have considered making a SRFI for my
+ `(schemacs lens)` library. I would like to break up the
+ Schemacs into libraries and publish them on the Akku package
+ manager, or in the Guix repository. I am hopeful that some of
+ the libraries I have written will be useful for other Scheme
+ programmers.
+ [https://akkuscm.org/](https://akkuscm.org/)
+- Q: Is there a recommended scheme implementation or does it try to be
+ as portable as possible?
+ - A:(He said earlier that Guile was the only version that worked
+ so far.  He wants it to work for all R7RS though.) That's
+ right, Guile is the reference implementation, the GUI only works
+ on Guile, but Emacs Lisp works on Guile, Chibi, and Gauche. I
+ would like to support as many Scheme's as possible. If you want
+ to get started with Scheme and you want to try Schemacs, I
+ recommend Guile.
+- Q: How would Schemacs deal with Emacs' (re)display architecture?
+ Would it be having its own display architecture? If so, how can it
+ be compatible with things like overlays, images, etc.? From what I
+ know, Emacs is extremely idiosyncratic here.
+ - A: That is all "to be determined." At some point we will have
+ to emulate the Emacs Lisp display architecture in Schemacs, but
+ for the time being Schemacs has it's own completely different
+ display architecture.
+- Q: You were saying that you'd like to get "most" of the one
+ thousand three hundred and something Emacs packages done. Is there a
+ technical blocker to doing them all? Or just a problem of getting
+ enough people in to help and start writing scheme?
+ - A: just a matter of implementing enough of Emacs' built-in
+ functions; this relates to the bug we saw in the presentation
+ (stack dump); other people will have trouble contributing until
+ this is resolved because it does not handle closures correctly. 
+ once that is worked out it will be a matter of implementing
+ Emacs' C-based functions in scheme.  Don't have a way to be
+ sure but we probably do not need all of them implemented.
+- Q: What are you thoughts on Chicken Scheme? Would it be a good fit?
+ - A: I think it will be; tried this in preping for the
+ presentation but ran into some issues; tried using the pattern
+ matcher from Alex Shinn; each implementation has a slightly
+ different take on macro-expansion for pattern matching; I would
+ definitely love help in this area. I will probably have to avoid
+ pattern matching to make it fully portable, or else implement my
+ own pattern matcher which I can be sure will work on all R7RS
+ Scheme implementations.
+- Q: Can this emacs lisp implementation be used by Guile's emacs lisp
+ "mode"?
+ - A: This was touched on last year; Emacs Lisp in guile is a
+ different implemtation which is unfortunately quite incomplete,
+ it can't even run some of the GNU Emacs initialization code. 
+ When I first started I was using Guile Emacs Lisp's parser,
+ however it did not give source locations, and was not portable
+ to other Schemes, so I had to basically write everything for
+ Schemacs from the ground-up. If Andy Wingo is interested, we can
+ probably replace the existing Guile Emacs Lisp implementation
+ with Schemacs.
+- Q: I wonder if we could do some sort of programmatic analysis on
+ popular Emacs packages to see what list of functions they tend to
+ depend upon, follow function calls down to the lowest level
+ - A:  Yes, please do this for me! :D :D
+- Q: Shouldn't it be enough to just implement the builtin functions?
+ Most of the commands are written in Emacs Lisp, right?
+ - A: Yes, correct. That is the approach I am taking. My goal is to
+ get the Emacs Regression Test suite (ERT) system working in
+ Schemacs Emacs Lisp, then we can just use the reports generated
+ by the GNU Emacs regression tests to see what Emacs Lisp
+ functions we have left to implement in Schemacs.
+- Q:  Do you think there is an opportunity to use Racket?
+ - A: Yes, looking at getting Schemacs working Chez then could
+ somehow move onto Racket; haven't tried R7RS for racket. Racket
+ works on Chez, and I would like to make Schemacs work on Chez,
+ but I won't be able to make use of Racket libraries. Alexis
+ King has written a R7RS language package for Racket, and I
+ haven't tried it yet, but it may be a good way to get Schemacs
+ to work in Racket.
+- Q: Tell us more about this show-stopping bug! How to squash it? Can
+ people help?
+ - A: Unfortunately, this is something I will have to do on my own
+ unless you happen to be a Scheme genius who can read and
+ understand all of my code so far in a short amount of time. It
+ has to do with how closures work. Closures were introduced with
+ Emacs 27 (?) and lexical scoped variables for ELisp.  When we
+ create and return a lambda that uses a variable declared outside
+ of the Lambda in a "let" binding, that variable resides on the
+ stack, so the Lambda must have a "note" that captures part of
+ the current stack and then later restores it when the Lambda is
+ executed. This is where the issue is: it is not capturing the
+ variables from the stack properly.  The plan is to do static
+ analysis of the Lambda and then store a reference to those
+ vairbles in the Lambda data structure.
+ - Q: How about using smaller test cases (instead of a full
+ Emacs loadup) to pinpoint the issue? When writing Juicemacs
+ I've gather a few closure-related test cases
+ ([https://github.com/gudzpoz/Juicemacs/blob/ddc61c08632cfdd1a9f2bc10f63e61c5679d6592/elisp/src/test/java/party/iroiro/juicemacs/elisp/runtime/ELispBindingScopeTest.java#L12-L91](https://github.com/gudzpoz/Juicemacs/blob/ddc61c08632cfdd1a9f2bc10f63e61c5679d6592/elisp/src/test/java/party/iroiro/juicemacs/elisp/runtime/ELispBindingScopeTest.java#L12-L91)
+ , and some more test cases in a blog post:
+ [https://kyo.iroiro.party/en/posts/emacs-lisp-interpreter-with-graalvm-truffle/#creating-closures-in-a-loop](https://kyo.iroiro.party/en/posts/emacs-lisp-interpreter-with-graalvm-truffle/#creating-closures-in-a-loop)
+ ). Could they be useful? (I just tried to take a peek at
+ Schemacs' code, but I'm really not familiar with
+ Scheme...)
+ - By the way, Emacs comes with its own static analyzer in
+ elisp (cconv.el) that seems to select captured variables
+ from env cons lists in Emacs, which might be useful if
+ you're also using a cons/linked list of lexical bindings, I
+ guess?
+- Q: Are there performance concerns with implementing certain C
+ primitives in pure scheme?
+ - A: No :) I think it was Donald Knuth who said "Premature
+ optimization is the root of all evil." The graphical back-end
+ is usually written in C anyway (Gtk3), so the graphics is being
+ done in C. Besides that, Scheme compilers like Guile, Chez,
+ Gambit, and Chicken all have very good performance
+ characteristics. So for the time being, I don't think
+ performance is a major concern.
+- Q:  If this project is successful, are you worried about a possible
+ split in the community between Schemacs and GNU Emacs users?
+ - A: There seems to be a large call for a scheme based editor, so
+ the demand for this "split" is already there. There have been
+ attempts at rewriting Emacs in Scheme since the early 90s. And
+ there hasn't been a good, free-software, Scheme-based
+ programming environment like Emacs since Edwin on MIT Scheme. 
+ So Schemacs may cause some fragmentation but "a rising tide
+ raises all ships".  If I have time I would also like to
+ contribute some of what I learn from Schemacs back to GNU Emacs,
+ for example I would like to work on an interactive canvas
+ library based on the "Cairo" SVG rendering library. Cairo is
+ already built-in to Emacs, so I would like to maybe port my
+ Schemacs interactive canvas (still a work in progress) to GNU
+ Emacs when I have some time.
+- Q:  The dream of never even needing to change to the web browser -
+ would schemacs bring us closer to that?
+ - A: I hope so!  this is also a dream of mine!  I wanted to make
+ sure I have a good workable UI framework like React so we can
+ write proper GUIs for applications such as a Mastadon client, it
+ could be very nice to have a better GUI for this, or for Magit,
+ or Gnus. I would love to be able to do as much as possible in
+ Schemacs, e.g. social networking, public Git repos. That is a
+ goal of mine for this project.
+- Q: Anything specific other than minimalism that made you choose
+ Scheme over Common Lisp?
+ - A: Philosophical question :)  I love Haskell, and I once had a
+ conversation with William Byrd (author of "MiniKanren," who
+ studied under Dan Friedman at the University of Indiana) who
+ told me about why he didn't like Haskell and suggested looking
+ into Scheme. I like Haskell because it is a very pure
+ implementation of the "System-F" Lambda Calculus, and I like
+ Scheme because it's closer to the mathematical framework of the
+ Untyped Lambda Calculus, but Scheme is friendly (without the
+ strict type system), similar to Python. It provides a tiny
+ framework from which all of computer science can be explored. 
+ Excited to see what this tiny language can do. I like the idea
+ of starting from a tiny "kernel" language and using it to
+ build-out all other alglorithms and software. I think it is a
+ shame that there isn't much Scheme code out there, and I would
+ like to try to expand the Scheme software ecosystem.
+- [https://codeberg.org/ramin_hal9001/schemacs](https://codeberg.org/ramin_hal9001/schemacs)
+- [https://github.com/spk121/guile-gi](https://github.com/spk121/guile-gi) 
+ <-- that is the GUI back-end, by the way.
+- [https://gi.readthedocs.io/en/latest/](https://gi.readthedocs.io/en/latest/)  
+ <-- that is GObject Introspection, this is how the GUI bindings
+ work.
+- lol it feels like rahim has been standing at the same place since
+ last year :P
+- Basically, yes, I haven't moved at all! Of course I have moved away
+ from that spot in the interim once or twice.
+- Awesome talk, I will surely try to contribute even though I don't
+ know stuff yet :)
+ - All are welcome, if you don't know anything, I'll be happy to
+ try and teach you!
+
+
+- amazing progress
+- nice talk.
+- I'm so excited for this project! Amazing update 😊
+- I wonder if we could do some sort of programmatic analysis on popular Emacs packages to see what list of functions they tend to depend upon, follow function calls down to the lowest level
+- would love to see that
+- That is probably a good idea (getting rid of the baggage)
+
+
+
+
+[[!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..7d59267e
--- /dev/null
+++ b/2025/talks/sun-close.md
@@ -0,0 +1,80 @@
+[[!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"]]
+
+## Discussion / notes
+
+- Thanks:
+ - 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.
+ - This year's conference hosts are Corwin Brust and Amin Bandali,
+ while Sacha Chua ran around backstage.
+ - Thanks to other volunteers: 
+ - JC Helary, Triko, and James Endres Howell for help reviewing
+ CFPs
+ - Amitav Krishna, Rodion Goritskov, jay_bird, indra for
+ captions
+ - yang3 for the EU mirror we're setting up
+ - Bhavin Gandhi, Michael Kokosenski, Iain Young, Jamie Cullen,
+ Ihor Radchenko (yantar92), FlowyCoder for other help
+ - Thanks to the Free Software Foundation for the mailing lists,
+ the media server, and of course, GNU Emacs.
+ - Thanks to Ry P for the server that we're using for OBS
+ streaming and processing videos.
+ - Thanks to the many users and contributers and project teams that
+ create all the awesome free software we use, especially:
+ - Emacs, Org Mode, ERC, TRAMP, Magit, BigBlueButton, Etherpad,
+ Ikiwiki, Icecast, OBS, TheLounge, libera.chat, ffmpeg,
+ OpenAI Whisper, WhisperX, the aeneas forced alignment tool,
+ PsiTransfer, subed, sub-seg, Mozilla Firefox, mpv,
+ Tampermonkey
+ - And many, many other tools and services we used to prepare
+ and host this years conference
+ - Thanks to shoshin for the music.
+ [https://cicadas.surf/~shoshin/](https://cicadas.surf/~shoshin/) 
+ - Thanks to people who donated via the FSF Working Together
+ program: Scott Ranby, Jonathan Mitchell, and 8 other anonymous
+ donors! Donation link:
+ [https://my.fsf.org/civicrm/contribute/transact?reset=1&id=70](https://my.fsf.org/civicrm/contribute/transact?reset=1&id=70)
+ - sacha@sachachua.com   emacsconf-org@gnu.org
+
+
+- Thank you for everything sachac and everyone else that volunteered or that gave a talk
+- It was very fun participating
+- thank you all for everything!!!
+- Thanks for another great emacsconf!
+- thank you!
+- Thanks everybody :-)
+- Thank you for all your amazing work!
+- Thank you sachac, corwin and everyone that made this possible. great emacsconf
+- 👏👏👏 Thanks to the EmacsConf org (pun intended ;) ) team and community and of course all emacs contributors and maintainers
+- Thanks to everybody involved with Emacsconf. Awesome conference as always
+- Fantastic conference!
+- Thank you so much for making it happen! :)
+- Reddit and IRC mentioned, but most is happening on the Emacs mailing lists :)
+- Emacs bugs mailing list is surprisingly interesting as well: lots of discussion there, on various details (and upcoming little features!), every single day.
+- i.e. Not your boring bug tracker. :)
+- The Emacs Carnival, perhaps? 🙂 I'm very curious about getting into the bloggosphere around Emacs. I haven't done much digging there yet 🙂
+- thanks all for this nice Emacs weekend
+- See you all around, Happy Emacsconf! 😃😊
+- Excellent weekend. It went by so fast 😊
+- bye! good talks :D
+- thanks for an excellent weekend, amazing conf
+
+
+
+[[!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..be639835
--- /dev/null
+++ b/2025/talks/swanky.md
@@ -0,0 +1,158 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: Does swanky-python work with Sly?
+ - A: It doesn't, Sly is great but I went with slime for a few
+ reasons:
+ - I wanted to use some cool stuff from slime-star
+ - I actually think there's good potential with slime's presentations that sly removed.
+ - The main feature of sly missing from slime is stickers.
+ slime-star provides something similar in being able to
+ recompile a function with an expression traced, but I
+ think for python it'll be better to integrate with dape
+ for debugging
+ - In recent years slime has been more actively maintained
+ in terms of bug fixes and such.
+- Q: Does this work with Hy?
+ ([https://hylang.org](https://hylang.org),
+ lisp syntax for Python)
+ - A: I actually first wrote this in Hy.
+ [https://codeberg.org/sczi/swanky-python/src/commit/6d8f4e0c8000c931746edd0fb442704dff853492](https://codeberg.org/sczi/swanky-python/src/commit/6d8f4e0c8000c931746edd0fb442704dff853492)
+ is the last commit before I switched back to python.
+ - Though even when the swanky python backend was written in Hy, it
+ was still targeted at editing python code, not Hy. Implementing
+ it in Hy just made the implementation a bit easier, as the slime
+ "protocol" is just slime sending lisp forms to the swank
+ backend to evaluate, so to write the backend in python we need
+ to implement a lisp interpreter (swank_eval in server.py), which
+ we already have in Hy.
+ - To make it work for editing Hy code would require some changes
+ on the backend, around evaling code, returning source locations,
+ and autocomplete. But most would stay the same, so I think it
+ could be made to support both without needing to fork a separate
+ project. I don't plan to use Hy or work on it. When writing
+ lisp I'd rather write CL, and when writing python I'd rather
+ use standard python syntax. But if someone wants to add Hy
+ support I'd be happy to merge it and assist a bit.
+- Q: Where can I find a list of Slime-like interfaces for other
+ languages?
+ - A: I don't know that a slime-like interface really exists for
+ any languages outside of the lisp and smalltalk family. I made a
+ list of some of those at
+ [https://codeberg.org/sczi/swanky-python/src/branch/main/Hacking.org#headline-63](https://codeberg.org/sczi/swanky-python/src/branch/main/Hacking.org#headline-63)
+- Q: Is there an IRC channel for swanky-python? If not, are you
+ interested in creating one?
+ - A: Good idea to have, I just made #swankypython on libera
+- Q:How would this integrate with python notebooks such as marimo?
+ - A: I've never used marimo, just jupyter, but it looks nicer so
+ I'd like to try it out sometime. The most basic integration
+ would be to just run swanky python within the notebook. That way
+ you would use the notebook as normal, but get the interactive
+ backtrace buffer in emacs on any exception, and be able to use
+ the inspector, nicer repl, etc. A more complete integration
+ would probably be based on emacs-jupyter but I haven't looked
+ into it yet.
+- Q: Why not org babel as well? +1 for org-babel with this, would be
+ awesome
+ - A: That'd be great and probably not much work at all. I just
+ tried evaling python code as a "lisp" block, since babel for
+ lisp calls slime-eval, and it dies with an exception because I
+ haven't implemented swank:eval-and-grab-output in swanky python
+ yet. Maybe it's just needed to implement that and then
+ configure babel for python src blocks to use slime-eval rather
+ than running with org-babel-python-command.
+- Tangentially, did you see Kent Pitman's recent moves to introduce
+ his common lisp condition system to python? E.g. about resuming
+ execution after an exception. He showed it some sunday lispy gopher
+ climate. In my opinion, reach out to
+ [https://climatejustice.social/@kentpitman](https://climatejustice.social/@kentpitman)
+ since you asked for contact about lisp-style python exception
+ restarts which he has worked on recently.
+- I hadn't seen that, thanks, it's super interesting to hear the old
+ legends talk. Here's the link for anyone else:
+ [https://medium.com/@screwlisp/live-interview-with-kent-pitman-incoming-216092e24f44](https://medium.com/@screwlisp/live-interview-with-kent-pitman-incoming-216092e24f44)
+- But a condition system is a bit of a separate issue from the
+ exception restarts I'd like to have. A condition system can be
+ implemented without any changes to the runtime, in any language with
+ dynamic scope and first class functions. And dynamic scope can be
+ emulated in any language with global variables, so people have
+ implemented Common Lisp (CL) style condition systems as libraries
+ for many languages. If this was used universally in place of the
+ language's native exceptions, it would give the ability to drop
+ into a repl at the point of an otherwise uncaught exception, but not
+ the ability to restart execution from any stack frame. Smalltalk has
+ traditional exceptions and not a CL like condition system, but its
+ debugger does provide this ability, as does the JVM and v8
+ debuggers. In CL this ability (sldb-restart-frame in slime) isn't
+ provided by the condition system, but in SBCL for example by
+ internal functions in the sb-debug and sb-di packages.
+- It'd be interesting to experiment with a condition system in
+ Python, but what I'm more interested in is the ability on any
+ runtime error, to be able to fix the bug and restart execution from
+ any stack frame. 
+- Amazing work!
+- [https://slime.common-lisp.dev/doc/html/](https://slime.common-lisp.dev/doc/html/)
+ (anyone who doesn't have this bookmarked)
+- This is really cool, I am amazed how much functionality you have
+ implemented! I hope I can start using this in my day job!
+- Very very impressive. I will definitely try to use this in my
+ workflow. I love the Lisp development style.
+- very impressive. I am also working on a Python IDE with a python
+ process and a webview to host the python runtime and display the
+ IDE, but I am very far behind in terms of features. I just made the
+ reload system work and the code(AST)->html renderer
+- Neat, if you publish it send me a link!
+- Definitely going to give it a try! I've been missing interactive
+ since learning python many years ago, even before I knew Common Lisp
+ existed and one of the primary reasons why Common Lisp replaced
+ python as my go-to language
+- Such a package alone would automatically make Emacs a much better option than something like PyCharm.
+- I found it very funny how he showed M-x doctor But very interesting talk!
+
+
+[[!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..ea1c2908
--- /dev/null
+++ b/2025/talks/weights.md
@@ -0,0 +1,88 @@
+[[!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.
+
+## Discussion / notes
+
+- Q: Very cool! It would be nice to build some One-rep max calculation
+ formulae into calc
+ - A:
+- Q:Do you have plans to extend this to clock-report kind of
+ reporting? graphical reports, etc? 
+ - A: Yes, yeah, exactly. Graphical reports. These are all something that, It currently doesn't have, and these nice apps do have. They have charts of all kinds. You can see your progress from week to week on various exercise. They have charts galore, all these fancy apps. And in theory, it wouldn't be hard at all to like, 'cause like, you know, there's gnuplot. There's those, and then they have like very good packages on any of them. So, I mean, I assume integration would be pretty seamless. So yes, that is definitely on the list of things I want to do.
+- Q: Have you ever wanted to modify the functionality on your mobile
+ device while working out? Any good or challenging experiences or
+ tips with that?
+ - A: Yeah, that's actually funny. There was a time where, yeah, I mean, like debugging, there was like some bug I was having with my code. And so I have, in the middle of a workout, yeah, start, like, open up the debugger and kind of, and the cool thing is that, I mean, the biggest thing, like, the biggest thing by far is unexpected keyboard. <https://github.com/Julow/Unexpected-Keyboard> Like, I can't state how, I don't know how much Unexpected Keyboard is, because, like, with Unexpected, with the Unexpected, with that keyboard, you can literally just, like, it's, it's not hard at all to, like, you can do M-x or C-M-x or you know C-u C-M-x to debug, like, you can do all the key bindings with unexpected keyboard. There's no problem whatsoever with that part. The only part is muscle memory. It's because you get the muscle memory of the emacs key binding and so you have to kind of like yeah... I mean that translation is actually kind of you have to think about it like, like, okay, what was that key binding again? And you have to kind of like do it with your fingers. And it was like doing it on the, on Android is, I mean, it takes a little longer and it's just a different, yeah, different set of different muscle memory.
+- Q: Sorry, if you covered this, but does the rest timer end with an audible notification at the end of the time?
+ - A: That's the cool thing. So with the Emacs, with the Android notification settings, you can, I can show that again in more detail. So bonus settings, apps, pick the app, notifications. And then here we get that org-fit-rest-over. And so here you can set, for example, whether it's a silent notification. And so this won't, this won't make it make noise. You can do... or like make it have a noise, and so you can have it make sure it's popped on the screen and then you can just pick whatever ringtone you want, and you can make it look like yeah. Then obviously you have the whole volume setting, so you can, when you're working you can just set the volume pretty high, so if you do happen to set your phone kind of away, you set the volume high, maybe make a really annoying sound, a loud sound you won't miss. And then, yeah, you'll be set. So that works. That was actually one of the biggest surprises. I wasn't expecting that to work so nice.
+- Q: You mentioned file sync, what have you found works well for you?
+ - A: So in terms of what, yeah, I did have to play around with this a lot, but Syncthing Fork is what I eventually settled on. I mean, this is another thing that, I mean, I don't, it wouldn't nearly be as usable, like Emacs wouldn't be nearly usable without it. So Syncthing Fork essentially, okay. And then I also have like a droplet on DigitalOcean, just like, so that's kind of like the whole, that's kind of like what bridges it together. So like, so my Emacs can sync to that, and then my machine also syncs to that. And so I don't have to have them both on the same time. It's just there, that copy. And so that works pretty well. I also found that editing code in general, I think this also goes with the development experience question.
+- Q: HAve you tried other keyboards such as Hacker\'s keyboard
+ - A: Not recently. I haven't, so I couldn't compare them.
+ - Q: Another keyboard question - have you tried the \"flickboard\"
+ on f-droid? It\'s the craziest keyboard, you use one thumb
+ - A: Oh, that is interesting. Let me see. Flickboard. Flickboard. Yeah, I'll have to try that. I'm curious to get the key bindings done. I wonder if the key bindings and all that work. I hope that's interesting. I'll definitely look into that.
+- Q: This user interface is simplified but still keyboard based, can
+ you think of ways to make it more touch based?
+ - A: So the only thing currently, I think, of specific touch-based functionality I have, which, so this is like, so let's see, it's C-x C-+, That key binding wrong, what was it? Okay, whatever. Yeah, so in terms of touch commands, so pressing on a headline will actually unfold it and move your cursor to the next field that you, yeah, so like, yeah, at the beginning of the table. So like, there's that, yeah, and so. It sounds like that is something you're thinking about. Yeah, exactly. Like, you know, maybe like a little thing at the bottom, like, so this thing has the, this app has this, if you notice, like, if you do something, it has this rest timer at the bottom. So I mean, it wouldn't be, it wouldn't be pretty, it wouldn't be, it seems quite doable to just have like, maybe something at the bottom, like for a timer, and then you can just like plus 15 seconds or cancel it or, you know, just, and then those could all be just like touch based. And so, yeah. And then obviously just like, just like classic Emacs, the Emacs, like clicking actions, they just, yeah, they work just fine. Like, so there's no like weird Android touch thing you have to worry about.
+- Q: I\'m curious about the development experience. Do you do
+ everything on the phone? 
+ - A: And that's the thing. None of my development in general is done on the phone. just because, for one, my muscle memory isn't there, and two, just in general, typing on a virtual keyboard on the phone, it's just really slow. So yeah, all the development is done on my machine, but then there's the problem of you have to have an init.l in your Android, and so you're going to have to write, you know, I found like you'd have to like, when you first get Emacs set up, you might have to like write some, I don't know, like you'll kind of have to like get into your init file and then just like, maybe just like start to put things together. But the cool thing is with Syncthing Fork, I'm syncing my, I'm setting it to load off of a sync directory. Like this, this init file, my Android file is synced with my machine. So if I wanted to, I could just edit it on my machine and just have that synced automatically. So that makes like the whole, like in it, cause like it's, it's such a, like, that is one of the, it's just like get in, sit writing your init.el in Emacs on Android is just kind of a...
+
+ [Corwin]: I think that's like. That's an extremely good tip, right? That if we're, as we're exploring Android, we want to think about that as adding support for another port of Emacs. So the whole dance of, oh, I took, you know, I took, you know, I took my init and I wanted to use it on BSD after mostly using GNU Linux. Now we're going in and we're looking at our Emacs. all of our Emacs and it stuff and thinking about compatibility, turning features on and off based on the OS that we're running underneath and so on. I think that's pretty heads up advice.
+- Q: Have you thought about integrating cardio tracking like timed runs, bike rides, etc?
+ - A: Yes, I definitely thought about that. And that might be another thing where a touch interface might be helpful. I don't know if I can easily pull it up, but the app itself, oh yeah, here it is. So you can see kind of how they have, and you can kind of see how this fits. This is like an org, you can see that these are just tables, right? This is just like this whole interface in general, just like kind of screams like an org mode, file with you have you have your different headings like here's a warm-up heading and then you have the tables and you know you could just like envision how you could have a org table with one of the columns called time and then you could just imagine like there'd be a button there and you can just have it click, and then you'd have a timer in the background that would update this timer. It's so, I mean, conceptually, there's nothing really, it conceptually maps really well to this. So yeah, I mean, that's definitely something.
+- Q: Seems like a great use case to combine with some of the other
+ talks like Ramin\'s UI demos, maybe some speech/LLM stuff. And
+ Hyperbole\'s M-RET!
+ - A:
+- Q: emacs on android can be installed on a GrapheneOS-set up device too, can't it?
+ - yes it is available in f-droid
+ - Oh man... I haven't used a smartphone in a while, but I'm really excited to take advantage of all of the Emacs features people have made once I pick one back up. I got a Linux phone that should hopefully be arriving relatively soon here 😊
+ - Touch seems so wildly usable nowadays. That's so awesome 😊
+ - which one? I'm using the Jolla C2 Community Edition with SailfishOS
+ - Oh nice! 😊 I ordered a FuriPhone quite a while ago, but it got really hit hard by tariffs. It seems like it's finally happening now 😊
+ - Oh I saw that one :) I think its quite a bit more powerful than my one
+ - I'm so looking forward to it. 🙂 I think it'll have a *little* performance bump coming from my original PinePhone 😛
+ - next to the fully fledged Emacs, an app on Android like beorg on iOS would be great companion. when using orgmode content especially as todo/checklist tool, then an app designed for mobile UI with touch operations is key for easy use onthego.
+- I'm very interested in this as I work on similar problems in this space at work
+
+[[!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..b4177971
--- /dev/null
+++ b/2025/talks/zettelkasten.md
@@ -0,0 +1,453 @@
+[[!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?
+```
+
+## Discussion / notes
+
+- Q: I wonder what they use for the fancy animations (what is your
+ presenation software stack?)
+- A: Apple Keynote -- sorry for the proprietary product, I'm
+ just fastest with that. PowerPoint also works, and when
+ PowerPoint can do, LibreOffice can also do. It's more about
+ sticking to a few simple transitions and timings, like fading
+ and directional movement/wiping, and you're good. Read
+ "slide:ology", that's amazing and full of great examples.
+- Q: Are you not a fan of using *, **, *** headings in
+ org-mode?  (It's interesting to see how people have different
+ styles of writing org content.)
+ - A: Didn't see a need for hierarchical structure for the
+ presentation. Also I'm leaning towards sequential writing, i.e.
+ 'notes as blog post' pattern, or in our technical terms: "A
+ Zettel should be like a StackOverflow post: a self-contained
+ answer, specific to the question, with references to learn more
+ if needed." An outline doesn't fit that well.
+ - Fair enough.  Thanks.
+- Q: can you use org files and all its features inside denote?
+ - A: Yes, this is an org file and Denote uses Org headings.
+- Q: Where/how do you like to capture fleeting notes?
+ - A: Uses small paper notes. (Also don't get hung-up on
+ terminology like this please :))
+- Q: Zettelkasten feels like a very "cagey" approach to note-taking
+ and knowledge management. Doesn't it restrict one to think in
+ certain ways rather than what feels natural to someone?
+ - A: Take that feeling of being caged in as feedback to adjust the
+ process. Otherwise, the rules I subject myself to are voluntary.
+ I give my best during the writing stage, which is 'cagey' and
+ taking more effort, too, for the benefit of my research in the
+ long run.
+ - (audience): Makes sense. Thanks! I'll give another shot to zettelkasten and
+ rewatch your talk!
+ - (audience): the point of zettelkasten is to see varying differences between various notes and make interesting connections. so the only 'cage' is to just write notes, the creativity will happen when you see the interesting connections.
+ - (audience): as luhmann put it: "without noticing differences, one cannot think"
+- Q: How does denote compare to org-roam?
+ - A: Denote is smaller, allows finding notes, but gets out of your
+ way otherwise.
+- Q:I noticed that the wikipedia link you wrote was typed wrongly -
+ and it got me thinking about how to deal with broken links at scale?
+ Do you have any thoughts on this? What about archival?
+ - A: Use any script to automate fixing broken links
+- Q:When I completely re-worked my config some two years ago, I also
+ tried out some of these packages for making notes in Emacs. But none
+ of them actually fit my purpose because **I do not like the idea of
+ splitting up my ideas**. I am writing prose, I collect material,
+ reading lists and so on in **just one big file** everything fits in.
+ In this notebook.org file I do archiving from time to time in a
+ monthly basis, and I search these files in Finder on macOS to find
+ older notes I would like to go back to. So, if I write a paper,
+ it's basically an extract from my old notes that only have one
+ structure, viz. when I took them. **Time structures my thought, and
+ my notes.** But they would get lost if I split them up in a
+ network-like structure like a wiki, or even a zettelkasten. My 2 ct.
+ BTW, I work on legal and sociological topics. I'm a lawyer by
+ training.
+ - A:Cool! Happy for you :) See Twyla Tharpe.
+- Q:How Zettelkasten is useful for highly mathematical STEM academic
+ fields like computer science or engineering fields? Like when
+ studying a STEM field, what should we make notes of? The important
+ bits are interconnected in a heirarchy, usually chapters of a book (1 -> 2
+ -> 3). Main points are usually dense, highly context-dependent
+ sentences. One feels like he is copying information to another box.
+ It's usually not possible to reword scietific results in ones own
+ words.
+ - A: (probably by oliver epper!! )Zettelkasten is great for
+ Mathematics and incredible for CS. With org-babel you can have
+ living source code that you can execute from the note.
+ (Zettelkasten using denote, using org is the link here). You can
+ even use Agda if you want to have living proofs in your note.
+ Even inline LaTeX is an option for beautiful commutative
+ diagrams or math terms. Quote the sentence as is and add ...?
+ - A: foundational knowledge is important for tests mostly; and
+ eventually becomes your inventory of skills (you can do X proofs
+ from the top of your head).   Copy box: fridge me
+ - see appendix A below: local link in supply chain of
+ knowledge
+ - engagement doing the work of not copying, but rephrasing,
+ organizing, but sometimes also retyping alone
+
+- Q: In your experience, would you say that you re-use most of your
+ notes? Watching your demo, I though that more notes your create,
+ less you might re-use them... Thanks for sharing!
+ - A: No, that'd be impossible. I have 11k notes. "Most" would
+ be 50%, 5500 of them. I can't use that many things most of the
+ time, it's impossible. Focuses shift, and I go from one
+ department to another, metaphorically, as the hours, days, weeks
+ pass.
+
+- 2:09 PM EST Q: How are notes structured and accessed when the notes
+ grow from 10K to 100K notes.
+ - A: Like a fractal; self-similar structures
+
+- 2:13 PM EST Q: Not a Question but I would be very interested in your
+ thought on this video by Westenberg :-
+ [https://www.youtube.com/watch?v=CjSWwmg-JRM](https://www.youtube.com/watch?v=CjSWwmg-JRM)
+ , Why I Deleted My Second Brain: A Journey Back to Real Thinking
+ - A: dunno, probably a lot of collection, not a lot of thinking in
+ the ZK to some purpose that worked...? Usually, posts/videos
+ like this conflate note taking as a dumping ground for 'stuff'
+ with something that is valuable in the long term. 
+
+- Q: Is there a danger that with a Zettlekasten-process, that the
+ process gets a bit in the way of the content?
+ - A: STrive for speed of thought tools, not e.g. typewriter. THEN:
+ reduce ritual and ceremony. 
+
+- Q: How do you navigate looking at all posts with certain tags (this
+ might be in emacs already; new to emacs ;))
+ - A:I don't; tags are just a way to loosely group notes (and
+ stuff in general) so that you can find potentially relevant
+ pieces of information more quickly. To navigate, use links.
+ Create nativigational aids. 
+- Q: I thought denote uses md files
+ - I think it can use either markdown or org.
+ - denote is agnostic to the format
+ - and I already use org-roam but this makes me think I may want to switch.
+ - denote is more minimal
+ - Denote is simpler
+ - Org-roam feels more hackable for me
+ - org-roam tries to implement Roam Research
+ - I'm just used to org-roam since years
+ - after some research I went with org-roam just beacuse it handles org files. boy if I knew that back then
+ - I have a lot of stuff that depends on org-roam, because it does more than just the zettelkasten. It is more of a database structure.
+- His slides are very aesthetic.
+- all these speakers need to provide there emacs ui setup in emacsconf
+ repo
+ - it was a compliment, all of them have eye-candy emacs
+- How did I not know the guy who runs zettelkasten.de was an Emacs
+ user.  (It makes total sense, but I didn't know until now.)
+ - oh wow, is that a video editing thing or an Emacs thing?
+ - the video-editing is really great
+- So meta! Loved seeing how they  turned a zettelkasten into a talk.
+- Very, very interesting talk!
+- I'm going to have to rewatch this one a couple times. There's so
+ much good stuff here. I don't know if the Zettelkasten idea has
+ every fully "clicked" for me, but I think this is the closest
+ I've been to "getting it" 
+- (add-hook 'org-mode-hook #'visual-line-mode)
+- oh yeah I have started to download the webpages I refer to
+ - I use wget manually though.
+- I have tried zettelkasten through org-roam before. it felt too overwhelming, so I just do "bunch of org files in a directory" now
+ - I think everyone has to find their own style.
+ - org-roam can feel confusing in the beginning, I do get that
+ - I feel like it is okay to just do what you feel suits you and slowly improve your flow
+ - I am very addicted to it at this point, but I understand this
+ - it doesn't have to use the hottest thing in the market
+ - I don't do second brain thing now, I just write whenever I want to
+ - I use org capture to maintain a journal and separate org files later.
+ - I always start with writing and link things after I have a first draft of a file
+ - I can confirm that 2k notes need to be very well organized to not get lost. Once you get to the point where your notes grow too fast, you really need a very good structure
+- it is an org file?
+ - it looks like an org file. He just doesn't use headings that much.
+- I'm going to have to rewatch this one a couple times. There's so much good stuff here. I don't know if the Zettelkasten idea has every fully "clicked" for me, but I think this is the closest I've been to "getting it" 🙂
+- Excellent talk (slides and presentation itself). 👏
+- agreed, it's going to require several listens!
+- easily one of the best talks during emacsconf
+- Thanks for the talk!
+- lol, 'so is wearing underwear'
+ - Amazing parallelisms
+- "so is brushing your teeth everyday"
+- Q: does christian make videos too
+ - I have seen them somewhere
+- so far this talk has been very good
+- off topic, but I really dig there overall room aesthetics
+- https://github.com/yibie/org-supertag
+ - it's by the emacs-china guy
+ - though I don't like the ai integration in there
+
+
+
+
+Appendix A:
+# 202402121625 Zettelkasten can be the fridge-like buffer of knowledge
+#zettelkasten 
+
+Any local knowledge database serves as a **buffer** between all
+available information sources on the internet and actual problems that
+have been solved.
+
+> [T]here's no "local link" in this supply chain that we've
+developed. Google is the closest link, meaning we use the massive,
+unsorted network that is the Internet and Google's interpretation of our
+problem as our "second brain".[#20240212ds][]
+
+A Zettelkasten, as a trusted system[[201304061037]] for information
+retrieval, becomes the first line of defense when looking for a
+solution:
+
+    Problem → Zettelkasten → Google
+
+As Aseem Thakar points out, we don't go foraging in the woods whenever
+we get hungry, but instead go to the fridge in our apartment, then head
+to the supermarket if we don't find anything there, then maybe check
+out farms if the market is empty.[#20240212ds][] Defaulting to web
+search for a solution and never building up a local storage buffer of
+answers to our problems would be similar.
+
+[#20240212ds]: Aseem Thakar: "How to build a second brain as a
+software developer", 2021-09-26,
+<[https://aseemthakar.com/how-to-build-a-second-brain-as-a-software-developer/](https://aseemthakar.com/how-to-build-a-second-brain-as-a-software-developer/)>
+
+
+
+
+
+[[!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 895e732b..cfc3579b 100644
--- a/captioning.md
+++ b/captioning.md
@@ -7,12 +7,12 @@ easier to understand and search.
If you see a talk that you'd like to caption, feel free to download it
and start working on it with your favourite subtitle editor. Let me
know what you pick by e-mailing me at <sacha@sachachua.com> so that I
-can update the index and try to avoid duplication of work. [Find talks that need captions here](https://emacsconf.org/help_with_main_captions). You can also help by [adding chapter markers to Q&A sessions](https://emacsconf.org/help_with_chapter_markers).
+can update the backstage index and try to avoid duplication of work. [Find talks that need captions here](https://emacsconf.org/help_with_main_captions). You can also help by [adding chapter markers to Q&A sessions](https://emacsconf.org/help_with_chapter_markers).
You're welcome to work with captions using your favourite tool. We've
been using <https://github.com/sachac/subed> to caption things as VTT
or SRT in Emacs, often starting with autogenerated captions from
-OpenAI Whisper (the .vtt).
+OpenAI Whisper or WhisperX (the .vtt file backstage).
We'll be posting VTT files so that they can be included by the HTML5
video player (demo: <https://emacsconf.org/2021/talks/news/>), so if
@@ -26,59 +26,13 @@ You can e-mail me the subtitles when you're done, and then I can merge
it into the video.
You might find it easier to start with the autogenerated captions
-and then refer to any resources provided by the speaker in order to
+and then refer to the video or any resources provided by the speaker in order to
figure out spelling. Sometimes speakers provide pretty complete
scripts, which is great, but they also tend to add extra words.
-# Reflowing the text
-
-First, let's start with reflowing. We like to have one line of
-captions about 60 characters long so that they'll display nicely in
-the stream. If the captions haven't been reflowed yet, you can reflow
-the captions at natural pausing points (ex: phrases) so that they're
-displayed nicely. You don't have to worry too much about getting the
-timestamps precisely.
-
-For example, instead of:
-
-- so i'm going to talk today about a
-- fun rewrite i did of uh of the bindat
-- package
-
-you can edit it to be more like:
-
-- So I'm going to talk today
-- about a fun rewrite I did
-- of the bindat package.
-
-You probably don't need to do this step if you're working with the VTT
-files in the backstage area, since we try to reflow things before
-people edit them, but we thought we'd demonstrate it in case people
-are curious.
-
-We start with the text file that OpenAI Whisper generates. We set my
-`fill-column` to 50 and use `display-fill-column-indicator-mode` to
-give myself a goal column. A little over is fine too. Then we use
-`emacsconf-reflow` from the
-[emacsconf-el](git.emacsconf.org/emacsconf-el/) repository to quickly
-split up the text into captions by looking for where we want to add
-newlines and then typing the word or words. We type in ' to join lines.
-Sometimes, if it splits at the wrong one, we just undo it and edit it
-normally.
-
-It took about 4 minutes to reflow John Wiegley's 5-minute presentation.
-
-<video src="https://media.emacsconf.org/reflowing.webm" controls=""></video>
-
-The next step is to align it with
-[aeneas](https://github.com/readbeyond/aeneas) to get the timestamps
-for each line of text. `subed-align` from the subed package helps with that.
-
-<video src="https://media.emacsconf.org/alignment.webm" controls=""></video>
-
# Edit the VTT to fix misrecognized words
-The next step is to edit these subtitles. VTT files are plain text, so
+The first step is to edit misrecognized words. VTT files are plain text, so
you can edit them with regular `text-mode` if you want to. If you're
editing subtitles within Emacs,
[subed](https://github.com/sachac/subed) can conveniently synchronize
@@ -88,7 +42,7 @@ filename, but if it can't find it, you can use `C-c C-v`
(`subed-mpv-find-media`) to play a file or `C-c C-u` to play a URL.
Look for misrecognized words and edit them. We also like to change
-things to follow Emacs keybinding conventions. We sometimes spell out
+things to follow Emacs keybinding conventions (C-c instead of Control C). We sometimes spell out
acronyms on first use or add extra information in brackets. The
captions will be used in a transcript as well, so you can add
punctuation, remove filler words, and try to make it read better.
@@ -98,23 +52,58 @@ use `M-j` (`subed-jump-to-current-subtitle`) to jump to the caption if
I'm not already on it, listen for the right spot, and maybe use
`M-SPC` to toggle playback. Use `M-.` (`subed-split-subtitle`) to
split a caption at the current MPV playing position and `M-m`
-(`subed-merge-with-next`) to merge a subtitle with the next one. Times
-don't need to be very precise. If you don't understand a word or
-phrase, add two question marks (`[??]`) and move on. We'll ask the
-speakers to review the subtitles and can sort that out then.
+(`subed-merge-with-next`) to merge a subtitle with the next one.
+
+If you don't understand a word or phrase, add two
+question marks (`[??]`) and move on. We'll ask the
+speakers to review the subtitles and can sort that
+out then.
+
+If there are multiple speakers, you can indicate switches between speakers
+with a `[speaker-name]:` tag, or just leave it plain.
-If there are multiple speakers, indicate switches between speakers
-with a `[speaker-name]:` tag.
<video src="https://media.emacsconf.org/editing.webm" controls=""></video>
Once you've gotten the hang of things, it might take between 1x to 4x
the video time to edit captions.
+# Subtitle timing
+
+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`.
+
+## Splitting and merging subtitles
+
+If you want to split and merge subtitles, you can
+use `M-.` (`subed-split-subtitle`) and `M-m`
+(`subed-merge-dwim`). If the playback position is
+in the current subtitle, splitting will use the
+playback position. If it isn't, it will guess an
+appropriate time based on characters per second
+for the current subtitle.
+
+## Splitting with word-level timing data
+
+If there is a `.json` or `.srv2` file with
+word-level timing data, you can load it with
+`subed-word-data-load-from-file` from
+`subed-word-data.el` in the subed package. You can
+then split with the usual `M-.`
+(`subed-split-subtitle`), and it should use
+word-level timestamps when available.
+
# Playing your subtitles together with the video
-To load a specific subtitle file in MPV, use the `--sub-file=` or
-`--sub-files=` command-line argument.
+MPV should automatically load subtitle files if
+they're in the same directory as the video. To
+load a specific subtitle file in MPV, you can use
+the `--sub-file=` or `--sub-files=` command-line
+argument.
If you're using subed, the video should autoplay if it's named the
same as your subtitle file. If not, you can use `C-c C-v`
@@ -125,14 +114,6 @@ point with `C-c ,` (`subed-toggle-sync-player-to-point`), and
synchronizing point to player with `C-c .`
(`subed-toggle-sync-point-to-player`).
-# Using word-level timing data
-
-If there is a `.srv2` file with word-level timing data, you can load
-it with `subed-word-data-load-from-file` from `subed-word-data.el` in
-the subed package. You can then split with the usual `M-.`
-(`subed-split-subtitle`), and it should use word-level timestamps when
-available.
-
# Starting from a script
Some talks don't have autogenerated captions, or you may prefer to
@@ -148,35 +129,47 @@ If the speaker provided a script, I usually put the script under this heading.
```
If you're using subed, you can move to the point to a good stopping
-point for a phrase, toggle playing with `M-SPC`, and then `M-.`
+point for a phrase, use `M-SPC` to toggle pausing `M-.`
(`subed-split-subtitle`) when the player reaches that point. If it's
too fast, use `M-j` to repeat the current subtitle.
# Starting from scratch
-You can send us a text file with just the text transcript in it and
-not worry about the timestamps. We can figure out the timing using
+One option is to send us a text file with just the text transcript in it
+and not worry about the timestamps. We can figure out the timing using
[aeneas for forced alignment](https://www.readbeyond.it/aeneas/).
-If you want to try timing as you go, you might find it easier to start
-by making a VTT file with one subtitle spanning the whole video, like
-this:
+If you want to try timing as you go, you might
+find it easier to start by making a VTT file with
+one subtitle spanning the whole video (either
+using the video duration or a very large
+duration), like this:
```text
WEBVTT
-00:00:00.000 -> 00:39:07.000
+00:00:00.000 -> 24:00:00.000
```
-Then start playback and type, using `M-.` (`subed-split-subtitle`) to
-split after a reasonable length for a subtitle. If it's too fast, use
-`M-j` to repeat the current subtitle.
+Use `C-c C-p` (`subed-toggle-pause-while-typing`)
+to automatically pause when typing. Then start
+playback with `M-SPC` and type, using `M-.`
+(`subed-split-subtitle`) to split after a
+reasonable length for a subtitle. If it's too
+fast, use `M-j` to repeat the current subtitle or
+adjust `subed-mpv-plackback-speed`.
# Chapter markers
-In addition to the captions, you may also want to add chapter markers.
-An easy way to do that is to add a =NOTE Chapter heading= before the
-subtitle that starts the chapter. For example:
+In addition to the captions, you may also want to
+add chapter markers. For presentations, it might
+be a good idea to add a chapter marker for each
+topic. Slide changes can be a good cue. For Q&A
+sessions, you can add chapter markers for each
+question.
+
+An easy way to mark chapters is to add a `NOTE Chapter heading` before the
+subtitle that starts the chapter. You can manually type the text or use `subed-set-subtitle-comment`. For example:
```text
...
@@ -190,9 +183,33 @@ So I want to talk about embeddings.
...
```
+For example, for Q&A videos, we can copy the question from the pad.
+
+```text
+NOTE Q: Do you have your Emacs connect to the IPython kernel over the XMPP socket that IPython sets up?
+
+00:04:00.280 --> 00:04:03.519
+Do you have your Emacs connect to the IPython kernel
+
+00:04:03.520 --> 00:04:11.919
+over XMPP socket that IPython sets up? Oh, good question.
+
+00:04:11.920 --> 00:04:18.039
+So what I've done is I have two different connections.
+```
+
+
We can then extract those with
`emacsconf-subed-make-chapter-file-based-on-comments`.
+To copy the subtitle text for pasting back into the Etherpad Q&A:
+
+1. Add a NOTE at the start of the chapter with the question or topic.
+2. Add a NOTE before the next question or topic.
+3. Move to a subtitle before the NOTE that marks the next chapter.
+4. Use `emacsconf-subed-copy-current-chapter-text` from emcasconf-subed.el.
+5. Paste it into the Etherpad and edit as needed.
+
For an example of how chapter markers allow people to quickly navigate
videos, see <https://emacsconf.org/2021/talks/bindat/> .
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..29aa98a9 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,8 @@ EmacsConf. :-)
You can also check out past EmacsConf programs to see what kinds of things people have shared before:
+- [[2025|/2025/talks]]
+- [[2024|/2024/talks]]
- [[2023|/2023/talks]]
- [[2022|/2022/talks]]
- [[2021|/2021/schedule]]
@@ -30,3 +32,5 @@ You can also check out past EmacsConf programs to see what kinds of things peopl
- [[2019|/2019/schedule]]
- [[2015|/2015/schedule]]
- [[2013|/2013/#program]]
+
+or see all the talks by title: <https://emacsconf.org/talks/>
diff --git a/index.md b/index.md
index 3fe25495..63a3c816 100644
--- a/index.md
+++ b/index.md
@@ -5,13 +5,13 @@ alt="EmacsConf logo"]]</p>
<a href="https://www.gnu.org/software/emacs/">Emacs</a> and
Emacs Lisp.</p>
-## Current Conferences
-
-**[[EmacsConf 2024|2024]]** - Dec 7-8 (Sat-Sun)
+<!-- ## Current Conferences -->
## Past Conferences
-- **[[EmacsConf 2023|2023]]**
+- [[EmacsConf 2025|2025]]
+- [[EmacsConf 2024|2024]]
+- [[EmacsConf 2023|2023]]
- [[EmacsConf 2022|2022]]
- [[EmacsConf 2021|2021]]
- [[EmacsConf 2020|2020]]
@@ -19,6 +19,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"]]
+[[!inline pages="(blog/* and !*/Discussion) or 2023/report or 2024/report or 2025/report" limit="10" rootpage="blog" archive="yes"]]
diff --git a/local.css b/local.css
index f1ad93d0..a446c28f 100644
--- a/local.css
+++ b/local.css
@@ -130,3 +130,17 @@ video { border: 1px solid gray; }
.draft { border: 1px solid red; padding: 10px; background-color: LightPink }
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 f5d6206b..3cdcda26 100644
--- a/organizers-notebook.md
+++ b/organizers-notebook.md
@@ -20,11 +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)
- - [Process proposals](#orge2fe34a)
- - [Accept proposals](#orgac059dd)
+ - [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](#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)
+ - [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)
+ - [Mumble](#org09cd092)
+ - [Shell scripts](#general-infrastructure-shell-scripts)
+ - [Backstage](#backstage)
+ - [Thelounge IRC web client](#general-infrastructure-irc-web-client)
+ - [Etherpad](#general-infrastructure-etherpad)
+ - [Publishing media to the server and to the wiki](#media)
+ - [Automated publishing to the media server](#orgc40bf50)
+ - [Automated IRC announcements](#general-infrastructure-automated-irc-announcements)
+ - [BigBlueButton](#bbb)
+ - [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)
+ - [Schedule changes](#org5f8f6b0)
+ - [When a talk Q&A changes method](#change-talk-qa)
+ - [To play the other stream](#other-process-notes-to-play-the-other-stream)
+ - [When a system is down](#other-process-notes-when-a-system-is-down)
+ - [When we need to bring on a last-minute volunteer](#other-process-notes-when-we-need-to-bring-on-a-last-minute-volunteer)
+ - [Checking people in](#other-process-notes-checking-people-in)
+ - [Ansible](#other-process-notes-ansible)
<a id="starting-up-the-conference-planning-process"></a>
@@ -42,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>
@@ -73,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
@@ -88,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?
@@ -125,7 +239,33 @@ Put inside double square brackets: `!template id=pagedraft`
- Put the speaker introduction right after the talk description for easier web page copying.
-<a id="orge2fe34a"></a>
+<a id="phases-and-lessons-learned-announce"></a>
+
+## Announce
+
+- Post CFP to emacsconf-discuss, reddit.com/r/emacs, and in Emacs News
+- Submit to <https://foss.events/>
+
+
+### 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
@@ -154,9 +294,9 @@ When proposals come in:
PUBLIC\_EMAIL
-<a id="orgac059dd"></a>
+<a id="phases-and-lessons-learned-accept-proposals"></a>
-## Accept proposals
+## Accept proposals :email:
Setup:
@@ -170,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>
@@ -187,6 +339,1217 @@ For each talk:
- Add missing items to plan
+### 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
+
+See <a href="https://git.emacsconf.org/emacsconf-ansible/tree/README.org">README.org</a>.
+
+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.
+
+
+### DONE Send backstage and upload instructions :email:
+
+
+<a id="phases-and-lessons-learned-post-the-schedule"></a>
+
+## Post the schedule
+
+- <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
+
+
+<a id="phases-and-lessons-learned-process-uploaded-files"></a>
+
+## Process uploaded files
+
+Basic setup:
+
+1. Set up the media server and symlinks: <a href="https://git.emacsconf.org/emacsconf-ansible/tree/README.org">README.org</a> (Media).
+2. Set up the prerec processing areas on res: <a href="https://git.emacsconf.org/emacsconf-ansible/tree/README.org">README.org</a> (Processing prerecs).
+3. Set up the caption processor on res: <a href="https://git.emacsconf.org/emacsconf-ansible/tree/README.org">README.org</a> (Captioning).
+
+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`.
+ 3. Call `process-prerec.sh $file`.
+4. When the screens are finished, do locally:
+ 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>
+
+
+<a id="phases-and-lessons-learned-generate-assets"></a>
+
+## TODO Generate assets
+
+
+### In-between pages
+
+- Make the $year/assets/in-between directory and copy the template.svg from the previous year.
+- <elisp:emacsconf-stream-generate-in-between-pages>
+
+
+### Intros
+
+- 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
+
+<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
+
+Checklist:
+
+- [ ] IRC
+ - [ ] Manual announcements
+ - [ ] Automated announcements
+- [ ] Web conference
+- [ ] Streaming assets
+ - [ ] Overlays
+ - [ ] Intros
+- [ ] OBS
+- [ ] VNC
+- [ ] Publishing to the wiki
+- [ ] Publishing to the media server
+- [ ] Etherpad
+- [ ] Mumble
+- [ ] Icecast
+
+
+<a id="phases-and-lessons-learned-getting-ready-for-captions"></a>
+
+## Getting ready for captions
+
+Onboarding:
+
+- Add captioner to conf.org with the `:caption:` tag, under a Volunteers heading with the `volunteer` tag. Make sure the `EMAIL` property is set.
+- Add captioner to emacsconf-org mailing list.
+- Send backstage information <elisp:emacsconf-mail-backstage-info-to-volunteer> . (Can be sent to all captioning volunteers with <elisp:emacsconf-mail-backstage-info-to-captioning-volunteers>)
+
+
+<a id="pre-conf"></a>
+
+## Getting ready for the conference
+
+<elisp:emacsconf-pad-prepopulate-shift-hyperlists>
+
+
+### DONE Check in with speakers for cancellations, adjustments
+
+emacsconf-mail-intro-to-all
+
+
+### TODO Record opening remarks
+
+
+### TODO Send check-in details, schedule update, etc. :email:
+
+
+### One day before the conference
+
+- [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>
+
+## During the conference
+
+<elisp:emacsconf-pad-open-shift-hyperlist>
+
+
+<a id="phases-and-lessons-learned-after-the-conference"></a>
+
+## After the conference
+
+
+### Capture stats
+
+2024 stats
+
+Saturday:
+gen: 177 peak + 14 peak lowres
+dev: 226 peak + 79 peak lowres
+
+Sunday:
+gen: 89 peak + 10 peak lowres
+
+<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>
+
+## DONE Icecast
+
+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
+
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+
+ so that the year is updated in the configuration.
+2. SSH to live0.emacsconf.org and run `/etc/init.d/emacsconf stop`. Confirm that icecast has stopped with `ps | grep emacsconf`; if not, kill the process.
+ Start it again with `/etc/init.d/emacsconf start`
+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"
+
+ For dev:
+
+ 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/dev.webm"
+
+ 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>
+
+## DONE Watching pages
+
+Success: You can watch at <https://live.emacsconf.org>.
+
+- [X] <https://live.emacsconf.org> goes to the current year&rsquo;s page.
+- [X] gen stream works in the browser
+- [X] dev stream works in the browser
+- [X] Schedule is correct
+
+New year:
+
+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:
+
+
+<a id="vnc"></a>
+
+## DONE VNC
+
+We use VNC to connect to the X servers on res.emacsconf.org so that we can stream from it.
+
+Success:
+
+- [X] Confirm that you can connect to emacsconf-gen via VNC
+- [X] Confirm that you can connect to emacsconf-dev via VNC
+
+
+<a id="vnc-instructions"></a>
+
+### Instructions
+
+NOTE: VNC+OBS doesn&rsquo;t work well if you have a window manager that
+automatically resizes windows, like i3. Please configure your window
+manager so that the VNC window is not resized.
+
+1. Install a VNC viewer on your system (ex: tigervnc-viewer).
+
+2. Set up your local environment:
+ - gen: `export TRACK=gen; export TRACK_PORT=5905; export SSH_PORT=46668`
+ - dev: `export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668`
+
+3. Copy the password:
+
+ scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK -p $SSH\_PORT
+
+4. Forward your local ports and connect via VNC viewer to the
+ appropriate forwarded port from your laptop:
+
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ sleep 5 # Give it time to establish the tunnels
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+
+If you get the following error:
+
+ channel 2: open failed: connect failed: Connection refused
+ CConn: End of stream
+ CConn: The connection was dropped by the server before the session could
+ be established.
+
+then the VNC server hasn&rsquo;t started yet. You can start it with
+
+ ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc
+
+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>
+
+## DONE Streaming with OBS
+
+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,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>
+
+### Instructions
+
+1. [Connect to the VNC session for the track.](#vnc-instructions)
+
+2. Start **recording** (not streaming). If you don&rsquo;t see OBS when you connect, it&rsquo;s probably on workspace 2, so you can switch with Alt-2. If you still don&rsquo;t see it there, you can open a terminal with Alt-Enter and then run `track-obs`. After you start recording, confirm that it is now broadcasting to the stream.
+
+3. Verify with MPV on your local system:
+
+ mpv https://live0.emacsconf.org/$TRACK.webm &
+
+so that the year is updated in the configuration.
+
+
+<a id="org09cd092"></a>
+
+## DONE Mumble
+
+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.
+
+mumble.emacsconf.org is hosted on front. Start it with:
+
+ sudo /etc/init.d/mumble-server start
+
+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.
+
+
+<a id="general-infrastructure-shell-scripts"></a>
+
+## Shell scripts
+
+Success: From the commandline, hosts can:
+
+- [X] play just the intro: intro $SLUG
+- [X] play a file without an intro: play $SLUG
+- [X] play a file with an intro: play-with-intro $SLUG (hmm, this didn&rsquo;t show the subtitles)
+ ah, it&rsquo;s because the intros need to be in the cache dir?
+- [X] open the Q&A for a talk: handle-qa $SLUG
+ - [X] open the pad: pad $SLUG
+ - [X] open BBB: bbb $SLUG
+- [ ] do the whole thing: handle-session $SLUG
+- [ ] rebroadcast the other stream:
+ - rebroadcast gen
+ - rebroadcast dev
+- [ ] control background music: music, stop-music
+
+Setup:
+
+- OBS must be streaming from the stream you&rsquo;re testing. [Streaming with OBS](#obs)
+- You may want to generate test assets and copy them over to the assets/stream directory.
+- Generate all the overlays and copy them to assets/overlays
+- Set up the assets/music directory
+
+
+<a id="backstage"></a>
+
+## Backstage
+
+Update this with <elisp:emacsconf-publish-backstage-index>
+
+Explanation of files:
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left"><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"><code>--silence.mp4/mov/webm</code></td>
+<td class="org-left">silence sample if uploaded by speaker</td>
+</tr>
+
+<tr>
+<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"><code>--reencoded.opus</code></td>
+<td class="org-left">audio only</td>
+</tr>
+
+<tr>
+<td class="org-left"><code>--normalized.opus</code></td>
+<td class="org-left">normalized audio</td>
+</tr>
+
+<tr>
+<td class="org-left"><code>--reencoded.vtt</code></td>
+<td class="org-left">WhisperX captions, WebVTT format</td>
+</tr>
+
+<tr>
+<td class="org-left"><code>--reencoded.json</code></td>
+<td class="org-left">WhisperX word data</td>
+</tr>
+
+<tr>
+<td class="org-left"><code>--reencoded.srt</code></td>
+<td class="org-left">WhisperX captions, SRT format</td>
+</tr>
+
+<tr>
+<td class="org-left"><code>--reencoded.txt</code></td>
+<td class="org-left">WhisperX captions, plain text</td>
+</tr>
+
+<tr>
+<td class="org-left"><code>--main.vtt</code></td>
+<td class="org-left">edited captions</td>
+</tr>
+
+<tr>
+<td class="org-left"><code>--main--chapters.vtt</code></td>
+<td class="org-left">chapter markers</td>
+</tr>
+
+<tr>
+<td class="org-left"><code>--main.txt</code></td>
+<td class="org-left">captions as text (optional)</td>
+</tr>
+
+<tr>
+<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>
+</table>
+
+Other files might also have been uploaded by the speaker, such as slides or notes.
+
+
+<a id="general-infrastructure-irc-web-client"></a>
+
+## 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, #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="general-infrastructure-etherpad"></a>
+
+## Etherpad
+
+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>
+
+## Publishing media to the server and to the wiki
+
+Start of year:
+
+1. Set `media_protect_root` to true in Ansible `group_vars/all.yml`.
+2. `ansible-playbook -i inventory.yml prod-playbook.yml --tags media`
+3. Generate the index with `emacsconf-publish-update-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.
+
+
+### 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`.
+3. `ansible-playbook -i inventory.yml prod-playbook.yml --tags media`
+
+You can generate the index with `emacsconf-publish-update-media`.
+
+
+<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>
+
+## 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>
+
+## BigBlueButton
+
+ssh orga@media.emacsconf.org &ldquo;~/bin/bbb-before sat-open&rdquo;
+<https://media.emacsconf.org/2024/current/bbb-sat-open.html>
+
+ssh orga@media.emacsconf.org &ldquo;~/bin/bbb-open sat-open&rdquo;
+
+After restarting, and in case of &ldquo;Firefox can’t establish a connection to the server at wss://bbb.emacsverse.org/graphql.&rdquo;
+
+ssh root@bbb
+cd greenlight-v3
+docker compose restart
+
+Sizes:
+
+- dormant: 1 GB nanode
+- testing: 4 core 8 GB shared CPU
+- production: 8 core 16 GB dedicated CPU (roughly half CPU load for 107 simultaneous users, 2024)
+ - 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
+
+Sharing system audio by changing the audio device to &ldquo;Built-in Audio Analog Stereo&rdquo; is very choppy, only gets captured in the recording if I&rsquo;m using Firefox (not Chrome) AND there&rsquo;s at least one listener, and doesn&rsquo;t allow simultaneous narration from the speaker.
+
+Using pulseaudio to change the app&rsquo;s recording device to the audio monitor results in smoother audio (because it&rsquo;s pretending to be the microphone), but still doesn&rsquo;t allow simultaneous narration from the speaker.
+
+Combining microphone + system audio into a new virtual microphone source is probably more complicated than we want to walk speakers through.
+
+BBB says sharing system audio works only if you use Chrome on Mac OS X or Microsoft Windows (<https://support.bigbluebutton.org/hc/en-us/articles/1500005315642-Can-I-play-a-video-using-screen-sharing>). I tested it on Linux and sharing system audio is not an option. If you happen to know of any more elegant way to do this, I&rsquo;d love to hear it.
+
+Related: <https://github.com/bigbluebutton/bigbluebutton/issues/8632>
+
+
+### 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.
+
+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="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
+
+Should be automatic, handled by Icecast
+backup on live:
+
+- /usr/local/bin/emacsconf-lowres-gen-on-connect
+- /usr/local/bin/emacsconf-lowres-dev-on-connect
+
+
+<a id="general-infrastructure-upload-talks-to-youtube"></a>
+
+## Upload talks to YouTube
+
+[Channel videos](https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D)
+
+ (seq-keep
+ (lambda (o)
+ (when (and (string= (plist-get o :status) "TO_STREAM")
+ (not (plist-get o :youtube)))
+ (list
+ (plist-get o :slug)
+ (org-link-make-string
+ (concat "copy:"
+ )
+ "video file")
+ (org-link-make-string
+ (format "elisp:(emacsconf-publish-video-description \"%s\" t)"
+ (plist-get o :slug))
+ "desc")
+ (if (emacsconf-talk-file o "--main.vtt")
+ (org-link-make-string
+ (concat "copy:"
+ (emacsconf-talk-file o "--main.vtt"))
+ "sub file")
+ "")
+ (org-link-make-string
+ (concat "elisp:(emacsconf-set-property-from-slug \""
+ (plist-get o :slug)
+ "\" \"YOUTUBE\" (read-string \"YouTube URL: \"))"
+ )
+ "save")
+ (plist-get o :scheduled))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))
+
+
+<a id="general-infrastructure-restream-to-youtube"></a>
+
+## Restream to YouTube
+
+
+### 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
@@ -199,3 +1562,121 @@ For each talk:
ssh bbb.emacsverse.org
docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","PASSWORD","user"]
+
+<a id="org5f8f6b0"></a>
+
+## Schedule changes
+
+In general:
+
+ (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
+- [X] Run the draft schedule block
+- [X] <elisp:emacsconf-schedule-update-from-info>
+- [X] <elisp:emacsconf-publish-talks-json-to-files>
+- [X] Generate pads with `ansible-playbook -i inventory.yml prod-playbook.yml --tags pad`
+- [X] <elisp:emacsconf-set-file-prefixes>
+- [X] <elisp:emacsconf-update-schedule>
+- [X] <elisp:emacsconf-stream-generate-overlays>
+- [X] <elisp:emacsconf-stream-generate-test-videos>
+- [X] `rsync -avze ssh ~/proj/emacsconf/2024/assets/ res:/data/emacsconf/shared/2024/assets/`
+- [X] Send the upload instructions
+- [X] Generate the intro text
+- [ ] Record the intro
+
+
+### When a talk is cancelled
+
+<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>.
+
+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>
+
+## When a talk Q&A changes method
+
+1. Update the talk property.
+2. Update the schedule with <elisp:emacsconf-update-schedule>
+3. Regenerate the intros (before, after). <elisp:emacsconf-stream-generate-in-between-pages>, then use <elisp:subed-record-compile-video> in the intros file.
+4. Sync the new intros to the /data/emacsconf/shared/$YEAR/assets/intros directory.
+5. Regenerate the pads: <elisp:emacsconf-pad-prepopulate-all-talks>
+6. Regenerate talks.json: <elisp:emacsconf-publish-talks-json-to-files>
+
+
+<a id="other-process-notes-to-play-the-other-stream"></a>
+
+## To play the other stream
+
+- `mpv --profile=full https://live0.emacsconf.org/gen.webm`
+- Change the channel topic to note that discussion can be in the other channel
+
+
+<a id="other-process-notes-when-a-system-is-down"></a>
+
+## When a system is down
+
+Let people know in #emacsconf and #emacsconf-org
+
+Update the status page:
+
+<file://ssh:orga@front0.emacsconf.org:/var/www/status.emacsconf.org/index.html>
+
+/broadcast <message> may also be helpful
+
+
+<a id="other-process-notes-when-we-need-to-bring-on-a-last-minute-volunteer"></a>
+
+## When we need to bring on a last-minute volunteer
+
+/backstage nick
+
+will give them the backstage credentials and links to the index
+
+
+<a id="other-process-notes-checking-people-in"></a>
+
+## Checking people in
+
+/checkin nick
+/room nick (should be automatic if live, but there just in case)
+
+
+<a id="other-process-notes-ansible"></a>
+
+## Ansible
+
+ git clone git@git.emacsconf.org:pub/emacsconf-ansible
+
diff --git a/organizers-notebook/index.org b/organizers-notebook/index.org
index 50dc9158..aa01046a 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,23 +440,650 @@ Checklist:
- [ ] Icecast
** Getting ready for captions
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-getting-ready-for-captions
+:END:
Onboarding:
- Add captioner to conf.org with the ~:caption:~ tag, under a Volunteers heading with the ~volunteer~ tag. Make sure the ~EMAIL~ property is set.
- Add captioner to emacsconf-org mailing list.
- Send backstage information elisp:emacsconf-mail-backstage-info-to-volunteer . (Can be sent to all captioning volunteers with elisp:emacsconf-mail-backstage-info-to-captioning-volunteers)
+** Getting ready for the conference
+:PROPERTIES:
+:CUSTOM_ID: pre-conf
+:END:
+
+elisp:emacsconf-pad-prepopulate-shift-hyperlists
+*** DONE Check in with speakers for cancellations, adjustments
+CLOSED: [2025-11-28 Fri 21:32]
+:PROPERTIES:
+:Effort: 1:00
+:END:
+:LOGBOOK:
+CLOCK: [2025-11-21 Fri 11:12]--[2025-11-21 Fri 11:14] => 0:02
+:END:
+
+emacsconf-mail-intro-to-all
+*** DONE Record opening remarks
+CLOSED: [2025-12-08 Mon 21:37] 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:
+
+- [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. MANUALLY CHECK DISK SIZE.
+- [X] Send check-in details and last-minute schedule updates.
+- [X] Start thelounge on front0: systemctl start thelounge.
+- [X] Confirm I can connect to Mumble.
+- [X] Resize front0 to production: front0 shared Linode 32GB 8 CPUs 640GB $0.2880/hour
+- [X] Resize live0 to production: shared Linode 64GB 16 CPUs $0.5760/hour
+ - [X] CONFIRM DISK SIZE
+- [X] Resize BBB to production
+ - [X] CONFIRM DISK SIZE
+- [X] Start the VNC servers.
+ #+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:
+*** DONE Capture stats
+CLOSED: [2025-12-07 Sun 17:26]
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-capture-stats
+:END:
+ http://live0.emacsconf.org:8001/status.xsl
+**** 2025 stats
+
+Saturday:
+gen: 107 + 7 lowres
+dev: 97 peak + 7 peak lowres
+
+Sunday: I forgot to copy icecast stats; maybe 70 peak on gen?
+
+Sunday:
+
+- res:
+ - %Cpu(s): 60.0 us, 6.7 sy, 0.0 ni, 33.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
+ - MiB Mem : 48118.6 total, 15679.4 free, 7338.2 used, 26465.2 buff/cache
+- bbb:
+ - CPU%: 3.0 us, 4.0 sy, 3.0 ni, 89.1 id, 0.0 wa, 0.0 hi, 1.0 si, 0.0 st
+ - Mem: 15988.8 total, 1450.0 free, 3552.0 used, 10986.9 buff/cache
+- front:
+ - %Cpu(s): 2.4 us, 1.6 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
+ - MiB Mem : 32169.5 total, 28072.2 free, 1257.1 used, 2840.2 buff/cache
+- live:
+ - %Cpu(s): 7.5 us, 8.7 sy, 0.0 ni, 83.3 id, 0.0 wa, 0.0 hi, 0.4 si, 0.0 st
+ - MiB Mem : 64423.9 total, 56727.6 free, 797.6 used, 6898.8 buff/cache
+
+**** 2024 stats
+
+Saturday:
+gen: 177 peak + 14 peak lowres
+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
+*** DONE Back up the data
+CLOSED: [2025-12-07 Sun 17:26]
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-back-up-the-data
+:END:
+**** Etherpad
+elisp:emacsconf-pad-backup-talks
+
+This creates --pad.html and --pad.md in the cache.
+
+**** Icecast
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-back-up-the-data-icecast
+:END:
+
+rsync -avzue ssh live:'/data/emacsconf-2025-*' ~/proj/emacsconf/2025/backups
+
+**** BigBlueButton
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-back-up-the-data-bigbluebutton
+:END:
+
+rsync -avze ssh root@bbb:/var/bigbluebutton/ bbb/
+
+ssh root@66.175.208.243 'dd if=/dev/sda bs=5M ' | dd of=bbb-img-2024-12-08.img status=progress
+
+The img can be loaded with
+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
+ (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 "-"))
+ )
+#+end_src
+
+- Copy IRC logs to cache and therefore to backstage: (ex: 2024-12-07-emacsconf-gen.txt)
+*** DONE Resize the server disks
+CLOSED: [2025-12-07 Sun 17:26]
+SSH and use df to check first. Needs to fit under these limits:
+
+- [X] front0: 25 GB
+ - [X] disk
+ - [X] server resized to Nanode 1 GB
+- [X] live0: 25 GB
+ - [X] disk
+ - [X] server resized to Nanode 1 GB
+- [X] bbb: 25 GB
+ - [X] disk
+ - [X] server resized to Nanode 1 GB
+Shut down the servers after backing up.
+
+1. In the Linode console, click on the linode.
+2. Go to Storage.
+3. Use the 3-dot menu on Debian 10 disk to reisze.
+*** DONE Process the Q&A recordings and live presentations; upload to YouTube
+CLOSED: [2025-12-30 Tue 12:33]
+: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
+- 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
+- emacsconf-subed-copy-current-chapter-text
+- change status to ~TO_CAPTION_QA~
+
+Also copy the YouTube comments and IRC comments
+emacsconf-extract-irc-anonymize-log
+
+
+answers--backstage--split.txt
+answers--backstage--split.vtt
+
+subed-shift-subtitles-to-start-at-timestamp
+
+ffmpeg -i --answers--backstage--reencoded.webm -ss START-TIME -to END-TIME --answers--backstage--trimmed.webm
+ffmpeg -i --answers--backstage--trimmed.opus
+
+Open --answers--backstage--trimmed.opus in Audacity. Select all the audio with Ctrl+A. Use Filter - Effect - Volume and Compression to normalize it to -16 LUFS. Export to --answers--backstage--normalized.opus
+
+Use https://studio.youtube.com to upload the video.
+Use emacsconf-publish-answers-description to get the answer description, and move the title (and possibly the speaker name) to the video title.
+Add the video to the playlist.
+Set the ~QA_YOUTUBE_URL~ property.
+
+Play the preview and jump around to different points in the video to check if there are encoding errors.
+*** DONE Upload videos and Q&A sessions to Toobnix
+CLOSED: [2025-12-28 Sun 21:27]
+
+Install peertube-cli.
+
+emacsconf-extract-toobnix-api-setup
+
+emacsconf-publish-toobnix-upload-all
+emacsconf-publish-toobnix-upload-all-captions
+
+Manually add to and reorganize the playlist as needed. (Automate this someday?)
+
+*** DONE Copy the Q&A from the pad and add them to the wiki
+CLOSED: [2025-12-28 Sun 19:34]
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-combine-the-irc-logs-and-the-pads-and-add-them-to-the-wiki
+:END:
+*** DONE Copy interesting questions and remarks from IRC to the wiki
+CLOSED: [2025-12-28 Sun 19:34]
+
+Our goal is to copy the discussions from IRC to
+the wiki pages so that speakers can see any
+questions or feedback they've missed.
+
+To copy the logs:
+
+1. Use M-x flush-lines to remove any lines with ~***~.
+2. Copy the IRC logs to the cache directory with a filename like yyyy-mm-dd-channel.txt (ex: 2025-12-07-emacsconf-gen.txt).
+
+Then review each log. For each talk:
+
+1. Select the region for the talk. Figure out the speaker's nick. Use emacsconf-extract-irc-anonymize-log and give it the nick.
+2. Use emacsconf-extract-irc:
+
+ - t: open the talk in the other window
+ - UP and DOWN navigate by line.
+ - q: add the line to the other window as a question.
+ - a: add the line to the other window as an answer
+ - c: add the line to the other window
+
+
+*** DONE Index the Q&A
+CLOSED: [2025-12-28 Sun 19:34]
+
+For each talk with a live Q&A session:
+
+1. Open the pad and the VTT file.
+2. Use ~C-u M-x subed-word-data-load-from-file~ to load the word data JSON with an offset depending on the start time that the video was trimmed to.
+3. Use ~M-x subed-set-subtitle-comment~ or manually add ~NOTE~ comments. Correct recognition errors along the way.
+4. Use ~emacsconf-subed-make-chapter-file-based-on-comments~ to create the chapter file.
+5. Republish with elisp:emacsconf-publish-public-index to make sure the chapters show up.
+6. Upload the corrected subtitles to the Q&A video on YouTube.
+7. Use ~emacsconf-publish-answers-description~ to get the updated description. Paste it into the YouTube description.
+8. Use ~emacsconf-publish-info-pages-for-talk~ to update the wiki pages for that talk.
+
+*** DONE Send thank-you emails to the speakers :email:
+CLOSED: [2025-12-30 Tue 12:33] SCHEDULED: <2025-12-29 Mon>
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-send-thank-you-emails-to-the-speakers
+:CREATED: [2025-12-28 Sun 21:27]
+:END:
+
+
+
+*** CANCELLED Copy the Youtube comments to the wiki pages?
+CLOSED: [2025-12-28 Sun 21:27]
+
+emacsconf-extract-youtube-api-setup
+emacsconf-extract-youtube-comments-by-talk
+
+Better to direct the speakers to the YouTube videos so that they can discuss things directly.
+
+*** Write a report
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-write-a-report
+:END:
+Start with a longer blog post:
+- https://sachachua.com/blog/2024/12/emacsconf-2024-notes/
+
+A shorter version goes on the wiki:
+
+- https://emacsconf.org/2024/report/
+- https://emacsconf.org/2023/report/
+
+*** Notify emacsconf-discuss@gnu.org that the Q&A is up
+SCHEDULED: <2025-12-29 Mon>
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-notify-emacs-discuss-that-the-q-a-is-up
+:CREATED: [2025-12-28 Sun 21:27]
+: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
+
+*** 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
-** Icecast
+: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:
+
+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
+
+If the wiki is stuck and needs regenerating:
+
+#+begin_example
+ssh front0.emacsconf.org
+sudo -iu ikiwiki -- ikiwiki --setup ~ikiwiki/emacsconf.setup
+#+end_example
+
+** 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
@@ -273,7 +1095,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
@@ -286,9 +1108,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:
@@ -300,50 +1131,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:
-
-** IRC web client
-
-Success:
-- [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
-
-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?
-** Etherpad
-
-Success:
-
-- [X] pad.emacsconf.org redirects to this year's entry
-- [X] Each talk has its own Etherpad
-
-** Manual IRC announcements
-
-Success:
-
-- [ ] You can /opall, /conftopic, and /broadcast
-
-
-** Automated IRC announcements
-
-** 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.
@@ -351,10 +1153,7 @@ 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
+*** Instructions
:PROPERTIES:
:CUSTOM_ID: vnc-instructions
:END:
@@ -367,8 +1166,8 @@ manager so that the VNC window is not resized.
2. Set up your local environment:
- - gen: export TRACK=gen; export TRACK_PORT=5905; export SSH_PORT=46668
- - dev: export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668
+ - gen: ~export TRACK=gen; export TRACK_PORT=5905; export SSH_PORT=46668~
+ - dev: ~export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668~
3. Copy the password:
@@ -403,22 +1202,39 @@ 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:
+
+ssh sachac@res
+sudo killall Xtigervnc
-** Streaming with OBS
+** 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
-- [ ] gen
-- [ ] dev
+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.
-**** Instructions
+icecast is on live0.emacsconf.org and can be restarted with =/etc/init.d/emacsconf restart=.
+
+*** Instructions
:PROPERTIES:
:CUSTOM_ID: obs-instructions
:END:
@@ -433,27 +1249,504 @@ 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.
+
+** Shell scripts
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-shell-scripts
+:END:
+
+Success: From the commandline, hosts can:
+- [X] play just the intro: intro $SLUG
+- [X] play a file without an intro: play $SLUG
+- [X] play a file with an intro: play-with-intro $SLUG (hmm, this didn't show the subtitles)
+ ah, it's because the intros need to be in the cache dir?
+- [X] open the Q&A for a talk: handle-qa $SLUG
+ - [X] open the pad: pad $SLUG
+ - [X] open BBB: bbb $SLUG
+- [ ] do the whole thing: handle-session $SLUG
+- [ ] rebroadcast the other stream:
+ - rebroadcast gen
+ - rebroadcast dev
+- [ ] control background music: music, stop-music
+
+Setup:
+- OBS must be streaming from the stream you're testing. [[#obs][Streaming with OBS]]
+- You may want to generate test assets and copy them over to the assets/stream directory.
+- Generate all the overlays and copy them to assets/overlays
+- Set up the assets/music directory
+** Backstage
+:PROPERTIES:
+:CUSTOM_ID: backstage
+:END:
+
+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 |
+
+Other files might also have been uploaded by the speaker, such as slides or notes.
+
+** 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, #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
+:END:
+
+Start of year:
+
+1. Set =media_protect_root= to true in Ansible =group_vars/all.yml=.
+2. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media=
+3. Generate the index with =emacsconf-publish-update-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.
+
+*** Backing up, mirroring
+
+#+begin_src sh :eval yes
+rsync -avzue ssh media:/var/www/media.emacsconf.org/ /var/www/media.emacsconf.org/ --exclude protected --exclude backstage
+rsync -avzue ssh /var/www/media.emacsconf.org/ yang:~/public_html/media.emacsconf.org/ --exclude protected --exclude backstage
+#+end_src
+
+
+
+*** 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 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
+:END:
+
+ssh orga@media.emacsconf.org "~/bin/bbb-before sat-open"
+https://media.emacsconf.org/2024/current/bbb-sat-open.html
+
+ssh orga@media.emacsconf.org "~/bin/bbb-open sat-open"
+
+After restarting, and in case of "Firefox can’t establish a connection to the server at wss://bbb.emacsverse.org/graphql."
+
+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:
+:CUSTOM_ID: bbb-audio-limitations
+:END:
+
+Sharing system audio by changing the audio device to "Built-in Audio Analog Stereo" is very choppy, only gets captured in the recording if I'm using Firefox (not Chrome) AND there's at least one listener, and doesn't allow simultaneous narration from the speaker.
+
+Using pulseaudio to change the app's recording device to the audio monitor results in smoother audio (because it's pretending to be the microphone), but still doesn't allow simultaneous narration from the speaker.
+
+Combining microphone + system audio into a new virtual microphone source is probably more complicated than we want to walk speakers through.
+
+BBB says sharing system audio works only if you use Chrome on Mac OS X or Microsoft Windows (https://support.bigbluebutton.org/hc/en-us/articles/1500005315642-Can-I-play-a-video-using-screen-sharing). I tested it on Linux and sharing system audio is not an option. If you happen to know of any more elegant way to do this, I'd love to hear it.
+
+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:
+
+#+begin_src sh :eval no
+docker exec -it greenlight-v3 /bin/bash -c "bundle exec rails console"
+#+end_src
+
+#+begin_src ruby :eval no
+user_id = User.find_by_email("emacsconf@sachachua.com").id
+#+end_src
+
+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:
+
+#+begin_src ruby :eval no
+Room.all.each { |x| puts x.friendly_id + " " + x.name }; nil
+#+end_src
+
+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.
+
+bbb-record --rebuild 4dc2c4e5ac5222bc416b7e31d76e22a5627aed5b-1765135929727
+bbb-record --rebuild e5fceca22f037945fb7183e118599cf37598936c-1765131855663
+
+derp, no space left on the device, that's why, adding to checklist
+
+
+*** DONE Backing up BBB :backup:
+CLOSED: [2025-12-07 Sun 16:48]
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-bigbluebutton-backing-up-bbb
+:END:
+
+rsync -avze ssh root@bbb:/var/bigbluebutton/ ~/proj/emacsconf/2025/backups/bbb/
+
+ssh root@bbb 'tar zcvf - /var/bigbluebutton /etc/bigbluebutton /root/greenlight-v3 /usr/local/bigbluebutton /usr/share/bbb-web' > bbb-backup-$(date "+%Y-%m-%d").tar.gz
+
+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:
+
+[[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
+** DONE Confirm automated IRC announcements from res
+CLOSED: [2025-12-08 Mon 21:36] 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
-This is on live.emacsconf.org and can be restarted with =/etc/init.d/emacsconf restart=.
** 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
+- /usr/local/bin/emacsconf-lowres-dev-on-connect
+** DONE Upload talks to YouTube
+CLOSED: [2025-12-20 Sat 16:10] SCHEDULED: <2025-12-16 Tue>
+: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]]
+
+#+begin_src emacs-lisp :results table replace
+(seq-keep
+ (lambda (o)
+ (when (and (string= (plist-get o :status) "TO_STREAM")
+ (not (plist-get o :youtube)))
+ (list
+ (plist-get o :slug)
+ (org-link-make-string
+ (concat "copy:"
+ )
+ "video file")
+ (org-link-make-string
+ (format "elisp:(emacsconf-publish-video-description \"%s\" t)"
+ (plist-get o :slug))
+ "desc")
+ (if (emacsconf-talk-file o "--main.vtt")
+ (org-link-make-string
+ (concat "copy:"
+ (emacsconf-talk-file o "--main.vtt"))
+ "sub file")
+ "")
+ (org-link-make-string
+ (concat "elisp:(emacsconf-set-property-from-slug \""
+ (plist-get o :slug)
+ "\" \"YOUTUBE\" (read-string \"YouTube URL: \"))"
+ )
+ "save")
+ (plist-get o :scheduled))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))
+#+end_src
+
+#+RESULTS:
+:results:
+| shell | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.webm][video file]] | [[elisp:(emacsconf-publish-video-description "shell" t)][desc]] | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt][sub file]] | [[elisp:(emacsconf-set-property-from-slug "shell" "YOUTUBE" (read-string "YouTube URL: "))][save]] | <2024-12-07 Sat 13:55-14:35> |
+| writing | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.webm][video file]] | [[elisp:(emacsconf-publish-video-description "writing" t)][desc]] | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt][sub file]] | [[elisp:(emacsconf-set-property-from-slug "writing" "YOUTUBE" (read-string "YouTube URL: "))][save]] | <2024-12-07 Sat 16:05-16:15> |
+| sat-close | [[copy:][video file]] | [[elisp:(emacsconf-publish-video-description "sat-close" t)][desc]] | | [[elisp:(emacsconf-set-property-from-slug "sat-close" "YOUTUBE" (read-string "YouTube URL: "))][save]] | <2024-12-07 Sat 17:00-17:10> |
+| links | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.webm][video file]] | [[elisp:(emacsconf-publish-video-description "links" t)][desc]] | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt][sub file]] | [[elisp:(emacsconf-set-property-from-slug "links" "YOUTUBE" (read-string "YouTube URL: "))][save]] | <2024-12-08 Sun 09:10-09:20> |
+| blee | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.webm][video file]] | [[elisp:(emacsconf-publish-video-description "blee" t)][desc]] | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt][sub file]] | [[elisp:(emacsconf-set-property-from-slug "blee" "YOUTUBE" (read-string "YouTube URL: "))][save]] | <2024-12-08 Sun 10:30-11:15> |
+| hyperbole | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.webm][video file]] | [[elisp:(emacsconf-publish-video-description "hyperbole" t)][desc]] | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt][sub file]] | [[elisp:(emacsconf-set-property-from-slug "hyperbole" "YOUTUBE" (read-string "YouTube URL: "))][save]] | <2024-12-08 Sun 11:30-11:45> |
+| pgmacs | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.webm][video file]] | [[elisp:(emacsconf-publish-video-description "pgmacs" t)][desc]] | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt][sub file]] | [[elisp:(emacsconf-set-property-from-slug "pgmacs" "YOUTUBE" (read-string "YouTube URL: "))][save]] | <2024-12-08 Sun 13:40-13:55> |
+| literate | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.webm][video file]] | [[elisp:(emacsconf-publish-video-description "literate" t)][desc]] | [[copy:/home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt][sub file]] | [[elisp:(emacsconf-set-property-from-slug "literate" "YOUTUBE" (read-string "YouTube URL: "))][save]] | <2024-12-08 Sun 14:15-14:35> |
+| sun-close | [[copy:][video file]] | [[elisp:(emacsconf-publish-video-description "sun-close" t)][desc]] | | [[elisp:(emacsconf-set-property-from-slug "sun-close" "YOUTUBE" (read-string "YouTube URL: "))][save]] | <2024-12-08 Sun 16:50-17:00> |
+: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
@@ -463,12 +1756,131 @@ This is on live.emacsconf.org and can be restarted with =/etc/init.d/emacsconf r
: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
+** 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
+- [X] elisp:emacsconf-schedule-update-from-info
+- [X] elisp:emacsconf-publish-talks-json-to-files
+- [X] Generate pads with ~ansible-playbook -i inventory.yml prod-playbook.yml --tags pad~
+- [X] elisp:emacsconf-set-file-prefixes
+- [X] elisp:emacsconf-update-schedule
+- [X] elisp:emacsconf-stream-generate-overlays
+- [X] elisp:emacsconf-stream-generate-test-videos
+- [X] ~rsync -avze ssh ~/proj/emacsconf/2024/assets/ res:/data/emacsconf/shared/2024/assets/~
+- [X] Send the upload instructions
+- [X] Generate the intro text
+- [ ] Record the intro
+
+*** 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]].
+
+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
+: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.
+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
+** When a talk Q&A changes method
+:PROPERTIES:
+:CUSTOM_ID: change-talk-qa
+:END:
+
+1. Update the talk property.
+2. Update the schedule with [[elisp:emacsconf-update-schedule]]
+3. Regenerate the intros (before, after). elisp:emacsconf-stream-generate-in-between-pages, then use elisp:subed-record-compile-video in the intros file.
+4. Sync the new intros to the /data/emacsconf/shared/$YEAR/assets/intros directory.
+5. Regenerate the pads: elisp:emacsconf-pad-prepopulate-all-talks
+6. Regenerate talks.json: elisp:emacsconf-publish-talks-json-to-files
+** To play the other stream
+:PROPERTIES:
+:CUSTOM_ID: other-process-notes-to-play-the-other-stream
+:END:
+
+- ~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
+
+Update the status page:
+
+[[file:/ssh:orga@front0.emacsconf.org:/var/www/status.emacsconf.org/index.html]]
+
+/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
#+end_src
+** Updating a transcript
+
+emacsconf-publish-update-transcript
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..3700a759 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="2025/talks/* or 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 20c3dd31..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,46 +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/sched.md b/templates/sched.md
index cbc94106..aa64e31a 100644
--- a/templates/sched.md
+++ b/templates/sched.md
@@ -5,8 +5,8 @@
<TMPL_IF end> - <span class="sched-end"><TMPL_VAR end></span></TMPL_IF end>
</span></TMPL_IF start>
<TMPL_IF track> <span class="sched-track <TMPL_VAR track>"><TMPL_IF watch><a href="<TMPL_VAR watch>"></TMPL_IF><TMPL_VAR track><TMPL_IF watch></a></TMPL_IF></span></TMPL_IF track>
-<TMPL_IF pad> <span class="sched-pad"><a href="<TMPL_VAR pad>">Etherpad</a></TMPL_IF pad>
<TMPL_IF q-and-a> <span class="sched-q-and-a">Q&amp;A: <TMPL_VAR q-and-a></span> </TMPL_IF q-and-a>
+<TMPL_IF pad> <span class="sched-pad"><a href="<TMPL_VAR pad>">Etherpad</a></TMPL_IF pad>
</div>
<div class="sched-title"><a href="<TMPL_VAR url>"><TMPL_VAR title></a></div>
<div class="sched-speakers"><TMPL_VAR speakers> <TMPL_IF note>- <TMPL_VAR note></TMPL_IF note></div>
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 03af64de..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)
@@ -66,6 +64,18 @@ caption) (or privately:
[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering
to caption)) and we'll help you get set up.
+## Host
+
+As a host, you can help Q&A sessions go smoothly by reading out questions and helping the speaker keep track of time.
+
+More details: [[volunteer/host]]
+
+To volunteer as a host, email
+[emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering to
+host) (or privately:
+[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering
+to host)) and we'll help you get set up.
+
## Internet Relay Chat monitor
Do you like the buzz of fast-flowing discussions? Do you want to make
diff --git a/volunteer/checkin.md b/volunteer/checkin.md
index 89036829..9565d191 100644
--- a/volunteer/checkin.md
+++ b/volunteer/checkin.md
@@ -14,21 +14,14 @@ that they're ready to go live as soon as their video finishes.
# Preparation
-You'll need an account on bbb.emacsverse.org, and we'll set you up
-with moderator access on the relevant BBB rooms.
-
We'll share a list of talks for your shift with:
- starting time
- talk title
- track
- speaker name
-- pronunciation
-- pronouns
-- BBB room URL
+- BBB room URL and moderator code
- pad URL
-- email address
-- emergency contact information
# Process
@@ -45,15 +38,20 @@ When you notice a speaker checking in, you can use something like
`/msg NICK Hi, let me help you get checked in. Please join BBB_URL .`
to send a private message to the speaker with the Big Blue Button URL.
-Join the BBB room. If you do not have moderator access, let sachac know.
+Join the BBB room using the URL and the provided
+moderator code. If you do not have moderator
+access, let sachac know.
-The BBB rooms will be set up so that people can join without approval.
-When the speaker arrives, you can take a few moments to say hi to
-them, thank them for presenting at EmacsConf, etc.
+The BBB rooms will be set up so that people can
+join without approval, and the speakers will also
+have the moderator code. When the speaker arrives,
+you can take a few moments to say hi to them,
+thank them for presenting at EmacsConf, etc.
-Click on their name and choose **Promote to moderator.**
+**If the speakers aren't moderators yet:**
-Click on their name again and choose **Make presenter.**
+1. Click on their name and choose **Promote to moderator.**
+2. Click on their name again and choose **Make presenter.**
**Checklist with notes:**
@@ -93,10 +91,9 @@ In between checking in people, feel free to enjoy the conference!
## What if a live Q&A session is starting within 30 minutes and the speaker hasn't shown up yet?
-Let us know on `#emacsconf-org`. You or another organizer can contact
-them using their emergency contact info. If you prefer to not use your
-phone, you can ask one of the organizers in #emacsconf-org and we'll
-call the speaker for you.
+Let us know on `#emacsconf-org` and we'll contact
+the speaker using their emergency contact
+information.
If the speaker is still not available, we can stream any ongoing Q&A
sessions or open it up for community discussion.
diff --git a/volunteer/host.md b/volunteer/host.md
index bd891a33..70a7ca66 100644
--- a/volunteer/host.md
+++ b/volunteer/host.md
@@ -2,33 +2,42 @@
# Responsibilities
+For talks with IRC/pad/e-mail Q&A:
+
+- No hosting needed, we can just leave IRC/Etherpad on screen.
+
+For talks done live (no prerecorded video):
+
+- Start the recording (if not already recording)
+- Give the speaker time warnings (5 minutes before next talk starts, 2 minutes before next talk starts)
+
For talks with live Q&A sessions:
-- Start the recording
+- Start the recording (if not already recording)
- Ask the speaker questions from the pad and read out feedback if you want
- (optional) Monitor IRC for questions as well
-- (optional) Let the other organizers know when you're ready for conference
- participants to join the Q&A; moderate the discussion as needed
+- Moderate the discussion as needed
- Handle technical issues that turn up
- Give the speaker time warnings
- Keep things cool
-Many speakers find it easier to reply to questions that are spoken
-aloud, and this also ensures that the questions get into the
-recording. As the host, you can help shape the Q&A session by choosing
-the order of questions to ask (unless the speaker wants to address a
-different question). You can also help rephrase unclear questions or
-help the speaker feel more comfortable by reminding them that they
-don't have to answer all the questions.
+Many speakers find it easier to reply to questions
+that are spoken aloud, and this also ensures that
+the questions get into the recording. As the host,
+you can help shape the Q&A session by choosing the
+order of questions to ask (unless the speaker
+wants to address a different question). You can
+also help rephrase unclear questions or help the
+speaker feel more comfortable by reminding them
+that they can answer in any order and they don't
+have to answer all the questions.
# Preparation
-We will give you a list of talks with the times, speaker info, pad
-URL, and URL for the live Q&A session. Please keep the Q&A URLs secret
-until you are ready for everyone to join the Q&A session.
-
-We will also add you as a moderator to the rooms for the talks in your
-shift. You may want to practice muting people in BBB.
+We will give you a list of talks with the times,
+speaker info, pad URL, moderator codes, and URL
+for the live Q&A session. You may want to practice
+muting people in BBB.
We strongly recommend using a headset or earphones to minimize audio
feedback. Using a headset microphone or an external microphone can
@@ -36,14 +45,11 @@ also improve your sound quality.
# Process
-This year we are experimenting with per-talk pads in order to simplify
-the experience for the speakers, since many speakers found it
-difficult to find and focus on their section in a long pad.
-
-At least 5 minutes before the Q&A session starts, go to the provided
-URL. If BBB shows you a list of meetings, you can click on **Join**
-to join the selected one. If you do not have moderator access, let
-us know in `#emacsconf-org` and we can add you.
+At least 5 minutes before the Q&A session starts,
+go to the meeting room and use the provided
+moderator code to become a moderator. If you do
+not have moderator access, let us know in
+`#emacsconf-org` and we can add you.
Have another window for the pad for the current talk.
@@ -69,29 +75,24 @@ recording** and confirm that it is on. Double-check that recording is
on by seeing whether the button at the top has changed to a red button
with a timer.
-The Q&A will start out closed; just you and the speaker. Depending on
-your comfort level and how the discussion goes, you can let us know
-when you would like it to be opened up to general participation by
-inviting people out loud (and possibly quickly posting in #emacsconf-org).
-Then we will update the public BBB redirect URL to
-point to the BBB room so that people can join. This should take less
-than a minute to update. People will then be able to join using the
-Q&A URL that will be in the talk page and in IRC. That way,
-participants can join the Q&A session and ask directly. You can then
-shift to be more of a moderator, reminding people to stay on mute
-unless it's their turn to speak and muting people as needed.
+When the Q&A starts, we'll update the public BBB
+redirect URL to point to the BBB room. People will
+then be able to join using the Q&A URL that will
+be on the talk page and in IRC. That way,
+participants can join the Q&A session and ask
+their questions directly.
BBB sometimes has issues if there are lots of participants with
webcams on. If you notice that things are getting slow or choppy, you
can ask participants to turn their webcams off.
-Please give the speaker a 5-minute warning and a 2-minute warning
-before the end of their streamed Q&A session. If you've decided to
-open up the Q&A session, it can continue off-stream for as long as the
-speaker likes while you move on to the next Q&A session to host. If
-the speaker would like to wrap up, they can leave the meeting whenever
-they want. You can then thank everyone and move on to the next
-presentation.
+Please give the speaker a 5-minute warning and a
+2-minute warning before the end of their streamed
+Q&A session. The Q&A session can continue
+off-stream for as long as the speaker likes while
+you move on to the next Q&A session to host. If
+the speaker would like to wrap up, they can leave
+the meeting whenever they want
# In case of...
diff --git a/volunteer/irc.md b/volunteer/irc.md
index beac6dfe..60f01a29 100644
--- a/volunteer/irc.md
+++ b/volunteer/irc.md
@@ -59,11 +59,6 @@ reference.
For Q&A sessions done over IRC, it would also be helpful to copy the
answers to the Etherpad.
-## Announcing talks and Q&A sessions
-
-At the indicated time, paste the announcement into the relevant
-channel. (This might be automated if we get around to it.)
-
# In case of...
- Incidents: If someone isn't keeping